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)
|
AddClusterTags(tags map[string]*string)
|
||||||
|
|
||||||
|
FindVNetInfo(id, resourceGroup string) (*fi.VPCInfo, error)
|
||||||
|
|
||||||
SubscriptionID() string
|
SubscriptionID() string
|
||||||
ResourceGroup() ResourceGroupsClient
|
ResourceGroup() ResourceGroupsClient
|
||||||
VirtualNetwork() VirtualNetworksClient
|
VirtualNetwork() VirtualNetworksClient
|
||||||
|
|
@ -114,7 +116,31 @@ func (c *azureCloudImplementation) DNS() (dnsprovider.Interface, error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *azureCloudImplementation) FindVPCInfo(id string) (*fi.VPCInfo, 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 {
|
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")
|
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.
|
// DeleteInstance deletes the instance.
|
||||||
func (c *MockAzureCloud) DeleteInstance(i *cloudinstances.CloudInstance) error {
|
func (c *MockAzureCloud) DeleteInstance(i *cloudinstances.CloudInstance) error {
|
||||||
return errors.New("DeleteInstance not implemented on azureCloud")
|
return errors.New("DeleteInstance not implemented on azureCloud")
|
||||||
|
|
|
||||||
|
|
@ -24,6 +24,7 @@ import (
|
||||||
"k8s.io/klog/v2"
|
"k8s.io/klog/v2"
|
||||||
"k8s.io/kops/pkg/apis/kops"
|
"k8s.io/kops/pkg/apis/kops"
|
||||||
"k8s.io/kops/upup/pkg/fi"
|
"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/upup/pkg/fi/cloudup/gce"
|
||||||
"k8s.io/kops/util/pkg/vfs"
|
"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) || (cloud.ProviderID() == kops.CloudProviderAzure)
|
||||||
setNetworkCIDR := (cloud.ProviderID() == kops.CloudProviderAWS) || (cloud.ProviderID() == kops.CloudProviderALI)
|
|
||||||
if setNetworkCIDR && c.Spec.NetworkCIDR == "" {
|
if setNetworkCIDR && c.Spec.NetworkCIDR == "" {
|
||||||
if c.SharedVPC() {
|
if c.SharedVPC() {
|
||||||
vpcInfo, err := cloud.FindVPCInfo(c.Spec.NetworkID)
|
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 {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
vpcInfo, err = cloud.FindVPCInfo(c.Spec.NetworkID)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
if vpcInfo == nil {
|
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
|
c.Spec.NetworkCIDR = vpcInfo.CIDR
|
||||||
if c.Spec.NetworkCIDR == "" {
|
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 {
|
} else {
|
||||||
if cloud.ProviderID() == kops.CloudProviderAWS {
|
if cloud.ProviderID() == kops.CloudProviderAWS {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue