Ansible не может подключиться по SSH к динамически созданному хосту EC2

Ansible не может подключиться по SSH к динамически созданному хосту EC2

Мой скрипт Ansible создает машину AWS, а затем пытается подключиться к ней. В зависимости от создаваемого образа, имя пользователя по умолчанию для входа по SSH — 'centos' или 'ubuntu' и т. д.

Мой скрипт ниже дает сбой при wait_for_connection с ошибкой «отказано в доступе». Япредполагатьэто происходит потому, что ssh использует неправильное имя пользователя; управляющий узел запускает скрипт как «userx». (Я подтвердил, что мой открытый ключ находится на удаленной машине, а мой соответствующий закрытый ключ доступен на управляющем узле).

Как мне настроить мой скрипт, чтобы ansible использовал правильное имя пользователя? Я не могу указать его в inventory, так как хост был только что создан, а имя пользователя зависит от типа экземпляра. Для wait_for_connection нет опции 'username'

Мой сценарий:

- name: Create one AWS machine
  local_action:
    module: ec2
    aws_access_key: "{{ aws_access_key }}"
    aws_secret_key: "{{ aws_secret_key }}"
    key_name: "{{ key_name }}"
    group_id: "{{ security_group_id }}"
    instance_type: "{{ instance_type }}"
    image: "{{ ami_id }}"
    wait: true
    region: "{{ aws_region }}"
    zone: "{{ aws_zone}}"
    vpc_subnet_id: "{{ aws_vpc_subnet }}"
    assign_public_ip: yes
  register: ec2

- name: Wait for SSH to come up
  delegate_to: "{{ ec2.instances[0].public_dns_name }}"
  wait_for_connection:
    delay: 60
    sleep: 15
    timeout: 40

Я попытался задать пользователя и файл ключа прямо перед wait_for_connection, как показано ниже, но ansible по-прежнему сообщает о подключении как пользователь NONE, а файлы ключей, которые я пытался использовать, не содержат мой файл ключа (/root/.ssh/mykey):

- name: Prepare to connect to new node
  set_fact:
    ansible_user: 'centos'
    ansible_ssh_private_key_file: "{{ private_key_file }}"        

и часть вывода ansible:

<ec2-34-27-194-74.compute-1.amazonaws.com> ESTABLISH SSH CONNECTION FOR USER: None
debug1: identity file /root/.ssh/id_ecdsa type -1

решение1

Вы можете задать переменные для любой задачи, блока или воспроизведения, используя varsключевое слово.

- name: Wait for SSH to come up
  delegate_to: "{{ ec2.instances[0].public_dns_name }}"
  wait_for_connection:
    delay: 60
    sleep: 15
    timeout: 40
  vars:
    ansible_user: centos

Связанный контент