Merge pull request #17 from gardar/ci/testing

feat: role/collection testing with ansible-test and molecule
This commit is contained in:
Ben Kochie 2023-02-01 19:11:31 +01:00 committed by GitHub
commit 5f93f50d00
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
84 changed files with 465 additions and 977 deletions

2
.config/ansible-lint.yml Normal file
View file

@ -0,0 +1,2 @@
---
profile: production

View file

@ -0,0 +1,60 @@
---
dependency:
name: galaxy
driver:
name: docker
lint: |
set -e
yamllint -c ${YAMLLINT_CONFIG_FILE} .
ansible-lint
platforms:
- name: almalinux-8
image: dokken/almalinux-8
pre_build_image: true
privileged: true
cgroup_parent: docker.slice
command: /lib/systemd/systemd
- name: centos-7
image: dokken/centos-7
pre_build_image: true
privileged: true
cgroup_parent: docker.slice
command: /usr/lib/systemd/systemd
- name: centos-stream-8
image: dokken/centos-stream-8
pre_build_image: true
privileged: true
cgroup_parent: docker.slice
command: /lib/systemd/systemd
- name: debian-9
image: dokken/debian-9
pre_build_image: true
privileged: true
cgroup_parent: docker.slice
command: /lib/systemd/systemd
- name: debian-10
image: dokken/debian-10
pre_build_image: true
privileged: true
cgroup_parent: docker.slice
command: /lib/systemd/systemd
- name: debian-11
image: dokken/debian-11
pre_build_image: true
privileged: true
cgroup_parent: docker.slice
command: /lib/systemd/systemd
- name: fedora-30
image: dokken/fedora-30
pre_build_image: true
privileged: true
cgroup_parent: docker.slice
command: /lib/systemd/systemd
- name: ubuntu-18.04
image: dokken/ubuntu-18.04
pre_build_image: true
privileged: true
cgroup_parent: docker.slice
command: /lib/systemd/systemd
verifier:
name: testinfra

View file

@ -0,0 +1,23 @@
---
extends: default
rules:
braces:
max-spaces-inside: 1
level: error
brackets:
max-spaces-inside: 1
level: error
colons:
max-spaces-after: -1
level: error
commas:
max-spaces-after: -1
level: error
empty-lines:
max: 3
level: error
hyphens:
level: error
line-length:
max: 160

98
.github/workflows/ansible-ci.yml vendored Normal file
View file

