Итерация в цикле with_items - PullRequest
0 голосов
/ 23 мая 2019

Привет, я сейчас пытаюсь освоить ANSI с AWS, и мне очень нравится его гибкость.

К сожалению, теперь я начинаю бить кирпичную стену своими экспериментами. Я пытаюсь пометить тома для определенных экземпляров, у которых есть тег окружение: тест с окружением tages : тест и резервное копирование: true, Книга воспроизведения работает как задумано, если я укажу каждый Индекс массива в цикле with_items. Вот моя пьеса:

---
- name: Tag the EBS Volumes
  hosts: tag_environment_test
  gather_facts: False
  tags: tag
  vars_files:
    - /etc/ansible/vars/aws.yml

  tasks:
  - name: Gather instance instance_ids
    local_action:
        module: ec2_remote_facts
        region: '{{ aws_region }}'
        filters:
            instance-state-name: running
            "tag:environment": test
    register: test_id

  - name: Gather volume information for instance
    local_action:
        module: ec2_vol
        region: '{{ aws_region }}'
        instance: "{{ item.id }}"
        state: list
    with_items:
     - "{{ test_id.instances }}"
    register:  ec2_volumes
  - debug:
      var: ec2_volumes

  - name: Do some actual tagging
    local_action:
       module: ec2_tag
       region: '{{ aws_region }}'
       resource: "{{ item.id }}"
       args:
         tags:
          environment: test
          backup: true
    with_items:
      - "{{ ec2_volumes.results[0].volumes }}"
#      - "{{ ec2_volumes.results[1].volumes }}"

Мой вопрос теперь состоит в том, можно ли перебирать весь массив в ec2_volumes.results без необходимости указывать каждое отдельное значение в массиве. Как, например, _ec2_volumes.results [X] .volumes X = X + 1_ , поэтому каждый раз, когда он проходит цикл, он повторяет +1 до конца массива.

Каждый вход, также в остальной части пьесы, будет очень ценным (как я уже говорил, все еще пытаясь освоить ansible.:)

Поздравительные Drees

1 Ответ

0 голосов
/ 23 мая 2019

Вы можете перебрать свой список результатов:

- name: Do some actual tagging
  delegate_to: localhost
  ec2_tag:
    region: '{{ aws_region }}'
    resource: "{{ item.volume.id }}"
    tags:
      environment: test
      backup: true
  with_items: "{{ ec2_volumes.results }}"

Каждый вход, также в остальной части пьесы, будет очень признателен

Рассмотримиспользуя delegate_to: localhost вместо local_action.Рассмотрим следующую задачу:

- name: an example
  command: do something

Используя delegate_to, мне нужно добавить только одну строку:

- name: an example
  delegate_to: localhost
  command: do something

При использовании local_action Мне нужно переписать задачу:

- name: an example
  local_action:
    module: command do something

И, конечно, delegate_to более гибок: его можно использовать для делегирования на хосты, отличные от localhost.

Обновление

Безвидя вашу настоящую пьесу, трудно определить источник ошибки.Вот полная книга игр, которая успешно запускается (с использованием синтезированных данных и упаковки задачи ec2_tag в задачу debug):

---
- hosts: localhost
  gather_facts: false
  vars:
    aws_region: example
    ec2_volumes:
      results:
        - volume:
            id: 1
        - volume:
            id: 2
  tasks:
    - name: Do some actual tagging
      debug:
        msg:
          ec2_tag:
            region: '{{ aws_region }}'
            resource: '{{ item.volume.id }}'
            tags:
              environment: test
              backup: true
      with_items: "{{ ec2_volumes.results }}"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...