diff --git a/docs/README.rst b/docs/README.rst index 129201b..f62289b 100644 --- a/docs/README.rst +++ b/docs/README.rst @@ -53,6 +53,11 @@ starts the associated grafana service. This state will install the grafana package only. +``grafana.archive`` +^^^^^^^^^^^^^^^^^^^ + +This state will install the grafana software from archive file only. + ``grafana.config`` ^^^^^^^^^^^^^^^^^^^ @@ -91,3 +96,9 @@ dependency on ``grafana.service.clean`` via include list. This state will remove the grafana package and has a depency on ``grafana.config.clean`` via include list. + +``grafana.archive.clean`` +^^^^^^^^^^^^^^^^^^^^^^^^^ + +This state will uninstall grafana software from archive extracted directory. + diff --git a/grafana/archive/clean.sls b/grafana/archive/clean.sls new file mode 100644 index 0000000..630d0ea --- /dev/null +++ b/grafana/archive/clean.sls @@ -0,0 +1,12 @@ +# -*- coding: utf-8 -*- +# vim: ft=sls + +{#- Get the `tplroot` from `tpldir` #} +{%- set tplroot = tpldir.split('/')[0] %} +{%- from tplroot ~ "/map.jinja" import grafana with context %} + +grafana-cli-package-archive-clean-file-absent: + file.absent: + - names: + - {{ grafana.pkg.archive.name }}/grafana-6.2.2.darwin-amd64 + - {{ grafana.pkg.archive.name }}/grafana-6.2.2.linux-amd64 diff --git a/grafana/archive/init.sls b/grafana/archive/init.sls new file mode 100644 index 0000000..051d698 --- /dev/null +++ b/grafana/archive/init.sls @@ -0,0 +1,5 @@ +#.-*- coding: utf-8 -*- +# vim: ft=sls + +include: + - .install diff --git a/grafana/archive/install.sls b/grafana/archive/install.sls new file mode 100644 index 0000000..ddf6872 --- /dev/null +++ b/grafana/archive/install.sls @@ -0,0 +1,18 @@ +# -*- coding: utf-8 -*- +# vim: ft=sls + +{#- Get the `tplroot` from `tpldir` #} +{%- set tplroot = tpldir.split('/')[0] %} +{%- from tplroot ~ "/map.jinja" import grafana with context %} +{%- from tplroot ~ "/jinja/macros.jinja" import format_kwargs with context %} + +grafana-package-archive-install-file-directory: + file.directory: + - name: {{ grafana.pkg.archive.name }} + - makedirs: True + - require_in: + - archive: grafana-package-archive-install-archive-extracted + +grafana-package-archive-install-archive-extracted: + archive.extracted: + {{- format_kwargs(grafana.pkg.archive) }} diff --git a/grafana/clean.sls b/grafana/clean.sls index 2cefe7d..19c3c2e 100644 --- a/grafana/clean.sls +++ b/grafana/clean.sls @@ -5,3 +5,4 @@ include: - .service.clean - .config.clean - .package.clean + - .archive.clean diff --git a/grafana/config/clean.sls b/grafana/config/clean.sls index be49519..b2e9aaa 100644 --- a/grafana/config/clean.sls +++ b/grafana/config/clean.sls @@ -11,6 +11,8 @@ include: grafana-config-clean-file-absent: file.absent: - - name: {{ grafana.config_file }} + - names: + - {{ grafana.config_file }} + - {{ grafana.environ_file }} - require: - sls: {{ sls_service_clean }} diff --git a/grafana/config/environ.sls b/grafana/config/environ.sls new file mode 100644 index 0000000..93560e8 --- /dev/null +++ b/grafana/config/environ.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 %} +{%- 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 }} + +grafana-config-file-file-managed-environ_file: + file.managed: + - name: {{ grafana.environ_file }} + - source: {{ files_switch(['grafana.sh.jinja'], + lookup='grafana-config-file-file-managed-environ_file' + ) + }} + - mode: 640 + - user: root + - group: {{ grafana.group }} + - makedirs: True + - template: jinja + - context: + config: {{ grafana.environ|json }} + - require: + - sls: {{ sls_package_install }} + + {%- endif %} +{%- endif %} diff --git a/grafana/config/file.sls b/grafana/config/file.sls index 18a2b11..189b15c 100644 --- a/grafana/config/file.sls +++ b/grafana/config/file.sls @@ -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 grafana with context %} {%- from tplroot ~ "/libtofs.jinja" import files_switch with context %} +{%- if 'config' in grafana and grafana.config %} + {%- if grafana.pkg.use_upstream_archive %} + {%- set sls_package_install = tplroot ~ '.archive.install' %} + {%- else %} + {%- set sls_package_install = tplroot ~ '.package.install' %} + {%- endif %} + include: - {{ sls_package_install }} -grafana-config-file-file-managed: +grafana-config-file-file-managed-config_file: file.managed: - name: {{ grafana.config_file }} - source: {{ files_switch(['grafana.ini.jinja'], - lookup='grafana-config-file-file-managed' + lookup='grafana-config-file-file-managed-config_file' ) }} - mode: 640 @@ -26,3 +32,5 @@ grafana-config-file-file-managed: config: {{ grafana.config|json }} - require: - sls: {{ sls_package_install }} + +{%- endif %} diff --git a/grafana/config/init.sls b/grafana/config/init.sls index 465ddfe..71fe77c 100644 --- a/grafana/config/init.sls +++ b/grafana/config/init.sls @@ -3,3 +3,4 @@ include: - .file + - .environ diff --git a/grafana/defaults.yaml b/grafana/defaults.yaml index 2903025..579e986 100644 --- a/grafana/defaults.yaml +++ b/grafana/defaults.yaml @@ -2,11 +2,23 @@ # vim: ft=yaml --- grafana: - pkg: grafana - pkgrepo: False + 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 + 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' service: name: grafana-server user: grafana diff --git a/grafana/files/default/grafana.sh.jinja b/grafana/files/default/grafana.sh.jinja new file mode 100644 index 0000000..c4e6352 --- /dev/null +++ b/grafana/files/default/grafana.sh.jinja @@ -0,0 +1,8 @@ +######################################################################## +# File managed by Salt at <{{ source }}>. +# Your changes will be overwritten. +######################################################################## + +{%- for item in config %} +{{ item }} +{%- endfor %} diff --git a/grafana/init.sls b/grafana/init.sls index 858a8e6..eb20f80 100644 --- a/grafana/init.sls +++ b/grafana/init.sls @@ -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 grafana with context %} + include: - - .package + - {{ '.archive' if grafana.pkg.use_upstream_archive else '.package' }} - .config - .service diff --git a/grafana/osfamilymap.yaml b/grafana/osfamilymap.yaml index bd0f909..1aa2631 100644 --- a/grafana/osfamilymap.yaml +++ b/grafana/osfamilymap.yaml @@ -49,9 +49,21 @@ OpenBSD: {} Solaris: {} -Windows: {} +Windows: + pkg: + archive: + name: C:\\Program Files + source: https://dl.grafana.com/oss/release/grafana-6.2.2.windows-amd64.zip + source_hash: c44ae0019834a73860ba9804965b79235be9284017d716823c316ac6b24abc4f MacOS: - rootgroup: {{ macos_group | d('') }} + 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/grafana/package/clean.sls b/grafana/package/clean.sls index 4da6d5b..e069e80 100644 --- a/grafana/package/clean.sls +++ b/grafana/package/clean.sls @@ -11,6 +11,6 @@ include: grafana-package-clean-pkg-removed: pkg.removed: - - name: {{ grafana.pkg }} + - name: {{ grafana.pkg.name }} - require: - sls: {{ sls_config_clean }} diff --git a/grafana/package/install.sls b/grafana/package/install.sls index 42f1b81..9a7f10e 100644 --- a/grafana/package/install.sls +++ b/grafana/package/install.sls @@ -18,4 +18,4 @@ grafana-package-install-pkgrepo-managed: grafana-package-install-pkg-installed: pkg.installed: - - name: {{ grafana.pkg }} + - name: {{ grafana.pkg.name }} diff --git a/grafana/service/running.sls b/grafana/service/running.sls index d044c4d..f8880d2 100644 --- a/grafana/service/running.sls +++ b/grafana/service/running.sls @@ -13,7 +13,9 @@ grafana-service-running-service-running: service.running: - name: {{ grafana.service.name }} - enable: True + {%- if 'config' in grafana and grafana.config %} - watch: - - file: grafana-config-file-file-managed + - file: grafana-config-file-file-managed-config_file - require: - sls: {{ sls_config_file }} + {%- endif %} diff --git a/pillar.example b/pillar.example index b7f4f79..b9565a6 100644 --- a/pillar.example +++ b/pillar.example @@ -2,13 +2,15 @@ # vim: ft=yaml --- grafana: - pkg: grafana + pkg: + name: grafana pkgrepo: humanname: grafana_official name: deb https://packages.grafana.com/oss/deb stable main file: /etc/apt/sources.list.d/grafana.list key_url: https://packages.grafana.com/gpg.key config_file: /etc/grafana/grafana.ini + environ_file: /etc/default.grafana.sh service: name: grafana-server @@ -37,6 +39,8 @@ grafana: # Pillar-based config # See also https://grafana.com/docs/installation/configuration/ + environ: + - 'export PATH=${PATH}:/opt/grafana-6.2.2.darwin-amd64' config: default: instance_name: ${HOSTNAME}