Merge pull request #59361 from jingax10/aliaes_version_branch

Automatic merge from submit-queue. If you want to cherry-pick this change to another branch, please follow the instructions <a href="https://github.com/kubernetes/community/blob/master/contributors/devel/cherry-picks.md">here</a>.

Use beta instead of alpha GCE Compute API to add an alias range to an instance.

… instance.



**What this PR does / why we need it**:

We use beta instead of alpha GCE Compute API to add an alias range to an instance. Without this change, such an API is reserved for GCP projects which has whitelisted for this feature. 

**Which issue(s) this PR fixes** *(optional, in `fixes #<issue number>(, fixes #<issue_number>, ...)` format, will close the issue(s) when PR gets merged)*:
Fixes #
N/A

**Special notes for your reviewer**:

**Release note**:

```release-note
 "NONE".
```
This commit is contained in:
Kubernetes Submit Queue 2018-02-05 17:14:13 -08:00 committed by GitHub
commit c471b6f946
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 53 additions and 10 deletions

View File

@ -8939,6 +8939,7 @@ type BetaInstances interface {
Delete(ctx context.Context, key *meta.Key) error Delete(ctx context.Context, key *meta.Key) error
AttachDisk(context.Context, *meta.Key, *beta.AttachedDisk) error AttachDisk(context.Context, *meta.Key, *beta.AttachedDisk) error
DetachDisk(context.Context, *meta.Key, string) error DetachDisk(context.Context, *meta.Key, string) error
UpdateNetworkInterface(context.Context, *meta.Key, string, *beta.NetworkInterface) error
} }
// NewMockBetaInstances returns a new mock for Instances. // NewMockBetaInstances returns a new mock for Instances.
@ -8976,6 +8977,7 @@ type MockBetaInstances struct {
DeleteHook func(m *MockBetaInstances, ctx context.Context, key *meta.Key) (bool, error) DeleteHook func(m *MockBetaInstances, ctx context.Context, key *meta.Key) (bool, error)
AttachDiskHook func(*MockBetaInstances, context.Context, *meta.Key, *beta.AttachedDisk) error AttachDiskHook func(*MockBetaInstances, context.Context, *meta.Key, *beta.AttachedDisk) error
DetachDiskHook func(*MockBetaInstances, context.Context, *meta.Key, string) error DetachDiskHook func(*MockBetaInstances, context.Context, *meta.Key, string) error
UpdateNetworkInterfaceHook func(*MockBetaInstances, context.Context, *meta.Key, string, *beta.NetworkInterface) error
// X is extra state that can be used as part of the mock. Generated code // X is extra state that can be used as part of the mock. Generated code
// will not use this field. // will not use this field.
@ -9141,6 +9143,14 @@ func (m *MockBetaInstances) DetachDisk(ctx context.Context, key *meta.Key, arg0
return nil return nil
} }
// UpdateNetworkInterface is a mock for the corresponding method.
func (m *MockBetaInstances) UpdateNetworkInterface(ctx context.Context, key *meta.Key, arg0 string, arg1 *beta.NetworkInterface) error {
if m.UpdateNetworkInterfaceHook != nil {
return m.UpdateNetworkInterfaceHook(m, ctx, key, arg0, arg1)
}
return nil
}
// GCEBetaInstances is a simplifying adapter for the GCE Instances. // GCEBetaInstances is a simplifying adapter for the GCE Instances.
type GCEBetaInstances struct { type GCEBetaInstances struct {
s *Service s *Service
@ -9348,6 +9358,39 @@ func (g *GCEBetaInstances) DetachDisk(ctx context.Context, key *meta.Key, arg0 s
return err return err
} }
// UpdateNetworkInterface is a method on GCEBetaInstances.
func (g *GCEBetaInstances) UpdateNetworkInterface(ctx context.Context, key *meta.Key, arg0 string, arg1 *beta.NetworkInterface) error {
glog.V(5).Infof("GCEBetaInstances.UpdateNetworkInterface(%v, %v, ...): called", ctx, key)
if !key.Valid() {
glog.V(2).Infof("GCEBetaInstances.UpdateNetworkInterface(%v, %v, ...): key is invalid (%#v)", ctx, key, key)
return fmt.Errorf("invalid GCE key (%+v)", key)
}
projectID := g.s.ProjectRouter.ProjectID(ctx, "beta", "Instances")
rk := &RateLimitKey{
ProjectID: projectID,
Operation: "UpdateNetworkInterface",
Version: meta.Version("beta"),
Service: "Instances",
}
glog.V(5).Infof("GCEBetaInstances.UpdateNetworkInterface(%v, %v, ...): projectID = %v, rk = %+v", ctx, key, projectID, rk)
if err := g.s.RateLimiter.Accept(ctx, rk); err != nil {
glog.V(4).Infof("GCEBetaInstances.UpdateNetworkInterface(%v, %v, ...): RateLimiter error: %v", ctx, key, err)
return err
}
call := g.s.Beta.Instances.UpdateNetworkInterface(projectID, key.Zone, key.Name, arg0, arg1)
call.Context(ctx)
op, err := call.Do()
if err != nil {
glog.V(4).Infof("GCEBetaInstances.UpdateNetworkInterface(%v, %v, ...) = %+v", ctx, key, err)
return err
}
err = g.s.WaitForCompletion(ctx, op)
glog.V(4).Infof("GCEBetaInstances.UpdateNetworkInterface(%v, %v, ...) = %+v", ctx, key, err)
return err
}
// AlphaInstances is an interface that allows for mocking of Instances. // AlphaInstances is an interface that allows for mocking of Instances.
type AlphaInstances interface { type AlphaInstances interface {
Get(ctx context.Context, key *meta.Key) (*alpha.Instance, error) Get(ctx context.Context, key *meta.Key) (*alpha.Instance, error)

View File

@ -272,6 +272,7 @@ var AllServices = []*ServiceInfo{
additionalMethods: []string{ additionalMethods: []string{
"AttachDisk", "AttachDisk",
"DetachDisk", "DetachDisk",
"UpdateNetworkInterface",
}, },
}, },
{ {

View File

@ -27,7 +27,6 @@ import (
"cloud.google.com/go/compute/metadata" "cloud.google.com/go/compute/metadata"
"github.com/golang/glog" "github.com/golang/glog"
computealpha "google.golang.org/api/compute/v0.alpha"
computebeta "google.golang.org/api/compute/v0.beta" computebeta "google.golang.org/api/compute/v0.beta"
compute "google.golang.org/api/compute/v1" compute "google.golang.org/api/compute/v1"
@ -373,7 +372,7 @@ func (gce *GCECloud) AddAliasToInstance(nodeName types.NodeName, alias *net.IPNe
if err != nil { if err != nil {
return err return err
} }
instance, err := gce.c.AlphaInstances().Get(context.Background(), meta.ZonalKey(v1instance.Name, lastComponent(v1instance.Zone))) instance, err := gce.c.BetaInstances().Get(context.Background(), meta.ZonalKey(v1instance.Name, lastComponent(v1instance.Zone)))
if err != nil { if err != nil {
return err return err
} }
@ -388,13 +387,13 @@ func (gce *GCECloud) AddAliasToInstance(nodeName types.NodeName, alias *net.IPNe
} }
iface := instance.NetworkInterfaces[0] iface := instance.NetworkInterfaces[0]
iface.AliasIpRanges = append(iface.AliasIpRanges, &computealpha.AliasIpRange{ iface.AliasIpRanges = append(iface.AliasIpRanges, &computebeta.AliasIpRange{
IpCidrRange: alias.String(), IpCidrRange: alias.String(),
SubnetworkRangeName: gce.secondaryRangeName, SubnetworkRangeName: gce.secondaryRangeName,
}) })
mc := newInstancesMetricContext("add_alias", v1instance.Zone) mc := newInstancesMetricContext("add_alias", v1instance.Zone)
err = gce.c.AlphaInstances().UpdateNetworkInterface(context.Background(), meta.ZonalKey(instance.Name, lastComponent(instance.Zone)), iface.Name, iface) err = gce.c.BetaInstances().UpdateNetworkInterface(context.Background(), meta.ZonalKey(instance.Name, lastComponent(instance.Zone)), iface.Name, iface)
return mc.Observe(err) return mc.Observe(err)
} }