{"id":5441,"sha1":"2016942c706f8874c108524b387f03f0e262e44b","playbook":{"id":3321,"items":{"plays":1,"tasks":7,"results":7,"hosts":1,"files":1,"records":0},"arguments":{"version":null,"verbosity":1,"private_key_file":"/home/ssh-gateway/.ssh/id_rsa","remote_user":"root","connection":"ssh","timeout":null,"ssh_common_args":null,"sftp_extra_args":null,"scp_extra_args":null,"ssh_extra_args":null,"ask_pass":false,"connection_password_file":null,"force_handlers":false,"flush_cache":false,"become":false,"become_method":"sudo","become_user":null,"become_ask_pass":false,"become_password_file":null,"tags":["all"],"skip_tags":[],"check":false,"diff":false,"inventory":["/home/ssh-gateway/ansible/kuly/hosts-kvm-nodes"],"listhosts":false,"subset":"kvm016","extra_vars":"Not saved by ARA as configured by 'ignored_arguments'","vault_ids":[],"ask_vault_pass":false,"vault_password_files":[],"forks":20,"module_path":null,"syntax":false,"listtasks":false,"listtags":false,"step":false,"start_at_task":null,"args":["get_mac_addresses.yaml"]},"labels":[{"id":1,"name":"remote_user:root"},{"id":2,"name":"check:False"},{"id":3,"name":"tags:all"},{"id":207,"name":"subset:kvm016"}],"started":"2025-07-22T11:44:25.275104+01:00","ended":"2025-07-22T11:44:30.966011+01:00","duration":"00:00:05.690907","name":null,"ansible_version":"2.16.11","client_version":"1.7.2","python_version":"3.10.10","server_version":"1.7.2","status":"failed","path":"/home/ssh-gateway/ansible/kuly/get_mac_addresses.yaml","controller":"ssh-gw-4.layershift.com","user":"root"},"content":"---\n- name: Determine primary physical interface and write hostname-interface-mac to file\n  hosts: all\n  gather_facts: no\n  become: yes\n\n  tasks:\n    - name: Gather system facts\n      setup:\n        filter: ansible_default_ipv4,ansible_interfaces,ansible_env\n\n    - name: Get hostname\n      command: hostname -s\n      register: host_name\n      changed_when: false\n\n    - name: Set primary interface from default route\n      set_fact:\n        primary_interface: \"{{ ansible_default_ipv4.interface }}\"\n\n    - name: Debug - Found primary interface\n      debug:\n        msg: \"Primary interface is {{ primary_interface }}\"\n\n    - name: Check if the primary interface is a bridge (using ip link)\n      command: ip link show type bridge {{ primary_interface }}\n      register: bridge_check\n      ignore_errors: yes\n\n    - name: Get physical interfaces part of the bridge (if primary is a bridge)\n      command: bridge link show master {{ primary_interface }}\n      when: bridge_check.rc == 0\n      register: bridge_members\n      changed_when: false\n\n    - name: Extract physical interface names from bridge members\n      set_fact:\n        physical_interfaces: >\n          {{\n            (bridge_members.stdout_lines | map('regex_search', r'.*dev (\\S+)') | select | map('first') | list)\n            if bridge_check.rc == 0\n            else [primary_interface]\n          }}\n\n    - name: Ensure at least one physical interface is found\n      fail:\n        msg: \"No physical interface could be determined.\"\n      when: physical_interfaces is undefined or physical_interfaces | length == 0\n\n    - name: Get MAC address for each physical interface\n      set_fact:\n        interface_mac_list: |\n          {% set result = [] %}\n          {% for iface in physical_interfaces %}\n            {% if hostvars[inventory_hostname]['ansible_' + iface] is defined %}\n              {% set _ = result.append({\n                'interface': iface,\n                'mac': (hostvars[inventory_hostname]['ansible_' + iface]).get('macaddress')\n              }) %}\n            {% endif %}\n          {% endfor %}\n          {{ result }}\n\n    - name: Fail if MAC address not found for any interface\n      fail:\n        msg: \"Could not retrieve MAC address for any physical interface.\"\n      when: interface_mac_list | length == 0\n\n    - name: Write hostname-interface-mac to file\n      copy:\n        content: |\n          {% for item in interface_mac_list %}\n          {{ host_name.stdout }} - {{ item.interface }} - {{ item.mac }}\n          {% endfor %}\n        dest: /tmp/interface_mac.txt\n        owner: root\n        group: root\n        mode: '0644'\n\n    - name: Display result\n      debug:\n        msg: \"Result written to /tmp/interface_mac.txt:\\n{{ lookup('file', '/tmp/interface_mac.txt') }}\"\n","created":"2025-07-22T11:44:25.311497+01:00","updated":"2025-07-22T11:44:25.311537+01:00","path":"/home/ssh-gateway/ansible/kuly/get_mac_addresses.yaml"}