@ -0,0 +1,98 @@
---
name: Ansible CI
on: [push, pull_request]
env:
ANSIBLE_FORCE_COLOR: true
jobs:
ansible-lint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Lint collection
uses: ansible/ansible-lint-action@main
discover-ansible-versions:
runs-on: ubuntu-latest
outputs:
versions: ${{ steps.supported-ansible-versions.outputs.result }}
steps:
- uses: actions/checkout@v3
- name: Get Ansible versions that the collection supports
id: supported-ansible-versions
uses: mikefarah/yq@master
with:
cmd: yq -o json -I=0 '.requires_ansible | split(",") | .[] |= sub("(.*)", "stable-${1}")' meta/runtime.yml
ansible-test-sanity:
uses: ./.github/workflows/ansible-test-sanity.yml
needs:
- ansible-lint
- discover-ansible-versions
with:
ansible-core-versions: ${{ needs.discover-ansible-versions.outputs.versions }}
discover-ansible-tests:
runs-on: ubuntu-latest
needs: ansible-lint
outputs:
molecule-tests: ${{ steps.set-molecule-tests.outputs.tests }}
integration-tests: ${{ steps.set-integration-tests.outputs.tests }}
steps:
- uses: actions/checkout@v3
with:
fetch-depth: 0
- name: Get changed roles
id: changed-roles
uses: tj-actions/changed-files@v35
with:
path: "roles"
diff_relative: "true"
files: "**"
dir_names: "true"
dir_names_max_depth: "1"
since_last_remote_commit: "true"
- name: Discover role tests
if: steps.changed-roles.outputs.any_changed == 'true'
id: set-molecule-tests
run: |
echo tests="[`for role in ${{ steps.changed-roles.outputs.all_changed_and_modified_files }}; do
for test in $(find tests/integration/targets -maxdepth 1 -mindepth 1 -type d -iname "molecule-${role}-*" -printf "%f\n"); do
echo '{"test":\"'"${test}"'\","name":\"'"${test#*-}\"'"}';
done
done | tr '\n' ',' | sed '$s/,$//'`]" >> $GITHUB_OUTPUT
- name: Discover integration tests
id: set-integration-tests
run: |
echo tests="[`for test in $(find tests/integration/targets -maxdepth 1 -mindepth 1 -type d -not -iname "molecule-*" -printf "%f\n"); do
echo '{"test":\"'"${test}"'\","name":\"'"${test}\"'"}';
done | tr '\n' ',' | sed '$s/,$//'`]" >> $GITHUB_OUTPUT
ansible-test-molecule:
uses: ./.github/workflows/ansible-test-integration.yml
needs:
- discover-ansible-tests
- discover-ansible-versions
if: needs.discover-ansible-tests.outputs.molecule-tests != '[]' &&
needs.discover-ansible-tests.outputs.molecule-tests != ''
with:
targets: ${{ needs.discover-ansible-tests.outputs.molecule-tests }}
ansible-core-versions: ${{ needs.discover-ansible-versions.outputs.versions }}
ansible-test-integration:
uses: ./.github/workflows/ansible-test-integration.yml
needs:
- discover-ansible-tests
- discover-ansible-versions
if:
needs.discover-ansible-tests.outputs.integration-tests != '[]' &&
needs.discover-ansible-tests.outputs.integration-tests != ''
with:
targets: ${{ needs.discover-ansible-tests.outputs.integration-tests }}
ansible-core-versions: ${{ needs.discover-ansible-versions.outputs.versions }}

View file

@ -1,18 +0,0 @@
---
name: Ansible Lint
on: [push, pull_request]
env:
ANSIBLE_FORCE_COLOR: true
jobs:
lint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Lint roles
uses: ansible/ansible-lint-action@main
with:
path: roles

View file

@ -0,0 +1,39 @@
---
name: Ansible Integration Test
on:
workflow_call:
inputs:
targets:
required: true
type: string
ansible-core-versions:
required: false
default: '["stable-2.14"]'
type: string
target-python-versions:
required: false
default: '["default"]'
type: string
jobs:
ansible-test-integration:
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
targets: ${{ fromJson(inputs.targets) }}
ansible-core-versions: ${{ fromJson(inputs.ansible-core-versions) }}
target-python-versions: ${{ fromJson(inputs.target-python-versions) }}
name: "${{ matrix.targets.name }}-${{ matrix.ansible-core-versions }}"
steps:
- name: "Perform ${{ matrix.targets.test }} integration test with ansible-test"
uses: ansible-community/ansible-test-gh-action@release/v1
with:
ansible-core-version: ${{ matrix.ansible-core-versions }}
target-python-version: ${{ matrix.target-python-versions }}
controller-python-version: auto
docker-image: "--docker-privileged" # Workaround because ansible-test action doesn't support setting privileged flag
testing-type: integration
target: ${{ matrix.targets.test }}
# coverage: never # https://github.com/ansible-community/ansible-test-gh-action/pull/50

View file

@ -0,0 +1,25 @@
---
name: Ansible Sanity Test
on:
workflow_call:
inputs:
ansible-core-versions:
required: false
default: '["stable-2.14"]'
type: string
jobs:
ansible-test-sanity:
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
ansible-core-versions: ${{ fromJson(inputs.ansible-core-versions) }}
name: "sanity-${{ matrix.ansible-core-versions }}"
steps:
- name: "Perform sanity test with ansible-test"
uses: ansible-community/ansible-test-gh-action@release/v1
with:
ansible-core-version: ${{ matrix.ansible-core-versions }}
testing-type: sanity

View file

@ -1,7 +1,7 @@
--- ---
namespace: prometheus namespace: prometheus
name: prometheus name: prometheus
version: 0.0.1 version: 1.0.0
readme: README.md readme: README.md
authors: authors:

View file

@ -1,2 +1,2 @@
--- ---
requires_ansible: '>=2.9.10' requires_ansible: "2.9,2.10,2.11,2.12,2.13,2.14"

View file

@ -3,7 +3,7 @@
hosts: all hosts: all
any_errors_fatal: true any_errors_fatal: true
roles: roles:
- alertmanager - prometheus.prometheus.alertmanager
vars: vars:
alertmanager_binary_local_dir: '/tmp/alertmanager-linux-amd64' alertmanager_binary_local_dir: '/tmp/alertmanager-linux-amd64'
alertmanager_config_dir: /opt/am/etc alertmanager_config_dir: /opt/am/etc

View file

@ -1,70 +1 @@
--- ---
dependency:
name: galaxy
driver:
name: docker
platforms:
- name: bionic
pre_build_image: true
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
pre_build_image: true
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
pre_build_image: true
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
pre_build_image: true
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
pre_build_image: true
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
pre_build_image: true
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
pre_build_image: true
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
playbooks:
prepare: prepare.yml
converge: playbook.yml
inventory:
group_vars:
python3:
ansible_python_interpreter: /usr/bin/python3
verifier:
name: testinfra

View file

@ -1,6 +1,9 @@
import pytest from __future__ import (absolute_import, division, print_function)
__metaclass__ = type
import os import os
import testinfra.utils.ansible_runner import testinfra.utils.ansible_runner
import pytest
testinfra_hosts = testinfra.utils.ansible_runner.AnsibleRunner( testinfra_hosts = testinfra.utils.ansible_runner.AnsibleRunner(
os.environ['MOLECULE_INVENTORY_FILE']).get_hosts('all') os.environ['MOLECULE_INVENTORY_FILE']).get_hosts('all')

View file

@ -3,7 +3,7 @@
hosts: all hosts: all
any_errors_fatal: true any_errors_fatal: true
roles: roles:
- alertmanager - prometheus.prometheus.alertmanager
vars: vars:
alertmanager_slack_api_url: "http://example.com" alertmanager_slack_api_url: "http://example.com"
alertmanager_receivers: alertmanager_receivers:

View file

@ -1,70 +1 @@
--- ---
dependency:
name: galaxy
driver:
name: docker
platforms:
- name: bionic
pre_build_image: true
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
pre_build_image: true
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
pre_build_image: true
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
pre_build_image: true
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
pre_build_image: true
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
pre_build_image: true
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
pre_build_image: true
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
playbooks:
prepare: prepare.yml
converge: playbook.yml
inventory:
group_vars:
python3:
ansible_python_interpreter: /usr/bin/python3
verifier:
name: testinfra

View file

@ -1,5 +0,0 @@
---
- name: Prepare
hosts: all
gather_facts: false
tasks: []

View file

@ -1,6 +1,9 @@
import pytest from __future__ import (absolute_import, division, print_function)
__metaclass__ = type
import os import os
import testinfra.utils.ansible_runner import testinfra.utils.ansible_runner
import pytest
testinfra_hosts = testinfra.utils.ansible_runner.AnsibleRunner( testinfra_hosts = testinfra.utils.ansible_runner.AnsibleRunner(
os.environ['MOLECULE_INVENTORY_FILE']).get_hosts('all') os.environ['MOLECULE_INVENTORY_FILE']).get_hosts('all')

View file

@ -3,7 +3,7 @@
hosts: all hosts: all
any_errors_fatal: true any_errors_fatal: true
roles: roles:
- alertmanager - prometheus.prometheus.alertmanager
vars: vars:
alertmanager_version: latest alertmanager_version: latest
alertmanager_slack_api_url: "http://example.com" alertmanager_slack_api_url: "http://example.com"

View file

@ -1,35 +1 @@
--- ---
dependency:
name: galaxy
driver:
name: docker
platforms:
- name: buster
pre_build_image: true
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: fedora
pre_build_image: true
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
playbooks:
create: ../default/create.yml
prepare: ../default/prepare.yml
converge: playbook.yml
destroy: ../default/destroy.yml
inventory:
group_vars:
python3:
ansible_python_interpreter: /usr/bin/python3
verifier:
name: testinfra

View file

@ -1,6 +1,9 @@
import pytest from __future__ import (absolute_import, division, print_function)
__metaclass__ = type
import os import os
import testinfra.utils.ansible_runner import testinfra.utils.ansible_runner
import pytest
testinfra_hosts = testinfra.utils.ansible_runner.AnsibleRunner( testinfra_hosts = testinfra.utils.ansible_runner.AnsibleRunner(
os.environ['MOLECULE_INVENTORY_FILE']).get_hosts('all') os.environ['MOLECULE_INVENTORY_FILE']).get_hosts('all')

View file

@ -33,7 +33,7 @@
- name: Download alertmanager binary to local folder - name: Download alertmanager binary to local folder
become: false become: false
ansible.builtin.get_url: ansible.builtin.get_url:
url: "https://github.com/prometheus/alertmanager/releases/download/v{{ alertmanager_version }}/ url: "https://github.com/prometheus/alertmanager/releases/download/v{{ alertmanager_version }}/\
alertmanager-{{ alertmanager_version }}.linux-{{ go_arch }}.tar.gz" alertmanager-{{ alertmanager_version }}.linux-{{ go_arch }}.tar.gz"
dest: "/tmp/alertmanager-{{ alertmanager_version }}.linux-{{ go_arch }}.tar.gz" dest: "/tmp/alertmanager-{{ alertmanager_version }}.linux-{{ go_arch }}.tar.gz"
checksum: "sha256:{{ __alertmanager_checksum }}" checksum: "sha256:{{ __alertmanager_checksum }}"

View file

@ -17,39 +17,27 @@
alertmanager_systemd_version: "{{ __systemd_version.stdout_lines[0].split(' ')[-1] }}" alertmanager_systemd_version: "{{ __systemd_version.stdout_lines[0].split(' ')[-1] }}"
- name: Discover latest version - name: Discover latest version
ansible.builtin.set_fact:
alertmanager_version: "{{ (lookup('url', 'https://api.github.com/repos/prometheus/alertmanager/releases/latest', split_lines=False) |
from_json).get('tag_name') | replace('v', '') }}"
run_once: true
until: alertmanager_version is version('0.0.0', '>=')
retries: 10
when: when:
- alertmanager_version == "latest" - alertmanager_version == "latest"
- alertmanager_binary_local_dir | length == 0 - alertmanager_binary_local_dir | length == 0
block:
- name: Get latest release
ansible.builtin.uri:
url: "https://api.github.com/repos/prometheus/alertmanager/releases/latest"
method: GET
return_content: true
status_code: 200
body_format: json
user: "{{ lookup('env', 'GH_USER') | default(omit) }}"
password: "{{ lookup('env', 'GH_TOKEN') | default(omit) }}"
no_log: "{{ not lookup('env', 'MOLECULE_DEBUG') | bool }}"
register: _latest_release
until: _latest_release.status == 200
retries: 5
- name: "Set alertmanager version to {{ _latest_release.json.tag_name[1:] }}"
ansible.builtin.set_fact:
alertmanager_version: "{{ _latest_release.json.tag_name[1:] }}"
alertmanager_checksum_url: "https://github.com/prometheus/alertmanager/releases/download/v{{ alertmanager_version }}/sha256sums.txt"
- name: Get alertmanager binary checksum - name: Get alertmanager binary checksum
delegate_to: localhost
when: when:
- alertmanager_binary_local_dir | length == 0 - alertmanager_binary_local_dir | length == 0
block: block:
- name: "Get checksum list" - name: "Get checksum list"
ansible.builtin.set_fact: ansible.builtin.set_fact:
__alertmanager_checksums: "{{ lookup('url', 'https://github.com/prometheus/alertmanager/releases/download/v' + alertmanager_version + '/sha256sums.txt', wantlist=True) | list }}" __alertmanager_checksums: "{{ lookup('url', 'https://github.com/prometheus/alertmanager/releases/download/v' + alertmanager_version +
'/sha256sums.txt', wantlist=True) | list }}"
run_once: true run_once: true
until: __alertmanager_checksums is search('linux-' + go_arch + '.tar.gz')
retries: 10
- name: "Get checksum for {{ go_arch }}" - name: "Get checksum for {{ go_arch }}"
ansible.builtin.set_fact: ansible.builtin.set_fact:
@ -138,5 +126,6 @@
- name: "`alertmanager_child_routes` is no longer supported" - name: "`alertmanager_child_routes` is no longer supported"
ansible.builtin.fail: ansible.builtin.fail:
msg: "Please move content of `alertmanager_child_routes` to `alertmanager_route.routes` as the former variable is deprecated and will be removed in future versions." msg: "Please move content of `alertmanager_child_routes` to `alertmanager_route.routes` as the former variable is deprecated
and will be removed in future versions."
when: alertmanager_child_routes is defined when: alertmanager_child_routes is defined

View file

@ -3,7 +3,7 @@
hosts: all hosts: all
any_errors_fatal: true any_errors_fatal: true
roles: roles:
- blackbox_exporter - prometheus.prometheus.blackbox_exporter
vars: vars:
blackbox_exporter_web_listen_address: "127.0.0.1:9000" blackbox_exporter_web_listen_address: "127.0.0.1:9000"
blackbox_exporter_cli_flags: blackbox_exporter_cli_flags:

View file

@ -1,70 +1 @@
--- ---
dependency:
name: galaxy
driver:
name: docker
platforms:
- name: bionic
pre_build_image: true
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
pre_build_image: true
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
pre_build_image: true
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
pre_build_image: true
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
pre_build_image: true
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
pre_build_image: true
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
pre_build_image: true
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
playbooks:
prepare: prepare.yml
converge: playbook.yml
inventory:
group_vars:
python3:
ansible_python_interpreter: /usr/bin/python3
verifier:
name: testinfra

View file

@ -1,5 +0,0 @@
---
- name: Prepare
hosts: all
gather_facts: false
tasks: []

View file

@ -1,6 +1,9 @@
import pytest from __future__ import (absolute_import, division, print_function)
__metaclass__ = type
import os import os
import testinfra.utils.ansible_runner import testinfra.utils.ansible_runner
import pytest
testinfra_hosts = testinfra.utils.ansible_runner.AnsibleRunner( testinfra_hosts = testinfra.utils.ansible_runner.AnsibleRunner(
os.environ['MOLECULE_INVENTORY_FILE']).get_hosts('all') os.environ['MOLECULE_INVENTORY_FILE']).get_hosts('all')

View file

@ -3,4 +3,4 @@
hosts: all hosts: all
any_errors_fatal: true any_errors_fatal: true
roles: roles:
- blackbox_exporter - prometheus.prometheus.blackbox_exporter

View file

@ -1,70 +1 @@
--- ---
dependency:
name: galaxy
driver:
name: docker
platforms:
- name: bionic
pre_build_image: true
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
pre_build_image: true
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
pre_build_image: true
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
pre_build_image: true
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
pre_build_image: true
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
pre_build_image: true
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
pre_build_image: true
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
playbooks:
prepare: prepare.yml
converge: playbook.yml
inventory:
group_vars:
python3:
ansible_python_interpreter: /usr/bin/python3
verifier:
name: testinfra

View file

@ -1,5 +0,0 @@
---
- name: Prepare
hosts: all
gather_facts: false
tasks: []

View file

@ -1,6 +1,9 @@
import pytest from __future__ import (absolute_import, division, print_function)
__metaclass__ = type
import os import os
import testinfra.utils.ansible_runner import testinfra.utils.ansible_runner
import pytest
testinfra_hosts = testinfra.utils.ansible_runner.AnsibleRunner( testinfra_hosts = testinfra.utils.ansible_runner.AnsibleRunner(
os.environ['MOLECULE_INVENTORY_FILE']).get_hosts('all') os.environ['MOLECULE_INVENTORY_FILE']).get_hosts('all')

View file

@ -16,11 +16,11 @@
- name: Download blackbox exporter binary to local folder - name: Download blackbox exporter binary to local folder
become: false become: false
ansible.builtin.unarchive: ansible.builtin.unarchive:
src: "https://github.com/prometheus/blackbox_exporter/releases/download/v{{ blackbox_exporter_version }}/ src: "https://github.com/prometheus/blackbox_exporter/releases/download/v{{ blackbox_exporter_version }}/\
blackbox_exporter-{{ blackbox_exporter_version }}.linux-{{ go_arch_map[ansible_architecture] | default(ansible_architecture) }}.tar.gz" blackbox_exporter-{{ blackbox_exporter_version }}.linux-{{ go_arch_map[ansible_architecture] | default(ansible_architecture) }}.tar.gz"
dest: "/tmp" dest: "/tmp"
remote_src: true remote_src: true
creates: "/tmp/blackbox_exporter-{{ blackbox_exporter_version }}.linux-{{ go_arch_map[ansible_architecture] | default(ansible_architecture) }}/ creates: "/tmp/blackbox_exporter-{{ blackbox_exporter_version }}.linux-{{ go_arch_map[ansible_architecture] | default(ansible_architecture) }}/\
blackbox_exporter" blackbox_exporter"
register: _download_binary register: _download_binary
until: _download_binary is succeeded until: _download_binary is succeeded
@ -31,7 +31,7 @@
- name: Propagate blackbox exporter binary - name: Propagate blackbox exporter binary
ansible.builtin.copy: ansible.builtin.copy:
src: "/tmp/blackbox_exporter-{{ blackbox_exporter_version }}.linux-{{ go_arch_map[ansible_architecture] | default(ansible_architecture) }}/ src: "/tmp/blackbox_exporter-{{ blackbox_exporter_version }}.linux-{{ go_arch_map[ansible_architecture] | default(ansible_architecture) }}/\
blackbox_exporter" blackbox_exporter"
dest: "/usr/local/bin/blackbox_exporter" dest: "/usr/local/bin/blackbox_exporter"
mode: 0750 mode: 0750
@ -56,6 +56,7 @@
capability: cap_net_raw+ep capability: cap_net_raw+ep
state: present state: present
when: not ansible_check_mode when: not ansible_check_mode
changed_when: "'molecule-idempotence-notest' not in ansible_skip_tags"
- name: Check Debug Message - name: Check Debug Message
ansible.builtin.debug: ansible.builtin.debug:

View file

@ -3,7 +3,7 @@
hosts: all hosts: all
any_errors_fatal: true any_errors_fatal: true
roles: roles:
- node_exporter - prometheus.prometheus.node_exporter
pre_tasks: pre_tasks:
- name: Create node_exporter cert dir - name: Create node_exporter cert dir
ansible.builtin.file: ansible.builtin.file:
@ -11,13 +11,13 @@
state: directory state: directory
owner: root owner: root
group: root group: root
mode: 0755 mode: u+rwX,g+rwX,o=rX
- name: Copy cert and key - name: Copy cert and key
ansible.builtin.copy: ansible.builtin.copy:
src: "{{ item.src }}" src: "{{ item.src }}"
dest: "{{ item.dest }}" dest: "{{ item.dest }}"
mode: "{{ item.mode | default(0644) }}" mode: "{{ item.mode | default('0644') }}"
loop: loop:
- src: "/tmp/tls.cert" - src: "/tmp/tls.cert"
dest: "{{ node_exporter_tls_server_config.cert_file }}" dest: "{{ node_exporter_tls_server_config.cert_file }}"

View file

@ -1,70 +1 @@
--- ---
dependency:
name: galaxy
driver:
name: docker
platforms:
- name: bionic
pre_build_image: true
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
pre_build_image: true
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
pre_build_image: true
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
pre_build_image: true
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
pre_build_image: true
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
pre_build_image: true
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
pre_build_image: true
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
playbooks:
prepare: prepare.yml
converge: playbook.yml
inventory:
group_vars:
python3:
ansible_python_interpreter: /usr/bin/python3
verifier:
name: testinfra

View file

@ -9,7 +9,7 @@
- name: Download node_exporter binary to local folder - name: Download node_exporter binary to local folder
become: false become: false
ansible.builtin.get_url: ansible.builtin.get_url:
url: "https://github.com/prometheus/node_exporter/releases/download/v{{ node_exporter_version }}/ url: "https://github.com/prometheus/node_exporter/releases/download/v{{ node_exporter_version }}/\
node_exporter-{{ node_exporter_version }}.linux-{{ go_arch }}.tar.gz" node_exporter-{{ node_exporter_version }}.linux-{{ go_arch }}.tar.gz"
dest: "/tmp/node_exporter-{{ node_exporter_version }}.linux-{{ go_arch }}.tar.gz" dest: "/tmp/node_exporter-{{ node_exporter_version }}.linux-{{ go_arch }}.tar.gz"
mode: 0644 mode: 0644

View file

@ -1,3 +1,6 @@
from __future__ import (absolute_import, division, print_function)
__metaclass__ = type
import os import os
import testinfra.utils.ansible_runner import testinfra.utils.ansible_runner

View file

@ -3,6 +3,6 @@
hosts: all hosts: all
any_errors_fatal: true any_errors_fatal: true
roles: roles:
- node_exporter - prometheus.prometheus.node_exporter
vars: vars:
node_exporter_web_listen_address: "127.0.0.1:9100" node_exporter_web_listen_address: "127.0.0.1:9100"

View file

@ -1,70 +1 @@
--- ---
dependency:
name: galaxy
driver:
name: docker
platforms:
- name: bionic
pre_build_image: true
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
pre_build_image: true
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
pre_build_image: true
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
pre_build_image: true
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
pre_build_image: true
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
pre_build_image: true
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
pre_build_image: true
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
playbooks:
prepare: prepare.yml
converge: playbook.yml
inventory:
group_vars:
python3:
ansible_python_interpreter: /usr/bin/python3
verifier:
name: testinfra

View file

@ -1,5 +0,0 @@
---
- name: Prepare
hosts: all
gather_facts: false
tasks: []

View file

@ -1,3 +1,6 @@
from __future__ import (absolute_import, division, print_function)
__metaclass__ = type
import os import os
import testinfra.utils.ansible_runner import testinfra.utils.ansible_runner

View file

@ -3,6 +3,6 @@
hosts: all hosts: all
any_errors_fatal: true any_errors_fatal: true
roles: roles:
- node_exporter - prometheus.prometheus.node_exporter
vars: vars:
node_exporter_version: latest node_exporter_version: latest

View file

@ -1,35 +1 @@
--- ---
dependency:
name: galaxy
driver:
name: docker
platforms:
- name: buster
pre_build_image: true
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: fedora
pre_build_image: true
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
playbooks:
create: ../default/create.yml
prepare: ../default/prepare.yml
converge: playbook.yml
destroy: ../default/destroy.yml
inventory:
group_vars:
python3:
ansible_python_interpreter: /usr/bin/python3
verifier:
name: testinfra

View file

@ -1,6 +1,9 @@
import pytest from __future__ import (absolute_import, division, print_function)
__metaclass__ = type
import os import os
import testinfra.utils.ansible_runner import testinfra.utils.ansible_runner
import pytest
testinfra_hosts = testinfra.utils.ansible_runner.AnsibleRunner( testinfra_hosts = testinfra.utils.ansible_runner.AnsibleRunner(
os.environ['MOLECULE_INVENTORY_FILE']).get_hosts('all') os.environ['MOLECULE_INVENTORY_FILE']).get_hosts('all')

View file

@ -24,10 +24,10 @@
- name: Download node_exporter binary to local folder - name: Download node_exporter binary to local folder
become: false become: false
ansible.builtin.get_url: ansible.builtin.get_url:
url: "https://github.com/prometheus/node_exporter/releases/download/v{{ node_exporter_version }}/ url: "https://github.com/prometheus/node_exporter/releases/download/v{{ node_exporter_version }}/\
node_exporter-{{ node_exporter_version }}.linux-{{ go_arch }}.tar.gz" node_exporter-{{ node_exporter_version }}.linux-{{ go_arch }}.tar.gz"
dest: "/tmp/node_exporter-{{ node_exporter_version }}.linux-{{ go_arch }}.tar.gz" dest: "/tmp/node_exporter-{{ node_exporter_version }}.linux-{{ go_arch }}.tar.gz"
checksum: "sha256:{{ node_exporter_checksum }}" checksum: "sha256:{{ __node_exporter_checksum }}"
mode: '0644' mode: '0644'
register: _download_binary register: _download_binary
until: _download_binary is succeeded until: _download_binary is succeeded

View file

@ -71,42 +71,30 @@
- skip_ansible_lint - skip_ansible_lint
- name: Discover latest version - name: Discover latest version
ansible.builtin.set_fact:
node_exporter_version: "{{ (lookup('url', 'https://api.github.com/repos/prometheus/node_exporter/releases/latest', split_lines=False) |
from_json).get('tag_name') | replace('v', '') }}"
run_once: true
until: node_exporter_version is version('0.0.0', '>=')
retries: 10
when: when:
- node_exporter_version == "latest" - node_exporter_version == "latest"
- node_exporter_binary_local_dir | length == 0 - node_exporter_binary_local_dir | length == 0
delegate_to: localhost
run_once: true
block:
- name: Get latest release
ansible.builtin.uri:
url: "https://api.github.com/repos/prometheus/node_exporter/releases/latest"
method: GET
return_content: true
status_code: 200
body_format: json
user: "{{ lookup('env', 'GH_USER') | default(omit) }}"
password: "{{ lookup('env', 'GH_TOKEN') | default(omit) }}"
no_log: "{{ not lookup('env', 'MOLECULE_DEBUG') | bool }}"
register: _latest_release
until: _latest_release.status == 200
retries: 5
- name: "Set node_exporter version to {{ _latest_release.json.tag_name[1:] }}"
ansible.builtin.set_fact:
node_exporter_version: "{{ _latest_release.json.tag_name[1:] }}"
- name: Get node_exporter binary checksum - name: Get node_exporter binary checksum
delegate_to: localhost
when: node_exporter_binary_local_dir | length == 0 when: node_exporter_binary_local_dir | length == 0
block: block:
- name: Get checksum list from github - name: Get checksum list from github
ansible.builtin.set_fact: ansible.builtin.set_fact:
_checksums: "{{ lookup('url', 'https://github.com/prometheus/node_exporter/releases/download/v' + node_exporter_version + '/sha256sums.txt', wantlist=True) | list }}" __node_exporter_checksums: "{{ lookup('url', 'https://github.com/prometheus/node_exporter/releases/download/v' + node_exporter_version +
'/sha256sums.txt', wantlist=True) | list }}"
run_once: true run_once: true
until: __node_exporter_checksums is search('linux-' + go_arch + '.tar.gz')
retries: 10
- name: "Get checksum for {{ go_arch }}" - name: "Get checksum for {{ go_arch }}"
ansible.builtin.set_fact: ansible.builtin.set_fact:
node_exporter_checksum: "{{ item.split(' ')[0] }}" __node_exporter_checksum: "{{ item.split(' ')[0] }}"
with_items: "{{ _checksums }}" with_items: "{{ __node_exporter_checksums }}"
when: when:
- "('linux-' + go_arch + '.tar.gz') in item" - "('linux-' + go_arch + '.tar.gz') in item"

View file

@ -0,0 +1 @@
bcrypt

View file

@ -90,6 +90,7 @@ prometheus_static_targets_files:
- prometheus/targets/*.yml - prometheus/targets/*.yml
- prometheus/targets/*.json - prometheus/targets/*.json
# yamllint disable rule:line-length
prometheus_alert_rules: # noqa yaml[line-length] # noqa line-length prometheus_alert_rules: # noqa yaml[line-length] # noqa line-length
- alert: Watchdog - alert: Watchdog
expr: vector(1) expr: vector(1)
@ -217,3 +218,4 @@ prometheus_alert_rules: # noqa yaml[line-length] # noqa line-length
for: 10m for: 10m
labels: labels:
severity: warning severity: warning
# yamllint enable rule:line-length

View file

@ -3,7 +3,7 @@
hosts: all hosts: all
any_errors_fatal: true any_errors_fatal: true
roles: roles:
- prometheus - prometheus.prometheus.prometheus
vars: vars:
prometheus_binary_local_dir: '/tmp/prometheus-linux-amd64' prometheus_binary_local_dir: '/tmp/prometheus-linux-amd64'
prometheus_config_dir: /opt/prom/etc prometheus_config_dir: /opt/prom/etc

View file

@ -1,70 +1 @@
--- ---
dependency:
name: galaxy
driver:
name: docker
platforms:
- name: bionic
pre_build_image: true
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
pre_build_image: true
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
pre_build_image: true
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
pre_build_image: true
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
pre_build_image: true
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
pre_build_image: true
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
pre_build_image: true
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
playbooks:
prepare: prepare.yml
converge: playbook.yml
inventory:
group_vars:
python3:
ansible_python_interpreter: /usr/bin/python3
verifier:
name: testinfra

View file

@ -1,6 +1,9 @@
import pytest from __future__ import (absolute_import, division, print_function)
__metaclass__ = type
import os import os
import testinfra.utils.ansible_runner import testinfra.utils.ansible_runner
import pytest
testinfra_hosts = testinfra.utils.ansible_runner.AnsibleRunner( testinfra_hosts = testinfra.utils.ansible_runner.AnsibleRunner(
os.environ['MOLECULE_INVENTORY_FILE']).get_hosts('all') os.environ['MOLECULE_INVENTORY_FILE']).get_hosts('all')

View file

@ -3,4 +3,4 @@
hosts: all hosts: all
any_errors_fatal: true any_errors_fatal: true
roles: roles:
- prometheus - prometheus.prometheus.prometheus

View file

@ -1,75 +1 @@
--- ---
dependency:
name: galaxy
driver:
name: docker
# lint: |
# set -e
# yamllint .
# ansible-lint
# flake8
platforms:
- name: bionic
pre_build_image: true
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
pre_build_image: true
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
pre_build_image: true
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
pre_build_image: true
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
pre_build_image: true
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
pre_build_image: true
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
pre_build_image: true
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
playbooks:
prepare: prepare.yml
converge: playbook.yml
inventory:
group_vars:
python3:
ansible_python_interpreter: /usr/bin/python3
verifier:
name: testinfra

View file

@ -1,5 +0,0 @@
---
- name: Prepare
hosts: all
gather_facts: false
tasks: []

View file

@ -1,7 +1,10 @@
import pytest from __future__ import (absolute_import, division, print_function)
__metaclass__ = type
import os import os
import yaml import yaml
import testinfra.utils.ansible_runner import testinfra.utils.ansible_runner
import pytest
testinfra_hosts = testinfra.utils.ansible_runner.AnsibleRunner( testinfra_hosts = testinfra.utils.ansible_runner.AnsibleRunner(
os.environ['MOLECULE_INVENTORY_FILE']).get_hosts('all') os.environ['MOLECULE_INVENTORY_FILE']).get_hosts('all')
@ -10,7 +13,7 @@ testinfra_hosts = testinfra.utils.ansible_runner.AnsibleRunner(
@pytest.fixture() @pytest.fixture()
def AnsibleDefaults(): def AnsibleDefaults():
with open("defaults/main.yml", 'r') as stream: with open("defaults/main.yml", 'r') as stream:
return yaml.load(stream) return yaml.full_load(stream)
@pytest.mark.parametrize("dirs", [ @pytest.mark.parametrize("dirs", [
@ -69,5 +72,5 @@ def test_socket(host):
def test_version(host, AnsibleDefaults): def test_version(host, AnsibleDefaults):
version = os.getenv('PROMETHEUS', AnsibleDefaults['prometheus_version']) version = os.getenv('PROMETHEUS', AnsibleDefaults['prometheus_version'])
run = host.run("/usr/local/bin/prometheus --version") run = host.run("/usr/local/bin/prometheus --version")
out = run.stdout+run.stderr out = run.stdout + run.stderr
assert "prometheus, version " + version in out assert "prometheus, version " + version in out

View file

@ -3,6 +3,6 @@
hosts: all hosts: all
any_errors_fatal: true any_errors_fatal: true
roles: roles:
- prometheus - prometheus.prometheus.prometheus
vars: vars:
prometheus_version: latest prometheus_version: latest

View file

@ -1,35 +1 @@
--- ---
dependency:
name: galaxy
driver:
name: docker
platforms:
- name: buster
pre_build_image: true
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: fedora
pre_build_image: true
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
playbooks:
create: ../default/create.yml
prepare: ../default/prepare.yml
converge: playbook.yml
destroy: ../default/destroy.yml
inventory:
group_vars:
python3:
ansible_python_interpreter: /usr/bin/python3
verifier:
name: testinfra

View file

@ -1,6 +1,9 @@
import pytest from __future__ import (absolute_import, division, print_function)
__metaclass__ = type
import os import os
import testinfra.utils.ansible_runner import testinfra.utils.ansible_runner
import pytest
testinfra_hosts = testinfra.utils.ansible_runner.AnsibleRunner( testinfra_hosts = testinfra.utils.ansible_runner.AnsibleRunner(
os.environ['MOLECULE_INVENTORY_FILE']).get_hosts('all') os.environ['MOLECULE_INVENTORY_FILE']).get_hosts('all')

View file

@ -37,7 +37,7 @@
- reload prometheus - reload prometheus
- name: Configure Prometheus web - name: Configure Prometheus web
ansible.builtin.template: ansible.builtin.copy:
content: "{{ prometheus_web_config | to_nice_yaml(indent=2, sort_keys=False) }}" content: "{{ prometheus_web_config | to_nice_yaml(indent=2, sort_keys=False) }}"
dest: "{{ prometheus_config_dir }}/web.yml" dest: "{{ prometheus_config_dir }}/web.yml"
force: true force: true
@ -46,10 +46,9 @@
mode: 0640 mode: 0640
- name: Configure prometheus static targets - name: Configure prometheus static targets
ansible.builtin.template: ansible.builtin.copy:
content: | content: |
{{ item.value | to_nice_yaml(indent=2, sort_keys=False) }} {{ item.value | to_nice_yaml(indent=2, sort_keys=False) }}
lstrip_blocks: true
dest: "{{ prometheus_config_dir }}/file_sd/{{ item.key }}.yml" dest: "{{ prometheus_config_dir }}/file_sd/{{ item.key }}.yml"
force: true force: true
owner: root owner: root

View file

@ -43,7 +43,7 @@
- name: Download prometheus binary to local folder - name: Download prometheus binary to local folder
become: false become: false
ansible.builtin.get_url: ansible.builtin.get_url:
url: "https://github.com/prometheus/prometheus/releases/download/v{{ prometheus_version }}/ url: "https://github.com/prometheus/prometheus/releases/download/v{{ prometheus_version }}/\
prometheus-{{ prometheus_version }}.linux-{{ go_arch }}.tar.gz" prometheus-{{ prometheus_version }}.linux-{{ go_arch }}.tar.gz"
dest: "/tmp/prometheus-{{ prometheus_version }}.linux-{{ go_arch }}.tar.gz" dest: "/tmp/prometheus-{{ prometheus_version }}.linux-{{ go_arch }}.tar.gz"
checksum: "sha256:{{ __prometheus_checksum }}" checksum: "sha256:{{ __prometheus_checksum }}"

View file

@ -73,41 +73,29 @@
- prometheus_alert_rules != [] - prometheus_alert_rules != []
- name: Discover latest version - name: Discover latest version
ansible.builtin.set_fact:
prometheus_version: "{{ (lookup('url', 'https://api.github.com/repos/prometheus/prometheus/releases/latest', split_lines=False) |
from_json).get('tag_name') | replace('v', '') }}"
run_once: true
until: prometheus_version is version('0.0.0', '>=')
retries: 10
when: when:
- prometheus_version == "latest" - prometheus_version == "latest"
- prometheus_binary_local_dir | length == 0 - prometheus_binary_local_dir | length == 0
- not prometheus_skip_install - not prometheus_skip_install
block:
- name: Get latest release
ansible.builtin.uri:
url: "https://api.github.com/repos/prometheus/prometheus/releases/latest"
method: GET
return_content: true
status_code: 200
body_format: json
validate_certs: false
user: "{{ lookup('env', 'GH_USER') | default(omit) }}"
password: "{{ lookup('env', 'GH_TOKEN') | default(omit) }}"
no_log: "{{ not lookup('env', 'ANSIBLE_DEBUG') | bool }}"
register: _latest_release
until: _latest_release.status == 200
retries: 5
- name: "Set prometheus version to {{ _latest_release.json.tag_name[1:] }}"
ansible.builtin.set_fact:
prometheus_version: "{{ _latest_release.json.tag_name[1:] }}"
- name: Get prometheus binary checksum - name: Get prometheus binary checksum
delegate_to: localhost
when: when:
- prometheus_binary_local_dir | length == 0 - prometheus_binary_local_dir | length == 0
- not prometheus_skip_install - not prometheus_skip_install
block: block:
- name: "Get checksum list" - name: "Get checksum list"
ansible.builtin.set_fact: ansible.builtin.set_fact:
__prometheus_checksums: "{{ lookup('url', 'https://github.com/prometheus/prometheus/releases/download/v' + prometheus_version + '/sha256sums.txt', wantlist=True) | list }}" __prometheus_checksums: "{{ lookup('url', 'https://github.com/prometheus/prometheus/releases/download/v' + prometheus_version + '/sha256sums.txt',
wantlist=True) | list }}"
run_once: true run_once: true
until: __prometheus_checksums is search('linux-' + go_arch + '.tar.gz')
retries: 10
- name: "Get checksum for {{ go_arch }}" - name: "Get checksum for {{ go_arch }}"
ansible.builtin.set_fact: ansible.builtin.set_fact:

View file

@ -2,7 +2,7 @@
- name: Converge - name: Converge
hosts: all hosts: all
roles: roles:
- snmp_exporter - prometheus.prometheus.snmp_exporter
vars: vars:
__testing_on_travis: true __testing_on_travis: true
snmp_exporter_web_listen_address: "127.0.0.1:9116" snmp_exporter_web_listen_address: "127.0.0.1:9116"

View file

@ -1,70 +1 @@
--- ---
dependency:
name: galaxy
driver:
name: docker
platforms:
- name: bionic
pre_build_image: true
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
pre_build_image: true
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
pre_build_image: true
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
pre_build_image: true
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
pre_build_image: true
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
pre_build_image: true
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
pre_build_image: true
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
playbooks:
prepare: prepare.yml
converge: playbook.yml
inventory:
group_vars:
python3:
ansible_python_interpreter: /usr/bin/python3
verifier:
name: testinfra

View file

@ -1,5 +0,0 @@
---
- name: Prepare
hosts: all
gather_facts: false
tasks: []

View file

@ -1,6 +1,9 @@
import pytest from __future__ import (absolute_import, division, print_function)
__metaclass__ = type
import os import os
import testinfra.utils.ansible_runner import testinfra.utils.ansible_runner
import pytest
testinfra_hosts = testinfra.utils.ansible_runner.AnsibleRunner( testinfra_hosts = testinfra.utils.ansible_runner.AnsibleRunner(
os.environ['MOLECULE_INVENTORY_FILE']).get_hosts('all') os.environ['MOLECULE_INVENTORY_FILE']).get_hosts('all')

View file

@ -2,7 +2,7 @@
- name: Converge - name: Converge
hosts: all hosts: all
roles: roles:
- snmp_exporter - prometheus.prometheus.snmp_exporter
vars: vars:
__testing_on_travis: true __testing_on_travis: true
snmp_exporter_web_listen_address: "127.0.0.1:9116" snmp_exporter_web_listen_address: "127.0.0.1:9116"

View file

@ -1,70 +1 @@
--- ---
dependency:
name: galaxy
driver:
name: docker
platforms:
- name: bionic
pre_build_image: true
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
pre_build_image: true
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
pre_build_image: true
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
pre_build_image: true
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
pre_build_image: true
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
pre_build_image: true
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
pre_build_image: true
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
playbooks:
prepare: prepare.yml
converge: playbook.yml
inventory:
group_vars:
python3:
ansible_python_interpreter: /usr/bin/python3
verifier:
name: testinfra

View file

@ -1,5 +0,0 @@
---
- name: Prepare
hosts: all
gather_facts: false
tasks: []

View file

@ -1,6 +1,9 @@
import pytest from __future__ import (absolute_import, division, print_function)
__metaclass__ = type
import os import os
import testinfra.utils.ansible_runner import testinfra.utils.ansible_runner
import pytest
testinfra_hosts = testinfra.utils.ansible_runner.AnsibleRunner( testinfra_hosts = testinfra.utils.ansible_runner.AnsibleRunner(
os.environ['MOLECULE_INVENTORY_FILE']).get_hosts('all') os.environ['MOLECULE_INVENTORY_FILE']).get_hosts('all')

View file

@ -23,7 +23,7 @@
delay: 2 delay: 2
notify: notify:
- reload snmp exporter - reload snmp exporter
when: snmp_exporter_config_file == "" when: not (snmp_exporter_config_file)
- name: Copy configuration file - name: Copy configuration file
ansible.builtin.template: ansible.builtin.template:
@ -35,4 +35,4 @@
no_log: "{{ 'true' if __testing_on_travis is defined else 'false' }}" no_log: "{{ 'true' if __testing_on_travis is defined else 'false' }}"
notify: notify:
- reload snmp exporter - reload snmp exporter
when: snmp_exporter_config_file != "" when: (snmp_exporter_config_file)

View file

@ -2,7 +2,7 @@
- name: Download snmp_exporter binary to local folder - name: Download snmp_exporter binary to local folder
become: false become: false
ansible.builtin.get_url: ansible.builtin.get_url:
url: "https://github.com/prometheus/snmp_exporter/releases/download/v{{ snmp_exporter_version }}/ url: "https://github.com/prometheus/snmp_exporter/releases/download/v{{ snmp_exporter_version }}/\
snmp_exporter-{{ snmp_exporter_version }}.linux-{{ go_arch_map[ansible_architecture] | default(ansible_architecture) }}.tar.gz" snmp_exporter-{{ snmp_exporter_version }}.linux-{{ go_arch_map[ansible_architecture] | default(ansible_architecture) }}.tar.gz"
dest: "/tmp" dest: "/tmp"
checksum: "sha256:{{ snmp_exporter_checksum }}" checksum: "sha256:{{ snmp_exporter_checksum }}"

View file

@ -1,8 +0,0 @@
molecule>=3.0.0
molecule-docker
docker
ansible-lint>=3.4.0
testinfra>=1.7.0
jmespath
selinux
passlib

View file

@ -1,10 +1,8 @@
# temporarily lock versions of molecule and ansible-compat to avoid a bug: molecule
ansible-compat==0.5.0
molecule==3.5.2
molecule-docker
docker docker
ansible-lint>=3.4.0 ansible-lint
testinfra>=1.7.0 pytest-testinfra
jmespath jmespath
selinux selinux
passlib passlib
yamllint

42
tests/integration/molecule.sh Executable file
View file

@ -0,0 +1,42 @@
#!/usr/bin/env bash
collection_root=$(pwd | grep -oP ".+\/ansible_collections\/\w+?\/\w+")
targetname=${PWD##*/}
role=$(expr "$targetname" : '\w*-\(\w*\)-\w*')
role_root="$collection_root/roles/$role"
scenario=$(expr "$targetname" : '\w*-\w*-\(\w*\)')
ansible_version="$(ansible --version | head -1 | sed 's/[^0-9\.]*//g')"
# Install package requirements
apt -y update
apt -y install docker.io
# Install test requirements from role
if [ -f "$role_root/test-requirements.txt" ]; then
python -m pip install -r "$role_root/test-requirements.txt"
fi
# Install test requirements from collection
if [ -f "$collection_root/test-requirements.txt" ]; then
python -m pip install -r "$collection_root/test-requirements.txt"
fi
# Install ansible version specific requirements
if [ "$(printf '%s\n' "2.12" "$ansible_version" | sort -V | head -n1)" = "2.12" ]; then
python -m pip install molecule molecule-plugins[docker]
else
python -m pip install molecule molecule-docker
ansible-galaxy collection install community.docker
ansible-galaxy collection install -r "$collection_root/requirements.yml"
fi
# Define config locations within collection
export MOLECULE_FILE=$collection_root/.config/molecule/config.yml
export YAMLLINT_CONFIG_FILE=$collection_root/.config/yamllint/config.yml
# Unset ansible-test variables that break molecule
unset _ANSIBLE_COVERAGE_CONFIG
unset ANSIBLE_PYTHON_INTERPRETER
# Run molecule test
cd "$role_root"
molecule -c "$collection_root/.config/molecule/config.yml" test -s "$scenario"

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"

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"

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"

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"

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"

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"

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"