--- ################################################################################ ################################################################################ - name: Lineinfile bootstrap and subsequent hosts hosts: application pre_tasks: - 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 }}" 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_bootstrap.yml host: "{{ inventory_hostname }}" ################################################################################ ################################################################################ - name: Lineinfile first host on empty file hosts: application pre_tasks: - 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 }}" 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_first_host.yml host: "{{ inventory_hostname }}" ################################################################################ ################################################################################ - name: Lineinfile subsequent hosts and parallel writes hosts: application_group pre_tasks: - 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 }}" run_once: true 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_parallel.yml host: "{{ inventory_hostname }}" ################################################################################ ################################################################################ - name: Lineinfile user edited file hosts: application2 pre_tasks: - 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 }}" 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_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 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 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 - path: /opt/yaml_parallel_second.yml host: "{{ inventory_hostname }}:9200" labels: job: node - path: /opt/yaml_parallel.yml host: "{{ inventory_hostname }}:9300" labels: job: alternate ################################################################################ ################################################################################ - 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: 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 - { 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 }}" ################################################################################ ################################################################################ - name: Lineinfile exporter resolution matrix hosts: application pre_tasks: - name: Create lineinfile resolution target files ansible.builtin.copy: dest: "{{ item }}" content: "" mode: "0644" force: false become: true delegate_to: "{{ prometheus_target_host }}" loop: - /opt/lineinfile_defaults.yml - /opt/lineinfile_no_id.yml - /opt/lineinfile_override.yml - /opt/lineinfile_skipped.yml - name: Create lineinfile default prefix directory ansible.builtin.file: path: /opt/lineinfile-prefix state: directory mode: "0755" become: true delegate_to: "{{ prometheus_target_host }}" - name: Create lineinfile prefixed target ansible.builtin.copy: dest: /opt/lineinfile-prefix/default-prefix.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: inherited: path: lineinfile_defaults.yml host: inherited-default default_only: path: lineinfile_defaults.yml host: appended-default overridden: path: unused.yml host: unused-host prefixed: path: default-prefix.yml host: prefixed-default path_prefix: /opt/lineinfile-prefix/ prometheus_target_default_exporters: - id: default_only roles: - role: kliwniloc.prometheus_target prometheus_target_strategy_lineinfile_prefix: "- " prometheus_target_exporter: - id: inherited - id: inherited - path: lineinfile_no_id.yml host: no-id - id: overridden path: /opt/lineinfile_override.yml path_prefix: "" host: item-override - id: prefixed ################################################################################ ################################################################################ - name: Lineinfile skips default exporters hosts: application vars: prometheus_target_host: prometheus prometheus_target_skip_default_exporters: true prometheus_target_exporter_defaults: skipped: path: /opt/lineinfile_skipped.yml host: must-not-appear prometheus_target_default_exporters: - id: skipped roles: - role: kliwniloc.prometheus_target ################################################################################ ################################################################################ - name: YAML exporter resolution matrix hosts: application pre_tasks: - name: Create YAML resolution target files ansible.builtin.copy: dest: "{{ item.path }}" content: "{{ item.content }}" mode: "0644" force: false become: true delegate_to: "{{ prometheus_target_host }}" loop: - path: /opt/yaml_defaults.yml content: "" - path: /opt/yaml_no_id.yml content: "" - path: /opt/yaml_override.yml content: "" - path: /opt/yaml_null.yml content: "~\n" - path: /opt/yaml_skipped.yml content: "" - name: Create YAML default prefix directory ansible.builtin.file: path: /opt/yaml-prefix state: directory mode: "0755" become: true delegate_to: "{{ prometheus_target_host }}" - name: Create YAML prefixed target ansible.builtin.copy: dest: /opt/yaml-prefix/default-prefix.yml content: "" mode: "0644" force: false become: true delegate_to: "{{ prometheus_target_host }}" vars: prometheus_target_host: prometheus prometheus_target_strategy: yaml prometheus_target_exporter_target_prefix: /opt/ prometheus_target_exporter_defaults: inherited: path: yaml_defaults.yml host: inherited-default:9700 labels: job: inherited environment: production default_only: path: yaml_defaults.yml host: appended-default:9701 labels: job: default overridden: path: unused.yml host: unused-host labels: job: unused prefixed: path: default-prefix.yml host: prefixed-default:9702 path_prefix: /opt/yaml-prefix/ labels: job: prefixed prometheus_target_default_exporters: - id: default_only roles: - role: kliwniloc.prometheus_target prometheus_target_exporter: - id: inherited host: application:9700 labels: environment: staging - id: inherited host: application:9700 labels: environment: staging - path: yaml_no_id.yml host: no-id:9700 labels: job: no-id - id: overridden path: /opt/yaml_override.yml path_prefix: "" host: item-override:9700 labels: job: override - id: prefixed - path: yaml_null.yml host: from-null:9700 ################################################################################ ################################################################################ - name: YAML skips default exporters hosts: application vars: prometheus_target_host: prometheus prometheus_target_strategy: yaml prometheus_target_skip_default_exporters: true prometheus_target_exporter_defaults: skipped: path: /opt/yaml_skipped.yml host: must-not-appear:9700 labels: job: skipped prometheus_target_default_exporters: - id: skipped roles: - role: kliwniloc.prometheus_target ################################################################################ ################################################################################ - name: Handler execution matrix hosts: application_group pre_tasks: - name: Create handler matrix target ansible.builtin.copy: dest: /opt/handler_matrix.yml content: "" mode: "0644" force: false become: true delegate_to: "{{ prometheus_target_host }}" run_once: true vars: prometheus_target_host: prometheus prometheus_target_handler_command_enabled: true prometheus_target_handler_command_become: false prometheus_target_handler_command_run_once: false prometheus_target_handler_command: cmd: "touch /tmp/command-handler-{{ inventory_hostname }}" creates: "/tmp/command-handler-{{ inventory_hostname }}" prometheus_target_handler_shell_enabled: true prometheus_target_handler_shell_become: false prometheus_target_handler_shell_run_once: true prometheus_target_handler_shell: cmd: touch /tmp/shell-handler-run-once creates: /tmp/shell-handler-run-once roles: - role: kliwniloc.prometheus_target prometheus_target_strategy_lineinfile_prefix: "- " prometheus_target_exporter: - path: /opt/handler_matrix.yml host: "{{ inventory_hostname }}" ################################################################################ ################################################################################ - name: Disabled handlers do not execute hosts: application pre_tasks: - name: Create disabled handler target ansible.builtin.copy: dest: /opt/handler_disabled.yml content: "" mode: "0644" force: false become: true delegate_to: "{{ prometheus_target_host }}" vars: prometheus_target_host: prometheus prometheus_target_handler_command_enabled: false prometheus_target_handler_command: cmd: touch /tmp/disabled-command-handler prometheus_target_handler_shell_enabled: false prometheus_target_handler_shell: cmd: touch /tmp/disabled-shell-handler roles: - role: kliwniloc.prometheus_target prometheus_target_strategy_lineinfile_prefix: "- " prometheus_target_exporter: - path: /opt/handler_disabled.yml host: application ################################################################################ ################################################################################ - name: Remove lineinfile exporters hosts: application_remove vars: prometheus_target_host: prometheus prometheus_target_strategy_lineinfile_prefix: " - " prometheus_target_exporter_defaults: remove_shared: path: /opt/lineinfile_state_removal.yml host: remove:9100 state: absent roles: - role: kliwniloc.prometheus_target prometheus_target_exporter: - id: remove_shared - path: /opt/lineinfile_state_removal.yml host: remove:9200 state: absent - path: /opt/lineinfile_state_missing.yml host: missing:9100 state: absent ################################################################################ ################################################################################ - name: Remove YAML exporters hosts: application_remove vars: prometheus_target_host: prometheus prometheus_target_strategy: yaml prometheus_target_exporter_defaults: remove_shared: path: /opt/yaml_state_removal.yml host: remove:9100 state: absent roles: - role: kliwniloc.prometheus_target prometheus_target_exporter: - id: remove_shared - path: /opt/yaml_state_removal.yml host: remove:9200 state: absent - path: /opt/yaml_state_missing.yml host: missing:9100 state: absent