diff --git a/grafana/config/alternatives/clean.sls b/grafana/config/alternatives/clean.sls new file mode 100644 index 0000000..af1db49 --- /dev/null +++ b/grafana/config/alternatives/clean.sls @@ -0,0 +1,34 @@ +# -*- coding: utf-8 -*- +# vim: ft=sls + +{#- Get the `tplroot` from `tpldir` #} +{%- set tplroot = tpldir.split('/')[0] %} +{%- from tplroot ~ "/map.jinja" import grafana with context %} +{%- set sls_archive_clean = tplroot ~ '.archive.clean' %} +{%- set sls_package_clean = tplroot ~ '.package.clean' %} + + {%- if grains.kernel|lower == 'linux' and grafana.linux.altpriority|int > 0 %} + +include: + - {{ sls_archive_clean if grafana.pkg.use_upstream_archive else sls_package_clean }} + +grafana-package-archive-remove-home-alternative-remove: + alternatives.remove: + - name: grafana-home + - path: {{ grafana.base_dir }} + - onlyif: update-alternatives --get-selections |grep ^grafana-home + - require: + - sls: {{ sls_archive_clean if grafana.pkg.use_upstream_archive else sls_package_clean }} + + {% for i in ['grafana',] %} + +grafana-package-archive-remove-{{ i }}-alternative-remove: + alternatives.remove: + - name: link-{{ i }} + - path: {{ grafana.base_dir }}/{{ i }} + - onlyif: update-alternatives --get-selections |grep ^link-{{ i }} + - require: + - sls: {{ sls_archive_clean if grafana.pkg.use_upstream_archive else sls_package_clean }} + + {% endfor %} + {%- endif %} diff --git a/grafana/config/alternatives/init.sls b/grafana/config/alternatives/init.sls new file mode 100644 index 0000000..d3e5518 --- /dev/null +++ b/grafana/config/alternatives/init.sls @@ -0,0 +1,5 @@ +# -*- coding: utf-8 -*- +# vim: ft=sls + +include: + - .install diff --git a/grafana/config/alternatives/install.sls b/grafana/config/alternatives/install.sls new file mode 100644 index 0000000..60a4f90 --- /dev/null +++ b/grafana/config/alternatives/install.sls @@ -0,0 +1,71 @@ +# -*- coding: utf-8 -*- +# vim: ft=sls + +{#- Get the `tplroot` from `tpldir` #} +{%- set tplroot = tpldir.split('/')[0] %} +{%- from tplroot ~ "/map.jinja" import grafana with context %} +{%- set sls_archive_install = tplroot ~ '.archive.install' %} +{%- set sls_package_install = tplroot ~ '.package.clean' %} +{%- from tplroot ~ "/libtofs.jinja" import files_switch with context %} + + {%- if grains.kernel|lower == 'linux' and grafana.linux.altpriority|int > 0 %} + +include: + - {{ sls_archive_install if grafana.pkg.use_upstream_archive else sls_package_install }} + +grafana-package-archive-install-home-alternative-install: + cmd.run: + - name: update-alternatives --install {{ grafana.dir }} grafana-home {{ grafana.base_dir }} {{grafana.linux.altpriority}} + - watch: + - archive: grafana-package-archive-install-archive-extracted + - require: + - {{ sls_archive_install if grafana.pkg.use_upstream_archive else sls_package_install }} + - onlyif: {{ grains.os_family in ('Suse',) }} + alternatives.install: + - name: grafana-home + - link: {{ grafana.dir }} + - path: {{ grafana.base_dir }} + - priority: {{ grafana.linux.altpriority }} + - order: 10 + - watch: + - archive: grafana-package-archive-install-archive-extracted + - unless: {{ grains.os_family in ('Suse',) }} + - require: + - {{ sls_archive_install if grafana.pkg.use_upstream_archive else sls_package_install }} + +grafana-package-archive-install-home-alternative-set: + alternatives.set: + - name: grafana-home + - path: {{ grafana.base_dir }} + - require: + - alternatives: grafana-package-archive-install-home-alternative-install + - unless: {{ grains.os_family in ('Suse',) }} + + {% for i in ['grafana',] %} + +grafana-package-archive-install-{{ i }}-alternative-install: + cmd.run: + - name: update-alternatives --install /usr/bin/{{i}} link-{{i}} {{ grafana.base_dir }}/{{i}} {{grafana.linux.altpriority}} + - require: + - cmd: grafana-package-archive-install-home-alternative-install + - onlyif: {{ grains.os_family in ('Suse',) }} + alternatives.install: + - name: link-{{ i }} + - link: /usr/bin/{{ i }} + - path: {{ grafana.base_dir }}/{{ i }} + - priority: {{ grafana.linux.altpriority }} + - order: 10 + - require: + - alternatives: grafana-package-archive-install-home-alternative-install + - unless: {{ grains.os_family in ('Suse',) }} + +grafana-package-archive-install-{{ i }}-alternative-set: + alternatives.set: + - name: link-{{ i }} + - path: {{ grafana.base_dir }}/{{ i }} + - require: + - alternatives: grafana-package-archive-install-{{ i }}-alternative-install + - unless: {{ grains.os_family in ('Suse',) }} + + {% endfor %} + {%- endif %} diff --git a/grafana/config/clean.sls b/grafana/config/clean.sls index b2e9aaa..e881405 100644 --- a/grafana/config/clean.sls +++ b/grafana/config/clean.sls @@ -3,16 +3,27 @@ {#- Get the `tplroot` from `tpldir` #} {%- set tplroot = tpldir.split('/')[0] %} -{%- set sls_service_clean = tplroot ~ '.service.clean' %} {%- from tplroot ~ "/map.jinja" import grafana with context %} +{%- set sls_archive_clean = tplroot ~ '.archive.clean' %} +{%- set sls_package_clean = tplroot ~ '.package.clean' %} +{%- set sls_service_clean = tplroot ~ '.service.clean' %} +{%- set sls_alternatives_clean = tplroot ~ '.config.alternatives.clean' %} + + {%- if grains.kernel|lower == 'linux' and grafana.linux.altpriority|int > 0 %} include: - {{ sls_service_clean }} + - {{ sls_archive_clean if grafana.pkg.use_upstream_archive else sls_package_clean }} + - {{ sls_alternatives_clean }} grafana-config-clean-file-absent: file.absent: - names: - - {{ grafana.config_file }} - - {{ grafana.environ_file }} + - {{ grafana.config_file }} + - {{ grafana.environ_file }} - require: - - sls: {{ sls_service_clean }} + - sls: {{ sls_archive_clean if grafana.pkg.use_upstream_archive else sls_package_clean }} + - sls: {{ sls_alternatives_clean }} + + {%- endif %} +~ diff --git a/grafana/config/environ.sls b/grafana/config/environ.sls index 93560e8..60c2faa 100644 --- a/grafana/config/environ.sls +++ b/grafana/config/environ.sls @@ -3,15 +3,13 @@ {#- Get the `tplroot` from `tpldir` #} {%- set tplroot = tpldir.split('/')[0] %} +{%- set sls_archive_install = tplroot ~ '.archive.install' %} +{%- set sls_package_install = tplroot ~ '.package.install' %} {%- from tplroot ~ "/map.jinja" import grafana with context %} {%- from tplroot ~ "/libtofs.jinja" import files_switch with context %} -{%- if 'environ' in grafana and grafana.environ %} - {%- if grafana.pkg.use_upstream_archive %} - {%- set sls_package_install = tplroot ~ '.archive.install' %} - include: - - {{ sls_package_install }} + - {{ sls_archive_install if grafana.pkg.use_upstream_archive else sls_package_install }} grafana-config-file-file-managed-environ_file: file.managed: @@ -28,7 +26,4 @@ grafana-config-file-file-managed-environ_file: - context: config: {{ grafana.environ|json }} - require: - - sls: {{ sls_package_install }} - - {%- endif %} -{%- endif %} + - sls: {{ sls_archive_install if grafana.pkg.use_upstream_archive else sls_package_install }} diff --git a/grafana/config/init.sls b/grafana/config/init.sls index 71fe77c..008eaa5 100644 --- a/grafana/config/init.sls +++ b/grafana/config/init.sls @@ -4,3 +4,4 @@ include: - .file - .environ + - .alternatives diff --git a/grafana/defaults.yaml b/grafana/defaults.yaml index 579e986..88ebbcf 100644 --- a/grafana/defaults.yaml +++ b/grafana/defaults.yaml @@ -2,23 +2,26 @@ # vim: ft=yaml --- grafana: + version: '6.2.2' pkg: name: grafana binary: grafana use_upstream_archive: False archive: name: /opt - source: https://dl.grafana.com/oss/release/grafana-6.2.2.linux-amd64.tar.gz - source_hash: bf2a1ffab417e54a1c31e421077b9c5278e423d5fa9b7b98d418c4f85602838b - trim_output: True + uri: https://dl.grafana.com/oss/release + source: None + source_hash: None + trim_output: True {# works in 2018.3.2. onwards #} + archive_suffix: tar.gz + archive_format: tar enforce_toplevel: True pkgrepo: {} group: grafana config_file: /etc/grafana/grafana.ini config: {} environ_file: /etc/default/grafana.sh - environ: - - 'export PATH=${PATH}:/opt/grafana-6.2.2.linux-amd64' + environ: [] service: name: grafana-server user: grafana diff --git a/grafana/map.jinja b/grafana/map.jinja index 526cda1..8b51855 100644 --- a/grafana/map.jinja +++ b/grafana/map.jinja @@ -23,6 +23,20 @@ {#- Merge the grafana pillar #} {%- set grafana = salt['pillar.get']('grafana', default=defaults, merge=True) %} +{#- archive jinja #} +{%- if grafana.pkg.use_upstream_archive %} + {%- set name = 'grafana-%s.%s-%s'|format(grafana.version, grafana.kernel, grafana.arch) %} + {%- set uri = grafana.pkg.archive.uri + '/' + name %} + {%- do grafana.pkg.archive.update({ + 'name': grafana.pkg.archive.name + '/' + name, + 'source': uri + '.' + grafana.pkg.archive.archive_suffix, + 'source_hash': uri + '.' + grafana.pkg.archive.archive_suffix + '.sha256', + 'archive_format': grafana.pkg.archive.archive_format + }) %} + {%- do grafana.update({'base_dir': grafana.pkg.archive.name}) %} + {%- do grafana.environ.append('export PATH=${PATH}:' + grafana.pkg.archive.name) %} +{%- endif %} + {#- Contactenate arguments #} {%- macro concat_args(args) %} {%- set args = args|dictsort %} diff --git a/grafana/osfamilymap.yaml b/grafana/osfamilymap.yaml index 1aa2631..e9b3ad6 100644 --- a/grafana/osfamilymap.yaml +++ b/grafana/osfamilymap.yaml @@ -53,17 +53,10 @@ Windows: pkg: archive: name: C:\\Program Files - source: https://dl.grafana.com/oss/release/grafana-6.2.2.windows-amd64.zip - source_hash: c44ae0019834a73860ba9804965b79235be9284017d716823c316ac6b24abc4f + archive_suffix: zip + archive_format: zip MacOS: group: {{ macos_group | d('') }} service: group: {{ macos_group | d('') }} - environ: - - 'export PATH=${PATH}:/opt/grafana-6.2.2.darwin-amd64' - pkg: - archive: - name: /opt - source: https://dl.grafana.com/oss/release/grafana-6.2.2.darwin-amd64.tar.gz - source_hash: 3c3d599ba8be48d22eee71f1854d185d7613b9439c0c655a1eb33e1e13474c50 diff --git a/pillar.example b/pillar.example index b9565a6..c6f583b 100644 --- a/pillar.example +++ b/pillar.example @@ -4,6 +4,10 @@ grafana: pkg: name: grafana + use_upstream_archive: False + archive: + uri: https://dl.grafana.com/oss/release + pkgrepo: humanname: grafana_official name: deb https://packages.grafana.com/oss/deb stable main @@ -14,6 +18,10 @@ grafana: service: name: grafana-server + linux: + #'Alternatives system' priority: zero disables (default) + altpriority: 1000 + tofs: # The files_switch key serves as a selector for alternative # directories under the formula files directory. See TOFS pattern