1034
This commit is contained in:
179
files/ansible-playbooks/connstats-remove.yml
Normal file
179
files/ansible-playbooks/connstats-remove.yml
Normal file
@@ -0,0 +1,179 @@
|
||||
---
|
||||
- name: Remove connstats (single device, linear)
|
||||
hosts: all
|
||||
gather_facts: no
|
||||
|
||||
vars:
|
||||
ssh_user: "{{ ansible_user | default('root') }}"
|
||||
ssh_pass: "{{ ansible_password | default(ansible_ssh_pass) }}"
|
||||
|
||||
# RabbitMQ (use controls exchange + queue_controls like the reference)
|
||||
rmq_host: "{{ lookup('env','RMQ_HOST') | default('10.210.12.2', true) }}"
|
||||
rmq_port: "{{ lookup('env','RMQ_PORT') | default('15672', true) }}"
|
||||
rmq_user: "{{ lookup('env','RMQ_USER') | default('admin', true) }}"
|
||||
rmq_pass: "{{ lookup('env','RMQ_PASS') | default('change_me', true) }}"
|
||||
rmq_vhost: "{{ lookup('env','RMQ_VHOST') | default('app', true) }}"
|
||||
rmq_exchange: "{{ lookup('env','RMQ_EXCHANGE') | default('controls', true) }}"
|
||||
control_queue: "{{ lookup('env','CONTROL_QUEUE') | default('queue_controls', true) }}"
|
||||
|
||||
tasks:
|
||||
|
||||
- block:
|
||||
|
||||
# --- SSH reachability check ---
|
||||
- name: Check SSH connectivity (raw ping)
|
||||
raw: "echo ping"
|
||||
register: ping_result
|
||||
ignore_errors: true
|
||||
|
||||
- block:
|
||||
|
||||
############ step 2
|
||||
|
||||
- name: Check if connstats cron line is present
|
||||
raw: |
|
||||
if [ -f /etc/crontabs/root ]; then
|
||||
grep -Eq '/root/connstats\.sh([[:space:]]|$)' /etc/crontabs/root
|
||||
else
|
||||
exit 1
|
||||
fi
|
||||
register: cron_grep
|
||||
failed_when: false
|
||||
changed_when: false
|
||||
|
||||
- name: Remove connstats cron line (preserve any other lines)
|
||||
when: cron_grep.rc == 0
|
||||
raw: |
|
||||
sed -i '\|/root/connstats\.sh|d' /etc/crontabs/root
|
||||
register: cron_remove
|
||||
changed_when: true
|
||||
|
||||
- name: Check if /root/connstats.log exists
|
||||
raw: "test -e /root/connstats.log"
|
||||
register: connstats_log_grep
|
||||
failed_when: false
|
||||
changed_when: false
|
||||
|
||||
- name: Remove /root/connstats.log
|
||||
when: connstats_log_grep.rc == 0
|
||||
raw: "rm -f /root/connstats.log"
|
||||
register: connstats_log_remove
|
||||
changed_when: true
|
||||
|
||||
- name: Check if /root/connstats.sh exists
|
||||
raw: "test -e /root/connstats.sh"
|
||||
register: connstats_script_grep
|
||||
failed_when: false
|
||||
changed_when: false
|
||||
|
||||
- name: Remove /root/connstats.sh
|
||||
when: connstats_script_grep.rc == 0
|
||||
raw: "rm -f /root/connstats.sh"
|
||||
register: connstats_script_remove
|
||||
changed_when: true
|
||||
|
||||
- name: Set result status (success removed or no change)
|
||||
set_fact:
|
||||
result_status: >-
|
||||
{{ 'SUCCESS_REMOVED'
|
||||
if ((cron_grep.rc == 0)
|
||||
or (connstats_log_grep.rc == 0)
|
||||
or (connstats_script_grep.rc == 0))
|
||||
else 'SUCCESS_NO_CHANGE' }}
|
||||
|
||||
when: ping_result is succeeded
|
||||
|
||||
- name: Set status fact (no ssh)
|
||||
when: ping_result is failed
|
||||
set_fact:
|
||||
result_status: "NO_SSH"
|
||||
|
||||
rescue:
|
||||
- name: Mark result as failed
|
||||
set_fact:
|
||||
result_status: "FAILED during {{ ansible_failed_task.name }}"
|
||||
|
||||
always:
|
||||
|
||||
- name: Compute inscope device
|
||||
set_fact:
|
||||
inscope_device_name: "{{ ansible_hostname | default(inventory_hostname) }}"
|
||||
|
||||
# custom field update (per your sample)
|
||||
- name: Publish custom-field update connstats removed to control queue
|
||||
when: result_status == 'SUCCESS_REMOVED' or result_status == 'SUCCESS_NO_CHANGE'
|
||||
delegate_to: localhost
|
||||
uri:
|
||||
url: "http://{{ rmq_host }}:{{ rmq_port }}/api/exchanges/{{ rmq_vhost | urlencode }}/{{ rmq_exchange | urlencode }}/publish"
|
||||
method: POST
|
||||
user: "{{ rmq_user }}"
|
||||
password: "{{ rmq_pass }}"
|
||||
force_basic_auth: true
|
||||
status_code: 200
|
||||
headers: { content-type: "application/json" }
|
||||
body_format: json
|
||||
body:
|
||||
properties: { content_type: "application/json" }
|
||||
routing_key: "{{ control_queue }}"
|
||||
payload: "{{ {
|
||||
'inscope_device': inscope_device_name,
|
||||
'task_name': 'custom_field_set',
|
||||
'task_add1': 'connstats',
|
||||
'task_result': 'removed'
|
||||
} | to_json }}"
|
||||
payload_encoding: "string"
|
||||
register: rmq_cf
|
||||
changed_when: false
|
||||
|
||||
# final wrap-up journal "connstats: ..." with actions performed
|
||||
- name: Build actions list
|
||||
set_fact:
|
||||
_actions_list: >-
|
||||
{{
|
||||
[]
|
||||
+ (((cron_grep is defined) and ((cron_grep.rc | default(1)) == 0)) | ternary(['removed connstats crontab entry'], []))
|
||||
+ (((connstats_log_grep is defined) and ((connstats_log_grep.rc | default(1)) == 0)) | ternary(['removed connstats.log'], []))
|
||||
+ (((connstats_script_grep is defined) and ((connstats_script_grep.rc | default(1)) == 0)) | ternary(['removed connstats.sh'], []))
|
||||
}}
|
||||
|
||||
- name: Build actions string
|
||||
set_fact:
|
||||
_actions_str: "{{ ((_actions_list | default([])) | length > 0) | ternary((_actions_list | join(', ')), 'no changes needed') }}"
|
||||
|
||||
- name: Build wrap-up journal payload
|
||||
delegate_to: localhost
|
||||
set_fact:
|
||||
wrap_payload:
|
||||
inscope_device: "{{ inscope_device_name }}"
|
||||
task_name: "journal_add"
|
||||
task_result: >-
|
||||
connstats: {{ 'success' if (result_status == 'SUCCESS_REMOVED' or result_status == 'SUCCESS_NO_CHANGE') else result_status | lower }}
|
||||
— actions: {{ _actions_str }}
|
||||
|
||||
- name: Publish wrap-up journal to control queue
|
||||
delegate_to: localhost
|
||||
uri:
|
||||
url: "http://{{ rmq_host }}:{{ rmq_port }}/api/exchanges/{{ rmq_vhost | urlencode }}/{{ rmq_exchange | urlencode }}/publish"
|
||||
method: POST
|
||||
user: "{{ rmq_user }}"
|
||||
password: "{{ rmq_pass }}"
|
||||
force_basic_auth: true
|
||||
status_code: 200
|
||||
headers:
|
||||
content-type: "application/json"
|
||||
body_format: json
|
||||
body:
|
||||
properties:
|
||||
content_type: "application/json"
|
||||
routing_key: "{{ control_queue }}"
|
||||
payload: "{{ wrap_payload | to_json }}"
|
||||
payload_encoding: "string"
|
||||
register: rmq_wrap
|
||||
changed_when: (rmq_wrap.json is defined) and (rmq_wrap.json.routed | default(false) | bool)
|
||||
|
||||
# Local summary (kept for operator visibility)
|
||||
- name: Summary
|
||||
debug:
|
||||
msg:
|
||||
- "result_status: {{ result_status }}"
|
||||
- "we're good"
|
||||
Reference in New Issue
Block a user