Skip to content

Commit

Permalink
UPSTREAM: <carry>: openshift: Allow vnet and managed identity names t…
Browse files Browse the repository at this point in the history
…o be set explicitly

Once installer sets both fields explictly, have machine azure actuator to require them
and fail when they are not set.
  • Loading branch information
ingvagabund authored and openshift-merge-robot committed Jun 18, 2019
1 parent c0d3008 commit 12d3c93
Show file tree
Hide file tree
Showing 3 changed files with 47 additions and 7 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,12 @@ type AzureMachineProviderSpec struct {

// NatRule to set inbound NAT rule of the load balancer
NatRule *int `json:"natRule"`

// ManagedIdentity to set managed identity name
ManagedIdentity string `json:"managedIdentity"`

// Vnet to set virtual network name
Vnet string `json:"vnet"`
}

// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
Expand Down
42 changes: 38 additions & 4 deletions pkg/cloud/azure/actuators/machine/reconciler.go
Original file line number Diff line number Diff line change
Expand Up @@ -188,12 +188,21 @@ func (s *Reconciler) Update(ctx context.Context) error {
}

if vm.NetworkProfile != nil && vm.NetworkProfile.NetworkInterfaces != nil {
var vnetName string
if s.scope.MachineConfig.Vnet == "" {
// TODO(jchaloup): fail once installer sets MachineConfig.Vnet explicitly
// return errors.Errorf("MachineConfig vnet is missing on machine %s", s.scope.Machine.Name)
vnetName = azure.GenerateVnetName(s.scope.Cluster.Name)
} else {
vnetName = s.scope.MachineConfig.Vnet
}

for _, iface := range *vm.NetworkProfile.NetworkInterfaces {
// Get iface name from the ID
ifaceName := path.Base(*iface.ID)
networkIface, err := s.networkInterfacesSvc.Get(ctx, &networkinterfaces.Spec{
Name: ifaceName,
VnetName: azure.GenerateVnetName(s.scope.Cluster.Name),
VnetName: vnetName,
})
if err != nil {
klog.Errorf("Unable to get %q network interface: %v", ifaceName, err)
Expand Down Expand Up @@ -342,9 +351,18 @@ func (s *Reconciler) Delete(ctx context.Context) error {
return errors.Wrapf(err, "failed to delete OS disk")
}

var vnetName string
if s.scope.MachineConfig.Vnet == "" {
// TODO(jchaloup): fail once installer sets MachineConfig.Vnet explicitly
// return errors.Errorf("MachineConfig vnet is missing on machine %s", s.scope.Machine.Name)
vnetName = azure.GenerateVnetName(s.scope.Cluster.Name)
} else {
vnetName = s.scope.MachineConfig.Vnet
}

networkInterfaceSpec := &networkinterfaces.Spec{
Name: azure.GenerateNetworkInterfaceName(s.scope.Machine.Name),
VnetName: azure.GenerateVnetName(s.scope.Cluster.Name),
VnetName: vnetName,
}

err = s.networkInterfacesSvc.Delete(ctx, networkInterfaceSpec)
Expand Down Expand Up @@ -581,9 +599,18 @@ func (s *Reconciler) getVirtualMachineZone(ctx context.Context) (string, error)
}

func (s *Reconciler) createNetworkInterface(ctx context.Context, nicName string) error {
var vnetName string
if s.scope.MachineConfig.Vnet == "" {
// TODO(jchaloup): fail once installer sets MachineConfig.Vnet explicitly
// return errors.Errorf("MachineConfig vnet is missing on machine %s", s.scope.Machine.Name)
vnetName = azure.GenerateVnetName(s.scope.Cluster.Name)
} else {
vnetName = s.scope.MachineConfig.Vnet
}

networkInterfaceSpec := &networkinterfaces.Spec{
Name: nicName,
VnetName: azure.GenerateVnetName(s.scope.Cluster.Name),
VnetName: vnetName,
}

if s.scope.MachineConfig.Subnet == "" {
Expand Down Expand Up @@ -636,7 +663,14 @@ func (s *Reconciler) createVirtualMachine(ctx context.Context, nicName string) e
return errors.Wrap(zoneErr, "failed to get availability zone")
}

managedIdentity := azure.GenerateManagedIdentityName(s.scope.SubscriptionID, s.scope.ClusterConfig.ResourceGroup, s.scope.Cluster.Name)
var managedIdentity string
if s.scope.MachineConfig.ManagedIdentity == "" {
managedIdentity = azure.GenerateManagedIdentityName(s.scope.SubscriptionID, s.scope.ClusterConfig.ResourceGroup, fmt.Sprintf("%s-identity", s.scope.Cluster.Name))
// TODO(jchaloup): fail once installer sets MachineConfig.ManagedIdentity explicitly
// return errors.Errorf("MachineConfig managedIdentity is missing on machine %s", s.scope.Machine.Name)
} else {
managedIdentity = azure.GenerateManagedIdentityName(s.scope.SubscriptionID, s.scope.ClusterConfig.ResourceGroup, s.scope.MachineConfig.ManagedIdentity)
}

vmSpec = &virtualmachines.Spec{
Name: s.scope.Machine.Name,
Expand Down
6 changes: 3 additions & 3 deletions pkg/cloud/azure/defaults.go
Original file line number Diff line number Diff line change
Expand Up @@ -89,12 +89,12 @@ func GenerateFQDN(publicIPName, location string) string {
}

// GenerateManagedIdentityName generates managed identity name.
func GenerateManagedIdentityName(subscriptionID, resourceGroupName, clusterName string) string {
func GenerateManagedIdentityName(subscriptionID, resourceGroupName, managedIdentityName string) string {
return fmt.Sprintf(
"/subscriptions/%s/resourcegroups/%s/providers/Microsoft.ManagedIdentity/userAssignedIdentities/%s-identity",
"/subscriptions/%s/resourcegroups/%s/providers/Microsoft.ManagedIdentity/userAssignedIdentities/%s",
subscriptionID,
resourceGroupName,
clusterName)
managedIdentityName)
}

// GenerateMachineProviderID generates machine provider id.
Expand Down

0 comments on commit 12d3c93

Please sign in to comment.