Я написал две роли с Ansible. Первая роль (т.е. положение) выполняются локально на экземпляре, который имеет необходимый Iams для экземпляров EC2 положения (см ниже):Выполнение ролей локально и удаленно в Ansible/AWS
- 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) устанавливает переменные окружения на «сидит» хосты, такие как пользователи/директории группы. Я пытаюсь запустить роли последовательно (см 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 не будет доступен в подготовленных экземплярах, а затем процесс завершится без необходимости настройки ролиEnv.
Есть ли способ удостовериться, что вторая роль выполняется на хостах после того, как SSH доступен?
ах! Благодарю. Я понял, что это связано с памятью, так как я дважды запускал сценарий, и первые экземпляры установки были настроены с параметрами, которые я им дал. Но я не знал, как добавить хосты в память. Тем не менее, add_host не меняет мой инвентарь на диске. Я должен по-прежнему использовать * lineinfile * для midify my hosts file? – SSF