From d43033a0fd70dca686083c101e0caa66faeae438 Mon Sep 17 00:00:00 2001 From: N Date: Wed, 19 Jun 2019 00:23:45 +0100 Subject: [PATCH] feat(archives): user managementX --- prometheus/archive/alternatives/clean.sls | 15 ++--- prometheus/archive/alternatives/init.sls | 9 --- prometheus/archive/alternatives/install.sls | 25 ++++---- prometheus/archive/clean.sls | 29 +++++++-- prometheus/archive/defaults.yaml | 26 +++++++- prometheus/archive/install.sls | 71 ++++++++++++++++----- prometheus/config/clean.sls | 3 - prometheus/config/init.sls | 5 -- prometheus/defaults.yaml | 14 +--- prometheus/files/default/systemd.ini.jinja | 18 ++++++ prometheus/map.jinja | 4 -- prometheus/systemd.sls | 0 12 files changed, 144 insertions(+), 75 deletions(-) create mode 100644 prometheus/files/default/systemd.ini.jinja create mode 100644 prometheus/systemd.sls diff --git a/prometheus/archive/alternatives/clean.sls b/prometheus/archive/alternatives/clean.sls index c5c78c7..243a3e7 100644 --- a/prometheus/archive/alternatives/clean.sls +++ b/prometheus/archive/alternatives/clean.sls @@ -6,14 +6,13 @@ {%- from tplroot ~ "/map.jinja" import prometheus as p with context %} {%- set sls_archive_clean = tplroot ~ '.archive.clean' %} - {%- if grains.kernel|lower == 'linux' and p.linux.altpriority|int > 0 %} + {%- if grains.kernel|lower == 'linux' and p.linux.altpriority|int > 0 %} include: - {{ sls_archive_clean }} - - {%- for k in p.archive.wanted %} - {%- set dir = p.archive.dir + '/' + k + '-%s.%s-%s'|format(p.archive.version["k"], p.kernel, p.arch) %} + {%- for k in p.archive.wanted %} + {%- set dir = p.archive.dir.opt + '/' + k + '-%s.%s-%s'|format(p.archive.versions[k], p.kernel, p.arch) %} prometheus-archive-remove-{{ k }}-home-alternatives-remove: alternatives.remove: @@ -23,9 +22,7 @@ prometheus-archive-remove-{{ k }}-home-alternatives-remove: - require: - sls: {{ sls_archive_clean }} - - {% for i in p.archive.binaries['k'] %} - + {% for i in p.archive.binaries[k] %} prometheus-archive-remove-{{ k }}-alternatives-remove-{{ i }}: alternatives.remove: - name: prometheus-{{ k }}-{{ i }} @@ -33,7 +30,7 @@ prometheus-archive-remove-{{ k }}-alternatives-remove-{{ i }}: - onlyif: update-alternatives --get-selections |grep ^prometheus-{{ k }}-{{ i }} - require: - sls: {{ sls_archive_clean }} + {% endfor %} {% endfor %} - {% endfor %} - {%- endif %} + {%- endif %} diff --git a/prometheus/archive/alternatives/init.sls b/prometheus/archive/alternatives/init.sls index 56c18a9..d3e5518 100644 --- a/prometheus/archive/alternatives/init.sls +++ b/prometheus/archive/alternatives/init.sls @@ -1,14 +1,5 @@ # -*- coding: utf-8 -*- # vim: ft=sls -{#- Get the `tplroot` from `tpldir` #} -{%- set tplroot = tpldir.split('/')[0] %} -{%- from tplroot ~ "/map.jinja" import prometheus with context %} -{%- from tplroot ~ "/jinja/macros.jinja" import format_kwargs with context %} - - {%- if grains.kernel|lower == 'linux' and prometheus.pkg.use_upstream_archive %} - include: - .install - - {%- endif %} diff --git a/prometheus/archive/alternatives/install.sls b/prometheus/archive/alternatives/install.sls index 749a4db..191ae23 100644 --- a/prometheus/archive/alternatives/install.sls +++ b/prometheus/archive/alternatives/install.sls @@ -7,16 +7,15 @@ {%- from tplroot ~ "/libtofs.jinja" import files_switch with context %} {%- set sls_archive_install = tplroot ~ '.archive.install' %} - {%- if grains.kernel|lower in ('linux',) and p.linux.altpriority|int > 0 %} + {%- if grains.kernel|lower in ('linux',) and p.linux.altpriority|int > 0 %} include: - {{ sls_archive_install }} + {%- for k in p.archive.wanted %} + {%- set dir = p.archive.dir.opt + '/' + k + '-%s.%s-%s'|format(p.archive.versions[k], p.kernel, p.arch) %} - {%- for k in p.archive.wanted %} - {%- set dir = p.archive.dir + '/' + k + '-%s.%s-%s'|format(p.archive.version["k"], p.kernel, p.arch) %} - -prometheus-archive-alternatives-install-{{ k }}-home-alternatives-install: +prometheus-archive-alternatives-install-{{ k }}-home-cmd-run: cmd.run: - onlyif: {{ grains.os_family in ('Suse',) }} - name: update-alternatives --install {{ dir }} prometheus-{{ k }}-home {{ dir }} {{p.linux.altpriority}} @@ -24,9 +23,11 @@ prometheus-archive-alternatives-install-{{ k }}-home-alternatives-install: - archive: prometheus-archive-install-{{ k }}-archive-extracted - require: - sls: {{ sls_archive_install }} + +prometheus-archive-alternatives-install-{{ k }}-home-alternatives-install: alternatives.install: - name: prometheus-{{ k }}-home - - link: {{ p.dir }} + - link: {{ p.archive.dir.opt }}/{{ k }} - path: {{ dir }} - priority: {{ p.linux.altpriority }} - order: 10 @@ -41,17 +42,19 @@ prometheus-archive-alternatives-install-{{ k }}-home-alternatives-set: - name: prometheus-{{ k }}-home - path: {{ dir }} - require: + - cmd: prometheus-archive-alternatives-install-{{ k }}-home-cmd-run - alternatives: prometheus-archive-alternatives-install-{{ k }}-home-alternatives-install - onlyif: {{ grains.os_family not in ('Suse',) }} - {% for i in p.archive.binaries['k'] %} + + {% for i in p.archive.binaries[k] %} prometheus-archive-alternatives-install-{{ k }}-alternatives-install-{{ i }}: cmd.run: - onlyif: {{ grains.os_family in ('Suse',) }} - name: update-alternatives --install /usr/bin/{{i}} prometheus-{{ k }}-{{i}} {{ dir }}/{{i}} {{p.linux.altpriority}} - require: - - cmd: prometheus-archive-alternatives-install-{{ k }}-home-alternatives-install + - cmd: prometheus-archive-alternatives-install-{{ k }}-home-cmd-run alternatives.install: - name: prometheus-{{ k }}-{{ i }} - link: /usr/bin/{{ i }} @@ -69,7 +72,7 @@ prometheus-archive-alternatives-install-{{ k }}-alternatives-set-{{ i }}: - require: - alternatives: prometheus-archive-alternatives-install-{{ k }}-alternatives-install-{{ i }} - onlyif: {{ grains.os_family not in ('Suse',) }} - {% endfor %} - {% endfor %} - {%- endif %} + + {% endfor %} + {%- endif %} diff --git a/prometheus/archive/clean.sls b/prometheus/archive/clean.sls index c91fce5..047e86d 100644 --- a/prometheus/archive/clean.sls +++ b/prometheus/archive/clean.sls @@ -3,21 +3,40 @@ {#- Get the `tplroot` from `tpldir` #} {%- set tplroot = tpldir.split('/')[0] %} -{%- from tplroot ~ "/map.jinja" import prometheus with context %} +{%- from tplroot ~ "/map.jinja" import prometheus as p with context %} {%- set sls_alternatives_clean = tplroot ~ '.archive.alternatives.clean' %} - {%- if prometheus.pkg.use_upstream_archive %} + {%- if p.pkg.use_upstream_archive %} include: - {{ sls_alternatives_clean }} + {%- for k in p.archive.wanted %} + {%- set dir = p.archive.dir.opt + '/' + k + '-%s.%s-%s'|format(p.archive.versions[k], p.kernel, p.arch) %} - {%- for k in prometheus.archive.wanted %} prometheus-archive-clean-{{ k }}-file-absent: file.absent: - - name: {{ prometheus.archive.dir + '/' + k + '-%s.%s-%s'|format(prometheus.archive.versions[k], prometheus.kernel, prometheus.arch) }} + - names: + - {{ dir }} + - {{ p.archive.systemd.dir }}/{{ k }}.service #- require: #- sls: {{ sls_alternatives_clean }} + +prometheus-archive-clean-{{ k }}-user-absent: + user.absent: + - name: {{ k }} + group.absent: + - name: {{ k }} + - require: + - user: prometheus-archive-clean-{{ k }}-user-absent + {%- endfor %} - {%- endif %} +prometheus-archive-clean-file-directory: + file.absent: + - names: + - {{ p.archive.dir.opt }} + - {{ p.archive.dir.etc }} + - {{ p.archive.dir.var }} + + {%- endif %} diff --git a/prometheus/archive/defaults.yaml b/prometheus/archive/defaults.yaml index 716187f..ce02d59 100644 --- a/prometheus/archive/defaults.yaml +++ b/prometheus/archive/defaults.yaml @@ -3,7 +3,14 @@ --- prometheus: archive: - dir: /opt/prometheus + wanted: + - prometheus + - alertmanager + - node_exporter + systemd: + dir: /usr/lib/systemd/system + after: docker.service + wants: network-online.target docker.target uri: https://github.com/prometheus suffix: tar.gz kwargs: @@ -15,6 +22,10 @@ prometheus: until: True interval: 60 splay: 10 + dir: + opt: /opt/prometheus + etc: /etc/prometheus + var: /var/lib/prometheus binaries: prometheus: - prometheus @@ -40,7 +51,6 @@ prometheus: - pushgateway statsd_exporter: - statsd_exporter - versions: prometheus: '2.10.0' alertmanager: '0.17.0' @@ -65,3 +75,15 @@ prometheus: node_exporter: b2503fd932f85f4e5baf161268854bf5d22001869b84f00fd2d1f57b51b72424 pushgateway: 6949866ba9ad0cb88d3faffd4281f17df79281398b4dbd0ec3aab300071681ca statsd_exporter: 4632ad0c5552e271e84c376da3ffe3af8c265ec5c3035334b70e35756aca1906 + configs: + prometheus: {} + alertmanager: {} + blackbox_exporter: {} + consul_exporter: {} + graphite_exporter: {} + haproxy_exporter: {} + memcached_exporter: {} + mysqld_exporter: {} + node_exporter: {} + pushgateway: {} + statsd_exporter: {} diff --git a/prometheus/archive/install.sls b/prometheus/archive/install.sls index d3323a4..b9120e3 100644 --- a/prometheus/archive/install.sls +++ b/prometheus/archive/install.sls @@ -5,35 +5,74 @@ {%- set tplroot = tpldir.split('/')[0] %} {%- from tplroot ~ "/map.jinja" import prometheus as p with context %} {%- from tplroot ~ "/jinja/macros.jinja" import format_kwargs with context %} +{%- from tplroot ~ "/libtofs.jinja" import files_switch with context %} {%- for k in p.archive.wanted %} + {%- set dir = p.archive.dir.opt + '/' + k + '-%s.%s-%s'|format(p.archive.versions[k], p.kernel, p.arch) %} -prometheus-archive-install-{{ k }}-file-directory: - file.directory: - - name: {{ p.archive.dir }} - - user: root - - group: root - - mode: 755 - - makedirs: True +prometheus-archive-install-{{ k }}-user-present: + group.present: + - name: {{ k }} + - require_in: + - user: prometheus-archive-install-{{ k }}-user-present + user.present: + - name: {{ k }} + - shell: /bin/false + - createhome: false + - groups: + - {{ k }} - require_in: - archive: prometheus-archive-install-{{ k }}-archive-extracted - - recurse: - - user - - group - - mode prometheus-archive-install-{{ k }}-archive-extracted: archive.extracted: - - name: {{ p.archive.dir }} + - name: {{ p.archive.dir.opt }} - source: {{ p.archive.uri + '/' + k + '/releases/download/v' + p.archive.versions[k] - + '/' + k + '-%s.%s-%s'|format(p.archive.versions[k], p.kernel, p.arch) - + '.' + p.archive.suffix }} + + '/' + k + '-%s.%s-%s'|format(p.archive.versions[k], p.kernel, p.arch) + + '.' + p.archive.suffix }} - source_hash: {{ p.archive.hashes[k] }} - - user: root - - group: root + - user: {{ k }} + - group: {{ k }} {{- format_kwargs(p.archive.kwargs) }} - recurse: - user - group + - require_in: + - file: prometheus-archive-install-{{ k }}-managed-systemd_file + - file: prometheus-archive-install-file-directory + +prometheus-archive-install-{{ k }}-managed-systemd_file: + file.managed: + - name: {{ p.archive.systemd.dir }}/{{ k }}.service + - source: {{ files_switch(['systemd.ini.jinja'], + lookup='prometheus-archive-install-{{ k }}-managed-systemd_file' + ) + }} + - mode: 644 + - user: root + - group: {{ p.rootgroup }} + - makedirs: True + - template: jinja + - context: + desc: prometheus - {{ k }} serice + name: {{ k }} + user: {{ k }} + group: {{ k }} + start: {{ dir }}/{{ k }} --config.file {{ p.archive.dir.etc }}/{{ k }}/{{ k }}.yml + stop: killall {{ dir }}/{{ k }} + after: {{ p.archive.systemd.after }} + wants: {{ p.archive.systemd.wants }} {%- endfor %} + +prometheus-archive-install-file-directory: + file.directory: + - names: + - {{ p.archive.dir.opt }} + - {{ p.archive.dir.etc }} + - {{ p.archive.dir.var }} + - user: prometheus + - group: prometheus + - mode: 755 + - makedirs: True + ##do not recurse!!! diff --git a/prometheus/config/clean.sls b/prometheus/config/clean.sls index 4294cf2..2be423a 100644 --- a/prometheus/config/clean.sls +++ b/prometheus/config/clean.sls @@ -8,9 +8,6 @@ include: - {{ sls_archive_clean }} - {%- if prometheus.pkg.use_upstream_archive and kernel|lower == 'linux' %} - - .systemd - {%- endif %} prometheus-config-clean-file-absent: file.absent: diff --git a/prometheus/config/init.sls b/prometheus/config/init.sls index e87add3..8875266 100644 --- a/prometheus/config/init.sls +++ b/prometheus/config/init.sls @@ -9,8 +9,3 @@ include: - .args - .file - .environ - {%- if prometheus.pkg.use_upstream_archive and kernel|lower == 'linux' %} - - .systemd - {%- endif %} - - diff --git a/prometheus/defaults.yaml b/prometheus/defaults.yaml index ce2e7d0..ecedd90 100644 --- a/prometheus/defaults.yaml +++ b/prometheus/defaults.yaml @@ -16,19 +16,11 @@ prometheus: name: prometheus user: prometheus group: prometheus + linux: + #'Alternatives system' priority: zero disables (default) + altpriority: 0 exporters: node: pkg: name: prometheus-node-exporter service: prometheus-node-exporter - - linux: - #'Alternatives system' priority: zero disables (default) - altpriority: 0 - - archive: - # see ./archive/default.yaml - wanted: - - prometheus - - alertmanager - - node_exporter diff --git a/prometheus/files/default/systemd.ini.jinja b/prometheus/files/default/systemd.ini.jinja new file mode 100644 index 0000000..02d8105 --- /dev/null +++ b/prometheus/files/default/systemd.ini.jinja @@ -0,0 +1,18 @@ +######################################################### +# File managed by Salt. Changes risk being overwritten. +######################################################### +[Unit] +Description={{ desc }} +Wants={{ wants }} +After={{ after }} +Documentation=https://github.com/saltstack-formulas/prometheus-formula + +[Service] +User={{ user }} +Group={{ group }} +ExecStart={{ start }} +ExecStop={{ stop }} +PIDFile=/var/run/{{ name }}.pid + +[Install] +WantedBy=multi-user.target diff --git a/prometheus/map.jinja b/prometheus/map.jinja index 0113310..fbbf314 100644 --- a/prometheus/map.jinja +++ b/prometheus/map.jinja @@ -9,13 +9,10 @@ {%- import_yaml tplroot ~ "/osmap.yaml" as osmap %} {%- import_yaml tplroot ~ "/osarchmap.yaml" as osarchmap %} {%- import_yaml tplroot ~ "/osfingermap.yaml" as osfingermap %} -{#- focused defaults #} {%- import_yaml tplroot ~ "/archive/defaults.yaml" as archive_defaults %} -{%- import_yaml tplroot ~ "/archive/defaults.yaml" as config_defaults %} {%- set defaults = salt['grains.filter_by'](default_settings, merge=salt['grains.filter_by'](archive_defaults, - merge=salt['grains.filter_by'](config_defaults, merge=salt['grains.filter_by'](osfamilymap, grain='os_family', merge=salt['grains.filter_by'](osmap, grain='os', merge=salt['grains.filter_by'](osfingermap, grain='osfinger', @@ -25,7 +22,6 @@ base='prometheus'), base='prometheus'), base='prometheus'), - base='prometheus'), base='prometheus'), base='prometheus') %} diff --git a/prometheus/systemd.sls b/prometheus/systemd.sls new file mode 100644 index 0000000..e69de29