Мой скрипт 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