in pkg/ec2helper/ec2helper.go [1161:1239]
func (h *EC2Helper) createNetworkConfiguration(simpleConfig *config.SimpleInfo,
input *ec2.RunInstancesInput) error {
// Get all available azs for later use
availabilityZones, err := h.GetAvailableAvailabilityZones()
if err != nil {
return err
}
// Retrieve resources from the stack
c := cfn.New(h.Sess)
vpcId, subnetIds, _, _, err := c.CreateStackAndGetResources(availabilityZones, nil,
cfn.SimpleEc2CloudformationTemplate)
if err != nil {
return err
}
// Find the subnetId with the correct availability zone
var selectedSubnetId *string
for _, subnetId := range subnetIds {
subnet, err := h.GetSubnetById(subnetId)
if err != nil {
return err
}
if *subnet.AvailabilityZone == simpleConfig.SubnetId {
selectedSubnetId = subnet.SubnetId
break
}
}
if selectedSubnetId == nil {
return errors.New("No subnet with the selected availability zone found")
}
input.SubnetId = selectedSubnetId
/*
Get the security group.
If the users choose "all", simply add all existing security groups to the selection.
If the users choose "new", create a new security group for SSH and add it to the selection.
Otherwise, report an error.
*/
securityGroupPlaceholder := simpleConfig.SecurityGroupIds[0]
selectedSecurityGroupIds := []string{}
if securityGroupPlaceholder == cli.ResponseAll {
securityGroups, err := h.GetSecurityGroupsByVpc(*vpcId)
if err != nil {
return err
}
if securityGroups != nil {
for _, group := range securityGroups {
selectedSecurityGroupIds = append(selectedSecurityGroupIds, *group.GroupId)
}
}
} else if securityGroupPlaceholder == cli.ResponseNew {
groupId, err := h.CreateSecurityGroupForSsh(*vpcId)
if err != nil {
return err
}
selectedSecurityGroupIds = append(selectedSecurityGroupIds, *groupId)
} else {
return errors.New("Unknown security group placeholder")
}
if len(selectedSecurityGroupIds) <= 0 {
return errors.New("No security group available for stack")
}
input.SecurityGroupIds = aws.StringSlice(selectedSecurityGroupIds)
// Update simpleConfig for config saving
simpleConfig.NewVPC = false
simpleConfig.SubnetId = *selectedSubnetId
simpleConfig.SecurityGroupIds = selectedSecurityGroupIds
return nil
}