fix: add missing alternative/latest molecule scenarios

Signed-off-by: gardar <gardar@users.noreply.github.com>
This commit is contained in:
gardar 2024-03-08 20:04:30 +00:00
parent 457da4282b
commit 02ff0e7219
No known key found for this signature in database
GPG key ID: 75FAE37CBA8C13C2
7 changed files with 208 additions and 0 deletions

View file

@ -0,0 +1,28 @@
---
provisioner:
inventory:
group_vars:
all:
process_exporter_binary_local_dir: "/tmp/process_exporter-linux-amd64"
process_exporter_web_listen_address: "127.0.0.1:8080"
process_exporter_tls_server_config:
cert_file: /etc/process_exporter/tls.cert
key_file: /etc/process_exporter/tls.key
process_exporter_http_server_config:
http2: true
process_exporter_basic_auth_users:
randomuser: examplepassword
go_arch: amd64
process_exporter_version: 0.7.10
process_exporter_names: |
{% raw %}
- name: "{{.Comm}}"
cmdline:
- systemd
- name: "{{.Comm}}"
cmdline:
- systemd-journald
- name: "{{.Comm}}"
cmdline:
- crond
{% endraw %}

View file

@ -0,0 +1,77 @@
---
- name: Run local preparation
hosts: localhost
gather_facts: false
tasks:
- name: Download process_exporter binary to local folder
become: false
ansible.builtin.get_url:
url: "https://github.com/ncabatoff/process-exporter/releases/download/v{{\
\ process_exporter_version }}/process_exporter-{{ process_exporter_version }}.linux-{{\
\ go_arch }}.tar.gz"
dest: "/tmp/process_exporter-{{ process_exporter_version }}.linux-{{ go_arch }}.tar.gz"
mode: 0644
register: _download_binary
until: _download_binary is succeeded
retries: 5
delay: 2
check_mode: false
- name: Unpack process_exporter binary
become: false
ansible.builtin.unarchive:
src: "/tmp/process_exporter-{{ process_exporter_version }}.linux-{{ go_arch }}.tar.gz"
dest: "/tmp"
creates: "/tmp/process-exporter-{{ process_exporter_version }}.linux-{{ go_arch }}/process-exporter"
check_mode: false
- name: Link to process_exporter binaries directory
become: false
ansible.builtin.file:
src: "/tmp/process-exporter-{{ process_exporter_version }}.linux-amd64"
dest: "/tmp/process_exporter-linux-amd64"
state: link
check_mode: false
- name: Install pyOpenSSL for certificate generation
ansible.builtin.pip:
name: "pyOpenSSL"
- name: Create private key
community.crypto.openssl_privatekey:
path: "/tmp/tls.key"
- name: Create CSR
community.crypto.openssl_csr:
path: "/tmp/tls.csr"
privatekey_path: "/tmp/tls.key"
- name: Create certificate
community.crypto.x509_certificate:
path: "/tmp/tls.cert"
csr_path: "/tmp/tls.csr"
privatekey_path: "/tmp/tls.key"
provider: selfsigned
- name: Run target preparation
hosts: all
any_errors_fatal: true
tasks:
- name: Create process_exporter cert dir
ansible.builtin.file:
path: "{{ process_exporter_tls_server_config.cert_file | dirname }}"
state: directory
owner: root
group: root
mode: u+rwX,g+rwX,o=rX
- name: Copy cert and key
ansible.builtin.copy:
src: "{{ item.src }}"
dest: "{{ item.dest }}"
mode: "{{ item.mode | default('0644') }}"
loop:
- src: "/tmp/tls.cert"
dest: "{{ process_exporter_tls_server_config.cert_file }}"
- src: "/tmp/tls.key"
dest: "{{ process_exporter_tls_server_config.key_file }}"

View file

@ -0,0 +1,46 @@
from __future__ import (absolute_import, division, print_function)
__metaclass__ = type
import os
import testinfra.utils.ansible_runner
import pytest
testinfra_hosts = testinfra.utils.ansible_runner.AnsibleRunner(
os.environ['MOLECULE_INVENTORY_FILE']).get_hosts('all')
def test_directories(host):
dirs = [
"/var/lib/process_exporter"
]
for dir in dirs:
d = host.file(dir)
assert not d.exists
def test_service(host):
s = host.service("process_exporter")
try:
assert s.is_running
except AssertionError:
# Capture service logs
journal_output = host.run('journalctl -u process_exporter --since "1 hour ago"')
print("\n==== journalctl -u process_exporter Output ====\n")
print(journal_output)
print("\n============================================\n")
raise # Re-raise the original assertion error
def test_protecthome_property(host):
s = host.service("process_exporter")
p = s.systemd_properties
assert p.get("ProtectHome") == "yes"
def test_socket(host):
sockets = [
"tcp://127.0.0.1:8080"
]
for socket in sockets:
s = host.socket(socket)
assert s.is_listening

View file

@ -0,0 +1,6 @@
---
provisioner:
inventory:
group_vars:
all:
process_exporter_version: latest

View file

@ -0,0 +1,43 @@
from __future__ import (absolute_import, division, print_function)
__metaclass__ = type
import os
import testinfra.utils.ansible_runner
import pytest
testinfra_hosts = testinfra.utils.ansible_runner.AnsibleRunner(
os.environ['MOLECULE_INVENTORY_FILE']).get_hosts('all')
@pytest.mark.parametrize("files", [
"/etc/systemd/system/process_exporter.service",
"/usr/local/bin/process_exporter"
])
def test_files(host, files):
f = host.file(files)
assert f.exists
assert f.is_file
def test_service(host):
s = host.service("process_exporter")
try:
assert s.is_running
except AssertionError:
# Capture service logs
journal_output = host.run('journalctl -u process_exporter --since "1 hour ago"')
print("\n==== journalctl -u process_exporter Output ====\n")
print(journal_output)
print("\n============================================\n")
raise # Re-raise the original assertion error
def test_protecthome_property(host):
s = host.service("process_exporter")
p = s.systemd_properties
assert p.get("ProtectHome") == "read-only"
def test_socket(host):
s = host.socket("tcp://0.0.0.0:9256")
assert s.is_listening

View file

@ -0,0 +1,4 @@
#!/usr/bin/env bash
collection_root=$(pwd | grep -oP ".+\/ansible_collections\/\w+?\/\w+")
source "$collection_root/tests/integration/molecule.sh"

View file

@ -0,0 +1,4 @@
#!/usr/bin/env bash
collection_root=$(pwd | grep -oP ".+\/ansible_collections\/\w+?\/\w+")
source "$collection_root/tests/integration/molecule.sh"