Я пытаюсь перебрать свои хосты из своего инвентаря в Ansible и использовать имя хоста этой итерации в команде. В частности, я пытаюсь установить для каждого из моих хостов имя хоста, которое я назвал им в моем файле hosts. Итак, у меня есть web01, web02, web03 и т. Д. Для моих веб-серверов - я хочу установить их как имена хостов на серверах в каждом вопросе, т.е. я хочу перебрать «все» хосты и когда я нахожусь на web01 (первая итерация) , Я хочу передать это имя хоста, на котором я нахожусь, в модуль имени хоста. Вот что я пробовал:
- hosts: all
become: true
tasks:
- hostname:
name: "{{ item }}"
with_items: "{{ play_hosts }}"
Однако вместо того, чтобы устанавливать в качестве имени хоста имя хоста, на котором я нахожусь, он пытается установить каждый отдельный хост из моей конфигурации ansible как имя хоста на каждом отдельном сервере. Итак, он пытается сделать:
connect to web01; hostname -> web01; hostname -> web02; hostname -> web03
connect to web02; hostname -> web01; hostname -> web02; hostname -> web03
connect to web03; hostname -> web01; hostname -> web02; hostname -> web03
Вместо этого я хочу:
connect to web01; hostname -> web01
connect to web02; hostname -> web02
connect to web03; hostname -> web03
Как я могу это сделать?
Я нашел здесь похожий вопрос: Ansible: установка имени хоста поверх инвентаря
но на это был дан ответ более сложное решение, чем я надеялся. Было предложено добавить суффиксы, но, конечно, простой цикл, как я хочу, в принципе не требует этого.
Вам не нужно перебирать хосты, так как это одна из самых фундаментальных функций Ansible (она отключена в некоторых выбранных модулях, но hostname
не входит в их число).
Чтобы установить для имени хоста целевой машины значение, определенное в файле инвентаризации Ansible, все, что вам нужно сделать, это сослаться на inventory_hostname
переменная (см. Магические переменные):
- hosts: all
become: true
tasks:
- hostname:
name: "{{ inventory_hostname }}"