Amazon ec2 通过ansible标记启动以前停止的EC2实例
我正在尝试创建一个剧本或角色,让我可以使用ansible by标记启动以前停止的EC2实例(EC2实例通过标记分配给清单中的静态组)。将更改Amazon ec2 通过ansible标记启动以前停止的EC2实例,amazon-ec2,ansible,Amazon Ec2,Ansible,我正在尝试创建一个剧本或角色,让我可以使用ansible by标记启动以前停止的EC2实例(EC2实例通过标记分配给清单中的静态组)。将更改ec2.ini文件,以同时返回有关已停止实例的信息。到目前为止,我所看到的唯一类似示例依赖于ec2\u facts来获取instance\u id ansible网站上的官方假设区域和实例ID已经预先知道/硬编码 - name: Start sandbox instances hosts: localhost gather_facts: false
ec2.ini
文件,以同时返回有关已停止实例的信息。到目前为止,我所看到的唯一类似示例依赖于ec2\u facts
来获取instance\u id
ansible网站上的官方假设区域
和实例ID
已经预先知道/硬编码
- name: Start sandbox instances
hosts: localhost
gather_facts: false
connection: local
vars:
instance_ids:
- 'i-xxxxxx'
- 'i-xxxxxx'
- 'i-xxxxxx'
region: us-east-1
tasks:
- name: Start the sandbox instances
ec2:
instance_ids: '{{ instance_ids }}'
region: '{{ region }}'
state: running
wait: True
vpc_subnet_id: subnet-29e63245
assign_public_ip: yes
role:
- do_neat_stuff
- do_more_neat_stuff
最好我正在寻找一种解决方案,例如,如果可能的话,我可以从动态资源清册中获取必要的变量。现有EC2实例可以从下面的播放开始,而不需要硬编码实例标识符或EC2区域
---ec2.yml
-主持人:aws
收集事实:错误
任务:
-名称:启动EC2实例
地方行动:
模块:ec2
状态=运行
region={{hostvars[inventory_hostname]['ec2_region']}
实例_id={{hostvars[inventory_hostname]['ec2_id']}
标签:
-开始实例
假设动态实例已标记,则以下命令将启动实例:
$ansible playbook-i inventory--limit[instance static group name]--tags start instance ec2.yml
首先,您必须告诉动态资源清册脚本返回停机的主机。在ec2.ini文件中设置为“False”。将其更改为“True”:
以下是我使用的剧本:
---
- hosts: "{{ ip_list | default( 'ec2' ) }}"
connection: ssh
gather_facts: false
tasks:
- name: Start instance
ec2:
state: running
instance_id: "{{ ec2_id }}"
key_name: "{{ key_name }}"
region: "{{ region }}"
wait: true
delegate_to: localhost
key\u name和region在我的group\u vars/all文件中定义,ec2\u id来自ansible,带有主机信息,ip\u list在命令行上定义。我相信您可以迭代标记并使用
ansible\u ec2\u实例id
。如果您需要更多信息,请告诉我。如果我们想要启动具有弹性IP的实例,并且这些实例列在组下的主机文件中,比如说[停止的实例]
在哪里记录了部分:instance_id={{{hostvars[inventory_hostname]['ec2_id']}?关于.ini文件的一点非常好。您可以添加关于组变量/all和命令行/如何运行它的示例吗?groupvars/all
中唯一相关的内容是key\u name
和region
。密钥_名称是在构建库存时设置的,因此我们可以对不同的库存使用不同的密钥。命令行就是ansibleplaybookstart\u实例-e“ip\u list=first,second,third”
。
# By default, only EC2 instances in the 'running' state are returned. Set
# 'all_instances' to True to return all instances regardless of state.
all_instances = True
---
- hosts: "{{ ip_list | default( 'ec2' ) }}"
connection: ssh
gather_facts: false
tasks:
- name: Start instance
ec2:
state: running
instance_id: "{{ ec2_id }}"
key_name: "{{ key_name }}"
region: "{{ region }}"
wait: true
delegate_to: localhost