Ansible falha ao conectar-se por ssh ao host EC2 criado dinamicamente

Ansible falha ao conectar-se por ssh ao host EC2 criado dinamicamente

Meu script Ansible cria uma máquina AWS e tenta conectar-se a ela. Dependendo da imagem que estou criando, o nome de usuário padrão para login SSH é ‘centos’ ou ‘ubuntu’ etc.

Meu script abaixo falha em wait_for_connection com um erro de 'permissão negada'. EUpresumirisso ocorre porque o ssh está usando o nome de usuário errado; o nó de controle está executando o script como 'userx'. (Confirmei que minha chave pública está na máquina remota e minha chave privada correspondente está disponível no nó de controle).

Como ajusto meu script para fazer com que o ansible use o nome de usuário correto? Não consigo especificá-lo no inventário porque o host acabou de ser criado e o nome de usuário depende do tipo de instância. Não há opção de 'nome de usuário' para wait_for_connection

Meu roteiro:

- 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

Tentei definir o usuário e o arquivo-chave logo antes de wait_for_connection como mostrado abaixo, mas o ansible ainda relata como conexão como usuário NONE, e os arquivos-chave tentaram não listar meu arquivo-chave (/root/.ssh/mykey):

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

e parte da saída 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

Responder1

Você pode definir variáveis ​​em qualquer tarefa, bloco ou jogo usando a varspalavra-chave.

- 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

informação relacionada