Назад | Перейти на главную страницу

Как мне перебрать элементы 1 на 1 в конфигурации Ansible (YAML / Jinja2)?

Я пытаюсь перебрать свои хосты из своего инвентаря в 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 }}"