aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/molecule/default/converge.yml
diff options
context:
space:
mode:
authorColin Wilk <colin@wilk.cx>2026-07-21 18:59:45 +0200
committerColin Wilk <colin@wilk.cx>2026-07-21 18:59:45 +0200
commit2287658a7c9aa0c8755d611c1552fb66d96eaa47 (patch)
tree05faaad38a7d4c7798853265d476eba2eb55310f /molecule/default/converge.yml
parentc88beb44f60e7c66a77b69e3c5f5edec163c1a56 (diff)
downloadansible-role-prometheus-target-2287658a7c9aa0c8755d611c1552fb66d96eaa47.tar.gz
ansible-role-prometheus-target-2287658a7c9aa0c8755d611c1552fb66d96eaa47.zip
test: split tests by strategy
Diffstat (limited to 'molecule/default/converge.yml')
-rw-r--r--molecule/default/converge.yml506
1 files changed, 418 insertions, 88 deletions
diff --git a/molecule/default/converge.yml b/molecule/default/converge.yml
index 98d7e8a..4e379da 100644
--- a/molecule/default/converge.yml
+++ b/molecule/default/converge.yml
@@ -1,156 +1,486 @@
---
################################################################################
################################################################################
-- name: Simple deploy
+- name: Lineinfile bootstrap and subsequent hosts
hosts: application
pre_tasks:
- - name: Create targets
- ansible.builtin.file:
- path: "{{ item }}"
- state: touch
- modification_time: preserve
- access_time: preserve
- mode: "0644"
+ - name: Create test user
+ ansible.builtin.user:
+ name: prometheus
+ become: true
+ delegate_to: "{{ prometheus_target_host }}"
+
+ - name: Create lineinfile bootstrap target
+ ansible.builtin.copy:
+ dest: /opt/lineinfile_bootstrap.yml
+ owner: prometheus
+ group: prometheus
+ mode: "0600"
+ content: |
+ - labels:
+ my: label
+ targets:
+ - existing:9100
+ force: false
become: true
delegate_to: "{{ prometheus_target_host }}"
- loop:
- - /opt/simple_target1.yml
- - /opt/simple_target2.yml
- - /opt/simple_target3.yml
- - /opt/simple_target4.yml
vars:
prometheus_target_host: prometheus
- prometheus_target_exporter_defaults:
- node_exporter:
- path: /opt/simple_target1.yml
- host: "{{ inventory_hostname }}"
- blackbox_exporter:
- path: /opt/simple_target2.yml
- host: "{{ inventory_hostname }}_AA"
+ prometheus_target_strategy_lineinfile_prefix: " - "
+ prometheus_target_strategy_lineinfile_suffix: :9100
roles:
- role: kliwniloc.prometheus_target
prometheus_target_exporter:
- - id: node_exporter
- - { id: blackbox_exporter, host: test1 }
- - { id: blackbox_exporter, host: test2 }
- - { host: exporter_without_id, path: /opt/simple_target4.yml }
- - role: kliwniloc.prometheus_target
- prometheus_target_exporter:
- - id: blackbox_exporter
- path: /opt/simple_target3.yml
+ - path: /opt/lineinfile_bootstrap.yml
+ host: "{{ inventory_hostname }}"
################################################################################
################################################################################
-- name: Prefix deploy
+- name: Lineinfile first host on empty file
hosts: application
pre_tasks:
- - name: Create targets
- ansible.builtin.file:
- path: "{{ item.path }}"
- state: "{{ item.state }}"
- modification_time: preserve
- access_time: preserve
- mode: "0644"
+ - name: Create empty lineinfile target
+ ansible.builtin.copy:
+ dest: /opt/lineinfile_first_host.yml
+ owner: prometheus
+ group: prometheus
+ mode: "0600"
+ content: ""
+ force: false
become: true
delegate_to: "{{ prometheus_target_host }}"
- loop:
- - { state: touch, path: /opt/prefix_target1.yml }
- - { state: touch, path: /opt/prefix_target2.yml }
- - { state: directory, path: /opt/prefix}
- - { state: touch, path: /opt/prefix/prefix_target3.yml }
vars:
prometheus_target_host: prometheus
- prometheus_target_exporter_target_prefix: /opt/
- prometheus_target_exporter_defaults:
- node_exporter:
- path: prefix_target1.yml
- host: "{{ inventory_hostname }}"
- blackbox_exporter:
- path: prefix_target_not_exist.yml
- host: "{{ inventory_hostname }}"
- path_prefix: /opt/prefix/
+ prometheus_target_strategy_lineinfile_prefix: "- "
+ prometheus_target_strategy_lineinfile_suffix: :9100
roles:
- role: kliwniloc.prometheus_target
prometheus_target_exporter:
- - id: node_exporter
- - { id: node_exporter, path: /opt/prefix_target2.yml, path_prefix: "" }
- - { id: blackbox_exporter, path: prefix_target3.yml }
+ - path: /opt/lineinfile_first_host.yml
+ host: "{{ inventory_hostname }}"
################################################################################
################################################################################
-- name: Deploy with hooks
+- name: Lineinfile subsequent hosts and parallel writes
hosts: application_group
pre_tasks:
- - name: Create targets
- ansible.builtin.file:
- path: "{{ item }}"
- state: touch
- modification_time: preserve
- access_time: preserve
- mode: "0644"
+ - name: Create lineinfile parallel target
+ ansible.builtin.copy:
+ dest: /opt/lineinfile_parallel.yml
+ owner: prometheus
+ group: prometheus
+ mode: "0600"
+ content: ""
+ force: false
become: true
delegate_to: "{{ prometheus_target_host }}"
- loop:
- - /opt/hook_target.yml
- - /opt/hook2
+ run_once: true
vars:
prometheus_target_host: prometheus
- prometheus_target_handler_command_enabled: true
- prometheus_target_handler_command:
- cmd: mkdir /opt/hook1 # Fails if run twice
- prometheus_target_handler_command_run_once: true
- prometheus_target_handler_shell_enabled: true
- prometheus_target_handler_shell:
- cmd: echo hello >> /opt/hook2
+ prometheus_target_strategy_lineinfile_prefix: "- "
+ prometheus_target_strategy_lineinfile_suffix: :9100
roles:
- role: kliwniloc.prometheus_target
prometheus_target_exporter:
- - id: node_exporter
+ - path: /opt/lineinfile_parallel.yml
host: "{{ inventory_hostname }}"
- path: /opt/hook_target.yml
################################################################################
################################################################################
-- name: Deploy with lineinfile
- hosts: application
+- name: Lineinfile user edited file
+ hosts: application2
pre_tasks:
- - name: Create test user
- ansible.builtin.user:
- name: prometheus
- become: true
+ - name: Create user edited lineinfile target
+ ansible.builtin.copy:
+ dest: /opt/lineinfile_user_edited.yml
+ owner: prometheus
+ group: prometheus
+ mode: "0600"
+ content: |
+ # user comment
+ - labels:
+ env: prod
+ targets:
+ - existing:9100
+ force: false
delegate_to: "{{ prometheus_target_host }}"
- - name: Create target
+ vars:
+ prometheus_target_host: prometheus
+ prometheus_target_strategy_lineinfile_prefix: " - "
+ prometheus_target_strategy_lineinfile_suffix: :9100
+
+ roles:
+ - role: kliwniloc.prometheus_target
+ prometheus_target_exporter:
+ - path: /opt/lineinfile_user_edited.yml
+ host: "{{ inventory_hostname }}"
+
+################################################################################
+################################################################################
+- name: Lineinfile remove last host scenario
+ hosts: localhost
+ connection: local
+ gather_facts: false
+ tasks:
+ - name: Create single host lineinfile target
ansible.builtin.copy:
- dest: /opt/lineinfile.yml
+ dest: /opt/lineinfile_remove_last.yml
owner: prometheus
group: prometheus
mode: "0600"
+ content: |
+ - labels:
+ env: stage
+ targets:
+ - application:9100
+ force: false
+ become: true
+ delegate_to: prometheus
+
+ - name: Remove last host line externally
+ ansible.builtin.lineinfile:
+ path: /opt/lineinfile_remove_last.yml
+ line: " - application:9100"
+ state: absent
+ become: true
+ delegate_to: prometheus
+
+################################################################################
+################################################################################
+- name: YAML bootstrap and first host
+ hosts: application
+ pre_tasks:
+ - name: Create empty yaml bootstrap target
+ ansible.builtin.copy:
+ dest: /opt/yaml_bootstrap.yml
+ mode: "0644"
+ content: ""
force: false
- # yamllint disable rule:indentation
+ become: true
+ delegate_to: "{{ prometheus_target_host }}"
+
+ vars:
+ prometheus_target_host: prometheus
+ prometheus_target_strategy: yaml
+
+ roles:
+ - role: kliwniloc.prometheus_target
+ prometheus_target_exporter:
+ - path: /opt/yaml_bootstrap.yml
+ host: "{{ inventory_hostname }}:9100"
+ labels:
+ job: node
+
+################################################################################
+################################################################################
+- name: YAML subsequent hosts and parallel writes
+ hosts: application_group
+ pre_tasks:
+ - name: Create yaml parallel target
+ ansible.builtin.copy:
+ dest: /opt/yaml_parallel.yml
+ mode: "0644"
content: |
- labels:
- my: label
+ job: node
targets:
- - existing:9100
- # yamllint enable rule:indentation
+ - existing:9100
+ force: false
+ delegate_to: "{{ prometheus_target_host }}"
+ run_once: true
+
+ vars:
+ prometheus_target_host: prometheus
+ prometheus_target_strategy: yaml
+
+ roles:
+ - role: kliwniloc.prometheus_target
+ prometheus_target_exporter:
+ - path: /opt/yaml_parallel.yml
+ host: "{{ inventory_hostname }}:9100"
+ labels:
+ job: node
+
+################################################################################
+################################################################################
+- name: YAML user edited file exact label matching
+ hosts: application2
+ pre_tasks:
+ - name: Create user edited yaml target
+ ansible.builtin.copy:
+ dest: /opt/yaml_user_edited.yml
+ mode: "0644"
+ content: |
+ # user comment that will be lost after parse/write
+ - labels:
+ severity: warning
+ job: external
+ targets:
+ - existing_host1:9100
+ - labels:
+ severity: critical
+ targets:
+ - application2:9200
+ - targets:
+ - unlabeled:9100
+ force: false
+ delegate_to: "{{ prometheus_target_host }}"
+
+ vars:
+ prometheus_target_host: prometheus
+ prometheus_target_strategy: yaml
+ prometheus_target_exporter_defaults:
+ exact_match:
+ path: /opt/yaml_user_edited.yml
+ host: "{{ inventory_hostname }}:9100"
+ labels:
+ severity: warning
+ job: external
+ move_target:
+ path: /opt/yaml_user_edited.yml
+ host: "{{ inventory_hostname }}:9200"
+ labels:
+ severity: critical
+ team: blue
+ no_labels:
+ path: /opt/yaml_user_edited.yml
+ host: standalone:9300
+
+ roles:
+ - role: kliwniloc.prometheus_target
+ prometheus_target_exporter:
+ - id: exact_match
+ - id: move_target
+ - id: no_labels
+
+################################################################################
+################################################################################
+- name: YAML remove last host by moving target
+ hosts: application
+ pre_tasks:
+ - name: Create yaml remove last host target
+ ansible.builtin.copy:
+ dest: /opt/yaml_move_remove_last.yml
+ mode: "0644"
+ content: |
+ - labels:
+ job: old
+ targets:
+ - application:9400
+ force: false
become: true
delegate_to: "{{ prometheus_target_host }}"
vars:
prometheus_target_host: prometheus
- prometheus_target_strategy_lineinfile_prefix: " - "
- prometheus_target_strategy_lineinfile_suffix: :9100
+ prometheus_target_strategy: yaml
+
+ roles:
+ - role: kliwniloc.prometheus_target
+ prometheus_target_exporter:
+ - path: /opt/yaml_move_remove_last.yml
+ host: "{{ inventory_hostname }}:9400"
+ labels:
+ job: new
+
+################################################################################
+################################################################################
+- name: YAML branch coverage matrix
+ hosts: application3
+ pre_tasks:
+ - name: Create yaml branch coverage target
+ ansible.builtin.copy:
+ dest: /opt/yaml_branch_matrix.yml
+ mode: "0644"
+ content: |
+ - labels:
+ job: append
+ env: prod
+ targets:
+ - existing_append:9500
+ - labels:
+ job: wrong
+ env: prod
+ targets:
+ - keep_same_length:9500
+ - labels:
+ job: short
+ targets:
+ - keep_length_mismatch:9500
+ - labels:
+ job: present
+ env: prod
+ targets:
+ - application3:9501
+ - labels:
+ job: move_source
+ targets:
+ - application3:9502
+ - targets:
+ - orphan_unlabeled:9503
+ - targets:
+ - shared_unlabeled:9504
+ - labels:
+ job: foreign
+ targets:
+ - foreign:9505
+ force: false
+ delegate_to: "{{ prometheus_target_host }}"
+
+ vars:
+ prometheus_target_host: prometheus
+ prometheus_target_strategy: yaml
+
+ roles:
+ - role: kliwniloc.prometheus_target
+ prometheus_target_exporter:
+ - path: /opt/yaml_branch_matrix.yml
+ host: application3:9506
+ labels:
+ job: append
+ env: prod
+ - path: /opt/yaml_branch_matrix.yml
+ host: application3:9501
+ labels:
+ job: present
+ env: prod
+ - path: /opt/yaml_branch_matrix.yml
+ host: application3:9502
+ labels:
+ job: move_target
+ - path: /opt/yaml_branch_matrix.yml
+ host: orphan_unlabeled:9503
+ labels:
+ job: promoted
+ - path: /opt/yaml_branch_matrix.yml
+ host: standalone_branch:9504
+ - path: /opt/yaml_branch_matrix.yml
+ host: shared_unlabeled:9504
+
+################################################################################
+################################################################################
+- name: YAML missing file creation branches
+ hosts: application4
+ vars:
+ prometheus_target_host: prometheus
+ prometheus_target_strategy: yaml
+
+ roles:
+ - role: kliwniloc.prometheus_target
+ prometheus_target_exporter:
+ - path: /opt/yaml_missing_labeled.yml
+ host: "{{ inventory_hostname }}:9600"
+ labels:
+ team: infra
+ - path: /opt/yaml_missing_unlabeled.yml
+ host: "{{ inventory_hostname }}:9601"
+
+################################################################################
+################################################################################
+- name: Simple compatibility checks
+ hosts: application
+ pre_tasks:
+ - name: Create compatibility target files
+ ansible.builtin.copy:
+ dest: "{{ item }}"
+ content: ""
+ mode: "0644"
+ force: false
+ become: true
+ delegate_to: "{{ prometheus_target_host }}"
+ loop:
+ - /opt/simple_target1.yml
+ - /opt/simple_target2.yml
+ - /opt/simple_target3.yml
+ - /opt/simple_target4.yml
+ - /opt/prefix_target1.yml
+ - /opt/prefix_target2.yml
+
+ - name: Create prefix directory
+ ansible.builtin.file:
+ path: /opt/prefix
+ state: directory
+ mode: "0644"
+ become: true
+ delegate_to: "{{ prometheus_target_host }}"
+
+ - name: Create prefix target
+ ansible.builtin.copy:
+ dest: /opt/prefix/prefix_target3.yml
+ content: ""
+ mode: "0644"
+ force: false
+ become: true
+ delegate_to: "{{ prometheus_target_host }}"
+
+ vars:
+ prometheus_target_host: prometheus
+ prometheus_target_exporter_target_prefix: /opt/
+ prometheus_target_exporter_defaults:
+ node_exporter:
+ path: simple_target1.yml
+ host: "{{ inventory_hostname }}"
+ blackbox_exporter:
+ path: simple_target2.yml
+ host: "{{ inventory_hostname }}_AA"
+ prefixed_exporter:
+ path: prefix_target1.yml
+ host: "{{ inventory_hostname }}"
+ prefixed_other:
+ path: prefix_target_not_exist.yml
+ host: "{{ inventory_hostname }}"
+ path_prefix: /opt/prefix/
roles:
- role: kliwniloc.prometheus_target
prometheus_target_exporter:
- id: node_exporter
- path: /opt/lineinfile.yml
+ - { id: blackbox_exporter, host: test1 }
+ - { id: blackbox_exporter, host: test2 }
+ - { host: exporter_without_id, path: simple_target4.yml }
+ - { id: blackbox_exporter, path: simple_target3.yml }
+ - { id: prefixed_exporter }
+ - {
+ id: prefixed_exporter,
+ path: /opt/prefix_target2.yml,
+ path_prefix: "",
+ }
+ - { id: prefixed_other, path: prefix_target3.yml }
+
+################################################################################
+################################################################################
+- name: Hook compatibility checks
+ hosts: application_group
+ pre_tasks:
+ - name: Create hook target
+ ansible.builtin.copy:
+ dest: /opt/hook_target.yml
+ content: ""
+ mode: "0644"
+ force: false
+ become: true
+ delegate_to: "{{ prometheus_target_host }}"
+
+ vars:
+ prometheus_target_host: prometheus
+ prometheus_target_handler_command_enabled: true
+ prometheus_target_handler_command:
+ cmd: mkdir -p /opt/hook1
+ creates: /opt/hook1
+ prometheus_target_handler_command_run_once: true
+ prometheus_target_handler_shell_enabled: true
+ prometheus_target_handler_shell:
+ cmd: echo hello >> /opt/hook2
+
+ roles:
+ - role: kliwniloc.prometheus_target
+ prometheus_target_exporter:
+ - path: /opt/hook_target.yml
host: "{{ inventory_hostname }}"