1

Just looking for a bit of help.

Basically what I am trying do is create a file for each network interface my computer has with the filename being a combination of the interface name and mac address.
e.g.

For these interfaces
eth0 with mac 123-456-789
eth1 with mac 987-654-321
eth2 with mac 456-123-789

I expect 3 files created with names:
eth0_123-456-789
eth1_987-654-321
eth2_456-123-789

I currently have this playbook

- hosts: all

  tasks:
    - name: Create files
      block:
        - name: This gets me a list of all eth* interfaces
          shell: ls /sys/class/net/ | grep eth
          register: eth_interface

        - name: This gets the mac address for each of those eth* interfaces
          command: cat /sys/class/net/{{ item }}/address
          with_items: "{{ eth_interface.stdout_lines }}"
          register: mac_address

        - name: Add mac address to its relevant file
          command: touch /tmp/"{{ item.mac }}"_"{{ item.eth }}"
          with_items: 
             - { eth: "{{ eth_interface.stdout_lines }}", mac: "{{ mac_address | json_query('results[*].stdout') }}" }

I expected to get 3 separate files for each interface, but instead I got 1 single file with the name below: [u'123-456-789', u'987-654-321', u'456-123-789'][u'eth0', u'eth1', u'eth2']

It seems to work fine if I use just a single variable like either eth or mac, but breaks when I use the 2 variables together using with_items loop.

Can someone please help?

1 Answer 1

2

The playbook below

shell> cat pb.yml
- hosts: localhost
  vars:
    ifc: [eth0, eth1, eth2]
    mac: [AAA, BBB, CCC]
  tasks:
    - file:
        state: touch
        path: "{{ 'tmp/' ~ item.0 ~ '_' ~ item.1 }}"
      loop: "{{ ifc|zip(mac)|list }}"

creates

shell> tree tmp
tmp
├── eth0_AAA
├── eth1_BBB
└── eth2_CCC
Sign up to request clarification or add additional context in comments.

1 Comment

Wow, that worked. I have been scratching my head on this for 2 days, should of just asked for help earlier. Thanks so much for your help!!!

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.