Отказ от ответственности: я запускаю Ansible только на хостах Linux, поэтому я полагаю, что на хостах Windows все по-другому.
Вы не указываете ansible_facts
, а вместо этого просто начинаете с определенного корневого факта.
В первом случае факт, к которому вы пытаетесь добраться, не поможет вам, потому что он возвращает список всех IP-адресов в системе. Даже если есть только один, он все равно возвращает список, с которым вы не можете просто сравнить строки.
Это должно сделать то, что вы хотите в первом случае:
- name: Change the hostname to newname2
win_hostname:
name: newname2
register: res
when: "ansible_default_ipv4.address == '10.0.0.1'"
Вы собираетесь дублировать этот блок кода, по одному на хост? Если это так, рассмотрите возможность установки переменной для поиска IP и нового имени:
- hosts: all
vars:
ip_newname:
10.0.0.1: newname1
10.0.0.2: newname2
10.0.0.3: newname3
tasks:
- name: Change the hostname
win_hostname:
name: "{{ ip_newname[ansible_default_ipv4.address] }}"
register: res
when: ansible_default_ipv4.address in ip_newname.keys()
- name: Reboot
win_reboot:
when: res is defined and res.reboot_required