Skip to content

Commit

Permalink
feat(alternatives): add linux alternatives support
Browse files Browse the repository at this point in the history
  • Loading branch information
noelmcloughlin committed Jun 16, 2019
1 parent e7a1523 commit 0b05c5d
Show file tree
Hide file tree
Showing 10 changed files with 162 additions and 27 deletions.
34 changes: 34 additions & 0 deletions grafana/config/alternatives/clean.sls
Original file line number Diff line number Diff line change
@@ -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 %}
5 changes: 5 additions & 0 deletions grafana/config/alternatives/init.sls
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
# -*- coding: utf-8 -*-
# vim: ft=sls

include:
- .install
71 changes: 71 additions & 0 deletions grafana/config/alternatives/install.sls
Original file line number Diff line number Diff line change
@@ -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 %}
19 changes: 15 additions & 4 deletions grafana/config/clean.sls
Original file line number Diff line number Diff line change
Expand Up @@ -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 %}
~
13 changes: 4 additions & 9 deletions grafana/config/environ.sls
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand All @@ -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 }}
1 change: 1 addition & 0 deletions grafana/config/init.sls
Original file line number Diff line number Diff line change
Expand Up @@ -4,3 +4,4 @@
include:
- .file
- .environ
- .alternatives
13 changes: 8 additions & 5 deletions grafana/defaults.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
14 changes: 14 additions & 0 deletions grafana/map.jinja
Original file line number Diff line number Diff line change
Expand Up @@ -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 %}
Expand Down
11 changes: 2 additions & 9 deletions grafana/osfamilymap.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -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
8 changes: 8 additions & 0 deletions pillar.example
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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
Expand Down

0 comments on commit 0b05c5d

Please sign in to comment.