From 890bfc15e39490f4d953eb05bfec497a1152ea66 Mon Sep 17 00:00:00 2001 From: Nicolas Rodriguez Date: Mon, 24 Aug 2020 17:12:05 +0200 Subject: [PATCH 01/10] fix(test): test Salt 3001 with Debian 9 and 10 --- .travis.yml | 2 ++ kitchen.yml | 8 ++++++++ 2 files changed, 10 insertions(+) diff --git a/.travis.yml b/.travis.yml index e08a807..91cebf8 100644 --- a/.travis.yml +++ b/.travis.yml @@ -91,6 +91,8 @@ jobs: # - env: INSTANCE=default-fedora-31-3000-3-py3 - env: INSTANCE=default-opensuse-leap-152-3000-3-py3 - env: INSTANCE=default-amazonlinux-2-3000-3-py3 + - env: INSTANCE=default-debian-10-3001-py3 + - env: INSTANCE=default-debian-9-3001-py3 # - env: INSTANCE=default-ubuntu-1804-3000-3-py2 # - env: INSTANCE=default-ubuntu-1604-3000-3-py2 # - env: INSTANCE=default-arch-base-latest-3000-3-py2 diff --git a/kitchen.yml b/kitchen.yml index d47979f..c172ce5 100644 --- a/kitchen.yml +++ b/kitchen.yml @@ -42,6 +42,14 @@ platforms: driver: image: saltimages/salt-master-py3:amazonlinux-2 + ## SALT `3001` + - name: debian-10-3001-py3 + driver: + image: saltimages/salt-3001-py3:debian-10 + - name: debian-9-3001-py3 + driver: + image: saltimages/salt-3001-py3:debian-9 + ## SALT `3000.3` - name: debian-10-3000-3-py3 driver: From 4e8c69f72bb16d9da5031428dfab67d173e6913e Mon Sep 17 00:00:00 2001 From: Nicolas Rodriguez Date: Mon, 24 Aug 2020 17:13:03 +0200 Subject: [PATCH 02/10] fix(test): add tests on node_exporter service --- test/integration/default/controls/service_spec.rb | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 test/integration/default/controls/service_spec.rb diff --git a/test/integration/default/controls/service_spec.rb b/test/integration/default/controls/service_spec.rb new file mode 100644 index 0000000..42bd360 --- /dev/null +++ b/test/integration/default/controls/service_spec.rb @@ -0,0 +1,15 @@ +# frozen_string_literal: true + +control 'prometheus services' do + title 'should be running' + + describe service('node_exporter') do + it { should be_enabled } + it { should be_running } + end + + # node_exporter port + describe port(9100) do + it { should be_listening } + end +end From 6010cc32b8dba5b5b754fce99567da292370eb6f Mon Sep 17 00:00:00 2001 From: Nicolas Rodriguez Date: Mon, 24 Aug 2020 17:37:06 +0200 Subject: [PATCH 03/10] fix(test): add tests on prometheus-node-exporter --- test/integration/repo/controls/service_spec.rb | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 test/integration/repo/controls/service_spec.rb diff --git a/test/integration/repo/controls/service_spec.rb b/test/integration/repo/controls/service_spec.rb new file mode 100644 index 0000000..2e4803a --- /dev/null +++ b/test/integration/repo/controls/service_spec.rb @@ -0,0 +1,15 @@ +# frozen_string_literal: true + +control 'prometheus services' do + title 'should be running' + + describe service('prometheus-node-exporter') do + it { should be_enabled } + it { should be_running } + end + + # prometheus-node-exporter port + describe port(9100) do + it { should be_listening } + end +end From 461ce4ffcd6cd02e0b359cba8d7255d0ff0dc775 Mon Sep 17 00:00:00 2001 From: Nicolas Rodriguez Date: Mon, 24 Aug 2020 17:34:56 +0200 Subject: [PATCH 04/10] style(test): improve Ruby style --- .../repo/controls/packages_spec.rb | 31 ++++++++++--------- 1 file changed, 16 insertions(+), 15 deletions(-) diff --git a/test/integration/repo/controls/packages_spec.rb b/test/integration/repo/controls/packages_spec.rb index 8919c16..1481bb8 100644 --- a/test/integration/repo/controls/packages_spec.rb +++ b/test/integration/repo/controls/packages_spec.rb @@ -1,23 +1,24 @@ # frozen_string_literal: true -case platform[:family] -when 'redhat' - packages = %w[ - prometheus2 - alertmanager - node_exporter - ] -when 'debian' - packages = %w[ - prometheus - prometheus-alertmanager - prometheus-node-exporter - ] -end - control 'prometheus packages' do title 'should be installed' + packages = + case platform[:family] + when 'redhat' + %w[ + prometheus2 + alertmanager + node_exporter + ] + when 'debian' + %w[ + prometheus + prometheus-alertmanager + prometheus-node-exporter + ] + end + packages.each do |p| describe package(p) do it { should be_installed } From deb9cd28a8c8e722954b65c755c7df0c4e8d2d8f Mon Sep 17 00:00:00 2001 From: Nicolas Rodriguez Date: Mon, 24 Aug 2020 17:13:11 +0200 Subject: [PATCH 05/10] fix(service): service is not reloaded because of failing if --- prometheus/service/running.sls | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/prometheus/service/running.sls b/prometheus/service/running.sls index ee3e2d9..f11a35d 100644 --- a/prometheus/service/running.sls +++ b/prometheus/service/running.sls @@ -19,7 +19,7 @@ prometheus-service-running-{{ name }}-unmasked: - name: {{ service_name }} - onlyif: - {{ grains.kernel|lower == 'linux' }} - - systemctl list-units | grep {{ service_name }} >/dev/null 2>&1 + - systemctl list-unit-files | grep {{ service_name }} >/dev/null 2>&1 - require_in: - service: prometheus-service-running-{{ name }} - require: @@ -33,7 +33,7 @@ prometheus-service-running-{{ name }}: - reload_modules: true {%- endif %} service.running: - - onlyif: systemctl list-units | grep {{ service_name }} >/dev/null 2>&1 + - onlyif: systemctl list-unit-files | grep {{ service_name }} >/dev/null 2>&1 - enable: True - require: - sls: {{ sls_config_file }} From 41da7cc697ab97f30ba89514de67bcc26c561593 Mon Sep 17 00:00:00 2001 From: Nicolas Rodriguez Date: Mon, 24 Aug 2020 18:07:51 +0200 Subject: [PATCH 06/10] fix(test): fix alertmanager service name in repo mode test --- test/salt/pillar/repo.sls | 2 ++ 1 file changed, 2 insertions(+) diff --git a/test/salt/pillar/repo.sls b/test/salt/pillar/repo.sls index 46a3170..bd01c6d 100644 --- a/test/salt/pillar/repo.sls +++ b/test/salt/pillar/repo.sls @@ -80,6 +80,8 @@ prometheus: slack_configs: - channel: '#my-channel' image_url: 'http://some.img.com/img.png' + service: + name: prometheus-alertmanager node_exporter: version: v0.18.1 From 0169c89ca44da6d74852bfeeb05e2e9c635cf71a Mon Sep 17 00:00:00 2001 From: Nicolas Rodriguez Date: Mon, 24 Aug 2020 17:33:44 +0200 Subject: [PATCH 07/10] fix(service): pick up the right service name in pillars --- prometheus/service/running.sls | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/prometheus/service/running.sls b/prometheus/service/running.sls index f11a35d..15dc882 100644 --- a/prometheus/service/running.sls +++ b/prometheus/service/running.sls @@ -12,7 +12,7 @@ include: {%- for name in p.wanted.component %} {%- if 'service' in p.pkg.component[name] and p.pkg.component[name]['service'] %} - {%- set service_name = p.pkg.component[name]['service']['get'](name, {}).get('name', name) %} + {%- set service_name = p.pkg.component[name]['service'].get('name', name) %} prometheus-service-running-{{ name }}-unmasked: service.unmasked: From 910a06df5fe1e60dfe8d1c74db7521064ba2fb73 Mon Sep 17 00:00:00 2001 From: Nicolas Rodriguez Date: Mon, 24 Aug 2020 22:48:53 +0200 Subject: [PATCH 08/10] fix(test): fix test pillars --- test/salt/pillar/default.sls | 202 ++++++++++++++++++++++++++++++++++- 1 file changed, 201 insertions(+), 1 deletion(-) mode change 120000 => 100644 test/salt/pillar/default.sls diff --git a/test/salt/pillar/default.sls b/test/salt/pillar/default.sls deleted file mode 120000 index 86f893e..0000000 --- a/test/salt/pillar/default.sls +++ /dev/null @@ -1 +0,0 @@ -../../../pillar.example \ No newline at end of file diff --git a/test/salt/pillar/default.sls b/test/salt/pillar/default.sls new file mode 100644 index 0000000..a05a1ef --- /dev/null +++ b/test/salt/pillar/default.sls @@ -0,0 +1,201 @@ +# -*- coding: utf-8 -*- +# vim: ft=yaml +--- +prometheus: + wanted: + clientlibs: + - golang + - haskell + - rust + component: + # List components (ie, exporters) using underscores and + # removing the 'prometheus' prefix + - prometheus + - alertmanager + - node_exporter + # - memcached_exporter # not in upstream repo, only archive + + exporters: + node_exporter: + textfile_collectors_dependencies: [] + textfile_collectors: + ipmitool: + enable: false + remove: false + pkg: ipmitool + smartmon: + enable: false + remove: false + pkg: smartmontools + bash_pkg: bash + smartctl: /usr/sbin/smartctl + pkg: + use_upstream_repo: false + use_upstream_archive: true + + clientlibs: + # https://prometheus.io/docs/instrumenting/clientlibs + # no bash & perl client tarballs are available + golang: + version: v1.6.0 + component: + # If you use OS packages in Debian's family, components should have + # a 'name' variable stating the name of the package (it's generally + # something like `prometheus-component-with-dashes-replacing-underscores` + # ie, + # node_exporter: + # name: prometheus-node-exporter + # + # See prometheus/osfamilymap.yaml for more examples + alertmanager: + config: + # yamllint disable-line rule:line-length + # ref https://github.com/prometheus/alertmanager/blob/master/config/testdata/conf.good.yml + global: + smtp_smarthost: 'localhost:25' + smtp_from: 'alertmanager@example.org' + smtp_auth_username: 'alertmanager' + smtp_auth_password: "multiline\nmysecret" + smtp_hello: "host.example.org" + slack_api_url: "http://mysecret.example.com/" + http_config: + proxy_url: 'http://127.0.0.1:1025' + route: + group_by: ['alertname', 'cluster', 'service'] + group_wait: 30s + group_interval: 5m + repeat_interval: 3h + receiver: team-X-mails + routes: + - match_re: + service: ^(foo1|foo2|baz)$ + receiver: team-X-mails + routes: + - match: + severity: critical + receiver: team-X-mails + receivers: + - name: 'team-X-mails' + email_configs: + - to: 'team-X+alerts@example.org' + + inhibit_rules: + - name: opsGenie-receiver + opsgenie_configs: + - api_key: mysecret + - name: slack-receiver + slack_configs: + - channel: '#my-channel' + image_url: 'http://some.img.com/img.png' + + node_exporter: + version: v0.18.1 + archive: + source_hash: b2503fd932f85f4e5baf161268854bf5d22001869b84f00fd2d1f57b51b72424 + service: + # name: prometheus-node-exporter + args: + web.listen-address: ":9110" + # collector.textfile.directory: /var/tmp/node_exporter + + prometheus: + service: + args: + web.listen-address: 0.0.0.0:9090 + config: + # yamllint disable-line rule:line-length + # ref https://raw.githubusercontent.com/prometheus/prometheus/release-2.10/config/testdata/conf.good.yml + # my global config + global: + # Set the scrape interval to every 15 seconds. Default is every 1 minute + scrape_interval: 15s + # Evaluate rules every 15 seconds. The default is every 1 minute + evaluation_interval: 15s + # scrape_timeout is set to the global default (10s) + + # Alertmanager configuration + alerting: + alertmanagers: + - static_configs: + - targets: + - alertmanager1:9093 + - alertmanager2:9093 + - alertmanager3:9093 + + # Load rules once and periodically evaluate them according to the global + # 'evaluation_interval' + rule_files: + - "first_rules.yml" + # - "second_rules.yml" + + # A scrape configuration containing exactly one endpoint to scrape: + scrape_configs: + # The job name is added as a label `job=` to any timeseries + # scraped from this config + - job_name: 'prometheus' + # metrics_path defaults to '/metrics' + # scheme defaults to 'http' + static_configs: + - targets: ['localhost:9090'] + + - job_name: pushgateway + scrape_interval: 5s + honor_labels: true + static_configs: + - targets: ['pushgateway:9091'] + + - job_name: 'blackbox' + # https://github.com/prometheus/blackbox_exporter#prometheus-configuration + metrics_path: /probe + params: + module: [http_2xx] # Look for a HTTP 200 response + static_configs: + - targets: + - http://prometheus.io # Target to probe with http + - https://prometheus.io # Target to probe with https + - http://example.com:8080 # Target to probe with http on port 8080 + relabel_configs: + - source_labels: [__address__] + target_label: __param_target + - source_labels: [__param_target] + target_label: instance + - target_label: __address__ + replacement: '127.0.0.1:9115' # real hostname and port + + pushgateway: + version: v0.8.0 + archive: + source_hash: 6949866ba9ad0cb88d3faffd4281f17df79281398b4dbd0ec3aab300071681ca + service: + args: + web.listen-address: ":9091" + web.telemetry-path: "/metrics" + + linux: + # 'Alternatives system' priority: zero disables (default) + # yamllint disable-line rule:braces + altpriority: {{ range(1, 9100000) | random }} + + tofs: + # The files_switch key serves as a selector for alternative + # directories under the formula files directory. See TOFS pattern + # doc for more info + # Note: Any value not evaluated by `config.get` will be used literally + # This can be used to set custom paths, as many levels deep as required + files_switch: + - any/path/can/be/used/here + - id + - osfinger + - os + - os_family + # All aspects of path/file resolution are customisable using the options below + # This is unnecessary in most cases; there are sensible defaults + # path_prefix: prometheus_alt + # dirs: + # files: files_alt + # default: default_alt + source_files: + prometheus-config-file-file-managed: + - 'alt_config.yml.jinja' + prometheus-archive-install-managed-service: + - 'alt_systemd.ini.jinja' From b03a1ccf04c124354f2485167a8e1e905172d780 Mon Sep 17 00:00:00 2001 From: Nicolas Rodriguez Date: Mon, 24 Aug 2020 23:02:21 +0200 Subject: [PATCH 09/10] fix(pillar): fix service name in archive mode --- prometheus/defaults.yaml | 3 --- 1 file changed, 3 deletions(-) diff --git a/prometheus/defaults.yaml b/prometheus/defaults.yaml index 4b47132..eac59f2 100644 --- a/prometheus/defaults.yaml +++ b/prometheus/defaults.yaml @@ -44,7 +44,6 @@ prometheus: environ_file: /etc/default/prometheus-alertmanager.sh environ: {} service: - name: alertmanager args: config.file: /etc/prometheus/alertmanager.yml storage.path: /var/lib/alertmanager @@ -134,7 +133,6 @@ prometheus: config_file: /etc/prometheus/node_exporter.yml config: {} service: - name: prometheus-node-exporter args: collector.textfile.directory: /var/tmp/node_exporter archive: @@ -154,7 +152,6 @@ prometheus: environ_file: /etc/default/prometheus.sh environ: {} service: - name: prometheus args: config.file: /etc/prometheus/prometheus.yml storage.tsdb.path: /var/lib/prometheus/data From 49e6fa5671908bc71377fecfadc3b264603403ef Mon Sep 17 00:00:00 2001 From: Nicolas Rodriguez Date: Mon, 24 Aug 2020 23:33:16 +0200 Subject: [PATCH 10/10] fix(test): fix tests for RedHat OSes in repo mode --- test/integration/repo/controls/service_spec.rb | 10 +++++++++- test/salt/pillar/repo.sls | 7 ++++++- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/test/integration/repo/controls/service_spec.rb b/test/integration/repo/controls/service_spec.rb index 2e4803a..063795a 100644 --- a/test/integration/repo/controls/service_spec.rb +++ b/test/integration/repo/controls/service_spec.rb @@ -3,7 +3,15 @@ control 'prometheus services' do title 'should be running' - describe service('prometheus-node-exporter') do + service = + case platform[:family] + when 'redhat' + 'node_exporter' + else + 'prometheus-node-exporter' + end + + describe service(service) do it { should be_enabled } it { should be_running } end diff --git a/test/salt/pillar/repo.sls b/test/salt/pillar/repo.sls index bd01c6d..284b5cc 100644 --- a/test/salt/pillar/repo.sls +++ b/test/salt/pillar/repo.sls @@ -80,18 +80,23 @@ prometheus: slack_configs: - channel: '#my-channel' image_url: 'http://some.img.com/img.png' + + {% if grains['os_family'] == 'Debian' %} service: name: prometheus-alertmanager + {% endif %} node_exporter: version: v0.18.1 archive: source_hash: b2503fd932f85f4e5baf161268854bf5d22001869b84f00fd2d1f57b51b72424 service: - name: prometheus-node-exporter args: web.listen-address: ":9110" # collector.textfile.directory: /var/tmp/node_exporter + {% if grains['os_family'] == 'Debian' %} + name: prometheus-node-exporter + {% endif %} prometheus: service: