我正在编写一个ansible手册来旋转IAM访问密钥。它在我的localhost上运行,以在AWS上创建新的IAM访问密钥。我想将该密钥推送到多个其他主机的〜/ .aws / credentials文件。
---
- name: Roll IAM access keys
hosts: localhost
connection: local
gather_facts: false
strategy: free
roles:
- iam-rotation
在iam-rotation角色中,我有类似的东西:
- name: Create new Access Key
iam:
iam_type: user
name: "{{ item }}"
state: present
access_key_state: create
key_count: 2
with_items:
- ansible-test-user
register: aws_user
- set_fact:
aws_user_name: "{{ aws_user.results.0.user_name }}"
created_keys_count: "{{ aws_user.results.0.created_keys | length }}"
aws_user_keys: "{{ aws_user.results[0]['keys'] }}"
我想使用将新创建的访问密钥推送到jenkins构建器。如何在任务中使用with_items
的主机列表?调试任务只是一个占位符。
# Deploy to all Jenkins builders
- name: Deploy new keys to jenkins builders
debug:
msg: "Deploying key to host {{item}}"
with_items:
- "{{ groups.jenkins_builders }}"
主机文件,其中包含我要应用于
的主机列表[jenkins_builders]
builder1.example.org
builder2.example.org
builder3.example.org
我在localhost上执行playbook。但是在剧本中,我希望在远程主机上执行一项任务,这是我从hosts文件中获取的。问题是......
如何在任务中使用
with_items
的主机列表?
答案 0 :(得分:2)
将任务分为两个角色。然后针对localhost执行第一个角色,针对jenkins_builders执行第二个角色:
for
根据AWS最佳做法建议,如果您在Amazon EC2实例上运行应用程序且应用程序需要访问AWS资源,则应使用IAM角色代替EC2: https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_switch-role-ec2.html
答案 1 :(得分:1)
您可以使用
delegate_to:servername
在任务模块中,它只能在特定的
上运行