diff --git a/playbooks/server.yaml b/playbooks/server.yaml new file mode 100644 index 0000000..f29a454 --- /dev/null +++ b/playbooks/server.yaml @@ -0,0 +1,63 @@ +--- +- name: Agent Server + hosts: all + gather_facts: false + + + tasks: + + + - name: TRACE Inbound data Received + ansible.builtin.debug: + msg: "{{ inbound_data }}" + + + - name: Fetch Agent Details + community.mysql.mysql_query: + login_host: "{{ nfc_c_mysql_host }}" + login_port: "{{ nfc_c_mysql_port | default(3306) | int }}" + login_user: "{{ nfc_c_mysql_user }}" + login_password: "{{ nfc_c_mysql_password }}" + + login_db: 'phpipam' + query: > + SELECT id, code FROM scanAgents WHERE code='{{ inbound_data.code }}' + single_transaction: true + register: mysql_query_agent_details + + + - name: Confirm Subnet Assignment + community.mysql.mysql_query: + login_host: "{{ nfc_c_mysql_host }}" + login_port: "{{ nfc_c_mysql_port | default(3306) | int }}" + login_user: "{{ nfc_c_mysql_user }}" + login_password: "{{ nfc_c_mysql_password }}" + + login_db: 'phpipam' + query: > + SELECT id, subnet FROM subnets WHERE + scanAgent='{{ mysql_query_agent_details.query_result[0][0].id }}' + and + subnet='{{ inbound_data.scan[0].subnet | ip2ipam }}' + single_transaction: true + register: mysql_query_agent_subnets + + + - name: Arrange Subnets + ansible.builtin.set_fact: + agent_subnets: "{{ agent_subnets | default([]) + [ item.id ] }}" + + loop: "{{ mysql_query_agent_subnets.query_result[0] }}" + + + - name: Process Scan results + ansible.builtin.include_tasks: + file: tasks/server/subnet_scan.yaml + loop: "{{ inbound_data.scan }}" + loop_control: + loop_var: scan_result + label: "{{ scan_result }}" + + + vars: + ansible_connection: local diff --git a/playbooks/tasks/server/ipaddress.yaml b/playbooks/tasks/server/ipaddress.yaml new file mode 100644 index 0000000..34ce7a2 --- /dev/null +++ b/playbooks/tasks/server/ipaddress.yaml @@ -0,0 +1,53 @@ +--- + + +- name: Update IP Address' found + community.mysql.mysql_query: + login_host: "{{ nfc_c_mysql_host }}" + login_port: "{{ nfc_c_mysql_port | default(3306) | int }}" + login_user: "{{ nfc_c_mysql_user }}" + login_password: "{{ nfc_c_mysql_password }}" + + login_db: 'phpipam' + query: |- + {% if + scan_address.rowcount[0] | int > 0 + %} + + UPDATE ipaddresses + SET + lastSeen = '{{ scan_address.ipaddress.lastSeen }}', + + {% if scan_address.ipaddress.mac != '' %} + + mac = '{{ scan_address.ipaddress.mac }}' + + {% endif %} + + WHERE + id = {{ scan_address.query_result[0][0].id | int }} + + {% elif + scan_address.rowcount[0] | int == 0 + %} + + INSERT INTO ipaddresses + VALUES + subnetId = {{ scan_address.ipaddress.subnetId | int }}, + ip_addr = '{{ scan_address.ipaddress.ip | ip2ipam }}', + description = '-- autodiscovered --', + + {% if scan_address.ipaddress.mac != '' %} + + mac = '{{ scan_address.ipaddress.mac }}', + + {% endif %} + + note = 'This host was autodiscovered on {{ scan_address.ipaddress.lastSeen }}', + lastSeen = '{{ scan_address.ipaddress.lastSeen }}', + + {% endif %} + + single_transaction: true + when: > + scan_address.ipaddress.subnetId | int in agent_subnets diff --git a/playbooks/tasks/server/subnet_scan.yaml b/playbooks/tasks/server/subnet_scan.yaml new file mode 100644 index 0000000..f7c3a5f --- /dev/null +++ b/playbooks/tasks/server/subnet_scan.yaml @@ -0,0 +1,33 @@ +--- + + +- name: Match Scan Addresses to DB Details + community.mysql.mysql_query: + login_host: "{{ nfc_c_mysql_host }}" + login_port: "{{ nfc_c_mysql_port | default(3306) | int }}" + login_user: "{{ nfc_c_mysql_user }}" + login_password: "{{ nfc_c_mysql_password }}" + + login_db: 'phpipam' + query: |- + SELECT + id, description, state, note, lastSeen + FROM ipaddresses + WHERE + id='{{ ipaddress.id }}' + AND + ip_addr='{{ ipaddress.ip | ip2ipam }}' + single_transaction: true + register: mysql_query_find_ipaddress + loop: "{{ scan_result.results }}" + loop_control: + loop_var: ipaddress + + +- name: Update IP Addresses + ansible.builtin.include_tasks: + file: tasks/server/ipaddress.yaml + loop: "{{ mysql_query_find_ipaddress.results }}" + loop_control: + loop_var: scan_address + label: "{{ scan_address }}"