使用 ansible 通过标签启动之前停止的 EC2 实例
Starting previously stopped EC2 instances by tags with ansible
我正在尝试创建一个剧本或角色,让我可以通过标签启动以前停止的 EC2 实例(例如,EC2 实例通过标签分配给清单中的静态组)。 ec2.ini
文件也更改为 return 有关已停止实例的信息。到目前为止我看到的唯一类似的例子是依靠ec2_facts
得到instance_ids
。
ansible 网站上的官方 example 假定 region
和 instance_ids
已经在 advance/hardcoded 中已知。
- 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
- hosts: aws
gather_facts: false
tasks:
- name: start EC2 instance
local_action:
module: ec2
state=running
region={{ hostvars[inventory_hostname]['ec2_region'] }}
instance_ids={{ hostvars[inventory_hostname]['ec2_id'] }}
tags:
- start-instance
</pre>
假设动态实例被标记,以下命令将启动实例:
$ ansible-playbook -i inventory --limit [instance static group name] --tags start-instance ec2.yml
首先,您必须将动态清单脚本告知 return 已关闭的主机。在 ec2.ini 文件中设置为 "False"。将其更改为 "True":
# 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
key_name 和 region 在我的 group_vars/all 文件中定义,ec2_id来自ansible,带有主机信息,ip_list是在命令行定义的
我正在尝试创建一个剧本或角色,让我可以通过标签启动以前停止的 EC2 实例(例如,EC2 实例通过标签分配给清单中的静态组)。 ec2.ini
文件也更改为 return 有关已停止实例的信息。到目前为止我看到的唯一类似的例子是依靠ec2_facts
得到instance_ids
。
ansible 网站上的官方 example 假定 region
和 instance_ids
已经在 advance/hardcoded 中已知。
- 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 - hosts: aws gather_facts: false tasks: - name: start EC2 instance local_action: module: ec2 state=running region={{ hostvars[inventory_hostname]['ec2_region'] }} instance_ids={{ hostvars[inventory_hostname]['ec2_id'] }} tags: - start-instance </pre>
假设动态实例被标记,以下命令将启动实例:
$ ansible-playbook -i inventory --limit [instance static group name] --tags start-instance ec2.yml
首先,您必须将动态清单脚本告知 return 已关闭的主机。在 ec2.ini 文件中设置为 "False"。将其更改为 "True":
# 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
key_name 和 region 在我的 group_vars/all 文件中定义,ec2_id来自ansible,带有主机信息,ip_list是在命令行定义的