mirror of
https://github.com/prometheus-community/ansible
synced 2024-11-24 12:53:19 +00:00
refactor(bind_exporter): delegate common tasks to _common role
Signed-off-by: gardar <gardar@users.noreply.github.com>
This commit is contained in:
parent
d05e3c23b5
commit
bc290813a4
12 changed files with 59 additions and 273 deletions
|
@ -1,10 +1,8 @@
|
|||
---
|
||||
bind_exporter_version: 0.7.0
|
||||
bind_exporter_binary_local_dir: ""
|
||||
bind_exporter_binary_url: "https://github.com/{{ _bind_exporter_repo }}/releases/download/v{{ bind_exporter_version }}/\
|
||||
bind_exporter-{{ bind_exporter_version }}.linux-{{ go_arch }}.tar.gz"
|
||||
bind_exporter-{{ bind_exporter_version }}.{{ ansible_system | lower }}-{{ _bind_exporter_go_ansible_arch }}.tar.gz"
|
||||
bind_exporter_checksums_url: "https://github.com/{{ _bind_exporter_repo }}/releases/download/v{{ bind_exporter_version }}/sha256sums.txt"
|
||||
bind_exporter_skip_install: false
|
||||
|
||||
bind_exporter_web_listen_address: "0.0.0.0:9119"
|
||||
bind_exporter_web_telemetry_path: "/metrics"
|
||||
|
@ -20,7 +18,9 @@ bind_exporter_http_server_config: {}
|
|||
bind_exporter_basic_auth_users: {}
|
||||
|
||||
# Internal variables.
|
||||
bind_exporter_binary_install_dir: "/usr/local/bin"
|
||||
bind_exporter_config_dir: "/etc/bind_exporter"
|
||||
bind_exporter_system_group: "bind-exp"
|
||||
bind_exporter_system_user: "{{ bind_exporter_system_group }}"
|
||||
bind_exporter_binary_install_dir: "/usr/local/bin"
|
||||
|
||||
bind_exporter_config_dir: "/etc/bind_exporter"
|
||||
bind_exporter_local_cache_path: "/tmp/bind_exporter-{{ ansible_system | lower }}-{{ _bind_exporter_go_ansible_arch }}/{{ bind_exporter_version }}"
|
||||
|
|
|
@ -11,18 +11,9 @@ argument_specs:
|
|||
bind_exporter_version:
|
||||
description: "BIND exporter package version. Also accepts latest as parameter."
|
||||
default: "0.7.0"
|
||||
bind_exporter_skip_install:
|
||||
description: "BIND installation tasks gets skipped when set to true."
|
||||
type: bool
|
||||
default: false
|
||||
bind_exporter_binary_local_dir:
|
||||
description:
|
||||
- "Enables the use of local packages instead of those distributed on github."
|
||||
- "The parameter may be set to a directory where the C(bind_exporter) binary is stored on the host where ansible is run."
|
||||
- "This overrides the I(bind_exporter_version) parameter"
|
||||
bind_exporter_binary_url:
|
||||
description: "URL of the bind_exporter binaries .tar.gz file"
|
||||
default: "https://github.com/{{ _bind_exporter_repo }}/download/v{{ bind_exporter_version }}/bind_exporter-{{ bind_exporter_version }}.linux-{{ go_arch }}.tar.gz"
|
||||
default: "https://github.com/{{ _bind_exporter_repo }}/releases/download/v{{ bind_exporter_version }}/bind_exporter-{{ bind_exporter_version }}.{{ ansible_system | lower }}-{{ _bind_exporter_go_ansible_arch }}.tar.gz"
|
||||
bind_exporter_checksums_url:
|
||||
description: "URL of the bind_exporter checksums file"
|
||||
default: "https://github.com/{{ _bind_exporter_repo }}/releases/download/v{{ bind_exporter_version }}/sha256sums.txt"
|
||||
|
@ -33,7 +24,7 @@ argument_specs:
|
|||
description: "Path under which to expose metrics"
|
||||
default: "/metrics"
|
||||
bind_exporter_config_dir:
|
||||
description: "The path where exporter configuration is stored"
|
||||
description: "Path to directory with bind_exporter configuration"
|
||||
default: "/etc/bind_exporter"
|
||||
bind_exporter_stats_url:
|
||||
description: "HTTP XML API address of BIND server"
|
||||
|
@ -88,3 +79,6 @@ argument_specs:
|
|||
- "I(Advanced)"
|
||||
- "BIND Exporter user"
|
||||
default: "bind-exp"
|
||||
bind_exporter_local_cache_path:
|
||||
description: "Local path to stash the archive and its extraction"
|
||||
default: "/tmp/bind_exporter-{{ ansible_system | lower }}-{{ _bind_exporter_go_ansible_arch }}/{{ bind_exporter_version }}"
|
||||
|
|
|
@ -5,7 +5,8 @@ provisioner:
|
|||
inventory:
|
||||
group_vars:
|
||||
all:
|
||||
bind_exporter_binary_local_dir: "/tmp/bind_exporter-linux-amd64"
|
||||
bind_exporter_version: 0.7.0
|
||||
bind_exporter_local_cache_path: "/tmp/bind_exporter-linux-amd64/{{ bind_exporter_version }}"
|
||||
bind_exporter_web_listen_address:
|
||||
- '127.0.0.1:8080'
|
||||
- '127.0.1.1:8080'
|
||||
|
@ -19,8 +20,6 @@ provisioner:
|
|||
http2: true
|
||||
bind_exporter_basic_auth_users:
|
||||
randomuser: examplepassword
|
||||
go_arch: amd64
|
||||
bind_exporter_version: 0.7.0
|
||||
bind_exporter_binary_url: "https://github.com/prometheus-community/bind_exporter/releases/download/v{{\
|
||||
\ bind_exporter_version }}/bind_exporter-{{ bind_exporter_version\
|
||||
\ }}.linux-{{ go_arch }}.tar.gz"
|
||||
\ }}.linux-amd64.tar.gz"
|
||||
|
|
|
@ -46,7 +46,6 @@ def test_user(host):
|
|||
assert host.group("bind-exp").exists
|
||||
assert "bind-exp" in host.user("bind-exp").groups
|
||||
assert host.user("bind-exp").shell == "/usr/sbin/nologin"
|
||||
assert host.user("bind-exp").home == "/"
|
||||
|
||||
|
||||
def test_service(host):
|
||||
|
|
|
@ -1,42 +0,0 @@
|
|||
---
|
||||
- name: Copy the bind_exporter systemd service file
|
||||
ansible.builtin.template:
|
||||
src: bind_exporter.service.j2
|
||||
dest: /etc/systemd/system/bind_exporter.service
|
||||
owner: root
|
||||
group: root
|
||||
mode: '0644'
|
||||
notify: restart bind_exporter
|
||||
|
||||
- name: Create bind_exporter config directory
|
||||
ansible.builtin.file:
|
||||
path: "{{ bind_exporter_config_dir }}"
|
||||
state: directory
|
||||
owner: root
|
||||
group: root
|
||||
mode: u+rwX,g+rwX,o=rX
|
||||
|
||||
- name: Configure bind_exporter web config
|
||||
when:
|
||||
( bind_exporter_tls_server_config | length > 0 ) or
|
||||
( bind_exporter_http_server_config | length > 0 ) or
|
||||
( bind_exporter_basic_auth_users | length > 0 )
|
||||
block:
|
||||
- name: Copy the bind_exporter web config file
|
||||
ansible.builtin.template:
|
||||
src: web_config.yaml.j2
|
||||
dest: "{{ bind_exporter_config_dir }}/web_config.yaml"
|
||||
owner: root
|
||||
group: '{{ bind_exporter_system_group }}'
|
||||
mode: '0640'
|
||||
notify: restart bind_exporter
|
||||
|
||||
- name: Allow bind_exporter port in SELinux on RedHat OS family
|
||||
community.general.seport:
|
||||
ports: "{{ bind_exporter_web_listen_address.split(':')[-1] }}"
|
||||
proto: tcp
|
||||
setype: http_port_t
|
||||
state: present
|
||||
when:
|
||||
- ansible_version.full is version_compare('2.4', '>=')
|
||||
- ansible_selinux.status == "enabled"
|
|
@ -1,71 +0,0 @@
|
|||
---
|
||||
- name: Create the bind_exporter group
|
||||
ansible.builtin.group:
|
||||
name: "{{ bind_exporter_system_group }}"
|
||||
state: present
|
||||
system: true
|
||||
when: bind_exporter_system_group not in ["root"]
|
||||
|
||||
- name: Create the bind_exporter user
|
||||
ansible.builtin.user:
|
||||
name: "{{ bind_exporter_system_user }}"
|
||||
groups: "{{ bind_exporter_system_group }}"
|
||||
append: true
|
||||
shell: /usr/sbin/nologin
|
||||
system: true
|
||||
create_home: false
|
||||
home: /
|
||||
when: bind_exporter_system_user not in ["root"]
|
||||
|
||||
- name: Get binary
|
||||
when:
|
||||
- bind_exporter_binary_local_dir | length == 0
|
||||
- not bind_exporter_skip_install
|
||||
block:
|
||||
|
||||
- name: Download bind_exporter binary to local folder
|
||||
become: false
|
||||
ansible.builtin.get_url:
|
||||
url: "{{ bind_exporter_binary_url }}"
|
||||
dest: "/tmp/bind_exporter-{{ bind_exporter_version }}.linux-{{ go_arch }}.tar.gz"
|
||||
checksum: "sha256:{{ __bind_exporter_checksum }}"
|
||||
mode: '0644'
|
||||
register: _download_binary
|
||||
until: _download_binary is succeeded
|
||||
retries: 5
|
||||
delay: 2
|
||||
delegate_to: localhost
|
||||
check_mode: false
|
||||
|
||||
- name: Unpack bind_exporter binary
|
||||
become: false
|
||||
ansible.builtin.unarchive:
|
||||
src: "/tmp/bind_exporter-{{ bind_exporter_version }}.linux-{{ go_arch }}.tar.gz"
|
||||
dest: "/tmp"
|
||||
creates: "/tmp/bind_exporter-{{ bind_exporter_version }}.linux-{{ go_arch }}/bind_exporter"
|
||||
extra_opts:
|
||||
- --no-same-owner
|
||||
delegate_to: localhost
|
||||
check_mode: false
|
||||
|
||||
- name: Propagate bind_exporter binaries
|
||||
ansible.builtin.copy:
|
||||
src: "/tmp/bind_exporter-{{ bind_exporter_version }}.linux-{{ go_arch }}/bind_exporter"
|
||||
dest: "{{ bind_exporter_binary_install_dir }}/bind_exporter"
|
||||
mode: '0755'
|
||||
owner: root
|
||||
group: root
|
||||
notify: restart bind_exporter
|
||||
when: not ansible_check_mode
|
||||
|
||||
- name: Propagate locally distributed bind_exporter binary
|
||||
ansible.builtin.copy:
|
||||
src: "{{ bind_exporter_binary_local_dir }}/bind_exporter"
|
||||
dest: "{{ bind_exporter_binary_install_dir }}/bind_exporter"
|
||||
mode: '0755'
|
||||
owner: root
|
||||
group: root
|
||||
when:
|
||||
- bind_exporter_binary_local_dir | length > 0
|
||||
- not bind_exporter_skip_install
|
||||
notify: restart bind_exporter
|
|
@ -2,51 +2,50 @@
|
|||
- name: Preflight
|
||||
ansible.builtin.include_tasks:
|
||||
file: preflight.yml
|
||||
apply:
|
||||
tags:
|
||||
- bind_exporter_install
|
||||
- bind_exporter_configure
|
||||
- bind_exporter_run
|
||||
tags:
|
||||
- bind_exporter_install
|
||||
- bind_exporter_configure
|
||||
- bind_exporter_run
|
||||
|
||||
- name: Install
|
||||
ansible.builtin.include_tasks:
|
||||
file: install.yml
|
||||
apply:
|
||||
become: true
|
||||
tags:
|
||||
- bind_exporter_install
|
||||
when:
|
||||
( not __bind_exporter_is_installed.stat.exists ) or
|
||||
( (__bind_exporter_current_version_output.stderr_lines | length > 0)
|
||||
and (__bind_exporter_current_version_output.stderr_lines[0].split(" ")[2] != bind_exporter_version) ) or
|
||||
( (__bind_exporter_current_version_output.stdout_lines | length > 0)
|
||||
and (__bind_exporter_current_version_output.stdout_lines[0].split(" ")[2] != bind_exporter_version) ) or
|
||||
( bind_exporter_binary_local_dir | length > 0 )
|
||||
ansible.builtin.include_role:
|
||||
name: prometheus.prometheus._common
|
||||
tasks_from: install.yml
|
||||
vars:
|
||||
_common_local_cache_path: "{{ bind_exporter_local_cache_path }}"
|
||||
_common_binaries: "{{ _bind_exporter_binaries }}"
|
||||
_common_binary_install_dir: "{{ bind_exporter_binary_install_dir }}"
|
||||
_common_binary_url: "{{ bind_exporter_binary_url }}"
|
||||
_common_checksums_url: "{{ bind_exporter_checksums_url }}"
|
||||
_common_system_group: "{{ bind_exporter_system_group }}"
|
||||
_common_system_user: "{{ bind_exporter_system_user }}"
|
||||
_common_config_dir: "{{ bind_exporter_config_dir }}"
|
||||
_common_binary_unarchive_opts: ['--strip-components=1']
|
||||
tags:
|
||||
- bind_exporter_install
|
||||
|
||||
- name: SELinux
|
||||
ansible.builtin.include_tasks:
|
||||
file: selinux.yml
|
||||
apply:
|
||||
become: true
|
||||
tags:
|
||||
- bind_exporter_configure
|
||||
ansible.builtin.include_role:
|
||||
name: prometheus.prometheus._common
|
||||
tasks_from: selinux.yml
|
||||
vars:
|
||||
_common_selinux_port: "{{ bind_exporter_web_listen_address | urlsplit('port') }}"
|
||||
when: ansible_selinux.status == "enabled"
|
||||
tags:
|
||||
- bind_exporter_configure
|
||||
|
||||
|
||||
- name: Configure
|
||||
ansible.builtin.include_tasks:
|
||||
file: configure.yml
|
||||
apply:
|
||||
become: true
|
||||
tags:
|
||||
- bind_exporter_configure
|
||||
ansible.builtin.include_role:
|
||||
name: prometheus.prometheus._common
|
||||
tasks_from: configure.yml
|
||||
vars:
|
||||
_common_system_user: "{{ bind_exporter_system_user }}"
|
||||
_common_system_group: "{{ bind_exporter_system_group }}"
|
||||
_common_config_dir: "{{ bind_exporter_config_dir }}"
|
||||
_common_tls_server_config: "{{ bind_exporter_tls_server_config }}"
|
||||
_common_http_server_config: "{{ bind_exporter_http_server_config }}"
|
||||
_common_basic_auth_users: "{{ bind_exporter_basic_auth_users }}"
|
||||
tags:
|
||||
- bind_exporter_configure
|
||||
|
||||
|
|
|
@ -1,24 +1,8 @@
|
|||
---
|
||||
- name: Assert usage of systemd as an init system
|
||||
ansible.builtin.assert:
|
||||
that: ansible_service_mgr == 'systemd'
|
||||
msg: "This role only works with systemd"
|
||||
|
||||
- name: Install package fact dependencies
|
||||
become: true
|
||||
ansible.builtin.package:
|
||||
name: "{{ _pkg_fact_req }}"
|
||||
state: present
|
||||
when: (_pkg_fact_req)
|
||||
vars:
|
||||
_pkg_fact_req: "{% if (ansible_pkg_mgr == 'apt') %}\
|
||||
{{ ('python-apt' if ansible_python_version is version('3', '<') else 'python3-apt') }}
|
||||
{% else %}\
|
||||
{% endif %}"
|
||||
|
||||
- name: Gather package facts
|
||||
ansible.builtin.package_facts:
|
||||
when: "not 'packages' in ansible_facts"
|
||||
- name: Common preflight
|
||||
ansible.builtin.include_role:
|
||||
name: prometheus.prometheus._common
|
||||
tasks_from: preflight.yml
|
||||
|
||||
- name: Naive assertion of proper listen address
|
||||
ansible.builtin.assert:
|
||||
|
@ -55,23 +39,6 @@
|
|||
- "__bind_exporter_cert_file.stat.exists"
|
||||
- "__bind_exporter_key_file.stat.exists"
|
||||
|
||||
- name: Check if bind_exporter is installed
|
||||
ansible.builtin.stat:
|
||||
path: "{{ bind_exporter_binary_install_dir }}/bind_exporter"
|
||||
register: __bind_exporter_is_installed
|
||||
check_mode: false
|
||||
tags:
|
||||
- bind_exporter_install
|
||||
|
||||
- name: Gather currently installed bind_exporter version (if any)
|
||||
ansible.builtin.command: "{{ bind_exporter_binary_install_dir }}/bind_exporter --version"
|
||||
changed_when: false
|
||||
register: __bind_exporter_current_version_output
|
||||
check_mode: false
|
||||
when: __bind_exporter_is_installed.stat.exists
|
||||
tags:
|
||||
- bind_exporter_install
|
||||
|
||||
- name: Discover latest version
|
||||
ansible.builtin.set_fact:
|
||||
bind_exporter_version: "{{ (lookup('url', 'https://api.github.com/repos/{{ _bind_exporter_repo }}/releases/latest', headers=_github_api_headers,
|
||||
|
@ -81,24 +48,9 @@
|
|||
retries: 10
|
||||
when:
|
||||
- bind_exporter_version == "latest"
|
||||
- bind_exporter_binary_local_dir | length == 0
|
||||
- not bind_exporter_skip_install
|
||||
|
||||
- name: Get bind_exporter binary checksum
|
||||
when:
|
||||
- bind_exporter_binary_local_dir | length == 0
|
||||
- not bind_exporter_skip_install
|
||||
block:
|
||||
- name: Get checksum list from github
|
||||
ansible.builtin.set_fact:
|
||||
__bind_exporter_checksums: "{{ lookup('url', bind_exporter_checksums_url, headers=_github_api_headers, wantlist=True) | list }}"
|
||||
run_once: true
|
||||
until: __bind_exporter_checksums is search('linux-' + go_arch + '.tar.gz')
|
||||
retries: 10
|
||||
|
||||
- name: "Get checksum for {{ go_arch }}"
|
||||
ansible.builtin.set_fact:
|
||||
__bind_exporter_checksum: "{{ item.split(' ')[0] }}"
|
||||
with_items: "{{ __bind_exporter_checksums }}"
|
||||
when:
|
||||
- "('linux-' + go_arch + '.tar.gz') in item"
|
||||
tags:
|
||||
- bind_exporter
|
||||
- install
|
||||
- bind_exporter_install
|
||||
- download
|
||||
- bind_exporter_download
|
||||
|
|
|
@ -1,23 +0,0 @@
|
|||
---
|
||||
- name: Install selinux python packages [RedHat]
|
||||
ansible.builtin.package:
|
||||
name: "{{ ['libselinux-python', 'policycoreutils-python']
|
||||
if ansible_python_version is version('3', '<') else
|
||||
['python3-libselinux', 'python3-policycoreutils'] }}"
|
||||
state: present
|
||||
register: _install_selinux_packages
|
||||
until: _install_selinux_packages is success
|
||||
retries: 5
|
||||
delay: 2
|
||||
when: ansible_os_family | lower == "redhat"
|
||||
|
||||
- name: Install selinux python packages [clearlinux]
|
||||
ansible.builtin.package:
|
||||
name: sysadmin-basic
|
||||
state: present
|
||||
register: _install_selinux_packages
|
||||
until: _install_selinux_packages is success
|
||||
retries: 5
|
||||
delay: 2
|
||||
when:
|
||||
- ansible_distribution | lower == "clearlinux"
|
|
@ -13,7 +13,7 @@ ExecStart={{ bind_exporter_binary_install_dir }}/bind_exporter \
|
|||
--bind.stats-groups="{{ bind_exporter_stats_groups | join(',') }}" \
|
||||
{% endif %}
|
||||
{% if bind_exporter_tls_server_config | length > 0 or bind_exporter_http_server_config | length > 0 or bind_exporter_basic_auth_users | length > 0 %}
|
||||
--web.config.file={{ bind_exporter_config_dir }}/web_config.yaml \
|
||||
--web.config.file={{ bind_exporter_config_dir }}/web_config.yml \
|
||||
{% endif %}
|
||||
--bind.stats-url="{{ bind_exporter_stats_url }}" \
|
||||
--bind.timeout="{{ bind_exporter_timeout }}" \
|
||||
|
|
|
@ -1,18 +0,0 @@
|
|||
---
|
||||
{{ ansible_managed | comment }}
|
||||
{% if bind_exporter_tls_server_config | length > 0 %}
|
||||
tls_server_config:
|
||||
{{ bind_exporter_tls_server_config | to_nice_yaml | indent(2, true) }}
|
||||
{% endif %}
|
||||
|
||||
{% if bind_exporter_http_server_config | length > 0 %}
|
||||
http_server_config:
|
||||
{{ bind_exporter_http_server_config | to_nice_yaml | indent(2, true) }}
|
||||
{% endif %}
|
||||
|
||||
{% if bind_exporter_basic_auth_users | length > 0 %}
|
||||
basic_auth_users:
|
||||
{% for k, v in bind_exporter_basic_auth_users.items() %}
|
||||
{{ k }}: {{ v | string | password_hash('bcrypt', ('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890' | shuffle(seed=inventory_hostname) | join)[:22], rounds=9) }}
|
||||
{% endfor %}
|
||||
{% endif %}
|
|
@ -1,12 +1,9 @@
|
|||
---
|
||||
go_arch_map:
|
||||
i386: '386'
|
||||
x86_64: 'amd64'
|
||||
aarch64: 'arm64'
|
||||
armv7l: 'armv7'
|
||||
armv6l: 'armv6'
|
||||
|
||||
go_arch: "{{ go_arch_map[ansible_architecture] | default(ansible_architecture) }}"
|
||||
|
||||
_bind_exporter_go_ansible_arch: "{{ {'i386': '386',
|
||||
'x86_64': 'amd64',
|
||||
'aarch64': 'arm64',
|
||||
'armv7l': 'armv7',
|
||||
'armv6l': 'armv6'}.get(ansible_architecture, ansible_architecture) }}"
|
||||
_bind_exporter_repo: "prometheus-community/bind_exporter"
|
||||
_github_api_headers: "{{ {'GITHUB_TOKEN': lookup('ansible.builtin.env', 'GITHUB_TOKEN')} if (lookup('ansible.builtin.env', 'GITHUB_TOKEN')) else {} }}"
|
||||
_bind_exporter_binaries: ['bind_exporter']
|
||||
|
|
Loading…
Reference in a new issue