我用 Ansible 编写了两个角色。第一个角色(即配置)在具有所需 IAM 以配置 EC2 实例的实例上本地执行(见下文):
- name: Provison "{{ count }}" ec2 instances in "{{ region }}"
ec2:
key_name: "{{ key_name }}"
instance_type: "{{ instance_type }}"
image: "{{ image }}"
...
exact_count: "{{ count }}"
count_tag: "{{ count_tag }}"
instance_tags:
...
register: ec2
然后我将私有 IP 地址添加到主机。
- name: Add the newly created EC2 instances to the local host file
local_action: lineinfile
dest="./hosts"
regexp={{ item.private_ip }}
insertafter="[sit]" line={{ item.private_ip }}
with_items: "{{ ec2.instances }}"
我等待 SSH 可用。
- name: Wait for SSH process to be available on "{{ sit }}"
wait_for:
host: "{{ item.private_ip }}"
port: 22
delay: 60
timeout: 320
state: started
with_items: "{{ ec2.instances }}"
第二个角色(即 setupEnv)在 'sit' 主机上设置环境变量,例如用户/组目录。我尝试按顺序运行角色(参见下面的main.yml
剧本):
- hosts: local
roles:
connection: local
gather_facts: false
user: svc_ansible_lab
roles:
- provision
- hosts: sit
roles:
connection: ssh
gather_facts: true
user: ec2-user
roles:
- setupEnv
但是,只有第一个角色会在本地主机上执行。Ansible 一直等到 SSH 在预配置的实例上可用,然后该过程完成而不尝试角色 setupEnv。
有没有办法可以确保在sit
SSH 可用后在主机上执行第二个角色?