mirror of
https://github.com/prometheus/prometheus.git
synced 2024-12-24 21:24:05 -08:00
Linode IPv6 Range support, Optional region filtering, Missing fields in Documentation fixed (#13774)
* Add support for discovering Linode IPv6 ranges associated with linodes. * Add optional but recommended region filtering (faster queries, more relevant information). * Added missing fields in configuration.md, updated linode test cases. * Convert to TableDrivenTests as per tjhop request. Signed-off-by: David Andruczyk <dandrucz@akamai.com>
This commit is contained in:
parent
113938aeb8
commit
38b75bc0d7
|
@ -59,17 +59,22 @@ const (
|
||||||
linodeLabelSpecsVCPUs = linodeLabel + "specs_vcpus"
|
linodeLabelSpecsVCPUs = linodeLabel + "specs_vcpus"
|
||||||
linodeLabelSpecsTransferBytes = linodeLabel + "specs_transfer_bytes"
|
linodeLabelSpecsTransferBytes = linodeLabel + "specs_transfer_bytes"
|
||||||
linodeLabelExtraIPs = linodeLabel + "extra_ips"
|
linodeLabelExtraIPs = linodeLabel + "extra_ips"
|
||||||
|
linodeLabelIPv6Ranges = linodeLabel + "ipv6_ranges"
|
||||||
|
|
||||||
// This is our events filter; when polling for changes, we care only about
|
// This is our events filter; when polling for changes, we care only about
|
||||||
// events since our last refresh.
|
// events since our last refresh.
|
||||||
// Docs: https://www.linode.com/docs/api/account/#events-list
|
// Docs: https://www.linode.com/docs/api/account/#events-list.
|
||||||
filterTemplate = `{"created": {"+gte": "%s"}}`
|
filterTemplate = `{"created": {"+gte": "%s"}}`
|
||||||
|
|
||||||
|
// Optional region filtering.
|
||||||
|
regionFilterTemplate = `{"region": "%s"}`
|
||||||
)
|
)
|
||||||
|
|
||||||
// DefaultSDConfig is the default Linode SD configuration.
|
// DefaultSDConfig is the default Linode SD configuration.
|
||||||
var DefaultSDConfig = SDConfig{
|
var DefaultSDConfig = SDConfig{
|
||||||
TagSeparator: ",",
|
TagSeparator: ",",
|
||||||
Port: 80,
|
Port: 80,
|
||||||
|
Region: "",
|
||||||
RefreshInterval: model.Duration(60 * time.Second),
|
RefreshInterval: model.Duration(60 * time.Second),
|
||||||
HTTPClientConfig: config.DefaultHTTPClientConfig,
|
HTTPClientConfig: config.DefaultHTTPClientConfig,
|
||||||
}
|
}
|
||||||
|
@ -85,6 +90,7 @@ type SDConfig struct {
|
||||||
RefreshInterval model.Duration `yaml:"refresh_interval"`
|
RefreshInterval model.Duration `yaml:"refresh_interval"`
|
||||||
Port int `yaml:"port"`
|
Port int `yaml:"port"`
|
||||||
TagSeparator string `yaml:"tag_separator,omitempty"`
|
TagSeparator string `yaml:"tag_separator,omitempty"`
|
||||||
|
Region string `yaml:"region,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewDiscovererMetrics implements discovery.Config.
|
// NewDiscovererMetrics implements discovery.Config.
|
||||||
|
@ -122,6 +128,7 @@ type Discovery struct {
|
||||||
*refresh.Discovery
|
*refresh.Discovery
|
||||||
client *linodego.Client
|
client *linodego.Client
|
||||||
port int
|
port int
|
||||||
|
region string
|
||||||
tagSeparator string
|
tagSeparator string
|
||||||
lastRefreshTimestamp time.Time
|
lastRefreshTimestamp time.Time
|
||||||
pollCount int
|
pollCount int
|
||||||
|
@ -139,6 +146,7 @@ func NewDiscovery(conf *SDConfig, logger log.Logger, metrics discovery.Discovere
|
||||||
|
|
||||||
d := &Discovery{
|
d := &Discovery{
|
||||||
port: conf.Port,
|
port: conf.Port,
|
||||||
|
region: conf.Region,
|
||||||
tagSeparator: conf.TagSeparator,
|
tagSeparator: conf.TagSeparator,
|
||||||
pollCount: 0,
|
pollCount: 0,
|
||||||
lastRefreshTimestamp: time.Now().UTC(),
|
lastRefreshTimestamp: time.Now().UTC(),
|
||||||
|
@ -224,16 +232,31 @@ func (d *Discovery) refreshData(ctx context.Context) ([]*targetgroup.Group, erro
|
||||||
tg := &targetgroup.Group{
|
tg := &targetgroup.Group{
|
||||||
Source: "Linode",
|
Source: "Linode",
|
||||||
}
|
}
|
||||||
|
opts := linodego.ListOptions{
|
||||||
|
PageSize: 500,
|
||||||
|
}
|
||||||
|
|
||||||
|
// If region filter provided, use it to constrain results.
|
||||||
|
if d.region != "" {
|
||||||
|
opts.Filter = fmt.Sprintf(regionFilterTemplate, d.region)
|
||||||
|
}
|
||||||
|
|
||||||
// Gather all linode instances.
|
// Gather all linode instances.
|
||||||
instances, err := d.client.ListInstances(ctx, &linodego.ListOptions{PageSize: 500})
|
instances, err := d.client.ListInstances(ctx, &opts)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
d.metrics.failuresCount.Inc()
|
d.metrics.failuresCount.Inc()
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
// Gather detailed IP address info for all IPs on all linode instances.
|
// Gather detailed IP address info for all IPs on all linode instances.
|
||||||
detailedIPs, err := d.client.ListIPAddresses(ctx, &linodego.ListOptions{PageSize: 500})
|
detailedIPs, err := d.client.ListIPAddresses(ctx, &opts)
|
||||||
|
if err != nil {
|
||||||
|
d.metrics.failuresCount.Inc()
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
// Gather detailed IPv6 Range info for all linode instances.
|
||||||
|
ipv6RangeList, err := d.client.ListIPv6Ranges(ctx, &opts)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
d.metrics.failuresCount.Inc()
|
d.metrics.failuresCount.Inc()
|
||||||
return nil, err
|
return nil, err
|
||||||
|
@ -248,7 +271,7 @@ func (d *Discovery) refreshData(ctx context.Context) ([]*targetgroup.Group, erro
|
||||||
privateIPv4, publicIPv4, publicIPv6 string
|
privateIPv4, publicIPv4, publicIPv6 string
|
||||||
privateIPv4RDNS, publicIPv4RDNS, publicIPv6RDNS string
|
privateIPv4RDNS, publicIPv4RDNS, publicIPv6RDNS string
|
||||||
backupsStatus string
|
backupsStatus string
|
||||||
extraIPs []string
|
extraIPs, ipv6Ranges []string
|
||||||
)
|
)
|
||||||
|
|
||||||
for _, ip := range instance.IPv4 {
|
for _, ip := range instance.IPv4 {
|
||||||
|
@ -276,17 +299,23 @@ func (d *Discovery) refreshData(ctx context.Context) ([]*targetgroup.Group, erro
|
||||||
}
|
}
|
||||||
|
|
||||||
if instance.IPv6 != "" {
|
if instance.IPv6 != "" {
|
||||||
|
slaac := strings.Split(instance.IPv6, "/")[0]
|
||||||
for _, detailedIP := range detailedIPs {
|
for _, detailedIP := range detailedIPs {
|
||||||
if detailedIP.Address != strings.Split(instance.IPv6, "/")[0] {
|
if detailedIP.Address != slaac {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
publicIPv6 = detailedIP.Address
|
publicIPv6 = detailedIP.Address
|
||||||
|
|
||||||
if detailedIP.RDNS != "" && detailedIP.RDNS != "null" {
|
if detailedIP.RDNS != "" && detailedIP.RDNS != "null" {
|
||||||
publicIPv6RDNS = detailedIP.RDNS
|
publicIPv6RDNS = detailedIP.RDNS
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
for _, ipv6Range := range ipv6RangeList {
|
||||||
|
if ipv6Range.RouteTarget != slaac {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
ipv6Ranges = append(ipv6Ranges, fmt.Sprintf("%s/%d", ipv6Range.Range, ipv6Range.Prefix))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if instance.Backups.Enabled {
|
if instance.Backups.Enabled {
|
||||||
|
@ -330,12 +359,20 @@ func (d *Discovery) refreshData(ctx context.Context) ([]*targetgroup.Group, erro
|
||||||
|
|
||||||
if len(extraIPs) > 0 {
|
if len(extraIPs) > 0 {
|
||||||
// This instance has more than one of at least one type of IP address (public, private,
|
// This instance has more than one of at least one type of IP address (public, private,
|
||||||
// IPv4, IPv6, etc. We provide those extra IPs found here just like we do for instance
|
// IPv4,etc. We provide those extra IPs found here just like we do for instance
|
||||||
// tags, we surround a separated list with the tagSeparator config.
|
// tags, we surround a separated list with the tagSeparator config.
|
||||||
ips := d.tagSeparator + strings.Join(extraIPs, d.tagSeparator) + d.tagSeparator
|
ips := d.tagSeparator + strings.Join(extraIPs, d.tagSeparator) + d.tagSeparator
|
||||||
labels[linodeLabelExtraIPs] = model.LabelValue(ips)
|
labels[linodeLabelExtraIPs] = model.LabelValue(ips)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if len(ipv6Ranges) > 0 {
|
||||||
|
// This instance has more than one IPv6 Ranges routed to it we provide these
|
||||||
|
// Ranges found here just like we do for instance tags, we surround a separated
|
||||||
|
// list with the tagSeparator config.
|
||||||
|
ips := d.tagSeparator + strings.Join(ipv6Ranges, d.tagSeparator) + d.tagSeparator
|
||||||
|
labels[linodeLabelIPv6Ranges] = model.LabelValue(ips)
|
||||||
|
}
|
||||||
|
|
||||||
tg.Targets = append(tg.Targets, labels)
|
tg.Targets = append(tg.Targets, labels)
|
||||||
}
|
}
|
||||||
return []*targetgroup.Group{tg}, nil
|
return []*targetgroup.Group{tg}, nil
|
||||||
|
|
|
@ -28,159 +28,236 @@ import (
|
||||||
"github.com/prometheus/prometheus/discovery"
|
"github.com/prometheus/prometheus/discovery"
|
||||||
)
|
)
|
||||||
|
|
||||||
type LinodeSDTestSuite struct {
|
|
||||||
Mock *SDMock
|
|
||||||
}
|
|
||||||
|
|
||||||
func (s *LinodeSDTestSuite) TearDownSuite() {
|
|
||||||
s.Mock.ShutdownServer()
|
|
||||||
}
|
|
||||||
|
|
||||||
func (s *LinodeSDTestSuite) SetupTest(t *testing.T) {
|
|
||||||
s.Mock = NewSDMock(t)
|
|
||||||
s.Mock.Setup()
|
|
||||||
|
|
||||||
s.Mock.HandleLinodeInstancesList()
|
|
||||||
s.Mock.HandleLinodeNeworkingIPs()
|
|
||||||
s.Mock.HandleLinodeAccountEvents()
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestLinodeSDRefresh(t *testing.T) {
|
func TestLinodeSDRefresh(t *testing.T) {
|
||||||
sdmock := &LinodeSDTestSuite{}
|
sdmock := NewSDMock(t)
|
||||||
sdmock.SetupTest(t)
|
sdmock.Setup()
|
||||||
t.Cleanup(sdmock.TearDownSuite)
|
|
||||||
|
|
||||||
cfg := DefaultSDConfig
|
tests := map[string]struct {
|
||||||
cfg.HTTPClientConfig.Authorization = &config.Authorization{
|
region string
|
||||||
Credentials: tokenID,
|
targetCount int
|
||||||
Type: "Bearer",
|
want []model.LabelSet
|
||||||
|
}{
|
||||||
|
"no_region": {region: "", targetCount: 4, want: []model.LabelSet{
|
||||||
|
{
|
||||||
|
"__address__": model.LabelValue("45.33.82.151:80"),
|
||||||
|
"__meta_linode_instance_id": model.LabelValue("26838044"),
|
||||||
|
"__meta_linode_instance_label": model.LabelValue("prometheus-linode-sd-exporter-1"),
|
||||||
|
"__meta_linode_image": model.LabelValue("linode/arch"),
|
||||||
|
"__meta_linode_private_ipv4": model.LabelValue("192.168.170.51"),
|
||||||
|
"__meta_linode_public_ipv4": model.LabelValue("45.33.82.151"),
|
||||||
|
"__meta_linode_public_ipv6": model.LabelValue("2600:3c03::f03c:92ff:fe1a:1382"),
|
||||||
|
"__meta_linode_private_ipv4_rdns": model.LabelValue(""),
|
||||||
|
"__meta_linode_public_ipv4_rdns": model.LabelValue("li1028-151.members.linode.com"),
|
||||||
|
"__meta_linode_public_ipv6_rdns": model.LabelValue(""),
|
||||||
|
"__meta_linode_region": model.LabelValue("us-east"),
|
||||||
|
"__meta_linode_type": model.LabelValue("g6-standard-2"),
|
||||||
|
"__meta_linode_status": model.LabelValue("running"),
|
||||||
|
"__meta_linode_tags": model.LabelValue(",monitoring,"),
|
||||||
|
"__meta_linode_group": model.LabelValue(""),
|
||||||
|
"__meta_linode_gpus": model.LabelValue("0"),
|
||||||
|
"__meta_linode_hypervisor": model.LabelValue("kvm"),
|
||||||
|
"__meta_linode_backups": model.LabelValue("disabled"),
|
||||||
|
"__meta_linode_specs_disk_bytes": model.LabelValue("85899345920"),
|
||||||
|
"__meta_linode_specs_memory_bytes": model.LabelValue("4294967296"),
|
||||||
|
"__meta_linode_specs_vcpus": model.LabelValue("2"),
|
||||||
|
"__meta_linode_specs_transfer_bytes": model.LabelValue("4194304000"),
|
||||||
|
"__meta_linode_extra_ips": model.LabelValue(",96.126.108.16,192.168.201.25,"),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"__address__": model.LabelValue("139.162.196.43:80"),
|
||||||
|
"__meta_linode_instance_id": model.LabelValue("26848419"),
|
||||||
|
"__meta_linode_instance_label": model.LabelValue("prometheus-linode-sd-exporter-2"),
|
||||||
|
"__meta_linode_image": model.LabelValue("linode/debian10"),
|
||||||
|
"__meta_linode_private_ipv4": model.LabelValue(""),
|
||||||
|
"__meta_linode_public_ipv4": model.LabelValue("139.162.196.43"),
|
||||||
|
"__meta_linode_public_ipv6": model.LabelValue("2a01:7e00::f03c:92ff:fe1a:9976"),
|
||||||
|
"__meta_linode_private_ipv4_rdns": model.LabelValue(""),
|
||||||
|
"__meta_linode_public_ipv4_rdns": model.LabelValue("li1359-43.members.linode.com"),
|
||||||
|
"__meta_linode_public_ipv6_rdns": model.LabelValue(""),
|
||||||
|
"__meta_linode_region": model.LabelValue("eu-west"),
|
||||||
|
"__meta_linode_type": model.LabelValue("g6-standard-2"),
|
||||||
|
"__meta_linode_status": model.LabelValue("running"),
|
||||||
|
"__meta_linode_tags": model.LabelValue(",monitoring,"),
|
||||||
|
"__meta_linode_group": model.LabelValue(""),
|
||||||
|
"__meta_linode_gpus": model.LabelValue("0"),
|
||||||
|
"__meta_linode_hypervisor": model.LabelValue("kvm"),
|
||||||
|
"__meta_linode_backups": model.LabelValue("disabled"),
|
||||||
|
"__meta_linode_specs_disk_bytes": model.LabelValue("85899345920"),
|
||||||
|
"__meta_linode_specs_memory_bytes": model.LabelValue("4294967296"),
|
||||||
|
"__meta_linode_specs_vcpus": model.LabelValue("2"),
|
||||||
|
"__meta_linode_specs_transfer_bytes": model.LabelValue("4194304000"),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"__address__": model.LabelValue("192.53.120.25:80"),
|
||||||
|
"__meta_linode_instance_id": model.LabelValue("26837938"),
|
||||||
|
"__meta_linode_instance_label": model.LabelValue("prometheus-linode-sd-exporter-3"),
|
||||||
|
"__meta_linode_image": model.LabelValue("linode/ubuntu20.04"),
|
||||||
|
"__meta_linode_private_ipv4": model.LabelValue(""),
|
||||||
|
"__meta_linode_public_ipv4": model.LabelValue("192.53.120.25"),
|
||||||
|
"__meta_linode_public_ipv6": model.LabelValue("2600:3c04::f03c:92ff:fe1a:fb68"),
|
||||||
|
"__meta_linode_private_ipv4_rdns": model.LabelValue(""),
|
||||||
|
"__meta_linode_public_ipv4_rdns": model.LabelValue("li2216-25.members.linode.com"),
|
||||||
|
"__meta_linode_public_ipv6_rdns": model.LabelValue(""),
|
||||||
|
"__meta_linode_region": model.LabelValue("ca-central"),
|
||||||
|
"__meta_linode_type": model.LabelValue("g6-standard-1"),
|
||||||
|
"__meta_linode_status": model.LabelValue("running"),
|
||||||
|
"__meta_linode_tags": model.LabelValue(",monitoring,"),
|
||||||
|
"__meta_linode_group": model.LabelValue(""),
|
||||||
|
"__meta_linode_gpus": model.LabelValue("0"),
|
||||||
|
"__meta_linode_hypervisor": model.LabelValue("kvm"),
|
||||||
|
"__meta_linode_backups": model.LabelValue("disabled"),
|
||||||
|
"__meta_linode_specs_disk_bytes": model.LabelValue("53687091200"),
|
||||||
|
"__meta_linode_specs_memory_bytes": model.LabelValue("2147483648"),
|
||||||
|
"__meta_linode_specs_vcpus": model.LabelValue("1"),
|
||||||
|
"__meta_linode_specs_transfer_bytes": model.LabelValue("2097152000"),
|
||||||
|
"__meta_linode_ipv6_ranges": model.LabelValue(",2600:3c04:e001:456::/64,"),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"__address__": model.LabelValue("66.228.47.103:80"),
|
||||||
|
"__meta_linode_instance_id": model.LabelValue("26837992"),
|
||||||
|
"__meta_linode_instance_label": model.LabelValue("prometheus-linode-sd-exporter-4"),
|
||||||
|
"__meta_linode_image": model.LabelValue("linode/ubuntu20.04"),
|
||||||
|
"__meta_linode_private_ipv4": model.LabelValue("192.168.148.94"),
|
||||||
|
"__meta_linode_public_ipv4": model.LabelValue("66.228.47.103"),
|
||||||
|
"__meta_linode_public_ipv6": model.LabelValue("2600:3c03::f03c:92ff:fe1a:fb4c"),
|
||||||
|
"__meta_linode_private_ipv4_rdns": model.LabelValue(""),
|
||||||
|
"__meta_linode_public_ipv4_rdns": model.LabelValue("li328-103.members.linode.com"),
|
||||||
|
"__meta_linode_public_ipv6_rdns": model.LabelValue(""),
|
||||||
|
"__meta_linode_region": model.LabelValue("us-east"),
|
||||||
|
"__meta_linode_type": model.LabelValue("g6-nanode-1"),
|
||||||
|
"__meta_linode_status": model.LabelValue("running"),
|
||||||
|
"__meta_linode_tags": model.LabelValue(",monitoring,"),
|
||||||
|
"__meta_linode_group": model.LabelValue(""),
|
||||||
|
"__meta_linode_gpus": model.LabelValue("0"),
|
||||||
|
"__meta_linode_hypervisor": model.LabelValue("kvm"),
|
||||||
|
"__meta_linode_backups": model.LabelValue("disabled"),
|
||||||
|
"__meta_linode_specs_disk_bytes": model.LabelValue("26843545600"),
|
||||||
|
"__meta_linode_specs_memory_bytes": model.LabelValue("1073741824"),
|
||||||
|
"__meta_linode_specs_vcpus": model.LabelValue("1"),
|
||||||
|
"__meta_linode_specs_transfer_bytes": model.LabelValue("1048576000"),
|
||||||
|
"__meta_linode_extra_ips": model.LabelValue(",172.104.18.104,"),
|
||||||
|
"__meta_linode_ipv6_ranges": model.LabelValue(",2600:3c03:e000:123::/64,"),
|
||||||
|
},
|
||||||
|
}},
|
||||||
|
"us-east": {region: "us-east", targetCount: 2, want: []model.LabelSet{
|
||||||
|
{
|
||||||
|
"__address__": model.LabelValue("45.33.82.151:80"),
|
||||||
|
"__meta_linode_instance_id": model.LabelValue("26838044"),
|
||||||
|
"__meta_linode_instance_label": model.LabelValue("prometheus-linode-sd-exporter-1"),
|
||||||
|
"__meta_linode_image": model.LabelValue("linode/arch"),
|
||||||
|
"__meta_linode_private_ipv4": model.LabelValue("192.168.170.51"),
|
||||||
|
"__meta_linode_public_ipv4": model.LabelValue("45.33.82.151"),
|
||||||
|
"__meta_linode_public_ipv6": model.LabelValue("2600:3c03::f03c:92ff:fe1a:1382"),
|
||||||
|
"__meta_linode_private_ipv4_rdns": model.LabelValue(""),
|
||||||
|
"__meta_linode_public_ipv4_rdns": model.LabelValue("li1028-151.members.linode.com"),
|
||||||
|
"__meta_linode_public_ipv6_rdns": model.LabelValue(""),
|
||||||
|
"__meta_linode_region": model.LabelValue("us-east"),
|
||||||
|
"__meta_linode_type": model.LabelValue("g6-standard-2"),
|
||||||
|
"__meta_linode_status": model.LabelValue("running"),
|
||||||
|
"__meta_linode_tags": model.LabelValue(",monitoring,"),
|
||||||
|
"__meta_linode_group": model.LabelValue(""),
|
||||||
|
"__meta_linode_gpus": model.LabelValue("0"),
|
||||||
|
"__meta_linode_hypervisor": model.LabelValue("kvm"),
|
||||||
|
"__meta_linode_backups": model.LabelValue("disabled"),
|
||||||
|
"__meta_linode_specs_disk_bytes": model.LabelValue("85899345920"),
|
||||||
|
"__meta_linode_specs_memory_bytes": model.LabelValue("4294967296"),
|
||||||
|
"__meta_linode_specs_vcpus": model.LabelValue("2"),
|
||||||
|
"__meta_linode_specs_transfer_bytes": model.LabelValue("4194304000"),
|
||||||
|
"__meta_linode_extra_ips": model.LabelValue(",96.126.108.16,192.168.201.25,"),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"__address__": model.LabelValue("66.228.47.103:80"),
|
||||||
|
"__meta_linode_instance_id": model.LabelValue("26837992"),
|
||||||
|
"__meta_linode_instance_label": model.LabelValue("prometheus-linode-sd-exporter-4"),
|
||||||
|
"__meta_linode_image": model.LabelValue("linode/ubuntu20.04"),
|
||||||
|
"__meta_linode_private_ipv4": model.LabelValue("192.168.148.94"),
|
||||||
|
"__meta_linode_public_ipv4": model.LabelValue("66.228.47.103"),
|
||||||
|
"__meta_linode_public_ipv6": model.LabelValue("2600:3c03::f03c:92ff:fe1a:fb4c"),
|
||||||
|
"__meta_linode_private_ipv4_rdns": model.LabelValue(""),
|
||||||
|
"__meta_linode_public_ipv4_rdns": model.LabelValue("li328-103.members.linode.com"),
|
||||||
|
"__meta_linode_public_ipv6_rdns": model.LabelValue(""),
|
||||||
|
"__meta_linode_region": model.LabelValue("us-east"),
|
||||||
|
"__meta_linode_type": model.LabelValue("g6-nanode-1"),
|
||||||
|
"__meta_linode_status": model.LabelValue("running"),
|
||||||
|
"__meta_linode_tags": model.LabelValue(",monitoring,"),
|
||||||
|
"__meta_linode_group": model.LabelValue(""),
|
||||||
|
"__meta_linode_gpus": model.LabelValue("0"),
|
||||||
|
"__meta_linode_hypervisor": model.LabelValue("kvm"),
|
||||||
|
"__meta_linode_backups": model.LabelValue("disabled"),
|
||||||
|
"__meta_linode_specs_disk_bytes": model.LabelValue("26843545600"),
|
||||||
|
"__meta_linode_specs_memory_bytes": model.LabelValue("1073741824"),
|
||||||
|
"__meta_linode_specs_vcpus": model.LabelValue("1"),
|
||||||
|
"__meta_linode_specs_transfer_bytes": model.LabelValue("1048576000"),
|
||||||
|
"__meta_linode_extra_ips": model.LabelValue(",172.104.18.104,"),
|
||||||
|
"__meta_linode_ipv6_ranges": model.LabelValue(",2600:3c03:e000:123::/64,"),
|
||||||
|
},
|
||||||
|
}},
|
||||||
|
"us-central": {region: "ca-central", targetCount: 1, want: []model.LabelSet{
|
||||||
|
{
|
||||||
|
"__address__": model.LabelValue("192.53.120.25:80"),
|
||||||
|
"__meta_linode_instance_id": model.LabelValue("26837938"),
|
||||||
|
"__meta_linode_instance_label": model.LabelValue("prometheus-linode-sd-exporter-3"),
|
||||||
|
"__meta_linode_image": model.LabelValue("linode/ubuntu20.04"),
|
||||||
|
"__meta_linode_private_ipv4": model.LabelValue(""),
|
||||||
|
"__meta_linode_public_ipv4": model.LabelValue("192.53.120.25"),
|
||||||
|
"__meta_linode_public_ipv6": model.LabelValue("2600:3c04::f03c:92ff:fe1a:fb68"),
|
||||||
|
"__meta_linode_private_ipv4_rdns": model.LabelValue(""),
|
||||||
|
"__meta_linode_public_ipv4_rdns": model.LabelValue("li2216-25.members.linode.com"),
|
||||||
|
"__meta_linode_public_ipv6_rdns": model.LabelValue(""),
|
||||||
|
"__meta_linode_region": model.LabelValue("ca-central"),
|
||||||
|
"__meta_linode_type": model.LabelValue("g6-standard-1"),
|
||||||
|
"__meta_linode_status": model.LabelValue("running"),
|
||||||
|
"__meta_linode_tags": model.LabelValue(",monitoring,"),
|
||||||
|
"__meta_linode_group": model.LabelValue(""),
|
||||||
|
"__meta_linode_gpus": model.LabelValue("0"),
|
||||||
|
"__meta_linode_hypervisor": model.LabelValue("kvm"),
|
||||||
|
"__meta_linode_backups": model.LabelValue("disabled"),
|
||||||
|
"__meta_linode_specs_disk_bytes": model.LabelValue("53687091200"),
|
||||||
|
"__meta_linode_specs_memory_bytes": model.LabelValue("2147483648"),
|
||||||
|
"__meta_linode_specs_vcpus": model.LabelValue("1"),
|
||||||
|
"__meta_linode_specs_transfer_bytes": model.LabelValue("2097152000"),
|
||||||
|
"__meta_linode_ipv6_ranges": model.LabelValue(",2600:3c04:e001:456::/64,"),
|
||||||
|
},
|
||||||
|
}},
|
||||||
}
|
}
|
||||||
|
|
||||||
reg := prometheus.NewRegistry()
|
for _, tc := range tests {
|
||||||
refreshMetrics := discovery.NewRefreshMetrics(reg)
|
cfg := DefaultSDConfig
|
||||||
metrics := cfg.NewDiscovererMetrics(reg, refreshMetrics)
|
if tc.region != "" {
|
||||||
require.NoError(t, metrics.Register())
|
cfg.Region = tc.region
|
||||||
defer metrics.Unregister()
|
}
|
||||||
defer refreshMetrics.Unregister()
|
cfg.HTTPClientConfig.Authorization = &config.Authorization{
|
||||||
|
Credentials: tokenID,
|
||||||
|
Type: "Bearer",
|
||||||
|
}
|
||||||
|
|
||||||
d, err := NewDiscovery(&cfg, log.NewNopLogger(), metrics)
|
reg := prometheus.NewRegistry()
|
||||||
require.NoError(t, err)
|
refreshMetrics := discovery.NewRefreshMetrics(reg)
|
||||||
endpoint, err := url.Parse(sdmock.Mock.Endpoint())
|
metrics := cfg.NewDiscovererMetrics(reg, refreshMetrics)
|
||||||
require.NoError(t, err)
|
require.NoError(t, metrics.Register())
|
||||||
d.client.SetBaseURL(endpoint.String())
|
defer metrics.Unregister()
|
||||||
|
defer refreshMetrics.Unregister()
|
||||||
|
|
||||||
tgs, err := d.refresh(context.Background())
|
d, err := NewDiscovery(&cfg, log.NewNopLogger(), metrics)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
endpoint, err := url.Parse(sdmock.Endpoint())
|
||||||
|
require.NoError(t, err)
|
||||||
|
d.client.SetBaseURL(endpoint.String())
|
||||||
|
|
||||||
require.Len(t, tgs, 1)
|
tgs, err := d.refresh(context.Background())
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
tg := tgs[0]
|
require.Len(t, tgs, 1)
|
||||||
require.NotNil(t, tg)
|
|
||||||
require.NotNil(t, tg.Targets)
|
|
||||||
require.Len(t, tg.Targets, 4)
|
|
||||||
|
|
||||||
for i, lbls := range []model.LabelSet{
|
tg := tgs[0]
|
||||||
{
|
require.NotNil(t, tg)
|
||||||
"__address__": model.LabelValue("45.33.82.151:80"),
|
require.NotNil(t, tg.Targets)
|
||||||
"__meta_linode_instance_id": model.LabelValue("26838044"),
|
require.Len(t, tg.Targets, tc.targetCount)
|
||||||
"__meta_linode_instance_label": model.LabelValue("prometheus-linode-sd-exporter-1"),
|
|
||||||
"__meta_linode_image": model.LabelValue("linode/arch"),
|
for i, lbls := range tc.want {
|
||||||
"__meta_linode_private_ipv4": model.LabelValue("192.168.170.51"),
|
t.Run(fmt.Sprintf("item %d", i), func(t *testing.T) {
|
||||||
"__meta_linode_public_ipv4": model.LabelValue("45.33.82.151"),
|
require.Equal(t, lbls, tg.Targets[i])
|
||||||
"__meta_linode_public_ipv6": model.LabelValue("2600:3c03::f03c:92ff:fe1a:1382"),
|
})
|
||||||
"__meta_linode_private_ipv4_rdns": model.LabelValue(""),
|
}
|
||||||
"__meta_linode_public_ipv4_rdns": model.LabelValue("li1028-151.members.linode.com"),
|
|
||||||
"__meta_linode_public_ipv6_rdns": model.LabelValue(""),
|
|
||||||
"__meta_linode_region": model.LabelValue("us-east"),
|
|
||||||
"__meta_linode_type": model.LabelValue("g6-standard-2"),
|
|
||||||
"__meta_linode_status": model.LabelValue("running"),
|
|
||||||
"__meta_linode_tags": model.LabelValue(",monitoring,"),
|
|
||||||
"__meta_linode_group": model.LabelValue(""),
|
|
||||||
"__meta_linode_gpus": model.LabelValue("0"),
|
|
||||||
"__meta_linode_hypervisor": model.LabelValue("kvm"),
|
|
||||||
"__meta_linode_backups": model.LabelValue("disabled"),
|
|
||||||
"__meta_linode_specs_disk_bytes": model.LabelValue("85899345920"),
|
|
||||||
"__meta_linode_specs_memory_bytes": model.LabelValue("4294967296"),
|
|
||||||
"__meta_linode_specs_vcpus": model.LabelValue("2"),
|
|
||||||
"__meta_linode_specs_transfer_bytes": model.LabelValue("4194304000"),
|
|
||||||
"__meta_linode_extra_ips": model.LabelValue(",96.126.108.16,192.168.201.25,"),
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"__address__": model.LabelValue("139.162.196.43:80"),
|
|
||||||
"__meta_linode_instance_id": model.LabelValue("26848419"),
|
|
||||||
"__meta_linode_instance_label": model.LabelValue("prometheus-linode-sd-exporter-2"),
|
|
||||||
"__meta_linode_image": model.LabelValue("linode/debian10"),
|
|
||||||
"__meta_linode_private_ipv4": model.LabelValue(""),
|
|
||||||
"__meta_linode_public_ipv4": model.LabelValue("139.162.196.43"),
|
|
||||||
"__meta_linode_public_ipv6": model.LabelValue("2a01:7e00::f03c:92ff:fe1a:9976"),
|
|
||||||
"__meta_linode_private_ipv4_rdns": model.LabelValue(""),
|
|
||||||
"__meta_linode_public_ipv4_rdns": model.LabelValue("li1359-43.members.linode.com"),
|
|
||||||
"__meta_linode_public_ipv6_rdns": model.LabelValue(""),
|
|
||||||
"__meta_linode_region": model.LabelValue("eu-west"),
|
|
||||||
"__meta_linode_type": model.LabelValue("g6-standard-2"),
|
|
||||||
"__meta_linode_status": model.LabelValue("running"),
|
|
||||||
"__meta_linode_tags": model.LabelValue(",monitoring,"),
|
|
||||||
"__meta_linode_group": model.LabelValue(""),
|
|
||||||
"__meta_linode_gpus": model.LabelValue("0"),
|
|
||||||
"__meta_linode_hypervisor": model.LabelValue("kvm"),
|
|
||||||
"__meta_linode_backups": model.LabelValue("disabled"),
|
|
||||||
"__meta_linode_specs_disk_bytes": model.LabelValue("85899345920"),
|
|
||||||
"__meta_linode_specs_memory_bytes": model.LabelValue("4294967296"),
|
|
||||||
"__meta_linode_specs_vcpus": model.LabelValue("2"),
|
|
||||||
"__meta_linode_specs_transfer_bytes": model.LabelValue("4194304000"),
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"__address__": model.LabelValue("192.53.120.25:80"),
|
|
||||||
"__meta_linode_instance_id": model.LabelValue("26837938"),
|
|
||||||
"__meta_linode_instance_label": model.LabelValue("prometheus-linode-sd-exporter-3"),
|
|
||||||
"__meta_linode_image": model.LabelValue("linode/ubuntu20.04"),
|
|
||||||
"__meta_linode_private_ipv4": model.LabelValue(""),
|
|
||||||
"__meta_linode_public_ipv4": model.LabelValue("192.53.120.25"),
|
|
||||||
"__meta_linode_public_ipv6": model.LabelValue("2600:3c04::f03c:92ff:fe1a:fb68"),
|
|
||||||
"__meta_linode_private_ipv4_rdns": model.LabelValue(""),
|
|
||||||
"__meta_linode_public_ipv4_rdns": model.LabelValue("li2216-25.members.linode.com"),
|
|
||||||
"__meta_linode_public_ipv6_rdns": model.LabelValue(""),
|
|
||||||
"__meta_linode_region": model.LabelValue("ca-central"),
|
|
||||||
"__meta_linode_type": model.LabelValue("g6-standard-1"),
|
|
||||||
"__meta_linode_status": model.LabelValue("running"),
|
|
||||||
"__meta_linode_tags": model.LabelValue(",monitoring,"),
|
|
||||||
"__meta_linode_group": model.LabelValue(""),
|
|
||||||
"__meta_linode_gpus": model.LabelValue("0"),
|
|
||||||
"__meta_linode_hypervisor": model.LabelValue("kvm"),
|
|
||||||
"__meta_linode_backups": model.LabelValue("disabled"),
|
|
||||||
"__meta_linode_specs_disk_bytes": model.LabelValue("53687091200"),
|
|
||||||
"__meta_linode_specs_memory_bytes": model.LabelValue("2147483648"),
|
|
||||||
"__meta_linode_specs_vcpus": model.LabelValue("1"),
|
|
||||||
"__meta_linode_specs_transfer_bytes": model.LabelValue("2097152000"),
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"__address__": model.LabelValue("66.228.47.103:80"),
|
|
||||||
"__meta_linode_instance_id": model.LabelValue("26837992"),
|
|
||||||
"__meta_linode_instance_label": model.LabelValue("prometheus-linode-sd-exporter-4"),
|
|
||||||
"__meta_linode_image": model.LabelValue("linode/ubuntu20.04"),
|
|
||||||
"__meta_linode_private_ipv4": model.LabelValue("192.168.148.94"),
|
|
||||||
"__meta_linode_public_ipv4": model.LabelValue("66.228.47.103"),
|
|
||||||
"__meta_linode_public_ipv6": model.LabelValue("2600:3c03::f03c:92ff:fe1a:fb4c"),
|
|
||||||
"__meta_linode_private_ipv4_rdns": model.LabelValue(""),
|
|
||||||
"__meta_linode_public_ipv4_rdns": model.LabelValue("li328-103.members.linode.com"),
|
|
||||||
"__meta_linode_public_ipv6_rdns": model.LabelValue(""),
|
|
||||||
"__meta_linode_region": model.LabelValue("us-east"),
|
|
||||||
"__meta_linode_type": model.LabelValue("g6-nanode-1"),
|
|
||||||
"__meta_linode_status": model.LabelValue("running"),
|
|
||||||
"__meta_linode_tags": model.LabelValue(",monitoring,"),
|
|
||||||
"__meta_linode_group": model.LabelValue(""),
|
|
||||||
"__meta_linode_gpus": model.LabelValue("0"),
|
|
||||||
"__meta_linode_hypervisor": model.LabelValue("kvm"),
|
|
||||||
"__meta_linode_backups": model.LabelValue("disabled"),
|
|
||||||
"__meta_linode_specs_disk_bytes": model.LabelValue("26843545600"),
|
|
||||||
"__meta_linode_specs_memory_bytes": model.LabelValue("1073741824"),
|
|
||||||
"__meta_linode_specs_vcpus": model.LabelValue("1"),
|
|
||||||
"__meta_linode_specs_transfer_bytes": model.LabelValue("1048576000"),
|
|
||||||
"__meta_linode_extra_ips": model.LabelValue(",172.104.18.104,"),
|
|
||||||
},
|
|
||||||
} {
|
|
||||||
t.Run(fmt.Sprintf("item %d", i), func(t *testing.T) {
|
|
||||||
require.Equal(t, lbls, tg.Targets[i])
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -14,12 +14,17 @@
|
||||||
package linode
|
package linode
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"encoding/json"
|
||||||
"fmt"
|
"fmt"
|
||||||
"net/http"
|
"net/http"
|
||||||
"net/http/httptest"
|
"net/http/httptest"
|
||||||
|
"os"
|
||||||
|
"path/filepath"
|
||||||
"testing"
|
"testing"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
const tokenID = "7b2c56dd51edd90952c1b94c472b94b176f20c5c777e376849edd8ad1c6c03bb"
|
||||||
|
|
||||||
// SDMock is the interface for the Linode mock.
|
// SDMock is the interface for the Linode mock.
|
||||||
type SDMock struct {
|
type SDMock struct {
|
||||||
t *testing.T
|
t *testing.T
|
||||||
|
@ -43,412 +48,34 @@ func (m *SDMock) Endpoint() string {
|
||||||
func (m *SDMock) Setup() {
|
func (m *SDMock) Setup() {
|
||||||
m.Mux = http.NewServeMux()
|
m.Mux = http.NewServeMux()
|
||||||
m.Server = httptest.NewServer(m.Mux)
|
m.Server = httptest.NewServer(m.Mux)
|
||||||
|
m.t.Cleanup(m.Server.Close)
|
||||||
|
m.SetupHandlers()
|
||||||
}
|
}
|
||||||
|
|
||||||
// ShutdownServer creates the mock server.
|
// SetupHandlers for endpoints of interest.
|
||||||
func (m *SDMock) ShutdownServer() {
|
func (m *SDMock) SetupHandlers() {
|
||||||
m.Server.Close()
|
for _, handler := range []string{"/v4/account/events", "/v4/linode/instances", "/v4/networking/ips", "/v4/networking/ipv6/ranges"} {
|
||||||
}
|
m.Mux.HandleFunc(handler, func(w http.ResponseWriter, r *http.Request) {
|
||||||
|
if r.Header.Get("Authorization") != fmt.Sprintf("Bearer %s", tokenID) {
|
||||||
const tokenID = "7b2c56dd51edd90952c1b94c472b94b176f20c5c777e376849edd8ad1c6c03bb"
|
w.WriteHeader(http.StatusUnauthorized)
|
||||||
|
return
|
||||||
// HandleLinodeInstancesList mocks linode instances list.
|
}
|
||||||
func (m *SDMock) HandleLinodeInstancesList() {
|
xFilter := struct {
|
||||||
m.Mux.HandleFunc("/v4/linode/instances", func(w http.ResponseWriter, r *http.Request) {
|
Region string `json:"region"`
|
||||||
if r.Header.Get("Authorization") != fmt.Sprintf("Bearer %s", tokenID) {
|
}{}
|
||||||
w.WriteHeader(http.StatusUnauthorized)
|
json.Unmarshal([]byte(r.Header.Get("X-Filter")), &xFilter)
|
||||||
return
|
|
||||||
}
|
directory := "testdata/no_region_filter"
|
||||||
|
if xFilter.Region != "" { // Validate region filter matches test criteria.
|
||||||
w.Header().Set("content-type", "application/json; charset=utf-8")
|
directory = "testdata/" + xFilter.Region
|
||||||
w.WriteHeader(http.StatusOK)
|
}
|
||||||
|
if response, err := os.ReadFile(filepath.Join(directory, r.URL.Path+".json")); err == nil {
|
||||||
fmt.Fprint(w, `
|
w.Header().Add("content-type", "application/json; charset=utf-8")
|
||||||
{
|
w.WriteHeader(http.StatusOK)
|
||||||
"data": [
|
w.Write(response)
|
||||||
{
|
return
|
||||||
"id": 26838044,
|
}
|
||||||
"label": "prometheus-linode-sd-exporter-1",
|
w.WriteHeader(http.StatusInternalServerError)
|
||||||
"group": "",
|
})
|
||||||
"status": "running",
|
}
|
||||||
"created": "2021-05-12T04:23:44",
|
|
||||||
"updated": "2021-05-12T04:23:44",
|
|
||||||
"type": "g6-standard-2",
|
|
||||||
"ipv4": [
|
|
||||||
"45.33.82.151",
|
|
||||||
"96.126.108.16",
|
|
||||||
"192.168.170.51",
|
|
||||||
"192.168.201.25"
|
|
||||||
],
|
|
||||||
"ipv6": "2600:3c03::f03c:92ff:fe1a:1382/128",
|
|
||||||
"image": "linode/arch",
|
|
||||||
"region": "us-east",
|
|
||||||
"specs": {
|
|
||||||
"disk": 81920,
|
|
||||||
"memory": 4096,
|
|
||||||
"vcpus": 2,
|
|
||||||
"gpus": 0,
|
|
||||||
"transfer": 4000
|
|
||||||
},
|
|
||||||
"alerts": {
|
|
||||||
"cpu": 180,
|
|
||||||
"network_in": 10,
|
|
||||||
"network_out": 10,
|
|
||||||
"transfer_quota": 80,
|
|
||||||
"io": 10000
|
|
||||||
},
|
|
||||||
"backups": {
|
|
||||||
"enabled": false,
|
|
||||||
"schedule": {
|
|
||||||
"day": null,
|
|
||||||
"window": null
|
|
||||||
},
|
|
||||||
"last_successful": null
|
|
||||||
},
|
|
||||||
"hypervisor": "kvm",
|
|
||||||
"watchdog_enabled": true,
|
|
||||||
"tags": [
|
|
||||||
"monitoring"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 26848419,
|
|
||||||
"label": "prometheus-linode-sd-exporter-2",
|
|
||||||
"group": "",
|
|
||||||
"status": "running",
|
|
||||||
"created": "2021-05-12T12:41:49",
|
|
||||||
"updated": "2021-05-12T12:41:49",
|
|
||||||
"type": "g6-standard-2",
|
|
||||||
"ipv4": [
|
|
||||||
"139.162.196.43"
|
|
||||||
],
|
|
||||||
"ipv6": "2a01:7e00::f03c:92ff:fe1a:9976/128",
|
|
||||||
"image": "linode/debian10",
|
|
||||||
"region": "eu-west",
|
|
||||||
"specs": {
|
|
||||||
"disk": 81920,
|
|
||||||
"memory": 4096,
|
|
||||||
"vcpus": 2,
|
|
||||||
"gpus": 0,
|
|
||||||
"transfer": 4000
|
|
||||||
},
|
|
||||||
"alerts": {
|
|
||||||
"cpu": 180,
|
|
||||||
"network_in": 10,
|
|
||||||
"network_out": 10,
|
|
||||||
"transfer_quota": 80,
|
|
||||||
"io": 10000
|
|
||||||
},
|
|
||||||
"backups": {
|
|
||||||
"enabled": false,
|
|
||||||
"schedule": {
|
|
||||||
"day": null,
|
|
||||||
"window": null
|
|
||||||
},
|
|
||||||
"last_successful": null
|
|
||||||
},
|
|
||||||
"hypervisor": "kvm",
|
|
||||||
"watchdog_enabled": true,
|
|
||||||
"tags": [
|
|
||||||
"monitoring"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 26837938,
|
|
||||||
"label": "prometheus-linode-sd-exporter-3",
|
|
||||||
"group": "",
|
|
||||||
"status": "running",
|
|
||||||
"created": "2021-05-12T04:20:11",
|
|
||||||
"updated": "2021-05-12T04:20:11",
|
|
||||||
"type": "g6-standard-1",
|
|
||||||
"ipv4": [
|
|
||||||
"192.53.120.25"
|
|
||||||
],
|
|
||||||
"ipv6": "2600:3c04::f03c:92ff:fe1a:fb68/128",
|
|
||||||
"image": "linode/ubuntu20.04",
|
|
||||||
"region": "ca-central",
|
|
||||||
"specs": {
|
|
||||||
"disk": 51200,
|
|
||||||
"memory": 2048,
|
|
||||||
"vcpus": 1,
|
|
||||||
"gpus": 0,
|
|
||||||
"transfer": 2000
|
|
||||||
},
|
|
||||||
"alerts": {
|
|
||||||
"cpu": 90,
|
|
||||||
"network_in": 10,
|
|
||||||
"network_out": 10,
|
|
||||||
"transfer_quota": 80,
|
|
||||||
"io": 10000
|
|
||||||
},
|
|
||||||
"backups": {
|
|
||||||
"enabled": false,
|
|
||||||
"schedule": {
|
|
||||||
"day": null,
|
|
||||||
"window": null
|
|
||||||
},
|
|
||||||
"last_successful": null
|
|
||||||
},
|
|
||||||
"hypervisor": "kvm",
|
|
||||||
"watchdog_enabled": true,
|
|
||||||
"tags": [
|
|
||||||
"monitoring"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 26837992,
|
|
||||||
"label": "prometheus-linode-sd-exporter-4",
|
|
||||||
"group": "",
|
|
||||||
"status": "running",
|
|
||||||
"created": "2021-05-12T04:22:06",
|
|
||||||
"updated": "2021-05-12T04:22:06",
|
|
||||||
"type": "g6-nanode-1",
|
|
||||||
"ipv4": [
|
|
||||||
"66.228.47.103",
|
|
||||||
"172.104.18.104",
|
|
||||||
"192.168.148.94"
|
|
||||||
],
|
|
||||||
"ipv6": "2600:3c03::f03c:92ff:fe1a:fb4c/128",
|
|
||||||
"image": "linode/ubuntu20.04",
|
|
||||||
"region": "us-east",
|
|
||||||
"specs": {
|
|
||||||
"disk": 25600,
|
|
||||||
"memory": 1024,
|
|
||||||
"vcpus": 1,
|
|
||||||
"gpus": 0,
|
|
||||||
"transfer": 1000
|
|
||||||
},
|
|
||||||
"alerts": {
|
|
||||||
"cpu": 90,
|
|
||||||
"network_in": 10,
|
|
||||||
"network_out": 10,
|
|
||||||
"transfer_quota": 80,
|
|
||||||
"io": 10000
|
|
||||||
},
|
|
||||||
"backups": {
|
|
||||||
"enabled": false,
|
|
||||||
"schedule": {
|
|
||||||
"day": null,
|
|
||||||
"window": null
|
|
||||||
},
|
|
||||||
"last_successful": null
|
|
||||||
},
|
|
||||||
"hypervisor": "kvm",
|
|
||||||
"watchdog_enabled": true,
|
|
||||||
"tags": [
|
|
||||||
"monitoring"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"page": 1,
|
|
||||||
"pages": 1,
|
|
||||||
"results": 4
|
|
||||||
}`,
|
|
||||||
)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
// HandleLinodeNeworkingIPs mocks linode networking ips endpoint.
|
|
||||||
func (m *SDMock) HandleLinodeNeworkingIPs() {
|
|
||||||
m.Mux.HandleFunc("/v4/networking/ips", func(w http.ResponseWriter, r *http.Request) {
|
|
||||||
if r.Header.Get("Authorization") != fmt.Sprintf("Bearer %s", tokenID) {
|
|
||||||
w.WriteHeader(http.StatusUnauthorized)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
w.Header().Set("content-type", "application/json; charset=utf-8")
|
|
||||||
w.WriteHeader(http.StatusOK)
|
|
||||||
|
|
||||||
fmt.Fprint(w, `
|
|
||||||
{
|
|
||||||
"page": 1,
|
|
||||||
"pages": 1,
|
|
||||||
"results": 13,
|
|
||||||
"data": [
|
|
||||||
{
|
|
||||||
"address": "192.53.120.25",
|
|
||||||
"gateway": "192.53.120.1",
|
|
||||||
"subnet_mask": "255.255.255.0",
|
|
||||||
"prefix": 24,
|
|
||||||
"type": "ipv4",
|
|
||||||
"public": true,
|
|
||||||
"rdns": "li2216-25.members.linode.com",
|
|
||||||
"linode_id": 26837938,
|
|
||||||
"region": "ca-central"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"address": "66.228.47.103",
|
|
||||||
"gateway": "66.228.47.1",
|
|
||||||
"subnet_mask": "255.255.255.0",
|
|
||||||
"prefix": 24,
|
|
||||||
"type": "ipv4",
|
|
||||||
"public": true,
|
|
||||||
"rdns": "li328-103.members.linode.com",
|
|
||||||
"linode_id": 26837992,
|
|
||||||
"region": "us-east"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"address": "172.104.18.104",
|
|
||||||
"gateway": "172.104.18.1",
|
|
||||||
"subnet_mask": "255.255.255.0",
|
|
||||||
"prefix": 24,
|
|
||||||
"type": "ipv4",
|
|
||||||
"public": true,
|
|
||||||
"rdns": "li1832-104.members.linode.com",
|
|
||||||
"linode_id": 26837992,
|
|
||||||
"region": "us-east"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"address": "192.168.148.94",
|
|
||||||
"gateway": null,
|
|
||||||
"subnet_mask": "255.255.128.0",
|
|
||||||
"prefix": 17,
|
|
||||||
"type": "ipv4",
|
|
||||||
"public": false,
|
|
||||||
"rdns": null,
|
|
||||||
"linode_id": 26837992,
|
|
||||||
"region": "us-east"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"address": "192.168.170.51",
|
|
||||||
"gateway": null,
|
|
||||||
"subnet_mask": "255.255.128.0",
|
|
||||||
"prefix": 17,
|
|
||||||
"type": "ipv4",
|
|
||||||
"public": false,
|
|
||||||
"rdns": null,
|
|
||||||
"linode_id": 26838044,
|
|
||||||
"region": "us-east"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"address": "96.126.108.16",
|
|
||||||
"gateway": "96.126.108.1",
|
|
||||||
"subnet_mask": "255.255.255.0",
|
|
||||||
"prefix": 24,
|
|
||||||
"type": "ipv4",
|
|
||||||
"public": true,
|
|
||||||
"rdns": "li365-16.members.linode.com",
|
|
||||||
"linode_id": 26838044,
|
|
||||||
"region": "us-east"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"address": "45.33.82.151",
|
|
||||||
"gateway": "45.33.82.1",
|
|
||||||
"subnet_mask": "255.255.255.0",
|
|
||||||
"prefix": 24,
|
|
||||||
"type": "ipv4",
|
|
||||||
"public": true,
|
|
||||||
"rdns": "li1028-151.members.linode.com",
|
|
||||||
"linode_id": 26838044,
|
|
||||||
"region": "us-east"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"address": "192.168.201.25",
|
|
||||||
"gateway": null,
|
|
||||||
"subnet_mask": "255.255.128.0",
|
|
||||||
"prefix": 17,
|
|
||||||
"type": "ipv4",
|
|
||||||
"public": false,
|
|
||||||
"rdns": null,
|
|
||||||
"linode_id": 26838044,
|
|
||||||
"region": "us-east"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"address": "139.162.196.43",
|
|
||||||
"gateway": "139.162.196.1",
|
|
||||||
"subnet_mask": "255.255.255.0",
|
|
||||||
"prefix": 24,
|
|
||||||
"type": "ipv4",
|
|
||||||
"public": true,
|
|
||||||
"rdns": "li1359-43.members.linode.com",
|
|
||||||
"linode_id": 26848419,
|
|
||||||
"region": "eu-west"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"address": "2600:3c04::f03c:92ff:fe1a:fb68",
|
|
||||||
"gateway": "fe80::1",
|
|
||||||
"subnet_mask": "ffff:ffff:ffff:ffff::",
|
|
||||||
"prefix": 64,
|
|
||||||
"type": "ipv6",
|
|
||||||
"rdns": null,
|
|
||||||
"linode_id": 26837938,
|
|
||||||
"region": "ca-central",
|
|
||||||
"public": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"address": "2600:3c03::f03c:92ff:fe1a:fb4c",
|
|
||||||
"gateway": "fe80::1",
|
|
||||||
"subnet_mask": "ffff:ffff:ffff:ffff::",
|
|
||||||
"prefix": 64,
|
|
||||||
"type": "ipv6",
|
|
||||||
"rdns": null,
|
|
||||||
"linode_id": 26837992,
|
|
||||||
"region": "us-east",
|
|
||||||
"public": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"address": "2600:3c03::f03c:92ff:fe1a:1382",
|
|
||||||
"gateway": "fe80::1",
|
|
||||||
"subnet_mask": "ffff:ffff:ffff:ffff::",
|
|
||||||
"prefix": 64,
|
|
||||||
"type": "ipv6",
|
|
||||||
"rdns": null,
|
|
||||||
"linode_id": 26838044,
|
|
||||||
"region": "us-east",
|
|
||||||
"public": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"address": "2a01:7e00::f03c:92ff:fe1a:9976",
|
|
||||||
"gateway": "fe80::1",
|
|
||||||
"subnet_mask": "ffff:ffff:ffff:ffff::",
|
|
||||||
"prefix": 64,
|
|
||||||
"type": "ipv6",
|
|
||||||
"rdns": null,
|
|
||||||
"linode_id": 26848419,
|
|
||||||
"region": "eu-west",
|
|
||||||
"public": true
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}`,
|
|
||||||
)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
// HandleLinodeAccountEvents mocks linode the account/events endpoint.
|
|
||||||
func (m *SDMock) HandleLinodeAccountEvents() {
|
|
||||||
m.Mux.HandleFunc("/v4/account/events", func(w http.ResponseWriter, r *http.Request) {
|
|
||||||
if r.Header.Get("Authorization") != fmt.Sprintf("Bearer %s", tokenID) {
|
|
||||||
w.WriteHeader(http.StatusUnauthorized)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
if r.Header.Get("X-Filter") == "" {
|
|
||||||
// This should never happen; if the client sends an events request without
|
|
||||||
// a filter, cause it to fail. The error below is not a real response from
|
|
||||||
// the API, but should aid in debugging failed tests.
|
|
||||||
w.WriteHeader(http.StatusBadRequest)
|
|
||||||
fmt.Fprint(w, `
|
|
||||||
{
|
|
||||||
"errors": [
|
|
||||||
{
|
|
||||||
"reason": "Request missing expected X-Filter headers"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}`,
|
|
||||||
)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
w.Header().Set("content-type", "application/json; charset=utf-8")
|
|
||||||
w.WriteHeader(http.StatusOK)
|
|
||||||
|
|
||||||
fmt.Fprint(w, `
|
|
||||||
{
|
|
||||||
"data": [],
|
|
||||||
"results": 0,
|
|
||||||
"pages": 1,
|
|
||||||
"page": 1
|
|
||||||
}`,
|
|
||||||
)
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
|
|
6
discovery/linode/testdata/ca-central/v4/account/events.json
vendored
Normal file
6
discovery/linode/testdata/ca-central/v4/account/events.json
vendored
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
{
|
||||||
|
"data": [],
|
||||||
|
"results": 0,
|
||||||
|
"pages": 1,
|
||||||
|
"page": 1
|
||||||
|
}
|
49
discovery/linode/testdata/ca-central/v4/linode/instances.json
vendored
Normal file
49
discovery/linode/testdata/ca-central/v4/linode/instances.json
vendored
Normal file
|
@ -0,0 +1,49 @@
|
||||||
|
{
|
||||||
|
"data": [
|
||||||
|
{
|
||||||
|
"id": 26837938,
|
||||||
|
"label": "prometheus-linode-sd-exporter-3",
|
||||||
|
"group": "",
|
||||||
|
"status": "running",
|
||||||
|
"created": "2021-05-12T04:20:11",
|
||||||
|
"updated": "2021-05-12T04:20:11",
|
||||||
|
"type": "g6-standard-1",
|
||||||
|
"ipv4": [
|
||||||
|
"192.53.120.25"
|
||||||
|
],
|
||||||
|
"ipv6": "2600:3c04::f03c:92ff:fe1a:fb68/128",
|
||||||
|
"image": "linode/ubuntu20.04",
|
||||||
|
"region": "ca-central",
|
||||||
|
"specs": {
|
||||||
|
"disk": 51200,
|
||||||
|
"memory": 2048,
|
||||||
|
"vcpus": 1,
|
||||||
|
"gpus": 0,
|
||||||
|
"transfer": 2000
|
||||||
|
},
|
||||||
|
"alerts": {
|
||||||
|
"cpu": 90,
|
||||||
|
"network_in": 10,
|
||||||
|
"network_out": 10,
|
||||||
|
"transfer_quota": 80,
|
||||||
|
"io": 10000
|
||||||
|
},
|
||||||
|
"backups": {
|
||||||
|
"enabled": false,
|
||||||
|
"schedule": {
|
||||||
|
"day": null,
|
||||||
|
"window": null
|
||||||
|
},
|
||||||
|
"last_successful": null
|
||||||
|
},
|
||||||
|
"hypervisor": "kvm",
|
||||||
|
"watchdog_enabled": true,
|
||||||
|
"tags": [
|
||||||
|
"monitoring"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"page": 1,
|
||||||
|
"pages": 1,
|
||||||
|
"results": 1
|
||||||
|
}
|
29
discovery/linode/testdata/ca-central/v4/networking/ips.json
vendored
Normal file
29
discovery/linode/testdata/ca-central/v4/networking/ips.json
vendored
Normal file
|
@ -0,0 +1,29 @@
|
||||||
|
{
|
||||||
|
"page": 1,
|
||||||
|
"pages": 1,
|
||||||
|
"results": 2,
|
||||||
|
"data": [
|
||||||
|
{
|
||||||
|
"address": "192.53.120.25",
|
||||||
|
"gateway": "192.53.120.1",
|
||||||
|
"subnet_mask": "255.255.255.0",
|
||||||
|
"prefix": 24,
|
||||||
|
"type": "ipv4",
|
||||||
|
"public": true,
|
||||||
|
"rdns": "li2216-25.members.linode.com",
|
||||||
|
"linode_id": 26837938,
|
||||||
|
"region": "ca-central"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"address": "2600:3c04::f03c:92ff:fe1a:fb68",
|
||||||
|
"gateway": "fe80::1",
|
||||||
|
"subnet_mask": "ffff:ffff:ffff:ffff::",
|
||||||
|
"prefix": 64,
|
||||||
|
"type": "ipv6",
|
||||||
|
"rdns": null,
|
||||||
|
"linode_id": 26837938,
|
||||||
|
"region": "ca-central",
|
||||||
|
"public": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
13
discovery/linode/testdata/ca-central/v4/networking/ipv6/ranges.json
vendored
Normal file
13
discovery/linode/testdata/ca-central/v4/networking/ipv6/ranges.json
vendored
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
{
|
||||||
|
"data": [
|
||||||
|
{
|
||||||
|
"range": "2600:3c04:e001:456::",
|
||||||
|
"prefix": 64,
|
||||||
|
"region": "ca-central",
|
||||||
|
"route_target": "2600:3c04::f03c:92ff:fe1a:fb68"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"page": 1,
|
||||||
|
"pages": 1,
|
||||||
|
"results": 1
|
||||||
|
}
|
6
discovery/linode/testdata/no_region_filter/v4/account/events.json
vendored
Normal file
6
discovery/linode/testdata/no_region_filter/v4/account/events.json
vendored
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
{
|
||||||
|
"data": [],
|
||||||
|
"results": 0,
|
||||||
|
"pages": 1,
|
||||||
|
"page": 1
|
||||||
|
}
|
180
discovery/linode/testdata/no_region_filter/v4/linode/instances.json
vendored
Normal file
180
discovery/linode/testdata/no_region_filter/v4/linode/instances.json
vendored
Normal file
|
@ -0,0 +1,180 @@
|
||||||
|
{
|
||||||
|
"data": [
|
||||||
|
{
|
||||||
|
"id": 26838044,
|
||||||
|
"label": "prometheus-linode-sd-exporter-1",
|
||||||
|
"group": "",
|
||||||
|
"status": "running",
|
||||||
|
"created": "2021-05-12T04:23:44",
|
||||||
|
"updated": "2021-05-12T04:23:44",
|
||||||
|
"type": "g6-standard-2",
|
||||||
|
"ipv4": [
|
||||||
|
"45.33.82.151",
|
||||||
|
"96.126.108.16",
|
||||||
|
"192.168.170.51",
|
||||||
|
"192.168.201.25"
|
||||||
|
],
|
||||||
|
"ipv6": "2600:3c03::f03c:92ff:fe1a:1382/128",
|
||||||
|
"image": "linode/arch",
|
||||||
|
"region": "us-east",
|
||||||
|
"specs": {
|
||||||
|
"disk": 81920,
|
||||||
|
"memory": 4096,
|
||||||
|
"vcpus": 2,
|
||||||
|
"gpus": 0,
|
||||||
|
"transfer": 4000
|
||||||
|
},
|
||||||
|
"alerts": {
|
||||||
|
"cpu": 180,
|
||||||
|
"network_in": 10,
|
||||||
|
"network_out": 10,
|
||||||
|
"transfer_quota": 80,
|
||||||
|
"io": 10000
|
||||||
|
},
|
||||||
|
"backups": {
|
||||||
|
"enabled": false,
|
||||||
|
"schedule": {
|
||||||
|
"day": null,
|
||||||
|
"window": null
|
||||||
|
},
|
||||||
|
"last_successful": null
|
||||||
|
},
|
||||||
|
"hypervisor": "kvm",
|
||||||
|
"watchdog_enabled": true,
|
||||||
|
"tags": [
|
||||||
|
"monitoring"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 26848419,
|
||||||
|
"label": "prometheus-linode-sd-exporter-2",
|
||||||
|
"group": "",
|
||||||
|
"status": "running",
|
||||||
|
"created": "2021-05-12T12:41:49",
|
||||||
|
"updated": "2021-05-12T12:41:49",
|
||||||
|
"type": "g6-standard-2",
|
||||||
|
"ipv4": [
|
||||||
|
"139.162.196.43"
|
||||||
|
],
|
||||||
|
"ipv6": "2a01:7e00::f03c:92ff:fe1a:9976/128",
|
||||||
|
"image": "linode/debian10",
|
||||||
|
"region": "eu-west",
|
||||||
|
"specs": {
|
||||||
|
"disk": 81920,
|
||||||
|
"memory": 4096,
|
||||||
|
"vcpus": 2,
|
||||||
|
"gpus": 0,
|
||||||
|
"transfer": 4000
|
||||||
|
},
|
||||||
|
"alerts": {
|
||||||
|
"cpu": 180,
|
||||||
|
"network_in": 10,
|
||||||
|
"network_out": 10,
|
||||||
|
"transfer_quota": 80,
|
||||||
|
"io": 10000
|
||||||
|
},
|
||||||
|
"backups": {
|
||||||
|
"enabled": false,
|
||||||
|
"schedule": {
|
||||||
|
"day": null,
|
||||||
|
"window": null
|
||||||
|
},
|
||||||
|
"last_successful": null
|
||||||
|
},
|
||||||
|
"hypervisor": "kvm",
|
||||||
|
"watchdog_enabled": true,
|
||||||
|
"tags": [
|
||||||
|
"monitoring"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 26837938,
|
||||||
|
"label": "prometheus-linode-sd-exporter-3",
|
||||||
|
"group": "",
|
||||||
|
"status": "running",
|
||||||
|
"created": "2021-05-12T04:20:11",
|
||||||
|
"updated": "2021-05-12T04:20:11",
|
||||||
|
"type": "g6-standard-1",
|
||||||
|
"ipv4": [
|
||||||
|
"192.53.120.25"
|
||||||
|
],
|
||||||
|
"ipv6": "2600:3c04::f03c:92ff:fe1a:fb68/128",
|
||||||
|
"image": "linode/ubuntu20.04",
|
||||||
|
"region": "ca-central",
|
||||||
|
"specs": {
|
||||||
|
"disk": 51200,
|
||||||
|
"memory": 2048,
|
||||||
|
"vcpus": 1,
|
||||||
|
"gpus": 0,
|
||||||
|
"transfer": 2000
|
||||||
|
},
|
||||||
|
"alerts": {
|
||||||
|
"cpu": 90,
|
||||||
|
"network_in": 10,
|
||||||
|
"network_out": 10,
|
||||||
|
"transfer_quota": 80,
|
||||||
|
"io": 10000
|
||||||
|
},
|
||||||
|
"backups": {
|
||||||
|
"enabled": false,
|
||||||
|
"schedule": {
|
||||||
|
"day": null,
|
||||||
|
"window": null
|
||||||
|
},
|
||||||
|
"last_successful": null
|
||||||
|
},
|
||||||
|
"hypervisor": "kvm",
|
||||||
|
"watchdog_enabled": true,
|
||||||
|
"tags": [
|
||||||
|
"monitoring"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 26837992,
|
||||||
|
"label": "prometheus-linode-sd-exporter-4",
|
||||||
|
"group": "",
|
||||||
|
"status": "running",
|
||||||
|
"created": "2021-05-12T04:22:06",
|
||||||
|
"updated": "2021-05-12T04:22:06",
|
||||||
|
"type": "g6-nanode-1",
|
||||||
|
"ipv4": [
|
||||||
|
"66.228.47.103",
|
||||||
|
"172.104.18.104",
|
||||||
|
"192.168.148.94"
|
||||||
|
],
|
||||||
|
"ipv6": "2600:3c03::f03c:92ff:fe1a:fb4c/128",
|
||||||
|
"image": "linode/ubuntu20.04",
|
||||||
|
"region": "us-east",
|
||||||
|
"specs": {
|
||||||
|
"disk": 25600,
|
||||||
|
"memory": 1024,
|
||||||
|
"vcpus": 1,
|
||||||
|
"gpus": 0,
|
||||||
|
"transfer": 1000
|
||||||
|
},
|
||||||
|
"alerts": {
|
||||||
|
"cpu": 90,
|
||||||
|
"network_in": 10,
|
||||||
|
"network_out": 10,
|
||||||
|
"transfer_quota": 80,
|
||||||
|
"io": 10000
|
||||||
|
},
|
||||||
|
"backups": {
|
||||||
|
"enabled": false,
|
||||||
|
"schedule": {
|
||||||
|
"day": null,
|
||||||
|
"window": null
|
||||||
|
},
|
||||||
|
"last_successful": null
|
||||||
|
},
|
||||||
|
"hypervisor": "kvm",
|
||||||
|
"watchdog_enabled": true,
|
||||||
|
"tags": [
|
||||||
|
"monitoring"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"page": 1,
|
||||||
|
"pages": 1,
|
||||||
|
"results": 4
|
||||||
|
}
|
150
discovery/linode/testdata/no_region_filter/v4/networking/ips.json
vendored
Normal file
150
discovery/linode/testdata/no_region_filter/v4/networking/ips.json
vendored
Normal file
|
@ -0,0 +1,150 @@
|
||||||
|
{
|
||||||
|
"page": 1,
|
||||||
|
"pages": 1,
|
||||||
|
"results": 13,
|
||||||
|
"data": [
|
||||||
|
{
|
||||||
|
"address": "192.53.120.25",
|
||||||
|
"gateway": "192.53.120.1",
|
||||||
|
"subnet_mask": "255.255.255.0",
|
||||||
|
"prefix": 24,
|
||||||
|
"type": "ipv4",
|
||||||
|
"public": true,
|
||||||
|
"rdns": "li2216-25.members.linode.com",
|
||||||
|
"linode_id": 26837938,
|
||||||
|
"region": "ca-central"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"address": "66.228.47.103",
|
||||||
|
"gateway": "66.228.47.1",
|
||||||
|
"subnet_mask": "255.255.255.0",
|
||||||
|
"prefix": 24,
|
||||||
|
"type": "ipv4",
|
||||||
|
"public": true,
|
||||||
|
"rdns": "li328-103.members.linode.com",
|
||||||
|
"linode_id": 26837992,
|
||||||
|
"region": "us-east"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"address": "172.104.18.104",
|
||||||
|
"gateway": "172.104.18.1",
|
||||||
|
"subnet_mask": "255.255.255.0",
|
||||||
|
"prefix": 24,
|
||||||
|
"type": "ipv4",
|
||||||
|
"public": true,
|
||||||
|
"rdns": "li1832-104.members.linode.com",
|
||||||
|
"linode_id": 26837992,
|
||||||
|
"region": "us-east"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"address": "192.168.148.94",
|
||||||
|
"gateway": null,
|
||||||
|
"subnet_mask": "255.255.128.0",
|
||||||
|
"prefix": 17,
|
||||||
|
"type": "ipv4",
|
||||||
|
"public": false,
|
||||||
|
"rdns": null,
|
||||||
|
"linode_id": 26837992,
|
||||||
|
"region": "us-east"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"address": "192.168.170.51",
|
||||||
|
"gateway": null,
|
||||||
|
"subnet_mask": "255.255.128.0",
|
||||||
|
"prefix": 17,
|
||||||
|
"type": "ipv4",
|
||||||
|
"public": false,
|
||||||
|
"rdns": null,
|
||||||
|
"linode_id": 26838044,
|
||||||
|
"region": "us-east"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"address": "96.126.108.16",
|
||||||
|
"gateway": "96.126.108.1",
|
||||||
|
"subnet_mask": "255.255.255.0",
|
||||||
|
"prefix": 24,
|
||||||
|
"type": "ipv4",
|
||||||
|
"public": true,
|
||||||
|
"rdns": "li365-16.members.linode.com",
|
||||||
|
"linode_id": 26838044,
|
||||||
|
"region": "us-east"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"address": "45.33.82.151",
|
||||||
|
"gateway": "45.33.82.1",
|
||||||
|
"subnet_mask": "255.255.255.0",
|
||||||
|
"prefix": 24,
|
||||||
|
"type": "ipv4",
|
||||||
|
"public": true,
|
||||||
|
"rdns": "li1028-151.members.linode.com",
|
||||||
|
"linode_id": 26838044,
|
||||||
|
"region": "us-east"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"address": "192.168.201.25",
|
||||||
|
"gateway": null,
|
||||||
|
"subnet_mask": "255.255.128.0",
|
||||||
|
"prefix": 17,
|
||||||
|
"type": "ipv4",
|
||||||
|
"public": false,
|
||||||
|
"rdns": null,
|
||||||
|
"linode_id": 26838044,
|
||||||
|
"region": "us-east"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"address": "139.162.196.43",
|
||||||
|
"gateway": "139.162.196.1",
|
||||||
|
"subnet_mask": "255.255.255.0",
|
||||||
|
"prefix": 24,
|
||||||
|
"type": "ipv4",
|
||||||
|
"public": true,
|
||||||
|
"rdns": "li1359-43.members.linode.com",
|
||||||
|
"linode_id": 26848419,
|
||||||
|
"region": "eu-west"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"address": "2600:3c04::f03c:92ff:fe1a:fb68",
|
||||||
|
"gateway": "fe80::1",
|
||||||
|
"subnet_mask": "ffff:ffff:ffff:ffff::",
|
||||||
|
"prefix": 64,
|
||||||
|
"type": "ipv6",
|
||||||
|
"rdns": null,
|
||||||
|
"linode_id": 26837938,
|
||||||
|
"region": "ca-central",
|
||||||
|
"public": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"address": "2600:3c03::f03c:92ff:fe1a:fb4c",
|
||||||
|
"gateway": "fe80::1",
|
||||||
|
"subnet_mask": "ffff:ffff:ffff:ffff::",
|
||||||
|
"prefix": 64,
|
||||||
|
"type": "ipv6",
|
||||||
|
"rdns": null,
|
||||||
|
"linode_id": 26837992,
|
||||||
|
"region": "us-east",
|
||||||
|
"public": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"address": "2600:3c03::f03c:92ff:fe1a:1382",
|
||||||
|
"gateway": "fe80::1",
|
||||||
|
"subnet_mask": "ffff:ffff:ffff:ffff::",
|
||||||
|
"prefix": 64,
|
||||||
|
"type": "ipv6",
|
||||||
|
"rdns": null,
|
||||||
|
"linode_id": 26838044,
|
||||||
|
"region": "us-east",
|
||||||
|
"public": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"address": "2a01:7e00::f03c:92ff:fe1a:9976",
|
||||||
|
"gateway": "fe80::1",
|
||||||
|
"subnet_mask": "ffff:ffff:ffff:ffff::",
|
||||||
|
"prefix": 64,
|
||||||
|
"type": "ipv6",
|
||||||
|
"rdns": null,
|
||||||
|
"linode_id": 26848419,
|
||||||
|
"region": "eu-west",
|
||||||
|
"public": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
19
discovery/linode/testdata/no_region_filter/v4/networking/ipv6/ranges.json
vendored
Normal file
19
discovery/linode/testdata/no_region_filter/v4/networking/ipv6/ranges.json
vendored
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
{
|
||||||
|
"data": [
|
||||||
|
{
|
||||||
|
"range": "2600:3c03:e000:123::",
|
||||||
|
"prefix": 64,
|
||||||
|
"region": "us-east",
|
||||||
|
"route_target": "2600:3c03::f03c:92ff:fe1a:fb4c"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"range": "2600:3c04:e001:456::",
|
||||||
|
"prefix": 64,
|
||||||
|
"region": "ca-central",
|
||||||
|
"route_target": "2600:3c04::f03c:92ff:fe1a:fb68"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"page": 1,
|
||||||
|
"pages": 1,
|
||||||
|
"results": 2
|
||||||
|
}
|
6
discovery/linode/testdata/us-east/v4/account/events.json
vendored
Normal file
6
discovery/linode/testdata/us-east/v4/account/events.json
vendored
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
{
|
||||||
|
"data": [],
|
||||||
|
"results": 0,
|
||||||
|
"pages": 1,
|
||||||
|
"page": 1
|
||||||
|
}
|
97
discovery/linode/testdata/us-east/v4/linode/instances.json
vendored
Normal file
97
discovery/linode/testdata/us-east/v4/linode/instances.json
vendored
Normal file
|
@ -0,0 +1,97 @@
|
||||||
|
{
|
||||||
|
"data": [
|
||||||
|
{
|
||||||
|
"id": 26838044,
|
||||||
|
"label": "prometheus-linode-sd-exporter-1",
|
||||||
|
"group": "",
|
||||||
|
"status": "running",
|
||||||
|
"created": "2021-05-12T04:23:44",
|
||||||
|
"updated": "2021-05-12T04:23:44",
|
||||||
|
"type": "g6-standard-2",
|
||||||
|
"ipv4": [
|
||||||
|
"45.33.82.151",
|
||||||
|
"96.126.108.16",
|
||||||
|
"192.168.170.51",
|
||||||
|
"192.168.201.25"
|
||||||
|
],
|
||||||
|
"ipv6": "2600:3c03::f03c:92ff:fe1a:1382/128",
|
||||||
|
"image": "linode/arch",
|
||||||
|
"region": "us-east",
|
||||||
|
"specs": {
|
||||||
|
"disk": 81920,
|
||||||
|
"memory": 4096,
|
||||||
|
"vcpus": 2,
|
||||||
|
"gpus": 0,
|
||||||
|
"transfer": 4000
|
||||||
|
},
|
||||||
|
"alerts": {
|
||||||
|
"cpu": 180,
|
||||||
|
"network_in": 10,
|
||||||
|
"network_out": 10,
|
||||||
|
"transfer_quota": 80,
|
||||||
|
"io": 10000
|
||||||
|
},
|
||||||
|
"backups": {
|
||||||
|
"enabled": false,
|
||||||
|
"schedule": {
|
||||||
|
"day": null,
|
||||||
|
"window": null
|
||||||
|
},
|
||||||
|
"last_successful": null
|
||||||
|
},
|
||||||
|
"hypervisor": "kvm",
|
||||||
|
"watchdog_enabled": true,
|
||||||
|
"tags": [
|
||||||
|
"monitoring"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 26837992,
|
||||||
|
"label": "prometheus-linode-sd-exporter-4",
|
||||||
|
"group": "",
|
||||||
|
"status": "running",
|
||||||
|
"created": "2021-05-12T04:22:06",
|
||||||
|
"updated": "2021-05-12T04:22:06",
|
||||||
|
"type": "g6-nanode-1",
|
||||||
|
"ipv4": [
|
||||||
|
"66.228.47.103",
|
||||||
|
"172.104.18.104",
|
||||||
|
"192.168.148.94"
|
||||||
|
],
|
||||||
|
"ipv6": "2600:3c03::f03c:92ff:fe1a:fb4c/128",
|
||||||
|
"image": "linode/ubuntu20.04",
|
||||||
|
"region": "us-east",
|
||||||
|
"specs": {
|
||||||
|
"disk": 25600,
|
||||||
|
"memory": 1024,
|
||||||
|
"vcpus": 1,
|
||||||
|
"gpus": 0,
|
||||||
|
"transfer": 1000
|
||||||
|
},
|
||||||
|
"alerts": {
|
||||||
|
"cpu": 90,
|
||||||
|
"network_in": 10,
|
||||||
|
"network_out": 10,
|
||||||
|
"transfer_quota": 80,
|
||||||
|
"io": 10000
|
||||||
|
},
|
||||||
|
"backups": {
|
||||||
|
"enabled": false,
|
||||||
|
"schedule": {
|
||||||
|
"day": null,
|
||||||
|
"window": null
|
||||||
|
},
|
||||||
|
"last_successful": null
|
||||||
|
},
|
||||||
|
"hypervisor": "kvm",
|
||||||
|
"watchdog_enabled": true,
|
||||||
|
"tags": [
|
||||||
|
"monitoring"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"page": 1,
|
||||||
|
"pages": 1,
|
||||||
|
"results": 2
|
||||||
|
}
|
||||||
|
|
106
discovery/linode/testdata/us-east/v4/networking/ips.json
vendored
Normal file
106
discovery/linode/testdata/us-east/v4/networking/ips.json
vendored
Normal file
|
@ -0,0 +1,106 @@
|
||||||
|
{
|
||||||
|
"page": 1,
|
||||||
|
"pages": 1,
|
||||||
|
"results": 9,
|
||||||
|
"data": [
|
||||||
|
{
|
||||||
|
"address": "66.228.47.103",
|
||||||
|
"gateway": "66.228.47.1",
|
||||||
|
"subnet_mask": "255.255.255.0",
|
||||||
|
"prefix": 24,
|
||||||
|
"type": "ipv4",
|
||||||
|
"public": true,
|
||||||
|
"rdns": "li328-103.members.linode.com",
|
||||||
|
"linode_id": 26837992,
|
||||||
|
"region": "us-east"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"address": "172.104.18.104",
|
||||||
|
"gateway": "172.104.18.1",
|
||||||
|
"subnet_mask": "255.255.255.0",
|
||||||
|
"prefix": 24,
|
||||||
|
"type": "ipv4",
|
||||||
|
"public": true,
|
||||||
|
"rdns": "li1832-104.members.linode.com",
|
||||||
|
"linode_id": 26837992,
|
||||||
|
"region": "us-east"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"address": "192.168.148.94",
|
||||||
|
"gateway": null,
|
||||||
|
"subnet_mask": "255.255.128.0",
|
||||||
|
"prefix": 17,
|
||||||
|
"type": "ipv4",
|
||||||
|
"public": false,
|
||||||
|
"rdns": null,
|
||||||
|
"linode_id": 26837992,
|
||||||
|
"region": "us-east"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"address": "192.168.170.51",
|
||||||
|
"gateway": null,
|
||||||
|
"subnet_mask": "255.255.128.0",
|
||||||
|
"prefix": 17,
|
||||||
|
"type": "ipv4",
|
||||||
|
"public": false,
|
||||||
|
"rdns": null,
|
||||||
|
"linode_id": 26838044,
|
||||||
|
"region": "us-east"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"address": "96.126.108.16",
|
||||||
|
"gateway": "96.126.108.1",
|
||||||
|
"subnet_mask": "255.255.255.0",
|
||||||
|
"prefix": 24,
|
||||||
|
"type": "ipv4",
|
||||||
|
"public": true,
|
||||||
|
"rdns": "li365-16.members.linode.com",
|
||||||
|
"linode_id": 26838044,
|
||||||
|
"region": "us-east"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"address": "45.33.82.151",
|
||||||
|
"gateway": "45.33.82.1",
|
||||||
|
"subnet_mask": "255.255.255.0",
|
||||||
|
"prefix": 24,
|
||||||
|
"type": "ipv4",
|
||||||
|
"public": true,
|
||||||
|
"rdns": "li1028-151.members.linode.com",
|
||||||
|
"linode_id": 26838044,
|
||||||
|
"region": "us-east"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"address": "192.168.201.25",
|
||||||
|
"gateway": null,
|
||||||
|
"subnet_mask": "255.255.128.0",
|
||||||
|
"prefix": 17,
|
||||||
|
"type": "ipv4",
|
||||||
|
"public": false,
|
||||||
|
"rdns": null,
|
||||||
|
"linode_id": 26838044,
|
||||||
|
"region": "us-east"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"address": "2600:3c03::f03c:92ff:fe1a:fb4c",
|
||||||
|
"gateway": "fe80::1",
|
||||||
|
"subnet_mask": "ffff:ffff:ffff:ffff::",
|
||||||
|
"prefix": 64,
|
||||||
|
"type": "ipv6",
|
||||||
|
"rdns": null,
|
||||||
|
"linode_id": 26837992,
|
||||||
|
"region": "us-east",
|
||||||
|
"public": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"address": "2600:3c03::f03c:92ff:fe1a:1382",
|
||||||
|
"gateway": "fe80::1",
|
||||||
|
"subnet_mask": "ffff:ffff:ffff:ffff::",
|
||||||
|
"prefix": 64,
|
||||||
|
"type": "ipv6",
|
||||||
|
"rdns": null,
|
||||||
|
"linode_id": 26838044,
|
||||||
|
"region": "us-east",
|
||||||
|
"public": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
13
discovery/linode/testdata/us-east/v4/networking/ipv6/ranges.json
vendored
Normal file
13
discovery/linode/testdata/us-east/v4/networking/ipv6/ranges.json
vendored
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
{
|
||||||
|
"data": [
|
||||||
|
{
|
||||||
|
"range": "2600:3c03:e000:123::",
|
||||||
|
"prefix": 64,
|
||||||
|
"region": "us-east",
|
||||||
|
"route_target": "2600:3c03::f03c:92ff:fe1a:fb4c"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"page": 1,
|
||||||
|
"pages": 1,
|
||||||
|
"results": 1
|
||||||
|
}
|
|
@ -2449,11 +2449,15 @@ The following meta labels are available on targets during [relabeling](#relabel_
|
||||||
* `__meta_linode_private_ipv4`: the private IPv4 of the linode instance
|
* `__meta_linode_private_ipv4`: the private IPv4 of the linode instance
|
||||||
* `__meta_linode_public_ipv4`: the public IPv4 of the linode instance
|
* `__meta_linode_public_ipv4`: the public IPv4 of the linode instance
|
||||||
* `__meta_linode_public_ipv6`: the public IPv6 of the linode instance
|
* `__meta_linode_public_ipv6`: the public IPv6 of the linode instance
|
||||||
|
* `__meta_linode_private_ipv4_rdns`: the reverse DNS for the first private IPv4 of the linode instance
|
||||||
|
* `__meta_linode_public_ipv4_rdns`: the reverse DNS for the first public IPv4 of the linode instance
|
||||||
|
* `__meta_linode_public_ipv6_rdns`: the reverse DNS for the first public IPv6 of the linode instance
|
||||||
* `__meta_linode_region`: the region of the linode instance
|
* `__meta_linode_region`: the region of the linode instance
|
||||||
* `__meta_linode_type`: the type of the linode instance
|
* `__meta_linode_type`: the type of the linode instance
|
||||||
* `__meta_linode_status`: the status of the linode instance
|
* `__meta_linode_status`: the status of the linode instance
|
||||||
* `__meta_linode_tags`: a list of tags of the linode instance joined by the tag separator
|
* `__meta_linode_tags`: a list of tags of the linode instance joined by the tag separator
|
||||||
* `__meta_linode_group`: the display group a linode instance is a member of
|
* `__meta_linode_group`: the display group a linode instance is a member of
|
||||||
|
* `__meta_linode_gpus`: the number of GPU's of the linode instance
|
||||||
* `__meta_linode_hypervisor`: the virtualization software powering the linode instance
|
* `__meta_linode_hypervisor`: the virtualization software powering the linode instance
|
||||||
* `__meta_linode_backups`: the backup service status of the linode instance
|
* `__meta_linode_backups`: the backup service status of the linode instance
|
||||||
* `__meta_linode_specs_disk_bytes`: the amount of storage space the linode instance has access to
|
* `__meta_linode_specs_disk_bytes`: the amount of storage space the linode instance has access to
|
||||||
|
@ -2461,6 +2465,7 @@ The following meta labels are available on targets during [relabeling](#relabel_
|
||||||
* `__meta_linode_specs_vcpus`: the number of VCPUS this linode has access to
|
* `__meta_linode_specs_vcpus`: the number of VCPUS this linode has access to
|
||||||
* `__meta_linode_specs_transfer_bytes`: the amount of network transfer the linode instance is allotted each month
|
* `__meta_linode_specs_transfer_bytes`: the amount of network transfer the linode instance is allotted each month
|
||||||
* `__meta_linode_extra_ips`: a list of all extra IPv4 addresses assigned to the linode instance joined by the tag separator
|
* `__meta_linode_extra_ips`: a list of all extra IPv4 addresses assigned to the linode instance joined by the tag separator
|
||||||
|
* `__meta_linode_ipv6_ranges`: a list of IPv6 ranges with mask assigned to the linode instance joined by the tag separator
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
# Authentication information used to authenticate to the API server.
|
# Authentication information used to authenticate to the API server.
|
||||||
|
@ -2491,6 +2496,9 @@ authorization:
|
||||||
oauth2:
|
oauth2:
|
||||||
[ <oauth2> ]
|
[ <oauth2> ]
|
||||||
|
|
||||||
|
# Optional region to filter on.
|
||||||
|
[ region: <string> ]
|
||||||
|
|
||||||
# Optional proxy URL.
|
# Optional proxy URL.
|
||||||
[ proxy_url: <string> ]
|
[ proxy_url: <string> ]
|
||||||
# Comma-separated string that can contain IPs, CIDR notation, domain names
|
# Comma-separated string that can contain IPs, CIDR notation, domain names
|
||||||
|
|
|
@ -12,6 +12,7 @@ scrape_configs:
|
||||||
linode_sd_configs:
|
linode_sd_configs:
|
||||||
- authorization:
|
- authorization:
|
||||||
credentials: "<replace with a Personal Access Token with linodes:read_only, ips:read_only, and events:read_only access>"
|
credentials: "<replace with a Personal Access Token with linodes:read_only, ips:read_only, and events:read_only access>"
|
||||||
|
region: "us-east"
|
||||||
relabel_configs:
|
relabel_configs:
|
||||||
# Only scrape targets that have a tag 'monitoring'.
|
# Only scrape targets that have a tag 'monitoring'.
|
||||||
- source_labels: [__meta_linode_tags]
|
- source_labels: [__meta_linode_tags]
|
||||||
|
|
Loading…
Reference in a new issue