Merge pull request #3292 from chrislovecnm/gce-change-to-interface

Automatic merge from submit-queue

Implementing GCE as an interface - modelling aws cloud provider

GCE and other cloud providers are structs instead of an interface.  AWS cloud provider implements an interface.  This PR refactors `GCECloud` as an interface, and creates `gceCloudImplementation`.

- [x] Need to e2e test
This commit is contained in:
Kubernetes Submit Queue 2017-08-28 05:54:57 -07:00 committed by GitHub
commit 1cba2a2346
15 changed files with 148 additions and 113 deletions

View File

@ -39,7 +39,7 @@ func (s *cloudDiscoveryStatusStore) GetApiIngressStatus(cluster *kops.Cluster) (
return nil, err return nil, err
} }
if gceCloud, ok := cloud.(*gce.GCECloud); ok { if gceCloud, ok := cloud.(gce.GCECloud); ok {
return gceCloud.GetApiIngressStatus(cluster) return gceCloud.GetApiIngressStatus(cluster)
} }

View File

@ -45,9 +45,9 @@ const (
) )
func (c *ClusterResources) listResourcesGCE() (map[string]*ResourceTracker, error) { func (c *ClusterResources) listResourcesGCE() (map[string]*ResourceTracker, error) {
gceCloud := c.Cloud.(*gce.GCECloud) gceCloud := c.Cloud.(gce.GCECloud)
if c.Region == "" { if c.Region == "" {
c.Region = gceCloud.Region c.Region = gceCloud.Region()
} }
resources := make(map[string]*ResourceTracker) resources := make(map[string]*ResourceTracker)
@ -60,7 +60,7 @@ func (c *ClusterResources) listResourcesGCE() (map[string]*ResourceTracker, erro
{ {
// TODO: Only zones in api.Cluster object, if we have one? // TODO: Only zones in api.Cluster object, if we have one?
gceZones, err := d.gceCloud.Compute.Zones.List(d.gceCloud.Project).Do() gceZones, err := d.gceCloud.Compute().Zones.List(d.gceCloud.Project()).Do()
if err != nil { if err != nil {
return nil, fmt.Errorf("error listing zones: %v", err) return nil, fmt.Errorf("error listing zones: %v", err)
} }
@ -123,7 +123,7 @@ func (c *ClusterResources) listResourcesGCE() (map[string]*ResourceTracker, erro
type clusterDiscoveryGCE struct { type clusterDiscoveryGCE struct {
cloud fi.Cloud cloud fi.Cloud
gceCloud *gce.GCECloud gceCloud gce.GCECloud
clusterName string clusterName string
instanceTemplates []*compute.InstanceTemplate instanceTemplates []*compute.InstanceTemplate
@ -147,7 +147,7 @@ func (d *clusterDiscoveryGCE) findInstanceTemplates() ([]*compute.InstanceTempla
ctx := context.Background() ctx := context.Background()
err := c.Compute.InstanceTemplates.List(c.Project).Pages(ctx, func(page *compute.InstanceTemplateList) error { err := c.Compute().InstanceTemplates.List(c.Project()).Pages(ctx, func(page *compute.InstanceTemplateList) error {
for _, t := range page.Items { for _, t := range page.Items {
match := false match := false
for _, item := range t.Properties.Metadata.Items { for _, item := range t.Properties.Metadata.Items {
@ -202,7 +202,7 @@ func (d *clusterDiscoveryGCE) listGCEInstanceTemplates() ([]*ResourceTracker, er
} }
func deleteGCEInstanceTemplate(cloud fi.Cloud, r *ResourceTracker) error { func deleteGCEInstanceTemplate(cloud fi.Cloud, r *ResourceTracker) error {
c := cloud.(*gce.GCECloud) c := cloud.(gce.GCECloud)
t := r.obj.(*compute.InstanceTemplate) t := r.obj.(*compute.InstanceTemplate)
glog.V(2).Infof("Deleting GCE InstanceTemplate %s", t.SelfLink) glog.V(2).Infof("Deleting GCE InstanceTemplate %s", t.SelfLink)
@ -211,7 +211,7 @@ func deleteGCEInstanceTemplate(cloud fi.Cloud, r *ResourceTracker) error {
return err return err
} }
op, err := c.Compute.InstanceTemplates.Delete(u.Project, u.Name).Do() op, err := c.Compute().InstanceTemplates.Delete(u.Project, u.Name).Do()
if err != nil { if err != nil {
if gce.IsNotFound(err) { if gce.IsNotFound(err) {
glog.Infof("instancetemplate not found, assuming deleted: %q", t.SelfLink) glog.Infof("instancetemplate not found, assuming deleted: %q", t.SelfLink)
@ -225,7 +225,7 @@ func deleteGCEInstanceTemplate(cloud fi.Cloud, r *ResourceTracker) error {
func (d *clusterDiscoveryGCE) listInstanceGroupManagersAndInstances() ([]*ResourceTracker, error) { func (d *clusterDiscoveryGCE) listInstanceGroupManagersAndInstances() ([]*ResourceTracker, error) {
c := d.gceCloud c := d.gceCloud
project := c.Project project := c.Project()
var trackers []*ResourceTracker var trackers []*ResourceTracker
@ -243,7 +243,7 @@ func (d *clusterDiscoveryGCE) listInstanceGroupManagersAndInstances() ([]*Resour
ctx := context.Background() ctx := context.Background()
for _, zoneName := range d.zones { for _, zoneName := range d.zones {
err := c.Compute.InstanceGroupManagers.List(project, zoneName).Pages(ctx, func(page *compute.InstanceGroupManagerList) error { err := c.Compute().InstanceGroupManagers.List(project, zoneName).Pages(ctx, func(page *compute.InstanceGroupManagerList) error {
for _, mig := range page.Items { for _, mig := range page.Items {
instanceTemplate := instanceTemplates[mig.InstanceTemplate] instanceTemplate := instanceTemplates[mig.InstanceTemplate]
if instanceTemplate == nil { if instanceTemplate == nil {
@ -282,7 +282,7 @@ func (d *clusterDiscoveryGCE) listInstanceGroupManagersAndInstances() ([]*Resour
} }
func deleteInstanceGroupManager(cloud fi.Cloud, r *ResourceTracker) error { func deleteInstanceGroupManager(cloud fi.Cloud, r *ResourceTracker) error {
c := cloud.(*gce.GCECloud) c := cloud.(gce.GCECloud)
t := r.obj.(*compute.InstanceGroupManager) t := r.obj.(*compute.InstanceGroupManager)
glog.V(2).Infof("Deleting GCE InstanceGroupManager %s", t.SelfLink) glog.V(2).Infof("Deleting GCE InstanceGroupManager %s", t.SelfLink)
@ -293,7 +293,7 @@ func deleteInstanceGroupManager(cloud fi.Cloud, r *ResourceTracker) error {
//glog.Infof("MIG: %s", fi.DebugAsJsonString(t)) //glog.Infof("MIG: %s", fi.DebugAsJsonString(t))
op, err := c.Compute.InstanceGroupManagers.Delete(u.Project, u.Zone, u.Name).Do() op, err := c.Compute().InstanceGroupManagers.Delete(u.Project, u.Zone, u.Name).Do()
if err != nil { if err != nil {
if gce.IsNotFound(err) { if gce.IsNotFound(err) {
glog.Infof("InstanceGroupManager not found, assuming deleted: %q", t.SelfLink) glog.Infof("InstanceGroupManager not found, assuming deleted: %q", t.SelfLink)
@ -307,14 +307,14 @@ func deleteInstanceGroupManager(cloud fi.Cloud, r *ResourceTracker) error {
func (d *clusterDiscoveryGCE) listManagedInstances(igm *compute.InstanceGroupManager) ([]*ResourceTracker, error) { func (d *clusterDiscoveryGCE) listManagedInstances(igm *compute.InstanceGroupManager) ([]*ResourceTracker, error) {
c := d.gceCloud c := d.gceCloud
project := c.Project project := c.Project()
var trackers []*ResourceTracker var trackers []*ResourceTracker
zoneName := gce.LastComponent(igm.Zone) zoneName := gce.LastComponent(igm.Zone)
// This call is not paginated // This call is not paginated
instances, err := c.Compute.InstanceGroupManagers.ListManagedInstances(project, zoneName, igm.Name).Do() instances, err := c.Compute().InstanceGroupManagers.ListManagedInstances(project, zoneName, igm.Name).Do()
if err != nil { if err != nil {
return nil, fmt.Errorf("error listing ManagedInstances in %s: %v", igm.Name, err) return nil, fmt.Errorf("error listing ManagedInstances in %s: %v", igm.Name, err)
} }
@ -351,7 +351,7 @@ func (d *clusterDiscoveryGCE) findGCEDisks() ([]*compute.Disk, error) {
// TODO: Push down tag filter? // TODO: Push down tag filter?
err := c.Compute.Disks.AggregatedList(c.Project).Pages(ctx, func(page *compute.DiskAggregatedList) error { err := c.Compute().Disks.AggregatedList(c.Project()).Pages(ctx, func(page *compute.DiskAggregatedList) error {
for _, list := range page.Items { for _, list := range page.Items {
for _, d := range list.Disks { for _, d := range list.Disks {
match := false match := false
@ -411,7 +411,7 @@ func (d *clusterDiscoveryGCE) listGCEDisks() ([]*ResourceTracker, error) {
} }
func deleteGCEDisk(cloud fi.Cloud, r *ResourceTracker) error { func deleteGCEDisk(cloud fi.Cloud, r *ResourceTracker) error {
c := cloud.(*gce.GCECloud) c := cloud.(gce.GCECloud)
t := r.obj.(*compute.Disk) t := r.obj.(*compute.Disk)
glog.V(2).Infof("Deleting GCE Disk %s", t.SelfLink) glog.V(2).Infof("Deleting GCE Disk %s", t.SelfLink)
@ -420,7 +420,7 @@ func deleteGCEDisk(cloud fi.Cloud, r *ResourceTracker) error {
return err return err
} }
op, err := c.Compute.Disks.Delete(u.Project, u.Zone, u.Name).Do() op, err := c.Compute().Disks.Delete(u.Project, u.Zone, u.Name).Do()
if err != nil { if err != nil {
if gce.IsNotFound(err) { if gce.IsNotFound(err) {
glog.Infof("disk not found, assuming deleted: %q", t.SelfLink) glog.Infof("disk not found, assuming deleted: %q", t.SelfLink)
@ -439,7 +439,7 @@ func (d *clusterDiscoveryGCE) listTargetPools() ([]*ResourceTracker, error) {
ctx := context.Background() ctx := context.Background()
err := c.Compute.TargetPools.List(c.Project, c.Region).Pages(ctx, func(page *compute.TargetPoolList) error { err := c.Compute().TargetPools.List(c.Project(), c.Region()).Pages(ctx, func(page *compute.TargetPoolList) error {
for _, tp := range page.Items { for _, tp := range page.Items {
if !d.matchesClusterName(tp.Name) { if !d.matchesClusterName(tp.Name) {
continue continue
@ -467,7 +467,7 @@ func (d *clusterDiscoveryGCE) listTargetPools() ([]*ResourceTracker, error) {
} }
func deleteTargetPool(cloud fi.Cloud, r *ResourceTracker) error { func deleteTargetPool(cloud fi.Cloud, r *ResourceTracker) error {
c := cloud.(*gce.GCECloud) c := cloud.(gce.GCECloud)
t := r.obj.(*compute.TargetPool) t := r.obj.(*compute.TargetPool)
glog.V(2).Infof("Deleting GCE TargetPool %s", t.SelfLink) glog.V(2).Infof("Deleting GCE TargetPool %s", t.SelfLink)
@ -478,7 +478,7 @@ func deleteTargetPool(cloud fi.Cloud, r *ResourceTracker) error {
glog.Infof("TargetPool: %s", fi.DebugAsJsonString(t)) glog.Infof("TargetPool: %s", fi.DebugAsJsonString(t))
op, err := c.Compute.TargetPools.Delete(u.Project, u.Region, u.Name).Do() op, err := c.Compute().TargetPools.Delete(u.Project, u.Region, u.Name).Do()
if err != nil { if err != nil {
if gce.IsNotFound(err) { if gce.IsNotFound(err) {
glog.Infof("TargetPool not found, assuming deleted: %q", t.SelfLink) glog.Infof("TargetPool not found, assuming deleted: %q", t.SelfLink)
@ -497,7 +497,7 @@ func (d *clusterDiscoveryGCE) listForwardingRules() ([]*ResourceTracker, error)
ctx := context.Background() ctx := context.Background()
err := c.Compute.ForwardingRules.List(c.Project, c.Region).Pages(ctx, func(page *compute.ForwardingRuleList) error { err := c.Compute().ForwardingRules.List(c.Project(), c.Region()).Pages(ctx, func(page *compute.ForwardingRuleList) error {
for _, fr := range page.Items { for _, fr := range page.Items {
if !d.matchesClusterName(fr.Name) { if !d.matchesClusterName(fr.Name) {
continue continue
@ -532,7 +532,7 @@ func (d *clusterDiscoveryGCE) listForwardingRules() ([]*ResourceTracker, error)
} }
func deleteForwardingRule(cloud fi.Cloud, r *ResourceTracker) error { func deleteForwardingRule(cloud fi.Cloud, r *ResourceTracker) error {
c := cloud.(*gce.GCECloud) c := cloud.(gce.GCECloud)
t := r.obj.(*compute.ForwardingRule) t := r.obj.(*compute.ForwardingRule)
glog.V(2).Infof("Deleting GCE ForwardingRule %s", t.SelfLink) glog.V(2).Infof("Deleting GCE ForwardingRule %s", t.SelfLink)
@ -541,7 +541,7 @@ func deleteForwardingRule(cloud fi.Cloud, r *ResourceTracker) error {
return err return err
} }
op, err := c.Compute.ForwardingRules.Delete(u.Project, u.Region, u.Name).Do() op, err := c.Compute().ForwardingRules.Delete(u.Project, u.Region, u.Name).Do()
if err != nil { if err != nil {
if gce.IsNotFound(err) { if gce.IsNotFound(err) {
glog.Infof("ForwardingRule not found, assuming deleted: %q", t.SelfLink) glog.Infof("ForwardingRule not found, assuming deleted: %q", t.SelfLink)
@ -554,7 +554,7 @@ func deleteForwardingRule(cloud fi.Cloud, r *ResourceTracker) error {
} }
func deleteManagedInstance(cloud fi.Cloud, r *ResourceTracker) error { func deleteManagedInstance(cloud fi.Cloud, r *ResourceTracker) error {
c := cloud.(*gce.GCECloud) c := cloud.(gce.GCECloud)
selfLink := r.obj.(string) selfLink := r.obj.(string)
glog.V(2).Infof("Deleting GCE Instance %s", selfLink) glog.V(2).Infof("Deleting GCE Instance %s", selfLink)
@ -563,7 +563,7 @@ func deleteManagedInstance(cloud fi.Cloud, r *ResourceTracker) error {
return err return err
} }
op, err := c.Compute.Instances.Delete(u.Project, u.Zone, u.Name).Do() op, err := c.Compute().Instances.Delete(u.Project, u.Zone, u.Name).Do()
if err != nil { if err != nil {
if gce.IsNotFound(err) { if gce.IsNotFound(err) {
glog.Infof("Instance not found, assuming deleted: %q", selfLink) glog.Infof("Instance not found, assuming deleted: %q", selfLink)
@ -592,7 +592,7 @@ func (d *clusterDiscoveryGCE) listRoutes(resources map[string]*ResourceTracker)
ctx := context.Background() ctx := context.Background()
// TODO: Push-down prefix? // TODO: Push-down prefix?
err := c.Compute.Routes.List(c.Project).Pages(ctx, func(page *compute.RouteList) error { err := c.Compute().Routes.List(c.Project()).Pages(ctx, func(page *compute.RouteList) error {
for _, r := range page.Items { for _, r := range page.Items {
if !strings.HasPrefix(r.Name, prefix) { if !strings.HasPrefix(r.Name, prefix) {
continue continue
@ -646,7 +646,7 @@ func (d *clusterDiscoveryGCE) listRoutes(resources map[string]*ResourceTracker)
} }
func deleteRoute(cloud fi.Cloud, r *ResourceTracker) error { func deleteRoute(cloud fi.Cloud, r *ResourceTracker) error {
c := cloud.(*gce.GCECloud) c := cloud.(gce.GCECloud)
t := r.obj.(*compute.Route) t := r.obj.(*compute.Route)
glog.V(2).Infof("Deleting GCE Route %s", t.SelfLink) glog.V(2).Infof("Deleting GCE Route %s", t.SelfLink)
@ -655,7 +655,7 @@ func deleteRoute(cloud fi.Cloud, r *ResourceTracker) error {
return err return err
} }
op, err := c.Compute.Routes.Delete(u.Project, u.Name).Do() op, err := c.Compute().Routes.Delete(u.Project, u.Name).Do()
if err != nil { if err != nil {
if gce.IsNotFound(err) { if gce.IsNotFound(err) {
glog.Infof("Route not found, assuming deleted: %q", t.SelfLink) glog.Infof("Route not found, assuming deleted: %q", t.SelfLink)
@ -674,7 +674,7 @@ func (d *clusterDiscoveryGCE) listAddresses() ([]*ResourceTracker, error) {
ctx := context.Background() ctx := context.Background()
err := c.Compute.Addresses.List(c.Project, c.Region).Pages(ctx, func(page *compute.AddressList) error { err := c.Compute().Addresses.List(c.Project(), c.Region()).Pages(ctx, func(page *compute.AddressList) error {
for _, a := range page.Items { for _, a := range page.Items {
if !d.matchesClusterName(a.Name) { if !d.matchesClusterName(a.Name) {
glog.V(8).Infof("Skipping Address with name %q", a.Name) glog.V(8).Infof("Skipping Address with name %q", a.Name)
@ -702,7 +702,7 @@ func (d *clusterDiscoveryGCE) listAddresses() ([]*ResourceTracker, error) {
} }
func deleteAddress(cloud fi.Cloud, r *ResourceTracker) error { func deleteAddress(cloud fi.Cloud, r *ResourceTracker) error {
c := cloud.(*gce.GCECloud) c := cloud.(gce.GCECloud)
t := r.obj.(*compute.Address) t := r.obj.(*compute.Address)
glog.V(2).Infof("Deleting GCE Address %s", t.SelfLink) glog.V(2).Infof("Deleting GCE Address %s", t.SelfLink)
@ -711,7 +711,7 @@ func deleteAddress(cloud fi.Cloud, r *ResourceTracker) error {
return err return err
} }
op, err := c.Compute.Addresses.Delete(u.Project, u.Region, u.Name).Do() op, err := c.Compute().Addresses.Delete(u.Project, u.Region, u.Name).Do()
if err != nil { if err != nil {
if gce.IsNotFound(err) { if gce.IsNotFound(err) {
glog.Infof("Address not found, assuming deleted: %q", t.SelfLink) glog.Infof("Address not found, assuming deleted: %q", t.SelfLink)

View File

@ -310,9 +310,9 @@ func (c *ApplyClusterCmd) Run() error {
switch kops.CloudProviderID(cluster.Spec.CloudProvider) { switch kops.CloudProviderID(cluster.Spec.CloudProvider) {
case kops.CloudProviderGCE: case kops.CloudProviderGCE:
{ {
gceCloud := cloud.(*gce.GCECloud) gceCloud := cloud.(gce.GCECloud)
region = gceCloud.Region region = gceCloud.Region()
project = gceCloud.Project project = gceCloud.Project()
if !AlphaAllowGCE.Enabled() { if !AlphaAllowGCE.Enabled() {
return fmt.Errorf("GCE support is currently alpha, and is feature-gated. export KOPS_FEATURE_FLAGS=AlphaAllowGCE") return fmt.Errorf("GCE support is currently alpha, and is feature-gated. export KOPS_FEATURE_FLAGS=AlphaAllowGCE")
@ -706,7 +706,7 @@ func (c *ApplyClusterCmd) Run() error {
case TargetDirect: case TargetDirect:
switch cluster.Spec.CloudProvider { switch cluster.Spec.CloudProvider {
case "gce": case "gce":
target = gce.NewGCEAPITarget(cloud.(*gce.GCECloud)) target = gce.NewGCEAPITarget(cloud.(gce.GCECloud))
case "aws": case "aws":
target = awsup.NewAWSAPITarget(cloud.(awsup.AWSCloud)) target = awsup.NewAWSAPITarget(cloud.(awsup.AWSCloud))
case "digitalocean": case "digitalocean":

View File

@ -21,12 +21,12 @@ import (
) )
type GCEAPITarget struct { type GCEAPITarget struct {
Cloud *GCECloud Cloud GCECloud
} }
var _ fi.Target = &GCEAPITarget{} var _ fi.Target = &GCEAPITarget{}
func NewGCEAPITarget(cloud *GCECloud) *GCEAPITarget { func NewGCEAPITarget(cloud GCECloud) *GCEAPITarget {
return &GCEAPITarget{ return &GCEAPITarget{
Cloud: cloud, Cloud: cloud,
} }

View File

@ -29,24 +29,36 @@ import (
"k8s.io/kubernetes/federation/pkg/dnsprovider/providers/google/clouddns" "k8s.io/kubernetes/federation/pkg/dnsprovider/providers/google/clouddns"
) )
type GCECloud struct { type GCECloud interface {
Compute *compute.Service fi.Cloud
Storage *storage.Service Compute() *compute.Service
Storage() *storage.Service
Region string Region() string
Project string Project() string
WaitForOp(op *compute.Operation) error
GetApiIngressStatus(cluster *kops.Cluster) ([]kops.ApiIngressStatus, error)
Labels() map[string]string
}
type gceCloudImplementation struct {
compute *compute.Service
storage *storage.Service
region string
project string
labels map[string]string labels map[string]string
} }
var _ fi.Cloud = &GCECloud{} var _ fi.Cloud = &gceCloudImplementation{}
func (c *GCECloud) ProviderID() kops.CloudProviderID { func (c *gceCloudImplementation) ProviderID() kops.CloudProviderID {
return kops.CloudProviderGCE return kops.CloudProviderGCE
} }
func NewGCECloud(region string, project string, labels map[string]string) (*GCECloud, error) { func NewGCECloud(region string, project string, labels map[string]string) (GCECloud, error) {
c := &GCECloud{Region: region, Project: project} c := &gceCloudImplementation{region: region, project: project}
ctx := context.Background() ctx := context.Background()
@ -58,33 +70,53 @@ func NewGCECloud(region string, project string, labels map[string]string) (*GCEC
if err != nil { if err != nil {
return nil, fmt.Errorf("error building compute API client: %v", err) return nil, fmt.Errorf("error building compute API client: %v", err)
} }
c.Compute = computeService c.compute = computeService
storageService, err := storage.New(client) storageService, err := storage.New(client)
if err != nil { if err != nil {
return nil, fmt.Errorf("error building storage API client: %v", err) return nil, fmt.Errorf("error building storage API client: %v", err)
} }
c.Storage = storageService c.storage = storageService
c.labels = labels c.labels = labels
return c, nil return c, nil
} }
func (c *GCECloud) DNS() (dnsprovider.Interface, error) { // Compute returns private struct element compute.
provider, err := clouddns.CreateInterface(c.Project, nil) func (c *gceCloudImplementation) Compute() *compute.Service {
return c.compute
}
// Storage returns private struct element storage.
func (c *gceCloudImplementation) Storage() *storage.Service {
return c.storage
}
// Region returns private struct element region.
func (c *gceCloudImplementation) Region() string {
return c.region
}
// Project returns private struct element project.
func (c *gceCloudImplementation) Project() string {
return c.project
}
func (c *gceCloudImplementation) DNS() (dnsprovider.Interface, error) {
provider, err := clouddns.CreateInterface(c.project, nil)
if err != nil { if err != nil {
return nil, fmt.Errorf("Error building (k8s) DNS provider: %v", err) return nil, fmt.Errorf("Error building (k8s) DNS provider: %v", err)
} }
return provider, nil return provider, nil
} }
func (c *GCECloud) FindVPCInfo(id string) (*fi.VPCInfo, error) { func (c *gceCloudImplementation) FindVPCInfo(id string) (*fi.VPCInfo, error) {
glog.Warningf("FindVPCInfo not (yet) implemented on GCE") glog.Warningf("FindVPCInfo not (yet) implemented on GCE")
return nil, nil return nil, nil
} }
func (c *GCECloud) Labels() map[string]string { func (c *gceCloudImplementation) Labels() map[string]string {
// Defensive copy // Defensive copy
tags := make(map[string]string) tags := make(map[string]string)
for k, v := range c.labels { for k, v := range c.labels {
@ -93,18 +125,18 @@ func (c *GCECloud) Labels() map[string]string {
return tags return tags
} }
func (c *GCECloud) WaitForOp(op *compute.Operation) error { func (c *gceCloudImplementation) WaitForOp(op *compute.Operation) error {
return WaitForOp(c.Compute, op) return WaitForOp(c.compute, op)
} }
func (c *GCECloud) GetApiIngressStatus(cluster *kops.Cluster) ([]kops.ApiIngressStatus, error) { func (c *gceCloudImplementation) GetApiIngressStatus(cluster *kops.Cluster) ([]kops.ApiIngressStatus, error) {
var ingresses []kops.ApiIngressStatus var ingresses []kops.ApiIngressStatus
// Note that this must match GCEModelContext::NameForForwardingRule // Note that this must match GCEModelContext::NameForForwardingRule
name := SafeObjectName("api", cluster.ObjectMeta.Name) name := SafeObjectName("api", cluster.ObjectMeta.Name)
glog.V(2).Infof("Querying GCE to find ForwardingRules for API (%q)", name) glog.V(2).Infof("Querying GCE to find ForwardingRules for API (%q)", name)
forwardingRule, err := c.Compute.ForwardingRules.Get(c.Project, c.Region, name).Do() forwardingRule, err := c.compute.ForwardingRules.Get(c.project, c.region, name).Do()
if err != nil { if err != nil {
if !IsNotFound(err) { if !IsNotFound(err) {
forwardingRule = nil forwardingRule = nil

View File

@ -34,7 +34,7 @@ type Address struct {
} }
func (e *Address) Find(c *fi.Context) (*Address, error) { func (e *Address) Find(c *fi.Context) (*Address, error) {
actual, err := e.find(c.Cloud.(*gce.GCECloud)) actual, err := e.find(c.Cloud.(gce.GCECloud))
if actual != nil && err == nil { if actual != nil && err == nil {
if e.IPAddress == nil { if e.IPAddress == nil {
e.IPAddress = actual.IPAddress e.IPAddress = actual.IPAddress
@ -43,9 +43,9 @@ func (e *Address) Find(c *fi.Context) (*Address, error) {
return actual, err return actual, err
} }
func findAddressByIP(cloud *gce.GCECloud, ip string) (*Address, error) { func findAddressByIP(cloud gce.GCECloud, ip string) (*Address, error) {
// Technically this is a regex, but it doesn't matter... // Technically this is a regex, but it doesn't matter...
r, err := cloud.Compute.Addresses.List(cloud.Project, cloud.Region).Filter("address eq " + ip).Do() r, err := cloud.Compute().Addresses.List(cloud.Project(), cloud.Region()).Filter("address eq " + ip).Do()
if err != nil { if err != nil {
return nil, fmt.Errorf("error listing IPAddresss: %v", err) return nil, fmt.Errorf("error listing IPAddresss: %v", err)
} }
@ -64,8 +64,8 @@ func findAddressByIP(cloud *gce.GCECloud, ip string) (*Address, error) {
return actual, nil return actual, nil
} }
func (e *Address) find(cloud *gce.GCECloud) (*Address, error) { func (e *Address) find(cloud gce.GCECloud) (*Address, error) {
r, err := cloud.Compute.Addresses.Get(cloud.Project, cloud.Region, *e.Name).Do() r, err := cloud.Compute().Addresses.Get(cloud.Project(), cloud.Region(), *e.Name).Do()
if err != nil { if err != nil {
if gce.IsNotFound(err) { if gce.IsNotFound(err) {
return nil, nil return nil, nil
@ -84,7 +84,7 @@ func (e *Address) find(cloud *gce.GCECloud) (*Address, error) {
var _ fi.HasAddress = &Address{} var _ fi.HasAddress = &Address{}
func (e *Address) FindIPAddress(context *fi.Context) (*string, error) { func (e *Address) FindIPAddress(context *fi.Context) (*string, error) {
actual, err := e.find(context.Cloud.(*gce.GCECloud)) actual, err := e.find(context.Cloud.(gce.GCECloud))
if err != nil { if err != nil {
return nil, fmt.Errorf("error querying for IPAddress: %v", err) return nil, fmt.Errorf("error querying for IPAddress: %v", err)
} }
@ -110,22 +110,23 @@ func (_ *Address) CheckChanges(a, e, changes *Address) error {
return nil return nil
} }
func (_ *Address) RenderGCE(t *gce.GCEAPITarget, a, e, changes *Address) error { func (_ *Address) RenderGCE(t gce.GCEAPITarget, a, e, changes *Address) error {
cloud := t.Cloud
addr := &compute.Address{ addr := &compute.Address{
Name: *e.Name, Name: *e.Name,
Address: fi.StringValue(e.IPAddress), Address: fi.StringValue(e.IPAddress),
Region: t.Cloud.Region, Region: cloud.Region(),
} }
if a == nil { if a == nil {
glog.Infof("GCE creating address: %q", addr.Name) glog.Infof("GCE creating address: %q", addr.Name)
op, err := t.Cloud.Compute.Addresses.Insert(t.Cloud.Project, t.Cloud.Region, addr).Do() op, err := cloud.Compute().Addresses.Insert(cloud.Project(), cloud.Region(), addr).Do()
if err != nil { if err != nil {
return fmt.Errorf("error creating IPAddress: %v", err) return fmt.Errorf("error creating IPAddress: %v", err)
} }
if err := t.Cloud.WaitForOp(op); err != nil { if err := cloud.WaitForOp(op); err != nil {
return fmt.Errorf("error waiting for IPAddress: %v", err) return fmt.Errorf("error waiting for IPAddress: %v", err)
} }
} else { } else {

View File

@ -45,9 +45,9 @@ func (e *Disk) CompareWithID() *string {
} }
func (e *Disk) Find(c *fi.Context) (*Disk, error) { func (e *Disk) Find(c *fi.Context) (*Disk, error) {
cloud := c.Cloud.(*gce.GCECloud) cloud := c.Cloud.(gce.GCECloud)
r, err := cloud.Compute.Disks.Get(cloud.Project, *e.Zone, *e.Name).Do() r, err := cloud.Compute().Disks.Get(cloud.Project(), *e.Zone, *e.Name).Do()
if err != nil { if err != nil {
if gce.IsNotFound(err) { if gce.IsNotFound(err) {
return nil, nil return nil, nil
@ -100,8 +100,9 @@ func (_ *Disk) CheckChanges(a, e, changes *Disk) error {
} }
func (_ *Disk) RenderGCE(t *gce.GCEAPITarget, a, e, changes *Disk) error { func (_ *Disk) RenderGCE(t *gce.GCEAPITarget, a, e, changes *Disk) error {
cloud := t.Cloud
typeURL := fmt.Sprintf("https://www.googleapis.com/compute/v1/projects/%s/zones/%s/diskTypes/%s", typeURL := fmt.Sprintf("https://www.googleapis.com/compute/v1/projects/%s/zones/%s/diskTypes/%s",
t.Cloud.Project, cloud.Project(),
*e.Zone, *e.Zone,
*e.VolumeType) *e.VolumeType)
@ -112,14 +113,14 @@ func (_ *Disk) RenderGCE(t *gce.GCEAPITarget, a, e, changes *Disk) error {
} }
if a == nil { if a == nil {
_, err := t.Cloud.Compute.Disks.Insert(t.Cloud.Project, *e.Zone, disk).Do() _, err := cloud.Compute().Disks.Insert(t.Cloud.Project(), *e.Zone, disk).Do()
if err != nil { if err != nil {
return fmt.Errorf("error creating Disk: %v", err) return fmt.Errorf("error creating Disk: %v", err)
} }
} }
if changes.Labels != nil { if changes.Labels != nil {
d, err := t.Cloud.Compute.Disks.Get(t.Cloud.Project, *e.Zone, disk.Name).Do() d, err := cloud.Compute().Disks.Get(t.Cloud.Project(), *e.Zone, disk.Name).Do()
if err != nil { if err != nil {
return fmt.Errorf("error reading created Disk: %v", err) return fmt.Errorf("error reading created Disk: %v", err)
} }
@ -142,7 +143,7 @@ func (_ *Disk) RenderGCE(t *gce.GCEAPITarget, a, e, changes *Disk) error {
labelsRequest.Labels[k] = v labelsRequest.Labels[k] = v
} }
glog.V(2).Infof("Setting labels on disk %q: %v", disk.Name, labelsRequest.Labels) glog.V(2).Infof("Setting labels on disk %q: %v", disk.Name, labelsRequest.Labels)
_, err = t.Cloud.Compute.Disks.SetLabels(t.Cloud.Project, *e.Zone, disk.Name, labelsRequest).Do() _, err = t.Cloud.Compute().Disks.SetLabels(t.Cloud.Project(), *e.Zone, disk.Name, labelsRequest).Do()
if err != nil { if err != nil {
return fmt.Errorf("error setting labels on created Disk: %v", err) return fmt.Errorf("error setting labels on created Disk: %v", err)
} }

View File

@ -45,9 +45,9 @@ func (e *FirewallRule) CompareWithID() *string {
} }
func (e *FirewallRule) Find(c *fi.Context) (*FirewallRule, error) { func (e *FirewallRule) Find(c *fi.Context) (*FirewallRule, error) {
cloud := c.Cloud.(*gce.GCECloud) cloud := c.Cloud.(gce.GCECloud)
r, err := cloud.Compute.Firewalls.Get(cloud.Project, *e.Name).Do() r, err := cloud.Compute().Firewalls.Get(cloud.Project(), *e.Name).Do()
if err != nil { if err != nil {
if gce.IsNotFound(err) { if gce.IsNotFound(err) {
return nil, nil return nil, nil
@ -132,18 +132,19 @@ func (e *FirewallRule) mapToGCE(project string) (*compute.Firewall, error) {
} }
func (_ *FirewallRule) RenderGCE(t *gce.GCEAPITarget, a, e, changes *FirewallRule) error { func (_ *FirewallRule) RenderGCE(t *gce.GCEAPITarget, a, e, changes *FirewallRule) error {
firewall, err := e.mapToGCE(t.Cloud.Project) cloud := t.Cloud
firewall, err := e.mapToGCE(cloud.Project())
if err != nil { if err != nil {
return err return err
} }
if a == nil { if a == nil {
_, err := t.Cloud.Compute.Firewalls.Insert(t.Cloud.Project, firewall).Do() _, err := t.Cloud.Compute().Firewalls.Insert(t.Cloud.Project(), firewall).Do()
if err != nil { if err != nil {
return fmt.Errorf("error creating FirewallRule: %v", err) return fmt.Errorf("error creating FirewallRule: %v", err)
} }
} else { } else {
_, err := t.Cloud.Compute.Firewalls.Update(t.Cloud.Project, *e.Name, firewall).Do() _, err := t.Cloud.Compute().Firewalls.Update(t.Cloud.Project(), *e.Name, firewall).Do()
if err != nil { if err != nil {
return fmt.Errorf("error creating FirewallRule: %v", err) return fmt.Errorf("error creating FirewallRule: %v", err)
} }

View File

@ -44,10 +44,10 @@ func (e *ForwardingRule) CompareWithID() *string {
} }
func (e *ForwardingRule) Find(c *fi.Context) (*ForwardingRule, error) { func (e *ForwardingRule) Find(c *fi.Context) (*ForwardingRule, error) {
cloud := c.Cloud.(*gce.GCECloud) cloud := c.Cloud.(gce.GCECloud)
name := fi.StringValue(e.Name) name := fi.StringValue(e.Name)
r, err := cloud.Compute.ForwardingRules.Get(cloud.Project, cloud.Region, name).Do() r, err := cloud.Compute().ForwardingRules.Get(cloud.Project(), cloud.Region(), name).Do()
if err != nil { if err != nil {
if gce.IsNotFound(err) { if gce.IsNotFound(err) {
return nil, nil return nil, nil
@ -121,7 +121,7 @@ func (_ *ForwardingRule) RenderGCE(t *gce.GCEAPITarget, a, e, changes *Forwardin
if a == nil { if a == nil {
glog.V(4).Infof("Creating ForwardingRule %q", o.Name) glog.V(4).Infof("Creating ForwardingRule %q", o.Name)
_, err := t.Cloud.Compute.ForwardingRules.Insert(t.Cloud.Project, t.Cloud.Region, o).Do() _, err := t.Cloud.Compute().ForwardingRules.Insert(t.Cloud.Project(), t.Cloud.Region(), o).Do()
if err != nil { if err != nil {
return fmt.Errorf("error creating ForwardingRule %q: %v", o.Name, err) return fmt.Errorf("error creating ForwardingRule %q: %v", o.Name, err)
} }

View File

@ -60,9 +60,9 @@ func (e *Instance) CompareWithID() *string {
} }
func (e *Instance) Find(c *fi.Context) (*Instance, error) { func (e *Instance) Find(c *fi.Context) (*Instance, error) {
cloud := c.Cloud.(*gce.GCECloud) cloud := c.Cloud.(gce.GCECloud)
r, err := cloud.Compute.Instances.Get(cloud.Project, *e.Zone, *e.Name).Do() r, err := cloud.Compute().Instances.Get(cloud.Project(), *e.Zone, *e.Name).Do()
if err != nil { if err != nil {
if gce.IsNotFound(err) { if gce.IsNotFound(err) {
return nil, nil return nil, nil
@ -88,7 +88,7 @@ func (e *Instance) Find(c *fi.Context) (*Instance, error) {
if len(ni.AccessConfigs) != 0 { if len(ni.AccessConfigs) != 0 {
ac := ni.AccessConfigs[0] ac := ni.AccessConfigs[0]
if ac.NatIP != "" { if ac.NatIP != "" {
addr, err := cloud.Compute.Addresses.List(cloud.Project, cloud.Region).Filter("address eq " + ac.NatIP).Do() addr, err := cloud.Compute().Addresses.List(cloud.Project(), cloud.Region()).Filter("address eq " + ac.NatIP).Do()
if err != nil { if err != nil {
return nil, fmt.Errorf("error querying for address %q: %v", ac.NatIP, err) return nil, fmt.Errorf("error querying for address %q: %v", ac.NatIP, err)
} else if len(addr.Items) != 0 { } else if len(addr.Items) != 0 {
@ -113,7 +113,7 @@ func (e *Instance) Find(c *fi.Context) (*Instance, error) {
// TODO: Parse source URL instead of assuming same project/zone? // TODO: Parse source URL instead of assuming same project/zone?
name := lastComponent(source) name := lastComponent(source)
d, err := cloud.Compute.Disks.Get(cloud.Project, *e.Zone, name).Do() d, err := cloud.Compute().Disks.Get(cloud.Project(), *e.Zone, name).Do()
if err != nil { if err != nil {
if gce.IsNotFound(err) { if gce.IsNotFound(err) {
return nil, fmt.Errorf("disk not found %q: %v", source, err) return nil, fmt.Errorf("disk not found %q: %v", source, err)
@ -121,7 +121,7 @@ func (e *Instance) Find(c *fi.Context) (*Instance, error) {
return nil, fmt.Errorf("error querying for disk %q: %v", source, err) return nil, fmt.Errorf("error querying for disk %q: %v", source, err)
} }
image, err := ShortenImageURL(cloud.Project, d.SourceImage) image, err := ShortenImageURL(cloud.Project(), d.SourceImage)
if err != nil { if err != nil {
return nil, fmt.Errorf("error parsing source image URL: %v", err) return nil, fmt.Errorf("error parsing source image URL: %v", err)
} }
@ -311,7 +311,7 @@ func (i *Instance) isZero() bool {
func (_ *Instance) RenderGCE(t *gce.GCEAPITarget, a, e, changes *Instance) error { func (_ *Instance) RenderGCE(t *gce.GCEAPITarget, a, e, changes *Instance) error {
cloud := t.Cloud cloud := t.Cloud
project := cloud.Project project := cloud.Project()
zone := *e.Zone zone := *e.Zone
ipAddressResolver := func(ip *Address) (*string, error) { ipAddressResolver := func(ip *Address) (*string, error) {
@ -325,7 +325,7 @@ func (_ *Instance) RenderGCE(t *gce.GCEAPITarget, a, e, changes *Instance) error
if a == nil { if a == nil {
glog.V(2).Infof("Creating instance %q", i.Name) glog.V(2).Infof("Creating instance %q", i.Name)
_, err := t.Cloud.Compute.Instances.Insert(project, zone, i).Do() _, err := cloud.Compute().Instances.Insert(project, zone, i).Do()
if err != nil { if err != nil {
return fmt.Errorf("error creating Instance: %v", err) return fmt.Errorf("error creating Instance: %v", err)
} }
@ -335,7 +335,7 @@ func (_ *Instance) RenderGCE(t *gce.GCEAPITarget, a, e, changes *Instance) error
i.Metadata.Fingerprint = a.metadataFingerprint i.Metadata.Fingerprint = a.metadataFingerprint
op, err := cloud.Compute.Instances.SetMetadata(project, zone, i.Name, i.Metadata).Do() op, err := cloud.Compute().Instances.SetMetadata(project, zone, i.Name, i.Metadata).Do()
if err != nil { if err != nil {
return fmt.Errorf("error setting metadata on instance: %v", err) return fmt.Errorf("error setting metadata on instance: %v", err)
} }

View File

@ -45,9 +45,9 @@ func (e *InstanceGroupManager) CompareWithID() *string {
} }
func (e *InstanceGroupManager) Find(c *fi.Context) (*InstanceGroupManager, error) { func (e *InstanceGroupManager) Find(c *fi.Context) (*InstanceGroupManager, error) {
cloud := c.Cloud.(*gce.GCECloud) cloud := c.Cloud.(gce.GCECloud)
r, err := cloud.Compute.InstanceGroupManagers.Get(cloud.Project, *e.Zone, *e.Name).Do() r, err := cloud.Compute().InstanceGroupManagers.Get(cloud.Project(), *e.Zone, *e.Name).Do()
if err != nil { if err != nil {
if gce.IsNotFound(err) { if gce.IsNotFound(err) {
return nil, nil return nil, nil
@ -81,7 +81,7 @@ func (_ *InstanceGroupManager) CheckChanges(a, e, changes *InstanceGroupManager)
} }
func (_ *InstanceGroupManager) RenderGCE(t *gce.GCEAPITarget, a, e, changes *InstanceGroupManager) error { func (_ *InstanceGroupManager) RenderGCE(t *gce.GCEAPITarget, a, e, changes *InstanceGroupManager) error {
project := t.Cloud.Project project := t.Cloud.Project()
instanceTemplateURL, err := e.InstanceTemplate.URL(project) instanceTemplateURL, err := e.InstanceTemplate.URL(project)
if err != nil { if err != nil {
@ -102,7 +102,7 @@ func (_ *InstanceGroupManager) RenderGCE(t *gce.GCEAPITarget, a, e, changes *Ins
if a == nil { if a == nil {
//for { //for {
op, err := t.Cloud.Compute.InstanceGroupManagers.Insert(t.Cloud.Project, *e.Zone, i).Do() op, err := t.Cloud.Compute().InstanceGroupManagers.Insert(t.Cloud.Project(), *e.Zone, i).Do()
if err != nil { if err != nil {
return fmt.Errorf("error creating InstanceGroupManager: %v", err) return fmt.Errorf("error creating InstanceGroupManager: %v", err)
} }
@ -115,7 +115,7 @@ func (_ *InstanceGroupManager) RenderGCE(t *gce.GCEAPITarget, a, e, changes *Ins
request := &compute.InstanceGroupManagersSetTargetPoolsRequest{ request := &compute.InstanceGroupManagersSetTargetPoolsRequest{
TargetPools: i.TargetPools, TargetPools: i.TargetPools,
} }
op, err := t.Cloud.Compute.InstanceGroupManagers.SetTargetPools(t.Cloud.Project, *e.Zone, i.Name, request).Do() op, err := t.Cloud.Compute().InstanceGroupManagers.SetTargetPools(t.Cloud.Project(), *e.Zone, i.Name, request).Do()
if err != nil { if err != nil {
return fmt.Errorf("error updating TargetPools for InstanceGroupManager: %v", err) return fmt.Errorf("error updating TargetPools for InstanceGroupManager: %v", err)
} }
@ -131,7 +131,7 @@ func (_ *InstanceGroupManager) RenderGCE(t *gce.GCEAPITarget, a, e, changes *Ins
request := &compute.InstanceGroupManagersSetInstanceTemplateRequest{ request := &compute.InstanceGroupManagersSetInstanceTemplateRequest{
InstanceTemplate: instanceTemplateURL, InstanceTemplate: instanceTemplateURL,
} }
op, err := t.Cloud.Compute.InstanceGroupManagers.SetInstanceTemplate(t.Cloud.Project, *e.Zone, i.Name, request).Do() op, err := t.Cloud.Compute().InstanceGroupManagers.SetInstanceTemplate(t.Cloud.Project(), *e.Zone, i.Name, request).Do()
if err != nil { if err != nil {
return fmt.Errorf("error updating InstanceTemplate for InstanceGroupManager: %v", err) return fmt.Errorf("error updating InstanceTemplate for InstanceGroupManager: %v", err)
} }

View File

@ -67,9 +67,9 @@ func (e *InstanceTemplate) CompareWithID() *string {
} }
func (e *InstanceTemplate) Find(c *fi.Context) (*InstanceTemplate, error) { func (e *InstanceTemplate) Find(c *fi.Context) (*InstanceTemplate, error) {
cloud := c.Cloud.(*gce.GCECloud) cloud := c.Cloud.(gce.GCECloud)
response, err := cloud.Compute.InstanceTemplates.List(cloud.Project).Do() response, err := cloud.Compute().InstanceTemplates.List(cloud.Project()).Do()
if err != nil { if err != nil {
if gce.IsNotFound(err) { if gce.IsNotFound(err) {
return nil, nil return nil, nil
@ -77,7 +77,7 @@ func (e *InstanceTemplate) Find(c *fi.Context) (*InstanceTemplate, error) {
return nil, fmt.Errorf("error listing InstanceTemplates: %v", err) return nil, fmt.Errorf("error listing InstanceTemplates: %v", err)
} }
expected, err := e.mapToGCE(cloud.Project) expected, err := e.mapToGCE(cloud.Project())
if err != nil { if err != nil {
return nil, err return nil, err
} }
@ -101,7 +101,7 @@ func (e *InstanceTemplate) Find(c *fi.Context) (*InstanceTemplate, error) {
actual.MachineType = fi.String(lastComponent(p.MachineType)) actual.MachineType = fi.String(lastComponent(p.MachineType))
actual.CanIPForward = &p.CanIpForward actual.CanIPForward = &p.CanIpForward
bootDiskImage, err := ShortenImageURL(cloud.Project, p.Disks[0].InitializeParams.SourceImage) bootDiskImage, err := ShortenImageURL(cloud.Project(), p.Disks[0].InitializeParams.SourceImage)
if err != nil { if err != nil {
return nil, fmt.Errorf("error parsing source image URL: %v", err) return nil, fmt.Errorf("error parsing source image URL: %v", err)
} }
@ -342,7 +342,7 @@ func (e *InstanceTemplate) URL(project string) (string, error) {
} }
func (_ *InstanceTemplate) RenderGCE(t *gce.GCEAPITarget, a, e, changes *InstanceTemplate) error { func (_ *InstanceTemplate) RenderGCE(t *gce.GCEAPITarget, a, e, changes *InstanceTemplate) error {
project := t.Cloud.Project project := t.Cloud.Project()
i, err := e.mapToGCE(project) i, err := e.mapToGCE(project)
if err != nil { if err != nil {
@ -356,7 +356,7 @@ func (_ *InstanceTemplate) RenderGCE(t *gce.GCEAPITarget, a, e, changes *Instanc
e.ID = &name e.ID = &name
i.Name = name i.Name = name
op, err := t.Cloud.Compute.InstanceTemplates.Insert(t.Cloud.Project, i).Do() op, err := t.Cloud.Compute().InstanceTemplates.Insert(t.Cloud.Project(), i).Do()
if err != nil { if err != nil {
return fmt.Errorf("error creating InstanceTemplate: %v", err) return fmt.Errorf("error creating InstanceTemplate: %v", err)
} }

View File

@ -40,9 +40,9 @@ func (e *Network) CompareWithID() *string {
} }
func (e *Network) Find(c *fi.Context) (*Network, error) { func (e *Network) Find(c *fi.Context) (*Network, error) {
cloud := c.Cloud.(*gce.GCECloud) cloud := c.Cloud.(gce.GCECloud)
r, err := cloud.Compute.Networks.Get(cloud.Project, *e.Name).Do() r, err := cloud.Compute().Networks.Get(cloud.Project(), *e.Name).Do()
if err != nil { if err != nil {
if gce.IsNotFound(err) { if gce.IsNotFound(err) {
return nil, nil return nil, nil
@ -54,8 +54,8 @@ func (e *Network) Find(c *fi.Context) (*Network, error) {
actual.Name = &r.Name actual.Name = &r.Name
actual.CIDR = &r.IPv4Range actual.CIDR = &r.IPv4Range
if r.SelfLink != e.URL(cloud.Project) { if r.SelfLink != e.URL(cloud.Project()) {
glog.Warningf("SelfLink did not match URL: %q vs %q", r.SelfLink, e.URL(cloud.Project)) glog.Warningf("SelfLink did not match URL: %q vs %q", r.SelfLink, e.URL(cloud.Project()))
} }
return actual, nil return actual, nil
@ -98,7 +98,7 @@ func (_ *Network) RenderGCE(t *gce.GCEAPITarget, a, e, changes *Network) error {
Name: *e.Name, Name: *e.Name,
} }
_, err := t.Cloud.Compute.Networks.Insert(t.Cloud.Project, network).Do() _, err := t.Cloud.Compute().Networks.Insert(t.Cloud.Project(), network).Do()
if err != nil { if err != nil {
return fmt.Errorf("error creating Network: %v", err) return fmt.Errorf("error creating Network: %v", err)
} }

View File

@ -42,9 +42,9 @@ func (e *Subnet) CompareWithID() *string {
} }
func (e *Subnet) Find(c *fi.Context) (*Subnet, error) { func (e *Subnet) Find(c *fi.Context) (*Subnet, error) {
cloud := c.Cloud.(*gce.GCECloud) cloud := c.Cloud.(gce.GCECloud)
s, err := cloud.Compute.Subnetworks.Get(cloud.Project, cloud.Region, *e.Name).Do() s, err := cloud.Compute().Subnetworks.Get(cloud.Project(), cloud.Region(), *e.Name).Do()
if err != nil { if err != nil {
if gce.IsNotFound(err) { if gce.IsNotFound(err) {
return nil, nil return nil, nil
@ -78,7 +78,7 @@ func (_ *Subnet) RenderGCE(t *gce.GCEAPITarget, a, e, changes *Subnet) error {
Name: *e.Name, Name: *e.Name,
Network: *e.Network.Name, Network: *e.Network.Name,
} }
_, err := t.Cloud.Compute.Subnetworks.Insert(t.Cloud.Project, t.Cloud.Region, subnet).Do() _, err := t.Cloud.Compute().Subnetworks.Insert(t.Cloud.Project(), t.Cloud.Region(), subnet).Do()
if err != nil { if err != nil {
return fmt.Errorf("error creating Subnet: %v", err) return fmt.Errorf("error creating Subnet: %v", err)
} }

View File

@ -39,10 +39,10 @@ func (e *TargetPool) CompareWithID() *string {
} }
func (e *TargetPool) Find(c *fi.Context) (*TargetPool, error) { func (e *TargetPool) Find(c *fi.Context) (*TargetPool, error) {
cloud := c.Cloud.(*gce.GCECloud) cloud := c.Cloud.(gce.GCECloud)
name := fi.StringValue(e.Name) name := fi.StringValue(e.Name)
r, err := cloud.Compute.TargetPools.Get(cloud.Project, cloud.Region, name).Do() r, err := cloud.Compute().TargetPools.Get(cloud.Project(), cloud.Region(), name).Do()
if err != nil { if err != nil {
if gce.IsNotFound(err) { if gce.IsNotFound(err) {
return nil, nil return nil, nil
@ -67,10 +67,10 @@ func (_ *TargetPool) CheckChanges(a, e, changes *TargetPool) error {
return nil return nil
} }
func (e *TargetPool) URL(cloud *gce.GCECloud) string { func (e *TargetPool) URL(cloud gce.GCECloud) string {
name := fi.StringValue(e.Name) name := fi.StringValue(e.Name)
return fmt.Sprintf("https://www.googleapis.com/compute/v1/projects/%s/regions/%s/targetPools/%s", cloud.Project, cloud.Region, name) return fmt.Sprintf("https://www.googleapis.com/compute/v1/projects/%s/regions/%s/targetPools/%s", cloud.Project(), cloud.Region(), name)
} }
func (_ *TargetPool) RenderGCE(t *gce.GCEAPITarget, a, e, changes *TargetPool) error { func (_ *TargetPool) RenderGCE(t *gce.GCEAPITarget, a, e, changes *TargetPool) error {
@ -83,7 +83,7 @@ func (_ *TargetPool) RenderGCE(t *gce.GCEAPITarget, a, e, changes *TargetPool) e
if a == nil { if a == nil {
glog.V(4).Infof("Creating TargetPool %q", o.Name) glog.V(4).Infof("Creating TargetPool %q", o.Name)
op, err := t.Cloud.Compute.TargetPools.Insert(t.Cloud.Project, t.Cloud.Region, o).Do() op, err := t.Cloud.Compute().TargetPools.Insert(t.Cloud.Project(), t.Cloud.Region(), o).Do()
if err != nil { if err != nil {
return fmt.Errorf("error creating TargetPool %q: %v", name, err) return fmt.Errorf("error creating TargetPool %q: %v", name, err)
} }