From 3948ae6bf3d94e18452221d9d8e6a3bfff376e1c Mon Sep 17 00:00:00 2001 From: Jan Chaloupka Date: Tue, 27 Nov 2018 11:01:40 +0100 Subject: [PATCH] Put AMI ID retrieval under its own function --- pkg/cloud/aws/actuators/machine/actuator.go | 80 +++++++++++---------- 1 file changed, 43 insertions(+), 37 deletions(-) diff --git a/pkg/cloud/aws/actuators/machine/actuator.go b/pkg/cloud/aws/actuators/machine/actuator.go index afee21e38f..025ea70366 100644 --- a/pkg/cloud/aws/actuators/machine/actuator.go +++ b/pkg/cloud/aws/actuators/machine/actuator.go @@ -271,43 +271,16 @@ func getSubnetIDs(subnet providerconfigv1.AWSResourceReference, availabilityZone return subnetIDs, nil } -// CreateMachine starts a new AWS instance as described by the cluster and machine resources -func (a *Actuator) CreateMachine(cluster *clusterv1.Cluster, machine *clusterv1.Machine) (*ec2.Instance, error) { - machineProviderConfig, err := ProviderConfigFromMachine(machine) - if err != nil { - glog.Errorf("error decoding MachineProviderConfig: %v", err) - return nil, err - } - - credentialsSecretName := "" - if machineProviderConfig.CredentialsSecret != nil { - credentialsSecretName = machineProviderConfig.CredentialsSecret.Name - } - client, err := a.awsClientBuilder(a.kubeClient, credentialsSecretName, machine.Namespace, machineProviderConfig.Placement.Region) - if err != nil { - glog.Errorf("unable to obtain AWS client: %v", err) - return nil, fmt.Errorf("unable to obtain AWS client: %v", err) - } - - // We explicitly do NOT want to remove stopped masters. - if !IsMaster(machine) { - // Prevent having a lot of stopped nodes sitting around. - err = a.removeStoppedMachine(machine, client) - if err != nil { - glog.Errorf("unable to remove stopped machines: %v", err) - return nil, fmt.Errorf("unable to remove stopped nodes: %v", err) - } - } - - // Get AMI to use - var amiID *string - if machineProviderConfig.AMI.ID != nil { - amiID = machineProviderConfig.AMI.ID +func getAMI(AMI providerconfigv1.AWSResourceReference, client awsclient.Client) (*string, error) { + if AMI.ID != nil { + amiID := AMI.ID glog.Infof("Using AMI %s", *amiID) - } else if len(machineProviderConfig.AMI.Filters) > 0 { + return amiID, nil + } + if len(AMI.Filters) > 0 { glog.Info("Describing AMI based on filters") describeImagesRequest := ec2.DescribeImagesInput{ - Filters: buildEC2Filters(machineProviderConfig.AMI.Filters), + Filters: buildEC2Filters(AMI.Filters), } describeAMIResult, err := client.DescribeImages(&describeImagesRequest) if err != nil { @@ -335,9 +308,42 @@ func (a *Actuator) CreateMachine(cluster *clusterv1.Cluster, machine *clusterv1. latestTime = imageTime } } - amiID = latestImage.ImageId - } else { - return nil, fmt.Errorf("AMI ID or AMI filters need to be specified") + return latestImage.ImageId, nil + } + return nil, fmt.Errorf("AMI ID or AMI filters need to be specified") +} + +// CreateMachine starts a new AWS instance as described by the cluster and machine resources +func (a *Actuator) CreateMachine(cluster *clusterv1.Cluster, machine *clusterv1.Machine) (*ec2.Instance, error) { + machineProviderConfig, err := ProviderConfigFromMachine(machine) + if err != nil { + glog.Errorf("error decoding MachineProviderConfig: %v", err) + return nil, err + } + + credentialsSecretName := "" + if machineProviderConfig.CredentialsSecret != nil { + credentialsSecretName = machineProviderConfig.CredentialsSecret.Name + } + client, err := a.awsClientBuilder(a.kubeClient, credentialsSecretName, machine.Namespace, machineProviderConfig.Placement.Region) + if err != nil { + glog.Errorf("unable to obtain AWS client: %v", err) + return nil, fmt.Errorf("unable to obtain AWS client: %v", err) + } + + // We explicitly do NOT want to remove stopped masters. + if !IsMaster(machine) { + // Prevent having a lot of stopped nodes sitting around. + err = a.removeStoppedMachine(machine, client) + if err != nil { + glog.Errorf("unable to remove stopped machines: %v", err) + return nil, fmt.Errorf("unable to remove stopped nodes: %v", err) + } + } + + amiID, err := getAMI(machineProviderConfig.AMI, client) + if err != nil { + return nil, fmt.Errorf("error getting AMI: %v,", err) } securityGroupsIDs, err := getSecurityGroupsIDs(machineProviderConfig.SecurityGroups, client)