Доступ к переменным хоста в задачах в Ansible - PullRequest
0 голосов
/ 11 декабря 2018

У меня есть группа хостов с переменными хоста, как показано ниже

[test:children]
test1
test2
test3

[test:vars]
clean_images=true

У меня есть задачи, определенные в роли, показанной ниже

- name: clean docker images
  template:
    dest: "/etc/systemd/system/{{ item.name }}"
  with_items:
  - { name: "{{ service_name }}.service" }



- name: start service
  systemd:
    name: "{{ service_name }}.service"
    state: started
    enabled: yes
  when: hostvars['test'].clean_images is defined

Это простые задачи,где я очищаю образы докеров в зависимости от хоста.У меня есть книга игр, которая выполняет эту роль в другом наборе групп хостов [test_services].Я хочу, чтобы задача - name: start service запускалась, если она сталкивается с какой-либо из групп хостов, определенных в [test: children] .Чтобы проверить, что я добавил переменную clean_images = true в группу test для выполнения проверки условия

Но оператор при у меня естьприведенное выше дает мне ошибку

fatal: [xx.xx.xx.xx]: FAILED! => {"msg": "The conditional check 'hostvars['test'].clean_images is defined' failed. The error was: error while evaluating conditional (hostvars['test'].clean_images is defined): \"hostvars['test']\" is undefined\n\nThe error appears to have been in 'main.yml'

У меня проблема с построением этого условного оператора с использованием , когда , любая помощь будет отличной.

1 Ответ

0 голосов
/ 11 декабря 2018
when: hostvars['test'].clean_images is defined

должно быть просто:

when: clean_images is defined and clean_images

, поскольку нет хоста с именем test, и, следовательно, хост переменных test никогда не будет существовать.Для всех хостов, которые принадлежат к группе test, будет определено clean_images, однако

...