您好,我在atm试图摆脱与ansible的纠缠,到目前为止,我真的很喜欢它的灵活性。
现在,我的实验开始让我感到困惑。我正在尝试为具有标签 environment:test 的特定实例的卷添加标签 environment:test 和 backup: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的困扰。:)
问候 服装
答案 0 :(得分:0)
您可以遍历结果列表:
- 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
更灵活:您可以使用它来委派除本地主机以外的主机。
更新
在没有看到您实际的剧本的情况下,很难确定错误的来源。这是一本完整的剧本,可以成功运行(使用合成数据并将您的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 }}"