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

Commit ef487c5

Browse files
authored
add option to propagate binaries without access to internet (#27)
add option to propagate binaries without access to internet [minor] release
2 parents 1c5b2b7 + 7c230a9 commit ef487c5

File tree

8 files changed

+227
-60
lines changed

8 files changed

+227
-60
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ All variables which can be overridden are stored in [defaults/main.yml](defaults
2323
| Name | Default Value | Description |
2424
| -------------- | ------------- | -----------------------------------|
2525
| `mysqld_exporter_version` | 0.12.1 | mysqld exporter package version. Versions before 0.11 aren't supported. |
26+
| `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 |
2627
| `mysqld_exporter_web_listen_address` | "0.0.0.0:9104" | Address on which mysqld exporter will listen |
2728

2829
## Example

defaults/main.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
---
2+
mysqld_exporter_binary_local_dir: ""
23
mysqld_exporter_version: 0.12.1
34
mysqld_exporter_web_listen_address: "0.0.0.0:9104"
45

molecule/alternative/molecule.yml

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
---
2+
dependency:
3+
name: galaxy
4+
driver:
5+
name: docker
6+
lint:
7+
name: yamllint
8+
platforms:
9+
- name: bionic
10+
image: quay.io/paulfantom/molecule-systemd:ubuntu-18.04
11+
docker_host: "${DOCKER_HOST:-unix://var/run/docker.sock}"
12+
privileged: true
13+
volumes:
14+
- /sys/fs/cgroup:/sys/fs/cgroup:ro
15+
- name: xenial
16+
image: quay.io/paulfantom/molecule-systemd:ubuntu-16.04
17+
docker_host: "${DOCKER_HOST:-unix://var/run/docker.sock}"
18+
privileged: true
19+
volumes:
20+
- /sys/fs/cgroup:/sys/fs/cgroup:ro
21+
- name: stretch
22+
image: quay.io/paulfantom/molecule-systemd:debian-9
23+
docker_host: "${DOCKER_HOST:-unix://var/run/docker.sock}"
24+
privileged: true
25+
volumes:
26+
- /sys/fs/cgroup:/sys/fs/cgroup:ro
27+
- name: buster
28+
image: quay.io/paulfantom/molecule-systemd:debian-10
29+
docker_host: "${DOCKER_HOST:-unix://var/run/docker.sock}"
30+
privileged: true
31+
volumes:
32+
- /sys/fs/cgroup:/sys/fs/cgroup:ro
33+
- name: centos7
34+
image: quay.io/paulfantom/molecule-systemd:centos-7
35+
docker_host: "${DOCKER_HOST:-unix://var/run/docker.sock}"
36+
privileged: true
37+
volumes:
38+
- /sys/fs/cgroup:/sys/fs/cgroup:ro
39+
- name: centos8
40+
image: quay.io/paulfantom/molecule-systemd:centos-8
41+
docker_host: "${DOCKER_HOST:-unix://var/run/docker.sock}"
42+
privileged: true
43+
volumes:
44+
- /sys/fs/cgroup:/sys/fs/cgroup:ro
45+
groups:
46+
- python3
47+
- name: fedora
48+
image: quay.io/paulfantom/molecule-systemd:fedora-30
49+
docker_host: "${DOCKER_HOST:-unix://var/run/docker.sock}"
50+
privileged: true
51+
volumes:
52+
- /sys/fs/cgroup:/sys/fs/cgroup:ro
53+
groups:
54+
- python3
55+
provisioner:
56+
name: ansible
57+
lint:
58+
name: ansible-lint
59+
playbooks:
60+
create: ../default/create.yml
61+
prepare: prepare.yml
62+
converge: playbook.yml
63+
destroy: ../default/destroy.yml
64+
inventory:
65+
group_vars:
66+
python3:
67+
ansible_python_interpreter: /usr/bin/python3
68+
scenario:
69+
name: alternative
70+
verifier:
71+
name: testinfra
72+
lint:
73+
name: flake8
74+
enabled: true

molecule/alternative/playbook.yml

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
---
2+
- name: Run role
3+
hosts: all
4+
any_errors_fatal: true
5+
roles:
6+
- ansible-mysqld_exporter
7+
vars:
8+
mysqld_exporter_binary_local_dir: "/tmp/mysqld_exporter-linux-amd64"
9+
mysqld_exporter_dsn: "root@(localhost:3306)/"

molecule/alternative/prepare.yml

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
---
2+
- name: Prepare
3+
hosts: localhost
4+
gather_facts: false
5+
vars:
6+
go_arch: amd64
7+
mysqld_exporter_version: 0.12.1
8+
tasks:
9+
- name: Download mysqld_exporter binary to local folder
10+
become: false
11+
get_url:
12+
url: "https://github.com/prometheus/mysqld_exporter/releases/download/v{{ mysqld_exporter_version }}/mysqld_exporter-{{ mysqld_exporter_version }}.linux-{{ go_arch }}.tar.gz"
13+
dest: "/tmp/mysqld_exporter-{{ mysqld_exporter_version }}.linux-{{ go_arch }}.tar.gz"
14+
register: _download_binary
15+
until: _download_binary is succeeded
16+
retries: 5
17+
delay: 2
18+
run_once: true
19+
check_mode: false
20+
21+
- name: Unpack mysqld_exporter binary
22+
become: false
23+
unarchive:
24+
src: "/tmp/mysqld_exporter-{{ mysqld_exporter_version }}.linux-{{ go_arch }}.tar.gz"
25+
dest: "/tmp"
26+
creates: "/tmp/mysqld_exporter-{{ mysqld_exporter_version }}.linux-{{ go_arch }}/mysqld_exporter"
27+
run_once: true
28+
check_mode: false
29+
30+
- name: link to mysqld_exporter binaries directory
31+
become: false
32+
file:
33+
src: "/tmp/mysqld_exporter-{{ mysqld_exporter_version }}.linux-amd64"
34+
dest: "/tmp/mysqld_exporter-linux-amd64"
35+
state: link
36+
run_once: true
37+
check_mode: false
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
import os
2+
import testinfra.utils.ansible_runner
3+
4+
testinfra_hosts = testinfra.utils.ansible_runner.AnsibleRunner(
5+
os.environ['MOLECULE_INVENTORY_FILE']).get_hosts('all')
6+
7+
8+
def test_files(host):
9+
files = [
10+
"/etc/systemd/system/mysqld_exporter.service",
11+
"/usr/local/bin/mysqld_exporter"
12+
]
13+
for file in files:
14+
f = host.file(file)
15+
assert f.exists
16+
assert f.is_file
17+
18+
19+
def test_service(host):
20+
s = host.service("mysqld_exporter")
21+
# assert s.is_enabled
22+
assert s.is_running
23+
24+
25+
def test_socket(host):
26+
sockets = [
27+
"tcp://0.0.0.0:9104"
28+
]
29+
for socket in sockets:
30+
s = host.socket(socket)
31+
assert s.is_listening

tasks/install.yml

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
---
2+
- name: Create the MySQL Exporter group
3+
group:
4+
name: "{{ __mysqld_exporter_group }}"
5+
state: present
6+
system: true
7+
8+
- name: Create the MySQL Exporter user
9+
user:
10+
name: "{{ __mysqld_exporter_user }}"
11+
groups: "{{ __mysqld_exporter_group }}"
12+
append: true
13+
shell: /usr/sbin/nologin
14+
system: true
15+
createhome: false
16+
home: /
17+
18+
- block:
19+
- name: Download mysqld_exporter binary to local folder
20+
become: false
21+
get_url:
22+
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"
23+
dest: "/tmp/mysqld_exporter-{{ mysqld_exporter_version }}.linux-{{ go_arch_map[ansible_architecture] | default(ansible_architecture) }}.tar.gz"
24+
checksum: "sha256:{{ __mysqld_exporter_checksum }}"
25+
register: _download_binary
26+
until: _download_binary is succeeded
27+
retries: 5
28+
delay: 2
29+
delegate_to: localhost
30+
check_mode: false
31+
32+
- name: Unpack mysqld_exporter binary
33+
become: false
34+
unarchive:
35+
src: "/tmp/mysqld_exporter-{{ mysqld_exporter_version }}.linux-{{ go_arch_map[ansible_architecture] | default(ansible_architecture) }}.tar.gz"
36+
dest: "/tmp"
37+
creates: "/tmp/mysqld_exporter-{{ mysqld_exporter_version }}.linux-{{ go_arch_map[ansible_architecture] | default(ansible_architecture) }}/mysqld_exporter"
38+
delegate_to: localhost
39+
check_mode: false
40+
41+
- name: Propagate mysqld_exporter binaries
42+
copy:
43+
src: "/tmp/mysqld_exporter-{{ mysqld_exporter_version }}.linux-{{ go_arch_map[ansible_architecture] | default(ansible_architecture) }}/mysqld_exporter"
44+
dest: "/usr/local/bin/mysqld_exporter"
45+
mode: 0755
46+
owner: root
47+
group: root
48+
notify:
49+
- restart mysqld exporter
50+
when: not ansible_check_mode
51+
when: mysqld_exporter_binary_local_dir | length == 0
52+
53+
- name: propagate locally distributed mysqld_exporter binary
54+
copy:
55+
src: "{{ mysqld_exporter_binary_local_dir }}/mysqld_exporter"
56+
dest: "/usr/local/bin/mysqld_exporter"
57+
mode: 0755
58+
owner: root
59+
group: root
60+
when: mysqld_exporter_binary_local_dir | length > 0
61+
notify: restart mysqld exporter
62+
63+
- name: Copy the mysqld_exporter systemd service file
64+
template:
65+
src: mysqld_exporter.service.j2
66+
dest: /etc/systemd/system/mysqld_exporter.service
67+
owner: root
68+
group: root
69+
mode: 0644
70+
no_log: "{{ not lookup('env', 'ANSIBLE_DEBUG') | bool }}"
71+
notify:
72+
- restart mysqld exporter

tasks/main.yml

Lines changed: 2 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -1,65 +1,7 @@
11
---
2-
- include: preflight.yml
2+
- import_tasks: preflight.yml
33

4-
- name: Create the MySQL Exporter group
5-
group:
6-
name: "{{ __mysqld_exporter_group }}"
7-
state: present
8-
system: true
9-
10-
- name: Create the MySQL Exporter user
11-
user:
12-
name: "{{ __mysqld_exporter_user }}"
13-
groups: "{{ __mysqld_exporter_group }}"
14-
append: true
15-
shell: /usr/sbin/nologin
16-
system: true
17-
createhome: false
18-
home: /
19-
20-
- name: Download mysqld_exporter binary to local folder
21-
become: false
22-
get_url:
23-
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"
24-
dest: "/tmp/mysqld_exporter-{{ mysqld_exporter_version }}.linux-{{ go_arch_map[ansible_architecture] | default(ansible_architecture) }}.tar.gz"
25-
checksum: "sha256:{{ __mysqld_exporter_checksum }}"
26-
register: _download_binary
27-
until: _download_binary is succeeded
28-
retries: 5
29-
delay: 2
30-
delegate_to: localhost
31-
check_mode: false
32-
33-
- name: Unpack mysqld_exporter binary
34-
become: false
35-
unarchive:
36-
src: "/tmp/mysqld_exporter-{{ mysqld_exporter_version }}.linux-{{ go_arch_map[ansible_architecture] | default(ansible_architecture) }}.tar.gz"
37-
dest: "/tmp"
38-
creates: "/tmp/mysqld_exporter-{{ mysqld_exporter_version }}.linux-{{ go_arch_map[ansible_architecture] | default(ansible_architecture) }}/mysqld_exporter"
39-
delegate_to: localhost
40-
check_mode: false
41-
42-
- name: Propagate mysqld_exporter binaries
43-
copy:
44-
src: "/tmp/mysqld_exporter-{{ mysqld_exporter_version }}.linux-{{ go_arch_map[ansible_architecture] | default(ansible_architecture) }}/mysqld_exporter"
45-
dest: "/usr/local/bin/mysqld_exporter"
46-
mode: 0755
47-
owner: root
48-
group: root
49-
notify:
50-
- restart mysqld exporter
51-
when: not ansible_check_mode
52-
53-
- name: Copy the mysqld_exporter systemd service file
54-
template:
55-
src: mysqld_exporter.service.j2
56-
dest: /etc/systemd/system/mysqld_exporter.service
57-
owner: root
58-
group: root
59-
mode: 0644
60-
no_log: "{{ not lookup('env', 'ANSIBLE_DEBUG') | bool }}"
61-
notify:
62-
- restart mysqld exporter
4+
- import_tasks: install.yml
635

646
- name: Ensure mysqld_exporter is enabled on boot
657
systemd:

0 commit comments

Comments
 (0)