mirror of https://github.com/kubernetes/kops.git
Merge pull request #12018 from rifelpet/azure-networkid
Add azure support for specifying a shared vpc
This commit is contained in:
commit
54b942af9e
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -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")
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
|
|
|
|||
Loading…
Reference in New Issue