Browse Source

Add docker swarm test

Signed-off-by: Julien Pivotto <roidelapluie@inuits.eu>
pull/7635/head
Julien Pivotto 4 years ago
parent
commit
a197508d09
  1. 22
      config/config_test.go
  2. 5
      config/testdata/conf.good.yml
  3. 19
      discovery/dockerswarm/dockerswarm.go

22
config/config_test.go

@ -31,6 +31,7 @@ import (
sd_config "github.com/prometheus/prometheus/discovery/config"
"github.com/prometheus/prometheus/discovery/consul"
"github.com/prometheus/prometheus/discovery/dns"
"github.com/prometheus/prometheus/discovery/dockerswarm"
"github.com/prometheus/prometheus/discovery/ec2"
"github.com/prometheus/prometheus/discovery/file"
"github.com/prometheus/prometheus/discovery/kubernetes"
@ -605,6 +606,27 @@ var expectedConf = &Config{
},
},
},
{
JobName: "dockerswarm",
HonorTimestamps: true,
ScrapeInterval: model.Duration(15 * time.Second),
ScrapeTimeout: DefaultGlobalConfig.ScrapeTimeout,
MetricsPath: DefaultScrapeConfig.MetricsPath,
Scheme: DefaultScrapeConfig.Scheme,
ServiceDiscoveryConfig: sd_config.ServiceDiscoveryConfig{
DockerSwarmSDConfigs: []*dockerswarm.SDConfig{
{
Host: "http://127.0.0.1:2375",
Role: "nodes",
Port: 80,
RefreshInterval: model.Duration(60 * time.Second),
},
},
},
},
{
JobName: "service-openstack",

5
config/testdata/conf.good.yml vendored

@ -259,6 +259,11 @@ scrape_configs:
cert_file: valid_cert_file
key_file: valid_key_file
- job_name: dockerswarm
dockerswarm_sd_configs:
- host: http://127.0.0.1:2375
role: nodes
- job_name: service-openstack
openstack_sd_configs:
- role: instance

19
discovery/dockerswarm/dockerswarm.go

@ -44,7 +44,6 @@ type SDConfig struct {
HTTPClientConfig config_util.HTTPClientConfig `yaml:",inline"`
Host string `yaml:"host"`
url *url.URL
Role string `yaml:"role"`
Port int `yaml:"port"`
@ -62,11 +61,9 @@ func (c *SDConfig) UnmarshalYAML(unmarshal func(interface{}) error) error {
if c.Host == "" {
return fmt.Errorf("host missing")
}
url, err := url.Parse(c.Host)
if err != nil {
if _, err = url.Parse(c.Host); err != nil {
return err
}
c.url = url
switch c.Role {
case "services", "nodes", "tasks":
case "":
@ -89,17 +86,15 @@ type Discovery struct {
// NewDiscovery returns a new Discovery which periodically refreshes its targets.
func NewDiscovery(conf *SDConfig, logger log.Logger) (*Discovery, error) {
var err error
d := &Discovery{
port: conf.Port,
role: conf.Role,
}
// This is used in tests. In normal situations, it is set when Unmarshaling.
if conf.url == nil {
conf.url, err = url.Parse(conf.Host)
if err != nil {
return nil, err
}
hostURL, err := url.Parse(conf.Host)
if err != nil {
return nil, err
}
opts := []client.Opt{
@ -110,7 +105,7 @@ func NewDiscovery(conf *SDConfig, logger log.Logger) (*Discovery, error) {
// There are other protocols than HTTP supported by the Docker daemon, like
// unix, which are not supported by the HTTP client. Passing HTTP client
// options to the Docker client makes those non-HTTP requests fail.
if conf.url.Scheme == "http" || conf.url.Scheme == "https" {
if hostURL.Scheme == "http" || hostURL.Scheme == "https" {
rt, err := config_util.NewRoundTripperFromConfig(conf.HTTPClientConfig, "dockerswarm_sd", false)
if err != nil {
return nil, err
@ -120,7 +115,7 @@ func NewDiscovery(conf *SDConfig, logger log.Logger) (*Discovery, error) {
Transport: rt,
Timeout: time.Duration(conf.RefreshInterval),
}),
client.WithScheme(conf.url.Scheme),
client.WithScheme(hostURL.Scheme),
)
}

Loading…
Cancel
Save