Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从一个剧本中将Ansible任务应用于多个主机?_Ansible_Amazon Iam - Fatal编程技术网

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

如何从一个剧本中将Ansible任务应用于多个主机?,ansible,amazon-iam,Ansible,Amazon Iam,我正在写一本ansible剧本来旋转IAM访问键。它在我的本地主机上运行,以在AWS上创建新的IAM访问密钥。我想将该密钥推送到多个其他主机的~/.aws/credentials文件 --- - name: Roll IAM access keys hosts: localhost connection: local gather_facts: false strategy: free roles: - iam-rotation 在iam轮换角色中,我有如下内容:

我正在写一本ansible剧本来旋转IAM访问键。它在我的本地主机上运行,以在AWS上创建新的IAM访问密钥。我想将该密钥推送到多个其他主机的~/.aws/credentials文件

---
- 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'] }}"
我想使用push将新创建的访问密钥发送给jenkins构建器。如何在任务中使用
中的主机列表和\u项?调试任务只是一个占位符

# 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
我正在本地主机上执行剧本。但是在playbook中,我希望在远程主机上执行一个任务,这是从hosts文件获得的。问题是

如何在任务中使用
中的主机列表和\u项


将任务分为两个角色。然后对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角色,而不是密钥: 您可以使用

委托给:servername


在任务模块中,它将只运行在特定的

问题是什么? ・ 它是什么意思:“来自
的主机列表,其中包含\u项”
with_items
为您提供主机列表? ・ 如果您对“来自”
的项目感兴趣,为什么要发布剧本和角色任务? ・ 如果这是你要问的问题,为什么jenkins_slaves在帖子中只出现一次?我感到非常羞辱和斥责。我忘了添加主机文件。谢谢你温柔的提醒。我想我又问了几个问题。。。关于如何在
jenkins_builders
host组上执行播放,您可以使用播放顶部的
hosts:jenkins_builders
声明来执行播放。首先要了解Ansible,因为这是最基本的要求(一部戏要有
主持人
声明)。ー> 这里有什么问题?谢谢。这正是我想要的。谢谢你,克里斯蒂娜。虽然Deepu Kumar给出的答案正是我想要的,但我认为我们应该重构我们的解决方案,以使用您的建议。我很高兴这是有帮助的。还有第三个选项需要考虑:使用1个角色,对jenkins_构建器执行剧本,在角色中,对要对localhost执行的任务执行local_操作。与Deepu的建议相反,或者相当于委托给:LocalHost当我更多地研究使用IAM角色和实例配置文件时,我意识到一些Jenkins插件在其配置中明确要求访问密钥和密钥(S3发布插件、Amazon SNS通知插件)我们使用的一些管道步骤需要AWS凭据。我能够通过jenkins REST API更新jenkins凭据。我试图弄清楚如何更新全局插件配置,比如S3插件访问密钥和密钥。