func()

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
}