Зарегистрируйте переменные в цикле with_items в Ansible playbook

У меня есть словарь с разными названиями, например

vars:
    images:
      - foo
      - bar

Теперь я хочу проверять репозитории и впоследствии создавать образы докеров только после изменения источника. Поскольку получение источника и создание изображения одинаковы для всех элементов, кроме имени, я создал задачи с помощью with_items: images и попытался зарегистрировать результат с помощью:

register: "{{ item }}"

а также пробовал

register: "src_{{ item }}"

Затем я попробовал следующее условие

when: "{{ item }}|changed"

а также

when: "{{ src_item }}|changed"

Это всегда приводит к fatal: [piggy] => |changed expects a dictionary

Итак, как я могу правильно сохранить результаты операций в именах переменных на основе списка, который я перебираю?

Обновление: хотелось бы иметь что-то вроде этого:

- hosts: all
  vars:
    images:
      - foo
      - bar
  tasks:
    - name: get src
      git:
        repo: [email protected]/repo.git
        dest: /tmp/repo
      register: "{{ item }}_src"
      with_items: images

    - name: build image
      shell: "docker build -t repo ."
      args:
        chdir: /tmp/repo
      when: "{{ item }}_src"|changed
      register: "{{ item }}_image"
      with_items: images

    - name: push image
      shell: "docker push repo"
      when: "{{ item }}_image"|changed
      with_items: images

См. также:  Объявление переменной: использование var, let и const.
Понравилась статья? Поделиться с друзьями:
IT Шеф
Комментарии: 1
  1. soupdiver

    Итак, как я могу правильно сохранить результаты операций в именах переменных на основе списка, который я перебираю?

    Тебе это не нужно. Переменные, зарегистрированные для задачи с with_items, имеют другой формат, они содержат результаты для всех элементов.

    - hosts: localhost
      gather_facts: no
      vars:
        images:
          - foo
          - bar
      tasks:
        - shell: "echo result-{{item}}"
          register: "r"
          with_items: "{{ images }}"
    
        - debug: var=r
    
        - debug: msg="item.item={{item.item}}, item.stdout={{item.stdout}}, item.changed={{item.changed}}"
          with_items: "{{r.results}}"
    
        - debug: msg="Gets printed only if this item changed - {{item}}"
          when: item.changed == true
          with_items: "{{r.results}}"
    

    Как вы ссылаетесь на названия изображений в результатах? person soupdiver; 18.09.2017

    @KenJ последние две задачи показывают это. Если вы имели в виду что-то еще, пожалуйста, уточнить. Запустите его и посмотрите результат. person soupdiver; 18.09.2017

Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: