我正在尝试stop/start
组group
下hosts
文件中列出的特定[target]
个实例。
以下playbook可以正常停止实例。
---
- hosts: target
remote_user: ubuntu
tasks:
- name: Gather facts
action: ec2_facts
- name: Stop Instances
local_action:
module: ec2
region: "{{region}}"
instance_ids: "{{ansible_ec2_instance_id}}"
state: stopped
但是当我尝试启动这些实例时,它不起作用,因为ec2_facts
无法ssh
进入实例(因为它们现在已停止)并获得instance-ids
---
- hosts: target
remote_user: ubuntu
tasks:
- name: start instances
local_action:
module: ec2
region: "{{region}}"
instance_ids: "{{ansible_ec2_instance_id}}"
state: running
我已经看到了为主机使用dynamic inventory
文件的文档以及对instance-ids
进行硬编码的方法。我想启动其IPs
列在target
hosts
组read()
组中的实例。
答案 0 :(得分:4)
得到了解决方案,以下是适用于我的ansible-task
。
---
- name: Start instances
hosts: localhost
gather_facts: false
connection: local
vars:
instance_ids:
- 'i-XXXXXXXX'
region: ap-southeast-1
tasks:
- name: Start the feature instances
ec2:
instance_ids: '{{ instance_ids }}'
region: '{{ region }}'
state: running
wait: True
Here is the Blog post on How to start/stop ec2 instances with ansible
答案 1 :(得分:1)
您有两个选择:
选项1
使用AWS CLI使用其IP或名称查询已停止实例的实例ID。例如,要查询给定实例名称的实例标识:
shell: aws ec2 describe-instances --filters 'Name=tag:Name,Values={{inst_name}}' --output text --query 'Reservations[*].Instances[*].InstanceId'
register: inst_id
选项2
将Ansible升级到2.0版(在Hills和Far Away上)并使用新的ec2_remote_facts模块
- ec2_remote_facts:
filters:
instance-state-name: stopped
答案 2 :(得分:0)
您应该添加gather_facts: False以防止Ansible尝试通过SSH连接到主机,因为它们未运行:
- hosts: target
remote_user: ubuntu
gather_facts: false
如果您需要在实例启动后收集事实,那么您可以使用setup模块在启动后明确收集事实。
编辑:我刚刚意识到问题是您正在尝试访问ansible_ec2_instance_id因为实例已关闭而无法获得的事实。您可能希望查看this custom module called ec2_lookup,即使实例已关闭,也可以搜索获取AWS实例ID。使用此功能,您可以获得您感兴趣的实例列表,然后启动它们。