Как объяснено в моих комментариях, в вашем вопросе IMO не хватает некоторых примеров и испытаний с вашей стороны, чтобы полностью получить то, что вы пытаетесь достичь и как. В то же время, делая некоторые предположения, вот простой пример, который, возможно, направит вас в нужное русло.
Я предполагаю, что ваш файл ip / ma c является файлом в формате csv (или легко преобразовывается в этот формат). Это файл, который я использовал для тестов:
data.csv
1.1.1.1,aa:aa:aa:aa:aa:aa
2.2.2.2,bb:bb:bb:bb:bb:bb
Мне понадобился фальшивый инвентарь для запуска. Это снова тестовый
inventory.ini
test1.local ansible_host=1.1.1.1
test2.local ansible_host=2.2.2.2
Наконец, это книга, которая, я полагаю, выполняет ту работу, которую вы ждете. Конечно, я играю против фальшивого инвентаря выше и получаю IP-адрес, который я сам установил в ansible_host
. Вам придется адаптироваться к вашей реальной жизненной ситуации.
test.yml
---
- name: read our ref file
hosts: localhost
gather_facts: false
tasks:
- name: read ref csv for future use
read_csv:
fieldnames:
- ip
- macaddress
key: ip
path: data.csv
register: my_data
- name: Show how our var looks like
debug:
var: my_data.dict
- name: Get mac depending on host IP
hosts: all
gather_facts: false
vars:
my_mac_info: "{{ hostvars.localhost.my_data.dict }}"
tasks:
- name: Show macaddress in file for current ip
debug:
msg: "Current host is {{ inventory_hostname }} with ip {{ ansible_host }}. Lookup macaddress is {{ my_mac_info[ansible_host].macaddress }}"
И вот результат:
$ ansible-playbook -i inventory.ini test.yml
PLAY [read our ref file] ***************************************************************************************************************************************************************************************************************
TASK [read ref csv for future use] *****************************************************************************************************************************************************************************************************
ok: [localhost]
TASK [Show how our var looks like] *****************************************************************************************************************************************************************************************************
ok: [localhost] => {
"my_data.dict": {
"1.1.1.1": {
"ip": "1.1.1.1",
"macaddress": "aa:aa:aa:aa:aa:aa"
},
"2.2.2.2": {
"ip": "2.2.2.2",
"macaddress": "bb:bb:bb:bb:bb:bb"
}
}
}
PLAY [Get mac depending on host IP] ****************************************************************************************************************************************************************************************************
TASK [Show macaddress in file for current ip] ******************************************************************************************************************************************************************************************
ok: [test1.local] => {
"msg": "Current host is test1.local with ip 1.1.1.1. Lookup macaddress is aa:aa:aa:aa:aa:aa"
}
ok: [test2.local] => {
"msg": "Current host is test2.local with ip 2.2.2.2. Lookup macaddress is bb:bb:bb:bb:bb:bb"
}
PLAY RECAP *****************************************************************************************************************************************************************************************************************************
localhost : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
test1.local : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
test2.local : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0