如何将Ansible任务应用于剧本中的多个主机?

时间:2018-02-23 20:42:46

标签: ansible amazon-iam

我正在编写一个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的主机列表?

2 个答案:

答案 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

在任务模块中,它只能在特定的

上运行