Add support to discover public v4 and v6 addresses on AWS (#3471)
Update github.com/hashicorp/go-discover/provider/aws to support the 'addr_type' option which allows detection of private_v4, public_v4 and public_v6 addresses. Fixes #3471
This commit is contained in:
parent
bcfe1190d4
commit
85f0f71eb1
|
@ -23,6 +23,7 @@ func (p *Provider) Help() string {
|
|||
region: The AWS region. Default to region of instance.
|
||||
tag_key: The tag key to filter on
|
||||
tag_value: The tag value to filter on
|
||||
addr_type: "private_v4", "public_v4" or "public_v6". Defaults to "private_v4".
|
||||
access_key_id: The AWS access key to use
|
||||
secret_access_key: The AWS secret access key to use
|
||||
|
||||
|
@ -43,10 +44,21 @@ func (p *Provider) Addrs(args map[string]string, l *log.Logger) ([]string, error
|
|||
region := args["region"]
|
||||
tagKey := args["tag_key"]
|
||||
tagValue := args["tag_value"]
|
||||
addrType := args["addr_type"]
|
||||
accessKey := args["access_key_id"]
|
||||
secretKey := args["secret_access_key"]
|
||||
|
||||
log.Printf("[DEBUG] discover-aws: Using region=%s tag_key=%s tag_value=%s", region, tagKey, tagValue)
|
||||
if addrType != "private_v4" && addrType != "public_v4" && addrType != "public_v6" {
|
||||
l.Printf("[INFO] discover-aws: Address type %s is not supported. Valid values are {private_v4,public_v4,public_v6}. Falling back to 'private_v4'", addrType)
|
||||
addrType = "private_v4"
|
||||
}
|
||||
|
||||
if addrType == "" {
|
||||
l.Printf("[DEBUG] discover-aws: Address type not provided. Using 'private_v4'")
|
||||
addrType = "private_v4"
|
||||
}
|
||||
|
||||
log.Printf("[DEBUG] discover-aws: Using region=%s tag_key=%s tag_value=%s addr_type=%s", region, tagKey, tagValue, addrType)
|
||||
if accessKey == "" && secretKey == "" {
|
||||
log.Printf("[DEBUG] discover-aws: No static credentials")
|
||||
log.Printf("[DEBUG] discover-aws: Using environment variables, shared credentials or instance role")
|
||||
|
@ -89,6 +101,10 @@ func (p *Provider) Addrs(args map[string]string, l *log.Logger) ([]string, error
|
|||
Name: aws.String("tag:" + tagKey),
|
||||
Values: []*string{aws.String(tagValue)},
|
||||
},
|
||||
&ec2.Filter{
|
||||
Name: aws.String("instance-state-name"),
|
||||
Values: []*string{aws.String("running")},
|
||||
},
|
||||
},
|
||||
})
|
||||
if err != nil {
|
||||
|
@ -103,14 +119,42 @@ func (p *Provider) Addrs(args map[string]string, l *log.Logger) ([]string, error
|
|||
id := *inst.InstanceId
|
||||
l.Printf("[DEBUG] discover-aws: Found instance %s", id)
|
||||
|
||||
// Terminated instances don't have the PrivateIpAddress field
|
||||
if inst.PrivateIpAddress == nil {
|
||||
l.Printf("[DEBUG] discover-aws: Instance %s has no private ip", id)
|
||||
continue
|
||||
}
|
||||
switch addrType {
|
||||
case "public_v6":
|
||||
l.Printf("[DEBUG] discover-aws: Instance %s has %d network interfaces", id, len(inst.NetworkInterfaces))
|
||||
|
||||
l.Printf("[INFO] discover-aws: Instance %s has private ip %s", id, *inst.PrivateIpAddress)
|
||||
addrs = append(addrs, *inst.PrivateIpAddress)
|
||||
for _, networkinterface := range inst.NetworkInterfaces {
|
||||
l.Printf("[DEBUG] discover-aws: Checking NetworInterfaceId %s on Instance %s", *networkinterface.NetworkInterfaceId, id)
|
||||
// Check if instance got any ipv6
|
||||
if networkinterface.Ipv6Addresses == nil {
|
||||
l.Printf("[DEBUG] discover-aws: Instance %s has no IPv6 on NetworkInterfaceId %s", id, *networkinterface.NetworkInterfaceId)
|
||||
continue
|
||||
}
|
||||
for _, ipv6address := range networkinterface.Ipv6Addresses {
|
||||
l.Printf("[INFO] discover-aws: Instance %s has IPv6 %s on NetworkInterfaceId %s", id, *ipv6address.Ipv6Address, *networkinterface.NetworkInterfaceId)
|
||||
addrs = append(addrs, *ipv6address.Ipv6Address)
|
||||
}
|
||||
}
|
||||
|
||||
case "public_v4":
|
||||
if inst.PublicIpAddress == nil {
|
||||
l.Printf("[DEBUG] discover-aws: Instance %s has no public IPv4", id)
|
||||
continue
|
||||
}
|
||||
|
||||
l.Printf("[INFO] discover-aws: Instance %s has public ip %s", id, *inst.PublicIpAddress)
|
||||
addrs = append(addrs, *inst.PublicIpAddress)
|
||||
|
||||
default:
|
||||
// EC2-Classic don't have the PrivateIpAddress field
|
||||
if inst.PrivateIpAddress == nil {
|
||||
l.Printf("[DEBUG] discover-aws: Instance %s has no private ip", id)
|
||||
continue
|
||||
}
|
||||
|
||||
l.Printf("[INFO] discover-aws: Instance %s has private ip %s", id, *inst.PrivateIpAddress)
|
||||
addrs = append(addrs, *inst.PrivateIpAddress)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -26,7 +26,7 @@
|
|||
{"path":"github.com/hashicorp/go-checkpoint","checksumSHA1":"nd3S1qkFv7zZxA9be0bw4nT0pe0=","revision":"e4b2dc34c0f698ee04750bf2035d8b9384233e1b","revisionTime":"2015-10-22T18:15:14Z"},
|
||||
{"path":"github.com/hashicorp/go-cleanhttp","checksumSHA1":"b8F628srIitj5p7Y130xc9k0QWs=","revision":"3573b8b52aa7b37b9358d966a898feb387f62437","revisionTime":"2017-02-11T01:34:15Z"},
|
||||
{"path":"github.com/hashicorp/go-discover","checksumSHA1":"uNoQWG5h2hzWHjaLi376ZXVaCr4=","revision":"21b26b722865b64ae5809a532d2c18f3a3800129","revisionTime":"2017-08-16T16:53:52Z"},
|
||||
{"path":"github.com/hashicorp/go-discover/provider/aws","checksumSHA1":"6wdwVsYyTqW4ReHsWs4mEwoz1FI=","revision":"21b26b722865b64ae5809a532d2c18f3a3800129","revisionTime":"2017-08-16T16:53:52Z","tree":true},
|
||||
{"path":"github.com/hashicorp/go-discover/provider/aws","checksumSHA1":"lyPRg8aZKgGiNkMILk/VKwOqMy4=","revision":"25e4565347de14cea0a0e0730374c9fcffa7bab0","revisionTime":"2017-09-25T01:06:15Z","tree":true},
|
||||
{"path":"github.com/hashicorp/go-discover/provider/azure","checksumSHA1":"r97P32e+VmNMh2vwLkZa1zPEDQU=","revision":"b518491d039b6782035b8881502b4f5e9fcc887b","revisionTime":"2017-08-01T15:32:04Z","tree":true},
|
||||
{"path":"github.com/hashicorp/go-discover/provider/gce","checksumSHA1":"KC/MepQsQF17904UShiM61jmaEs=","revision":"b518491d039b6782035b8881502b4f5e9fcc887b","revisionTime":"2017-08-01T15:32:04Z","tree":true},
|
||||
{"path":"github.com/hashicorp/go-discover/provider/softlayer","checksumSHA1":"SIyZ44AHIUTBfI336ACpCeybsLg=","revision":"b518491d039b6782035b8881502b4f5e9fcc887b","revisionTime":"2017-08-01T15:32:04Z","tree":true},
|
||||
|
|
Loading…
Reference in New Issue