Exemplo n.º 1
0
func grabSubnetInfo(stub map[string]map[string]interface{}, ec2Client *ec2.Client) error {
	zones := make(map[string]interface{})
	octets := make(map[string]interface{})
	cidrs := make(map[string]interface{})

	stub["SubnetAvailabilityZone"] = zones
	stub["SubnetOctets"] = octets
	stub["SubnetCIDR"] = cidrs

	subnetIds := []string{}
	nameForId := make(map[string]string)
	for name, id := range stub["Subnet"] {
		subnetIds = append(subnetIds, id.(string))
		nameForId[id.(string)] = name
	}

	subnets, err := ec2Client.DescribeSubnets(
		&ec2.DescribeSubnetsParameters{
			Filters: []*ec2.Filter{
				{
					Name:   "subnet-id",
					Values: subnetIds,
				},
			},
		},
	)
	if err != nil {
		return err
	}

	for _, subnet := range subnets.Subnets {
		name := nameForId[subnet.SubnetId]

		_, ipNet, err := net.ParseCIDR(subnet.CidrBlock)
		if err != nil {
			return err
		}

		zones[name] = subnet.AvailabilityZone
		cidrs[name] = subnet.CidrBlock
		octets[name] = []string{
			fmt.Sprintf("%d", ipNet.IP[0]),
			fmt.Sprintf("%d.%d", ipNet.IP[0], ipNet.IP[1]),
			fmt.Sprintf("%d.%d.%d", ipNet.IP[0], ipNet.IP[1], ipNet.IP[2]),
			fmt.Sprintf("%d.%d.%d.%d", ipNet.IP[0], ipNet.IP[1], ipNet.IP[2], ipNet.IP[3]),
		}
	}

	return nil
}