2016-05-03 3 views
1

Как я могу получить доступ к тегам и тегам пропуска, проходящим через командную строку, к незанятой пьесе во время выполнения?Ansible - теги доступа во время выполнения

Я пытаюсь достичь цикла with_items, который может пропускать или включать элементы на основе тега/skip-тега с использованием предложения when. This previous SO question касается одной и той же темы, но использует другой подход. Я бы оценил существование тега за итерацию.

Например:

- name: Build docker images 
    docker_image: 
     name: "{{item.name}}" 
     path: "{{build_folder}}/dockerfiles/{{item.name}}" 
     dockerfile: "{{item.name}}.Dockerfile" 
     state: build 
     tag: "{{private_docker_registry}}/{{item.name}}" 
    when: "{{ansible_host_vars['tags'][image1]}}" is defined 
    with_items: 
     - image1 
     - image2 
     - image3 
+0

Похоже, есть запрос на функцию для [этого] (https://github.com/ansible/ansible/issues/12003) Кажется, что не привлекает внимания: / – stacksonstacks

ответ

0

Метка не доступен во время выполнения. Теги определяют, какие задачи будут выполняться. Вы можете использовать это, чтобы перевести теги к фактам:

- set_fact: 
    image1: True 
    tags: image1 

- set_fact: 
    image2: True 
    tags: image2 

- set_fact: 
    image3: True 
    tags: image3 

Теперь у вас есть факты, соответствующие теги и использовать их в своем состоянии:

... 
when: hostvars[inventory_hostname][item] == True 
with_items: 
    - image1 
    - image2 
    - image3 

Но для меня это кажется неправильным. Это не цель тегов. Теги не должны определять, какое программное обеспечение установлено на хосте. Это должно быть определено в ваших группах/хостах. Затем теги должны просто ограничивать игру подмножеством заданий, например, обновлять пакеты, перезапускать службы и т. Д.

Помимо тегов вы можете архивировать то же самое с экстра-варами. Это также дает вам больше контроля. Если вы вызываете свою игру без каких-либо отмеченных тегов, все задания будут выполнены.

Смежные вопросы