feat(archives): support for archives file format
BREAKING CHANGE: the parameter `pkg` is now a dictionary. References to `prometheus.pkg` should be changed to `prometheus.pkg.name`.
This commit is contained in:
parent
ea84c92767
commit
1f86f4a27c
@ -48,11 +48,21 @@ This installs the prometheus package,
|
||||
manages the prometheus configuration file and then
|
||||
starts the associated prometheus service.
|
||||
|
||||
``prometheus.archive``
|
||||
^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
This state will install the prometheus from archive file only.
|
||||
|
||||
``prometheus.package``
|
||||
^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
This state will install the prometheus package only.
|
||||
|
||||
``prometheus.package.repo``
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
This state will install the prometheus package only.
|
||||
|
||||
``prometheus.config``
|
||||
^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
@ -92,6 +102,16 @@ dependency on ``prometheus.service.clean`` via include list.
|
||||
This state will remove the prometheus package and has a depency on
|
||||
``prometheus.config.clean`` via include list.
|
||||
|
||||
``prometheus.package.archive.clean``
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
This state will uninstall the prometheus archive-extracted directory only.
|
||||
|
||||
``prometheus.package.repo.clean``
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
This state will uninstall the prometheus upstream package repository only.
|
||||
|
||||
``prometheus.exporters``
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
|
@ -2,8 +2,14 @@
|
||||
# vim: ft=yaml
|
||||
---
|
||||
prometheus:
|
||||
pkg: prometheus
|
||||
pkg:
|
||||
name: prometheus
|
||||
archive:
|
||||
source: https://github.com/prometheus/prometheus/releases/download/v2.10.0/prometheus-2.10.0.linux-amd64.tar.gz
|
||||
source_hash: f4233783826f18606b79e5cef0686e4a9c2030146a3c7ce134f0add09f5adcb7
|
||||
enforce_toplevel: False
|
||||
config_file: /etc/prometheus/prometheus.yml
|
||||
environ_file: /etc/default/prometheus.sh
|
||||
service:
|
||||
name: prometheus
|
||||
args:
|
||||
@ -33,6 +39,8 @@ prometheus:
|
||||
# - 'example_alt.tmpl.jinja'
|
||||
|
||||
# Pillar-based config
|
||||
environ:
|
||||
- 'export PATH=${PATH}:/opt/prometheus-2.10.0.linux-amd64'
|
||||
config:
|
||||
# my global config
|
||||
global:
|
||||
|
11
prometheus/archive/clean.sls
Normal file
11
prometheus/archive/clean.sls
Normal file
@ -0,0 +1,11 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# vim: ft=sls
|
||||
|
||||
{#- Get the `tplroot` from `tpldir` #}
|
||||
{%- set tplroot = tpldir.split('/')[0] %}
|
||||
{%- from tplroot ~ "/map.jinja" import prometheus with context %}
|
||||
|
||||
prometheus-cli-package-archive-clean-file-absent:
|
||||
file.absent:
|
||||
- names:
|
||||
- {{ prometheus.base_dir }}
|
5
prometheus/archive/init.sls
Normal file
5
prometheus/archive/init.sls
Normal file
@ -0,0 +1,5 @@
|
||||
#.-*- coding: utf-8 -*-
|
||||
# vim: ft=sls
|
||||
|
||||
include:
|
||||
- .install
|
23
prometheus/archive/install.sls
Normal file
23
prometheus/archive/install.sls
Normal file
@ -0,0 +1,23 @@
|
||||
# -*- 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 %}
|
||||
|
||||
prometheus-package-archive-install-file-directory:
|
||||
file.directory:
|
||||
- name: {{ prometheus.pkg.archive.name }}
|
||||
- makedirs: True
|
||||
- require_in:
|
||||
- archive: prometheus-package-archive-install-archive-extracted
|
||||
|
||||
prometheus-package-archive-install-archive-extracted:
|
||||
archive.extracted:
|
||||
{{- format_kwargs(prometheus.pkg.archive) }}
|
||||
- retry:
|
||||
attempts: 3
|
||||
until: True
|
||||
interval: 60
|
||||
splay: 10
|
@ -4,4 +4,5 @@
|
||||
include:
|
||||
- .service.clean
|
||||
- .config.clean
|
||||
- .archive.clean
|
||||
- .package.clean
|
||||
|
@ -11,7 +11,9 @@ include:
|
||||
|
||||
prometheus-config-clean-file-absent:
|
||||
file.absent:
|
||||
- name: {{ prometheus.config_file }}
|
||||
- names:
|
||||
- {{ prometheus.config_file }}
|
||||
- {{ prometheus.environ_file }}
|
||||
- require:
|
||||
- sls: {{ sls_service_clean }}
|
||||
|
||||
|
28
prometheus/config/environ.sls
Normal file
28
prometheus/config/environ.sls
Normal file
@ -0,0 +1,28 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# vim: ft=sls
|
||||
|
||||
{#- Get the `tplroot` from `tpldir` #}
|
||||
{%- set tplroot = tpldir.split('/')[0] %}
|
||||
{%- from tplroot ~ "/map.jinja" import prometheus with context %}
|
||||
{%- set sls_archive_install = tplroot ~ '.archive.install' %}
|
||||
{%- from tplroot ~ "/libtofs.jinja" import files_switch with context %}
|
||||
|
||||
include:
|
||||
- {{ sls_archive_install }}
|
||||
|
||||
prometheus-config-file-file-managed-environ_file:
|
||||
file.managed:
|
||||
- name: {{ prometheus.environ_file }}
|
||||
- source: {{ files_switch(['prometheus.sh.jinja'],
|
||||
lookup='prometheus-config-file-file-managed-environ_file'
|
||||
)
|
||||
}}
|
||||
- mode: 644
|
||||
- user: root
|
||||
- group: {{ prometheus.rootgroup }}
|
||||
- makedirs: True
|
||||
- template: jinja
|
||||
- context:
|
||||
prometheus: {{ prometheus|json }}
|
||||
- require:
|
||||
- sls: {{ sls_archive_install }}
|
@ -3,18 +3,24 @@
|
||||
|
||||
{#- Get the `tplroot` from `tpldir` #}
|
||||
{%- set tplroot = tpldir.split('/')[0] %}
|
||||
{%- set sls_package_install = tplroot ~ '.package.install' %}
|
||||
{%- from tplroot ~ "/map.jinja" import prometheus with context %}
|
||||
{%- from tplroot ~ "/libtofs.jinja" import files_switch with context %}
|
||||
|
||||
{%- if 'config' in prometheus and prometheus.config %}
|
||||
{%- if prometheus.pkg.use_upstream_archive %}
|
||||
{%- set sls_package_install = tplroot ~ '.archive.install' %}
|
||||
{%- else %}
|
||||
{%- set sls_package_install = tplroot ~ '.package.install' %}
|
||||
{%- endif %}
|
||||
|
||||
include:
|
||||
- {{ sls_package_install }}
|
||||
|
||||
prometheus-config-file-file-managed:
|
||||
prometheus-config-file-file-managed-config_file:
|
||||
file.managed:
|
||||
- name: {{ prometheus.config_file }}
|
||||
- source: {{ files_switch(['prometheus.yml.jinja'],
|
||||
lookup='prometheus-config-file-file-managed'
|
||||
lookup='prometheus-config-file-file-managed-config_file'
|
||||
)
|
||||
}}
|
||||
- mode: 644
|
||||
@ -26,3 +32,5 @@ prometheus-config-file-file-managed:
|
||||
config: {{ prometheus.config|json }}
|
||||
- require:
|
||||
- sls: {{ sls_package_install }}
|
||||
|
||||
{%- endif %}
|
||||
|
@ -4,3 +4,4 @@
|
||||
include:
|
||||
- .args
|
||||
- .file
|
||||
- .environ
|
||||
|
@ -2,15 +2,32 @@
|
||||
# vim: ft=yaml
|
||||
---
|
||||
prometheus:
|
||||
pkg: prometheus
|
||||
version: '2.10.0'
|
||||
pkg:
|
||||
name: prometheus
|
||||
binary: prometheus
|
||||
use_upstream_archive: False
|
||||
archive:
|
||||
name: /opt
|
||||
uri: https://github.com/prometheus/prometheus/releases/download/
|
||||
source: None
|
||||
# linux amd64 source hash
|
||||
source_hash: f4233783826f18606b79e5cef0686e4a9c2030146a3c7ce134f0add09f5adcb7
|
||||
trim_output: True
|
||||
enforce_toplevel: True
|
||||
archive_format: tar.gz
|
||||
rootgroup: root
|
||||
kernel: {{ grains.kernel | lower }}
|
||||
config_file: /etc/prometheus/prometheus.yml
|
||||
config: {}
|
||||
environ_file: /etc/default/prometheus.sh
|
||||
environ: []
|
||||
service:
|
||||
name: prometheus
|
||||
user: prometheus
|
||||
group: prometheus
|
||||
exporters:
|
||||
node:
|
||||
pkg: prometheus-node-exporter
|
||||
pkg:
|
||||
name: prometheus-node-exporter
|
||||
service: prometheus-node-exporter
|
||||
|
@ -12,7 +12,7 @@ prometheus-exporters-node-service-dead:
|
||||
|
||||
prometheus-exporters-node-pkg-removed:
|
||||
pkg.removed:
|
||||
- name: {{ prometheus.exporters.node.pkg }}
|
||||
- name: {{ prometheus.exporters.node.pkg.name }}
|
||||
- require:
|
||||
- service: prometheus-exporters-node-service-dead
|
||||
|
||||
|
@ -8,7 +8,7 @@
|
||||
|
||||
prometheus-exporters-node-pkg-installed:
|
||||
pkg.installed:
|
||||
- name: {{ prometheus.exporters.node.pkg }}
|
||||
- name: {{ prometheus.exporters.node.pkg.name }}
|
||||
|
||||
{%- if 'args' in prometheus.exporters.node %}
|
||||
{%- set args = prometheus.exporters.node.get('args', {}) -%}
|
||||
|
10
prometheus/files/default/prometheus.sh.jinja
Normal file
10
prometheus/files/default/prometheus.sh.jinja
Normal file
@ -0,0 +1,10 @@
|
||||
########################################################################
|
||||
# File managed by Salt at <{{ source }}>.
|
||||
# Your changes may be overwritten.
|
||||
########################################################################
|
||||
|
||||
{%- if prometheus.environ %}
|
||||
{%- for item in prometheus.environ %}
|
||||
{{ item }}
|
||||
{%- endfor %}
|
||||
{%- endif %}
|
@ -1,6 +1,6 @@
|
||||
########################################################################
|
||||
# File managed by Salt at <{{ source }}>.
|
||||
# Your changes will be overwritten.
|
||||
# Your changes may be overwritten.
|
||||
########################################################################
|
||||
|
||||
{{ config|yaml(False) }}
|
||||
|
@ -1,7 +1,11 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# vim: ft=sls
|
||||
|
||||
{#- Get the `tplroot` from `tpldir` #}
|
||||
{%- set tplroot = tpldir.split('/')[0] %}
|
||||
{%- from tplroot ~ "/map.jinja" import prometheus with context %}
|
||||
|
||||
include:
|
||||
- .package
|
||||
- {{ '.archive' if prometheus.pkg.use_upstream_archive else '.package' }}
|
||||
- .config
|
||||
- .service
|
||||
|
12
prometheus/jinja/macros.jinja
Normal file
12
prometheus/jinja/macros.jinja
Normal file
@ -0,0 +1,12 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# vim: ft=jinja
|
||||
#
|
||||
# Collection of common macros
|
||||
|
||||
{%- macro format_kwargs(kwarg) -%}
|
||||
{%- filter indent(4) %}
|
||||
{%- for k, v in kwarg|dictsort() %}
|
||||
- {{ k }}: {{ v }}
|
||||
{%- endfor %}
|
||||
{%- endfilter %}
|
||||
{%- endmacro %}
|
@ -7,6 +7,7 @@
|
||||
{%- import_yaml tplroot ~ "/defaults.yaml" as default_settings %}
|
||||
{%- import_yaml tplroot ~ "/osfamilymap.yaml" as osfamilymap %}
|
||||
{%- import_yaml tplroot ~ "/osmap.yaml" as osmap %}
|
||||
{%- import_yaml tplroot ~ "/osarchmap.yaml" as osarchmap %}
|
||||
{%- import_yaml tplroot ~ "/osfingermap.yaml" as osfingermap %}
|
||||
|
||||
{%- set defaults = salt['grains.filter_by'](default_settings,
|
||||
@ -14,15 +15,29 @@
|
||||
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',
|
||||
merge=salt['grains.filter_by'](osarchmap, grain='osarch',
|
||||
merge=salt['pillar.get']('prometheus:lookup', default={})
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
) %}
|
||||
|
||||
{#- Merge the prometheus pillar #}
|
||||
{%- set prometheus = salt['pillar.get']('prometheus', default=defaults, merge=True) %}
|
||||
|
||||
{#- Update archive details #}
|
||||
{%- if prometheus.pkg.use_upstream_archive %}
|
||||
{%- set name = 'prometheus-%s.%s-%s'|format(prometheus.version, prometheus.kernel, prometheus.arch) %}
|
||||
{%- do prometheus.pkg.archive.update({
|
||||
'source': prometheus.pkg.archive.uri + 'v' + prometheus.version + '/' + name
|
||||
+ '.' + prometheus.pkg.archive.archive_format,
|
||||
'archive_format': prometheus.pkg.archive.archive_format.split('.')[0]
|
||||
}) %}
|
||||
{%- do prometheus.update({'base_dir': prometheus.pkg.archive.name + '/' + name}) %}
|
||||
{%- do prometheus.environ.append('export PATH=${PATH}:' + prometheus.pkg.archive.name + '/' + name) %}
|
||||
{%- endif %}
|
||||
|
||||
{#- Contactenate arguments #}
|
||||
{%- macro concat_args(args) %}
|
||||
{%- set args = args|dictsort %}
|
||||
|
35
prometheus/osarchmap.yaml
Normal file
35
prometheus/osarchmap.yaml
Normal file
@ -0,0 +1,35 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# vim: ft=yaml
|
||||
#
|
||||
# Setup variables using grains['osarch'] based logic.
|
||||
# You just need to add the key:values for an `osarch` that differ
|
||||
# from `defaults.yaml` + `os_family.yaml`.
|
||||
# Only add an `osarch` which is/will be supported by the formula
|
||||
#
|
||||
# If you do not need to provide defaults via the `osarch` grain,
|
||||
# you will need to provide at least an empty dict in this file, e.g.
|
||||
# osarch: {}
|
||||
---
|
||||
amd64:
|
||||
arch: amd64
|
||||
|
||||
x86_64:
|
||||
arch: amd64
|
||||
|
||||
386:
|
||||
arch: 386
|
||||
|
||||
arm64:
|
||||
arch: arm64
|
||||
|
||||
armv6l:
|
||||
arch: armv6l
|
||||
|
||||
armv7l:
|
||||
arch: armv6l
|
||||
|
||||
ppc64le:
|
||||
arch: ppc64le
|
||||
|
||||
s390x:
|
||||
arch: s390x
|
@ -35,7 +35,8 @@ FreeBSD:
|
||||
config_file: /usr/local/etc/prometheus.yml
|
||||
exporters:
|
||||
node:
|
||||
pkg: node_exporter
|
||||
pkg:
|
||||
name: node_exporter
|
||||
service: node_exporter
|
||||
|
||||
OpenBSD:
|
||||
@ -43,7 +44,17 @@ OpenBSD:
|
||||
|
||||
Solaris: {}
|
||||
|
||||
Windows: {}
|
||||
Windows:
|
||||
pkg:
|
||||
archive:
|
||||
name: C:\\Program Files
|
||||
source: https://github.com/prometheus/prometheus/releases/download/v2.10.0/prometheus-2.10.0.windows-amd64.tar.gz
|
||||
source_hash: eb138082a4d5e4d5b1e3ca838fa508f053474d46bca76e87ab0834f0d8b110db
|
||||
|
||||
MacOS:
|
||||
pkg:
|
||||
archive:
|
||||
name: /opt
|
||||
source: https://github.com/prometheus/prometheus/releases/download/v2.10.0/prometheus-2.10.0.darwin-amd64.tar.gz
|
||||
source_hash: 740e36bcacc0c5d4495f5341fcfa8b7e0dc623d12e8b07ac291052ea0a681325
|
||||
rootgroup: {{ macos_group | d('') }}
|
||||
|
@ -11,6 +11,6 @@ include:
|
||||
|
||||
prometheus-package-clean-pkg-removed:
|
||||
pkg.removed:
|
||||
- name: {{ prometheus.pkg }}
|
||||
- name: {{ prometheus.pkg.name }}
|
||||
- require:
|
||||
- sls: {{ sls_config_clean }}
|
||||
|
@ -7,4 +7,4 @@
|
||||
|
||||
prometheus-package-install-pkg-installed:
|
||||
pkg.installed:
|
||||
- name: {{ prometheus.pkg }}
|
||||
- name: {{ prometheus.pkg.name }}
|
||||
|
@ -11,12 +11,20 @@ include:
|
||||
- {{ sls_config_args }}
|
||||
- {{ sls_config_file }}
|
||||
|
||||
prometheus-service-running-service-unmasked:
|
||||
service.unmasked:
|
||||
- name: {{ prometheus.service.name }}
|
||||
- onlyif: systemctl >/dev/null 2>&1
|
||||
|
||||
prometheus-service-running-service-running:
|
||||
service.running:
|
||||
- name: {{ prometheus.service.name }}
|
||||
- enable: True
|
||||
{%- if 'config' in prometheus and prometheus.config %}
|
||||
- watch:
|
||||
- file: prometheus-config-file-file-managed
|
||||
- file: prometheus-config-file-file-managed-config_file
|
||||
- require:
|
||||
- service: prometheus-service-running-service-unmasked
|
||||
- sls: {{ sls_config_args }}
|
||||
- sls: {{ sls_config_file }}
|
||||
{%- endif %}
|
||||
|
Loading…
Reference in New Issue
Block a user