0

Я написал две роли с 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 доступен?

ответ

1

Файл инвентаризации не будет автоматически перенаправлен между играми.

Вместо изменения файла инвентаризации используйте add_host module and in-memory inventory.

- name: Add the newly created EC2 instances to the in-memory inventory 
    add_host: 
    hostname: "{{ item.private_ip }}" 
    groups: sit 
    with_items: "{{ ec2.instances }}" 

В качестве альтернативы вы можете использовать meta module с refresh_inventory параметром, чтобы заставить анзибль перечитать файл инвентаризации:

- meta: refresh_inventory 
+0

ах! Благодарю. Я понял, что это связано с памятью, так как я дважды запускал сценарий, и первые экземпляры установки были настроены с параметрами, которые я им дал. Но я не знал, как добавить хосты в память. Тем не менее, add_host не меняет мой инвентарь на диске. Я должен по-прежнему использовать * lineinfile * для midify my hosts file? – SSF