Merge pull request #12018 from rifelpet/azure-networkid

Add azure support for specifying a shared vpc
This commit is contained in:
Kubernetes Prow Robot 2021-07-18 16:44:51 -07:00 committed by GitHub
commit 54b942af9e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 50 additions and 8 deletions

View File

@ -43,6 +43,8 @@ type AzureCloud interface {
AddClusterTags(tags map[string]*string)
FindVNetInfo(id, resourceGroup string) (*fi.VPCInfo, error)
SubscriptionID() string
ResourceGroup() ResourceGroupsClient
VirtualNetwork() VirtualNetworksClient
@ -114,7 +116,31 @@ func (c *azureCloudImplementation) DNS() (dnsprovider.Interface, error) {
}
func (c *azureCloudImplementation) FindVPCInfo(id string) (*fi.VPCInfo, error) {
return nil, errors.New("FindVPCInfo not implemented on azureCloud")
return nil, errors.New("FindVPCInfo not implemented on azureCloud, use FindVNETInfo instead")
}
func (c *azureCloudImplementation) FindVNetInfo(id, resourceGroup string) (*fi.VPCInfo, error) {
vnets, err := c.vnetsClient.List(context.TODO(), resourceGroup)
if err != nil {
return nil, err
}
for _, vnet := range vnets {
if *vnet.ID != id {
continue
}
subnets := make([]*fi.SubnetInfo, 0)
for _, subnet := range *vnet.Subnets {
subnets = append(subnets, &fi.SubnetInfo{
ID: *subnet.ID,
CIDR: *subnet.AddressPrefix,
})
}
return &fi.VPCInfo{
CIDR: (*vnet.AddressSpace.AddressPrefixes)[0],
Subnets: subnets,
}, nil
}
return nil, nil
}
func (c *azureCloudImplementation) DeleteInstance(i *cloudinstances.CloudInstance) error {

View File

@ -122,6 +122,10 @@ func (c *MockAzureCloud) FindVPCInfo(id string) (*fi.VPCInfo, error) {
return nil, errors.New("FindVPCInfo not implemented on azureCloud")
}
func (c *MockAzureCloud) FindVNetInfo(id, resourceGroup string) (*fi.VPCInfo, error) {
return nil, errors.New("FindVNetInfo not implemented on azureCloud")
}
// DeleteInstance deletes the instance.
func (c *MockAzureCloud) DeleteInstance(i *cloudinstances.CloudInstance) error {
return errors.New("DeleteInstance not implemented on azureCloud")

View File

@ -24,6 +24,7 @@ import (
"k8s.io/klog/v2"
"k8s.io/kops/pkg/apis/kops"
"k8s.io/kops/upup/pkg/fi"
"k8s.io/kops/upup/pkg/fi/cloudup/azure"
"k8s.io/kops/upup/pkg/fi/cloudup/gce"
"k8s.io/kops/util/pkg/vfs"
@ -56,20 +57,31 @@ func PerformAssignments(c *kops.Cluster, cloud fi.Cloud) error {
}
}
// Currently only AWS uses NetworkCIDRs
setNetworkCIDR := (cloud.ProviderID() == kops.CloudProviderAWS) || (cloud.ProviderID() == kops.CloudProviderALI)
setNetworkCIDR := (cloud.ProviderID() == kops.CloudProviderAWS) || (cloud.ProviderID() == kops.CloudProviderALI) || (cloud.ProviderID() == kops.CloudProviderAzure)
if setNetworkCIDR && c.Spec.NetworkCIDR == "" {
if c.SharedVPC() {
vpcInfo, err := cloud.FindVPCInfo(c.Spec.NetworkID)
if err != nil {
return err
var vpcInfo *fi.VPCInfo
var err error
if cloud.ProviderID() == kops.CloudProviderAzure {
if c.Spec.CloudConfig == nil || c.Spec.CloudConfig.Azure == nil || c.Spec.CloudConfig.Azure.ResourceGroupName == "" {
return fmt.Errorf("missing required --azure-resource-group-name when specifying Network ID")
}
vpcInfo, err = cloud.(azure.AzureCloud).FindVNetInfo(c.Spec.NetworkID, c.Spec.CloudConfig.Azure.ResourceGroupName)
if err != nil {
return err
}
} else {
vpcInfo, err = cloud.FindVPCInfo(c.Spec.NetworkID)
if err != nil {
return err
}
}
if vpcInfo == nil {
return fmt.Errorf("unable to find VPC ID %q", c.Spec.NetworkID)
return fmt.Errorf("unable to find Network ID %q", c.Spec.NetworkID)
}
c.Spec.NetworkCIDR = vpcInfo.CIDR
if c.Spec.NetworkCIDR == "" {
return fmt.Errorf("unable to infer NetworkCIDR from VPC ID, please specify --network-cidr")
return fmt.Errorf("unable to infer NetworkCIDR from Network ID, please specify --network-cidr")
}
} else {
if cloud.ProviderID() == kops.CloudProviderAWS {