Meu script Ansible cria uma máquina da AWS e tenta se conectar 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 no wait_for_connection com um erro de 'permissão negada'. Presumo que seja 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 posso especificá-lo no inventário, pois o host acabou de ser criado e o nome de usuário depende do tipo de instância. Não há opção 'username' 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
Eu tentei definir o usuário e o arquivo de chave logo antes do wait_for_connection, como mostrado abaixo, mas o ansible ainda relata como se conectando como usuário NONE, e os arquivos de chave tentaram não listar meu arquivo de 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
Você pode definir variáveis em qualquer tarefa, bloco ou jogo usando a palavra-
vars
chave.