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

Commit cc0591f

Browse files
authored
Merge pull request #1 from inuits/master
Working base profile for memcached exporter
2 parents 1246ee9 + 0959f34 commit cc0591f

File tree

9 files changed

+151
-3
lines changed

9 files changed

+151
-3
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ All variables which can be overridden are stored in [defaults/main.yml](defaults
2020
| Name | Default Value | Description |
2121
| -------------- | ------------- | -----------------------------------|
2222
| `memcached_exporter_web_listen_address` | "0.0.0.0:9150" | Address on which memcached-exporter will listen |
23+
| `memcached_address` | "localhost:11211" | Address on which memcached itself is running |
2324

2425
## Example
2526

defaults/main.yml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
---
2+
memcached_exporter_version: 0.7.0
3+
memcached_exporter_binary_local_dir: ""
24
memcached_exporter_web_listen_address: "0.0.0.0:9150"
5+
memcached_address: "localhost:11211"
36

47
# Internal variables
58
_memcached_exporter_system_user: "memcached_exporter"

molecule/alternative/playbook.yml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,5 @@
33
any_errors_fatal: true
44
roles:
55
- ansible-memcached-exporter
6-
vars: []
6+
vars:
7+
memcached_exporter_web_listen_address: "0.0.0.0:9155"
Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,20 @@
1-
import pytest
21
import os
32
import testinfra.utils.ansible_runner
43

54
testinfra_hosts = testinfra.utils.ansible_runner.AnsibleRunner(
65
os.environ['MOLECULE_INVENTORY_FILE']).get_hosts('all')
6+
7+
8+
def test_service(host):
9+
s = host.service("memcached_exporter")
10+
assert s.is_enabled
11+
assert s.is_running
12+
13+
14+
def test_socket(host):
15+
sockets = [
16+
"tcp://127.0.0.1:9155"
17+
]
18+
for socket in sockets:
19+
s = host.socket(socket)
20+
assert s.is_listening

molecule/default/tests/test_default.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,3 +3,18 @@
33

44
testinfra_hosts = testinfra.utils.ansible_runner.AnsibleRunner(
55
os.environ['MOLECULE_INVENTORY_FILE']).get_hosts('all')
6+
7+
8+
def test_service(host):
9+
s = host.service("memcached_exporter")
10+
assert s.is_enabled
11+
assert s.is_running
12+
13+
14+
def test_socket(host):
15+
sockets = [
16+
"tcp://127.0.0.1:9150"
17+
]
18+
for socket in sockets:
19+
s = host.socket(socket)
20+
assert s.is_listening

tasks/install.yml

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,3 +14,48 @@
1414
system: true
1515
createhome: false
1616
home: /
17+
18+
- block:
19+
- name: Download memcached_exporter binary to local folder
20+
become: false
21+
get_url:
22+
url: "https://github.com/prometheus/memcached_exporter/releases/download/v{{ memcached_exporter_version }}/memcached_exporter-{{ memcached_exporter_version }}.linux-{{ go_arch }}.tar.gz"
23+
dest: "/tmp/memcached_exporter-{{ memcached_exporter_version }}.linux-{{ go_arch }}.tar.gz"
24+
checksum: "sha256:{{ memcached_exporter_checksum }}"
25+
mode: '0644'
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 memcached_exporter binary
34+
become: false
35+
unarchive:
36+
src: "/tmp/memcached_exporter-{{ memcached_exporter_version }}.linux-{{ go_arch }}.tar.gz"
37+
dest: "/tmp"
38+
creates: "/tmp/memcached_exporter-{{ memcached_exporter_version }}.linux-{{ go_arch }}/memcached_exporter"
39+
delegate_to: localhost
40+
check_mode: false
41+
42+
- name: Propagate memcached_exporter binaries
43+
copy:
44+
src: "/tmp/memcached_exporter-{{ memcached_exporter_version }}.linux-{{ go_arch }}/memcached_exporter"
45+
dest: "{{ _memcached_exporter_binary_install_dir }}/memcached_exporter"
46+
mode: 0755
47+
owner: root
48+
group: root
49+
notify: restart memcached_exporter
50+
when: not ansible_check_mode
51+
when: memcached_exporter_binary_local_dir | length == 0
52+
53+
- name: propagate locally distributed memcached_exporter binary
54+
copy:
55+
src: "{{ memcached_exporter_binary_local_dir }}/memcached_exporter"
56+
dest: "{{ _memcached_exporter_binary_install_dir }}/memcached_exporter"
57+
mode: 0755
58+
owner: root
59+
group: root
60+
when: memcached_exporter_binary_local_dir | length > 0
61+
notify: restart memcached_exporter

tasks/preflight.yml

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,3 +3,68 @@
33
assert:
44
that: ansible_service_mgr == 'systemd'
55
msg: "This module only works with systemd"
6+
7+
- name: Naive assertion of proper listen address
8+
assert:
9+
that:
10+
- "':' in memcached_exporter_web_listen_address"
11+
12+
- name: Check if memcached_exporter is installed
13+
stat:
14+
path: "{{ _memcached_exporter_binary_install_dir }}/memcached_exporter"
15+
register: __memcached_exporter_is_installed
16+
check_mode: false
17+
tags:
18+
- memcached_exporter_install
19+
20+
## NO VERSION IN MEMCACHED EXPORTER FOR NOW
21+
# - name: Gather currently installed memcached_exporter version (if any)
22+
# command: "{{ _memcached_exporter_binary_install_dir }}/memcached_exporter --version"
23+
# args:
24+
# warn: false
25+
# changed_when: false
26+
# register: __memcached_exporter_current_version_output
27+
# check_mode: false
28+
# when: __memcached_exporter_is_installed.stat.exists
29+
# tags:
30+
# - memcached_exporter_install
31+
# - skip_ansible_lint
32+
33+
- block:
34+
- name: Get latest release
35+
uri:
36+
url: "https://api.github.com/repos/prometheus/memcached_exporter/releases/latest"
37+
method: GET
38+
return_content: true
39+
status_code: 200
40+
body_format: json
41+
user: "{{ lookup('env', 'GH_USER') | default(omit) }}"
42+
password: "{{ lookup('env', 'GH_TOKEN') | default(omit) }}"
43+
no_log: "{{ not lookup('env', 'MOLECULE_DEBUG') | bool }}"
44+
register: _latest_release
45+
until: _latest_release.status == 200
46+
retries: 5
47+
48+
- name: "Set memcached_exporter version to {{ _latest_release.json.tag_name[1:] }}"
49+
set_fact:
50+
memcached_exporter_version: "{{ _latest_release.json.tag_name[1:] }}"
51+
when:
52+
- memcached_exporter_version == "latest"
53+
- memcached_exporter_binary_local_dir | length == 0
54+
delegate_to: localhost
55+
run_once: true
56+
57+
- block:
58+
- name: Get checksum list from github
59+
set_fact:
60+
_checksums: "{{ lookup('url', 'https://github.com/prometheus/memcached_exporter/releases/download/v' + memcached_exporter_version + '/sha256sums.txt', wantlist=True) | list }}"
61+
run_once: true
62+
63+
- name: "Get checksum for {{ go_arch }} architecture"
64+
set_fact:
65+
memcached_exporter_checksum: "{{ item.split(' ')[0] }}"
66+
with_items: "{{ _checksums }}"
67+
when:
68+
- "('linux-' + go_arch + '.tar.gz') in item"
69+
delegate_to: localhost
70+
when: memcached_exporter_binary_local_dir | length == 0

templates/memcached_exporter.service.j2

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ StartLimitIntervalSec=0
1010
Type=simple
1111
User={{ _memcached_exporter_system_user }}
1212
Group={{ _memcached_exporter_system_group }}
13-
ExecStart=/usr/local/bin/memcached_exporter
13+
ExecStart={{ _memcached_exporter_binary_install_dir }}/memcached_exporter --memcached.address={{ memcached_address }} --web.listen-address={{ memcached_exporter_web_listen_address }}
1414
SyslogIdentifier=memcached_exporter
1515
Restart=always
1616
RestartSec=5

vars/main.yml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,3 +7,7 @@ go_arch_map:
77
armv6l: 'armv6'
88

99
go_arch: "{{ go_arch_map[ansible_architecture] | default(ansible_architecture) }}"
10+
11+
_memcached_exporter_binary_install_dir: "/usr/local/bin"
12+
_memcached_exporter_system_group: "mem-exp"
13+
_memcached_exporter_system_user: "{{ _memcached_exporter_system_group }}"

0 commit comments

Comments
 (0)