diff --git a/files/ansible-playbooks/wifidebug-scheduler.yml b/files/ansible-playbooks/wifidebug-scheduler.yml index a94575c..1b1f3c8 100644 --- a/files/ansible-playbooks/wifidebug-scheduler.yml +++ b/files/ansible-playbooks/wifidebug-scheduler.yml @@ -95,3 +95,150 @@ - import_playbook: wifidebug17.yml vars: is_run_by: "scheduler" + + +- name: Phase 4 | NetBox wrapup and chaining for wifidebug + hosts: all + gather_facts: no + vars: + 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','CONTROLQUEUE') | default('queue_controls', true) }}" + + tasks: + - name: Wrapper compute wifidebug outcome + set_fact: + inscope_device_name: "{{ ansible_hostname | default(inventory_hostname) }}" + wifidebug_ok: "{{ wifidebug_success | default(false) | bool }}" + wifidebug_status: "{{ wifidebug_result_status | default('UNKNOWN') }}" + changed_when: false + + - name: Wrapper pause before clear action_next_timestamp + ansible.builtin.pause: + seconds: 2 + delegate_to: localhost + changed_when: false + + - name: Wrapper clear action_next_timestamp + delegate_to: localhost + ansible.builtin.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': 'action_next_timestamp', 'task_result': '' } | to_json }}" + payload_encoding: "string" + changed_when: false + + - name: Wrapper pause before set action_state + ansible.builtin.pause: + seconds: 2 + delegate_to: localhost + changed_when: false + + - name: Wrapper set action_state + delegate_to: localhost + ansible.builtin.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': 'action_state', 'task_result': (wifidebug_ok | ternary('done','failed')) } | to_json }}" + payload_encoding: "string" + changed_when: false + + - name: Wrapper pause before chaining to sot updater + ansible.builtin.pause: + seconds: 2 + delegate_to: localhost + changed_when: false + + - name: Wrapper set action_next to sot-updater-scheduler + when: wifidebug_ok + delegate_to: localhost + ansible.builtin.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': 'action_next', 'task_result': 'sot-updater-scheduler' } | to_json }}" + payload_encoding: "string" + changed_when: false + + - name: Wrapper publish sot-updater-scheduler work message + when: wifidebug_ok + delegate_to: localhost + ansible.builtin.uri: + url: "http://{{ rmq_host }}:{{ rmq_port }}/api/exchanges/{{ rmq_vhost | urlencode }}/{{ 'deviceconfig' | 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: "deviceconfig" + payload: "{{ { 'inscope_device': inscope_device_name, 'task_name': 'sot-updater-scheduler' } | to_json }}" + payload_encoding: "string" + changed_when: false + + - name: Wrapper pause before final journal + ansible.builtin.pause: + seconds: 2 + delegate_to: localhost + changed_when: false + + - name: Wrapper final journal report + delegate_to: localhost + ansible.builtin.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': 'journal_add', 'task_result': (wifidebug_ok | ternary('wifidebug: successfully deployed','wifidebug: deployment failed')) ~ ' (' ~ wifidebug_status ~ ')' } | to_json }}" + payload_encoding: "string" + changed_when: false