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



我正在编写一本可旋转IAM访问键的剧本。它在我的Localhost上运行,在AWS上创建一个新的IAM访问密钥。我想将该键推向其他多个主机的〜/.aws/recertentials文件。

---
- name: Roll IAM access keys
  hosts: localhost
  connection: local
  gather_facts: false
  strategy: free
  roles:
    - iam-rotation

在IAM旋转角色中,我有类似的东西:

- 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 Builders。我如何在任务中使用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的剧本。但是在剧本中,我希望一个任务可以在我从主机文件中获得的远程主机执行。问题是...

我如何在任务中使用with_items的主机列表?

将任务分为两个角色。然后执行对Localhost的第一个角色,第二个角色对Jenkins_builders执行:

---
- name: Rotate IAM access keys
  hosts: localhost
  connection: local
  gather_facts: false
  strategy: free
  roles:
    - iam-rotation
- name: Push out IAM access keys
  hosts: jenkins_builders
  roles:
    - iam-propagation

每个AWS最佳实践建议,如果您在Amazon EC2实例上运行了应用程序,并且该应用程序需要访问AWS资源,则应将IAM角色用于EC2而不是键:https://docs.aws.amazon.com/iam/latest/userguide/ID_ROLES_ROLES_SWITCH-ROLE-EC2.HTML

您可以使用

delegate_to:servername

在任务模块中,它将仅在特定的

上运行

相关内容

  • 没有找到相关文章

最新更新