Skip to content
This repository has been archived by the owner on Mar 14, 2023. It is now read-only.

add option to propagate binaries without access to internet #27

Merged
merged 2 commits into from
Dec 14, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ All variables which can be overridden are stored in [defaults/main.yml](defaults
| Name | Default Value | Description |
| -------------- | ------------- | -----------------------------------|
| `mysqld_exporter_version` | 0.12.1 | mysqld exporter package version. Versions before 0.11 aren't supported. |
| `mysqld_exporter_binary_local_dir` | "" | Allows to use local packages instead of ones distributed on github. As parameter it takes a directory where `mysqld_exporter` binary is stored on host on which ansible is ran. This overrides `mysqld_exporter_version` parameter |
| `mysqld_exporter_web_listen_address` | "0.0.0.0:9104" | Address on which mysqld exporter will listen |

## Example
Expand Down
1 change: 1 addition & 0 deletions defaults/main.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
---
mysqld_exporter_binary_local_dir: ""
mysqld_exporter_version: 0.12.1
mysqld_exporter_web_listen_address: "0.0.0.0:9104"

Expand Down
74 changes: 74 additions & 0 deletions molecule/alternative/molecule.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
---
dependency:
name: galaxy
driver:
name: docker
lint:
name: yamllint
platforms:
- name: bionic
image: quay.io/paulfantom/molecule-systemd:ubuntu-18.04
docker_host: "${DOCKER_HOST:-unix://var/run/docker.sock}"
privileged: true
volumes:
- /sys/fs/cgroup:/sys/fs/cgroup:ro
- name: xenial
image: quay.io/paulfantom/molecule-systemd:ubuntu-16.04
docker_host: "${DOCKER_HOST:-unix://var/run/docker.sock}"
privileged: true
volumes:
- /sys/fs/cgroup:/sys/fs/cgroup:ro
- name: stretch
image: quay.io/paulfantom/molecule-systemd:debian-9
docker_host: "${DOCKER_HOST:-unix://var/run/docker.sock}"
privileged: true
volumes:
- /sys/fs/cgroup:/sys/fs/cgroup:ro
- name: buster
image: quay.io/paulfantom/molecule-systemd:debian-10
docker_host: "${DOCKER_HOST:-unix://var/run/docker.sock}"
privileged: true
volumes:
- /sys/fs/cgroup:/sys/fs/cgroup:ro
- name: centos7
image: quay.io/paulfantom/molecule-systemd:centos-7
docker_host: "${DOCKER_HOST:-unix://var/run/docker.sock}"
privileged: true
volumes:
- /sys/fs/cgroup:/sys/fs/cgroup:ro
- name: centos8
image: quay.io/paulfantom/molecule-systemd:centos-8
docker_host: "${DOCKER_HOST:-unix://var/run/docker.sock}"
privileged: true
volumes:
- /sys/fs/cgroup:/sys/fs/cgroup:ro
groups:
- python3
- name: fedora
image: quay.io/paulfantom/molecule-systemd:fedora-30
docker_host: "${DOCKER_HOST:-unix://var/run/docker.sock}"
privileged: true
volumes:
- /sys/fs/cgroup:/sys/fs/cgroup:ro
groups:
- python3
provisioner:
name: ansible
lint:
name: ansible-lint
playbooks:
create: ../default/create.yml
prepare: prepare.yml
converge: playbook.yml
destroy: ../default/destroy.yml
inventory:
group_vars:
python3:
ansible_python_interpreter: /usr/bin/python3
scenario:
name: alternative
verifier:
name: testinfra
lint:
name: flake8
enabled: true
9 changes: 9 additions & 0 deletions molecule/alternative/playbook.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
---
- name: Run role
hosts: all
any_errors_fatal: true
roles:
- ansible-mysqld_exporter
vars:
mysqld_exporter_binary_local_dir: "/tmp/mysqld_exporter-linux-amd64"
mysqld_exporter_dsn: "root@(localhost:3306)/"
37 changes: 37 additions & 0 deletions molecule/alternative/prepare.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
---
- name: Prepare
hosts: localhost
gather_facts: false
vars:
go_arch: amd64
mysqld_exporter_version: 0.12.1
tasks:
- name: Download mysqld_exporter binary to local folder
become: false
get_url:
url: "https://github.com/prometheus/mysqld_exporter/releases/download/v{{ mysqld_exporter_version }}/mysqld_exporter-{{ mysqld_exporter_version }}.linux-{{ go_arch }}.tar.gz"
dest: "/tmp/mysqld_exporter-{{ mysqld_exporter_version }}.linux-{{ go_arch }}.tar.gz"
register: _download_binary
until: _download_binary is succeeded
retries: 5
delay: 2
run_once: true
check_mode: false

- name: Unpack mysqld_exporter binary
become: false
unarchive:
src: "/tmp/mysqld_exporter-{{ mysqld_exporter_version }}.linux-{{ go_arch }}.tar.gz"
dest: "/tmp"
creates: "/tmp/mysqld_exporter-{{ mysqld_exporter_version }}.linux-{{ go_arch }}/mysqld_exporter"
run_once: true
check_mode: false

- name: link to mysqld_exporter binaries directory
become: false
file:
src: "/tmp/mysqld_exporter-{{ mysqld_exporter_version }}.linux-amd64"
dest: "/tmp/mysqld_exporter-linux-amd64"
state: link
run_once: true
check_mode: false
31 changes: 31 additions & 0 deletions molecule/alternative/tests/test_alternative.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
import os
import testinfra.utils.ansible_runner

testinfra_hosts = testinfra.utils.ansible_runner.AnsibleRunner(
os.environ['MOLECULE_INVENTORY_FILE']).get_hosts('all')


def test_files(host):
files = [
"/etc/systemd/system/mysqld_exporter.service",
"/usr/local/bin/mysqld_exporter"
]
for file in files:
f = host.file(file)
assert f.exists
assert f.is_file


def test_service(host):
s = host.service("mysqld_exporter")
# assert s.is_enabled
assert s.is_running


def test_socket(host):
sockets = [
"tcp://0.0.0.0:9104"
]
for socket in sockets:
s = host.socket(socket)
assert s.is_listening
72 changes: 72 additions & 0 deletions tasks/install.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
---
- name: Create the MySQL Exporter group
group:
name: "{{ __mysqld_exporter_group }}"
state: present
system: true

- name: Create the MySQL Exporter user
user:
name: "{{ __mysqld_exporter_user }}"
groups: "{{ __mysqld_exporter_group }}"
append: true
shell: /usr/sbin/nologin
system: true
createhome: false
home: /

- block:
- name: Download mysqld_exporter binary to local folder
become: false
get_url:
url: "https://github.com/prometheus/mysqld_exporter/releases/download/v{{ mysqld_exporter_version }}/mysqld_exporter-{{ mysqld_exporter_version }}.linux-{{ go_arch_map[ansible_architecture] | default(ansible_architecture) }}.tar.gz"
dest: "/tmp/mysqld_exporter-{{ mysqld_exporter_version }}.linux-{{ go_arch_map[ansible_architecture] | default(ansible_architecture) }}.tar.gz"
checksum: "sha256:{{ __mysqld_exporter_checksum }}"
register: _download_binary
until: _download_binary is succeeded
retries: 5
delay: 2
delegate_to: localhost
check_mode: false

- name: Unpack mysqld_exporter binary
become: false
unarchive:
src: "/tmp/mysqld_exporter-{{ mysqld_exporter_version }}.linux-{{ go_arch_map[ansible_architecture] | default(ansible_architecture) }}.tar.gz"
dest: "/tmp"
creates: "/tmp/mysqld_exporter-{{ mysqld_exporter_version }}.linux-{{ go_arch_map[ansible_architecture] | default(ansible_architecture) }}/mysqld_exporter"
delegate_to: localhost
check_mode: false

- name: Propagate mysqld_exporter binaries
copy:
src: "/tmp/mysqld_exporter-{{ mysqld_exporter_version }}.linux-{{ go_arch_map[ansible_architecture] | default(ansible_architecture) }}/mysqld_exporter"
dest: "/usr/local/bin/mysqld_exporter"
mode: 0755
owner: root
group: root
notify:
- restart mysqld exporter
when: not ansible_check_mode
when: mysqld_exporter_binary_local_dir | length == 0

- name: propagate locally distributed mysqld_exporter binary
copy:
src: "{{ mysqld_exporter_binary_local_dir }}/mysqld_exporter"
dest: "/usr/local/bin/mysqld_exporter"
mode: 0755
owner: root
group: root
when: mysqld_exporter_binary_local_dir | length > 0
notify: restart mysqld exporter

- name: Copy the mysqld_exporter systemd service file
template:
src: mysqld_exporter.service.j2
dest: /etc/systemd/system/mysqld_exporter.service
owner: root
group: root
mode: 0644
no_log: "{{ not lookup('env', 'ANSIBLE_DEBUG') | bool }}"
notify:
- restart mysqld exporter
62 changes: 2 additions & 60 deletions tasks/main.yml
Original file line number Diff line number Diff line change
@@ -1,65 +1,7 @@
---
- include: preflight.yml
- import_tasks: preflight.yml

- name: Create the MySQL Exporter group
group:
name: "{{ __mysqld_exporter_group }}"
state: present
system: true

- name: Create the MySQL Exporter user
user:
name: "{{ __mysqld_exporter_user }}"
groups: "{{ __mysqld_exporter_group }}"
append: true
shell: /usr/sbin/nologin
system: true
createhome: false
home: /

- name: Download mysqld_exporter binary to local folder
become: false
get_url:
url: "https://github.com/prometheus/mysqld_exporter/releases/download/v{{ mysqld_exporter_version }}/mysqld_exporter-{{ mysqld_exporter_version }}.linux-{{ go_arch_map[ansible_architecture] | default(ansible_architecture) }}.tar.gz"
dest: "/tmp/mysqld_exporter-{{ mysqld_exporter_version }}.linux-{{ go_arch_map[ansible_architecture] | default(ansible_architecture) }}.tar.gz"
checksum: "sha256:{{ __mysqld_exporter_checksum }}"
register: _download_binary
until: _download_binary is succeeded
retries: 5
delay: 2
delegate_to: localhost
check_mode: false

- name: Unpack mysqld_exporter binary
become: false
unarchive:
src: "/tmp/mysqld_exporter-{{ mysqld_exporter_version }}.linux-{{ go_arch_map[ansible_architecture] | default(ansible_architecture) }}.tar.gz"
dest: "/tmp"
creates: "/tmp/mysqld_exporter-{{ mysqld_exporter_version }}.linux-{{ go_arch_map[ansible_architecture] | default(ansible_architecture) }}/mysqld_exporter"
delegate_to: localhost
check_mode: false

- name: Propagate mysqld_exporter binaries
copy:
src: "/tmp/mysqld_exporter-{{ mysqld_exporter_version }}.linux-{{ go_arch_map[ansible_architecture] | default(ansible_architecture) }}/mysqld_exporter"
dest: "/usr/local/bin/mysqld_exporter"
mode: 0755
owner: root
group: root
notify:
- restart mysqld exporter
when: not ansible_check_mode

- name: Copy the mysqld_exporter systemd service file
template:
src: mysqld_exporter.service.j2
dest: /etc/systemd/system/mysqld_exporter.service
owner: root
group: root
mode: 0644
no_log: "{{ not lookup('env', 'ANSIBLE_DEBUG') | bool }}"
notify:
- restart mysqld exporter
- import_tasks: install.yml

- name: Ensure mysqld_exporter is enabled on boot
systemd:
Expand Down