我正在尝试编写一个任务,该任务可以过滤掉多个EC2实例,将它们添加到清单中,然后停止它们上的PHP服务。
这就是我要从这里复制的add_host想法:http://docs.catalystcloud.io/tutorials/ansible-create-x-servers-using-in-memory-inventory.html
我的服务任务似乎没有在目标实例上运行,而是在运行此角色的剧本中指定的主机上运行。
---
- name: Collect ec2 data
connection: local
ec2_remote_facts:
region: "us-east-1"
filters:
"tag:Name": MY_TAG
register: ec2_info
- name: "Add the ec2 hosts to a group"
add_host:
name: "{{ item.id }}"
groups: foobar
ansible_user: root
with_items: "{{ ec2_info.instances }}"
- name: Stop the service
hosts: foobar
become: yes
gather_facts: false
service: name=yii-queue@1 state=stopped enabled=yes
更新:当我尝试baptistemm的建议时,我得到了:
PLAY [MAIN_HOST_NAME] ***************************
TASK [ec2-manage : Collect ec2 data]
*******************************************
ok: [MAIN_HOST_NAME]
TASK [ec2-manage : Add the hosts to a new group]
*******************************************************
PLAY RECAP **********************************************************
MAIN_HOST_NAME : ok=1 changed=0 unreachable=0 failed=0
更新#2-是的,ec2_remote_tags过滤器确实返回了实例(使用真实标签值而不是我在本文中放置的假标签值)。另外,我已经看到了ec2_instance_facts,但是遇到了一些问题(尽管我有解决方法,但仍需要boto3,但我还是想先解决当前问题)。
答案 0 :(得分:0)
如果要在一组目标上播放任务,则需要在使用add_host
创建目标的内存中列表之后定义一个新的播放(如链接中所述)。因此,您需要这样:
… # omit the code before
- name: "Add the ec2 hosts to a group"
add_host:
name: "{{ item.id }}"
groups: foobar
ansible_user: root
with_items: "{{ ec2_info.instances }}"
- hosts: foobar
gather_facts: false
become: yes
tasks:
- name: Stop the service
hosts: foobar
service: name=yii-queue@1 state=stopped enabled=yes