Ansible no puede conectarse ssh al host EC2 creado dinámicamente

Ansible no puede conectarse ssh al host EC2 creado dinámicamente

Mi script de Ansible crea una máquina AWS y luego intenta conectarse a ella. Dependiendo de la imagen que estoy creando, el nombre de usuario predeterminado para iniciar sesión SSH es 'centos' o 'ubuntu', etc.

Mi secuencia de comandos a continuación falla en wait_for_connection con un error de "permiso denegado". Iasumiresto se debe a que ssh está utilizando el nombre de usuario incorrecto; el nodo de control ejecuta el script como 'userx'. (Confirmé que mi clave pública está en la máquina remota y que mi clave privada coincidente está disponible en el nodo de control).

¿Cómo ajusto mi script para que ansible use el nombre de usuario correcto? No puedo especificarlo en el inventario ya que el host se acaba de crear y el nombre de usuario depende del tipo de instancia. No existe la opción 'nombre de usuario' para wait_for_connection

Mi guión:

- 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

Intenté configurar el usuario y el archivo de claves justo antes de wait_for_connection como se muestra a continuación, pero ansible aún informa que se conecta como usuario NINGUNO, y los archivos de claves probados no enumeran mi archivo de claves (/root/.ssh/mykey):

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

y parte de la salida 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

Respuesta1

Puede establecer variables en cualquier tarea, bloque o juego usando la varspalabra clave.

- 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

información relacionada