gpt4 book ai didi

ansible - 如何从剧本中将 Ansible 任务应用到多个主机?

转载 作者:行者123 更新时间:2023-12-02 15:59:29 25 4
gpt4 key购买 nike

我正在编写一个 ansible 剧本来轮换 IAM 访问 key 。它在我的本地主机上运行,​​以在 AWS 上创建新的 IAM 访问 key 。我想将该 key 推送到多个其他主机的 ~/.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'] }}"

我想将新创建的访问 key 推送给 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

我正在本地主机上执行剧本。但在剧本中,我希望在从主机文件获取的远程主机上执行一项任务。问题是...

How would I use the list of hosts from with_items in the task?

最佳答案

将任务分为两个角色。然后针对 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 资源,则您应该使用 EC2 的 IAM 角色而不是 key : https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_switch-role-ec2.html

关于ansible - 如何从剧本中将 Ansible 任务应用到多个主机?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48955943/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com