prometheus-config-builder 0.0.23 → 0.0.24

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: c60c04c326422c8352434d8b77a6c40db28284a1
4
- data.tar.gz: 383f164b44193d4750dd5dff3b9b0b4fcfba7a1d
3
+ metadata.gz: d2392214707785f6cec2a5975bb50bb8e24aba5e
4
+ data.tar.gz: c29b371d512400b7fd46b15380661644086d3240
5
5
  SHA512:
6
- metadata.gz: 368d6192da10887252e7db19edc66b7fa630490e4b541726a6bab39d54b7bf47d62f64c1acf9d8b7e84279f6f2a34b6723d151e9c22a428bbc3829013010ba01
7
- data.tar.gz: 9f2aae757f81094581598c86bc71582ccd669236b7595d4f5982a0ce0b46e773384bcd704b4f0de0f9813b39b96010bbf0f830ffc2cce294eae033aabef660e8
6
+ metadata.gz: 6faeb1c97c1957c54a9c6e7c549d6dd57bc88e4c306c6a750e39f77c2948e7e62672996a6d41343576e2cf4d158954e05ded3f1ac92e51e64c12dd74080613ef
7
+ data.tar.gz: df4322978d2d8bf3bb7563e6f8e9603fe92f771bf31777aa59aa032a0269e173fb6cb9d411ea53328991145b8180f68197398ff6e65fc0c38226cc706a222b8a
@@ -6,6 +6,46 @@ module PrometheusConfigBuilder
6
6
  class ScrapeConfigECS
7
7
  extend PrometheusConfigBuilderLogger
8
8
 
9
+ # Map of different roles to ecs clients. use get_client() to obtain them
10
+ @@ecs = {}
11
+
12
+ def self.get_client(region, assume_role=nil)
13
+
14
+ name = "default"
15
+
16
+ if assume_role == nil
17
+ client = @@ecs[name]
18
+ if client == nil
19
+ client = Aws::ECS::Client.new({
20
+ region: region
21
+ })
22
+ @@ecs[name] = client
23
+ end
24
+ return client
25
+ end
26
+
27
+ role_arn = assume_role["role_arn"]
28
+ if !role_arn
29
+ raise ArgumentError.new("role_arn not found inside assume_role config structure")
30
+ end
31
+ role_session_name = (assume_role["role_session_name"] or "prometheus-scrape-ecs")
32
+
33
+ name = region + "/" + role_arn + "/" + role_session_name
34
+
35
+ logger.info("Using sts:AssumeRole on #{role_arn}")
36
+ role_credentials = Aws::AssumeRoleCredentials.new(
37
+ client: Aws::STS::Client.new({
38
+ region: region
39
+ }),
40
+ role_arn: role_arn,
41
+ role_session_name: role_session_name
42
+ )
43
+
44
+ client = Aws::ECS::Client.new(credentials: role_credentials)
45
+ @@ecs[name] = client
46
+ return client
47
+ end
48
+
9
49
  def self.handle(basename, config, dst_prefix)
10
50
 
11
51
  x = $VERBOSE
@@ -15,15 +55,21 @@ module PrometheusConfigBuilder
15
55
  if !config["region"]
16
56
  logger.warn("File #{basename}: the scrape_configs of type:ecs-tasks doesn't have \"region\" field set. Ignoring!")
17
57
  return nil
58
+ end
59
+
60
+ region = (config["region"] or "us-east-1")
61
+ assume_role = config["assume_role"]
18
62
 
63
+ begin
64
+ client = get_client(region, assume_role)
65
+ rescue ArgumentError => e
66
+ logger.warn("File #{basename}: the scrape_configs of type:ecs-tasks had invalid arguments: #{e}")
67
+ return nil
19
68
  end
20
69
 
21
- @@ecs = Aws::ECS::Client.new({
22
- region:config["region"]
23
- })
24
70
  $VERBOSE = x
25
- tasks = get_tasks(config["cluster"], config["service"])
26
- endpoints = get_task_endpoints(config["cluster"], tasks, config["labels"], config["metrics_port"])
71
+ tasks = get_tasks(client, config["cluster"], config["service"])
72
+ endpoints = get_task_endpoints(client, config["cluster"], tasks, config["labels"], config["metrics_port"])
27
73
 
28
74
  if !config["job_name"]
29
75
  logger.warn("File #{basename}: the scrape_configs of type:ecs-tasks doesn't have \"job_name\" field set. Ignoring!")
@@ -31,8 +77,8 @@ module PrometheusConfigBuilder
31
77
  end
32
78
 
33
79
  file = File.expand_path(dst_prefix + "_" + config["job_name"] + ".json")
34
- File.open(file, "w") do |file|
35
- file.write(endpoints.to_json)
80
+ File.open(file, "w") do |f|
81
+ f.write(endpoints.to_json)
36
82
  end
37
83
 
38
84
  # Make copy of the settings and remove our custom properties from it.
@@ -54,7 +100,7 @@ module PrometheusConfigBuilder
54
100
  return settings
55
101
  end
56
102
 
57
- def self.get_tasks(cluster, service_name)
103
+ def self.get_tasks(client, cluster, service_name)
58
104
  tasks = []
59
105
  last_result = Aws::ECS::Types::ListTasksResponse.new
60
106
  last_result.next_token = nil
@@ -65,7 +111,7 @@ module PrometheusConfigBuilder
65
111
  service_name: service_name,
66
112
  next_token: last_result.next_token
67
113
  }
68
- last_result = @@ecs.list_tasks(options)
114
+ last_result = client.list_tasks(options)
69
115
  if last_result && last_result.task_arns
70
116
  tasks.push(*last_result.task_arns)
71
117
  end
@@ -80,7 +126,7 @@ module PrometheusConfigBuilder
80
126
  return tasks
81
127
  end
82
128
 
83
- def self.get_task_endpoints(cluster, tasks, common_labels, metrics_port)
129
+ def self.get_task_endpoints(client, cluster, tasks, common_labels, metrics_port)
84
130
  endpoints = []
85
131
  if tasks.length == 0
86
132
  return []
@@ -93,7 +139,7 @@ module PrometheusConfigBuilder
93
139
  cluster: cluster,
94
140
  tasks: task_chunk,
95
141
  }
96
- result = @@ecs.describe_tasks(options)
142
+ result = client.describe_tasks(options)
97
143
  if result && result.tasks
98
144
  result.tasks.each do |task|
99
145
  # FIXME: This assumes somewhat on the ip structure.
@@ -126,7 +172,5 @@ module PrometheusConfigBuilder
126
172
  return endpoints
127
173
  end
128
174
 
129
-
130
-
131
175
  end
132
176
  end
@@ -3,7 +3,7 @@
3
3
 
4
4
  Gem::Specification.new do |s|
5
5
  s.name = 'prometheus-config-builder'
6
- s.version = '0.0.23'
6
+ s.version = '0.0.24'
7
7
  s.date = Time.now
8
8
 
9
9
  s.summary = %q{Template based config generation}
@@ -118,4 +118,10 @@ class ConfigDiscoveryTest < Minitest::Test
118
118
 
119
119
  end
120
120
 
121
+ def test_ecs_scraping
122
+ x = PrometheusConfigBuilder::Builder.new("./test/data/prometheus.yaml", "tmp/")
123
+ x.add_path("./test/data/ecs*.yaml")
124
+ x.write_out()
125
+ end
126
+
121
127
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: prometheus-config-builder
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.23
4
+ version: 0.0.24
5
5
  platform: ruby
6
6
  authors:
7
7
  - Juho Mäkinen juho.makinen@gmail.com
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-12-02 00:00:00.000000000 Z
11
+ date: 2020-02-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: aws-sdk