J'ai du mal à exécuter mon playbook Ansible sur une instance AWS. Voici ma version:
$ ansible --version
ansible 2.0.0.2
J'ai créé un fichier d'inventaire en tant que:
[my_ec2_instance]
default ansible_Host=MY_EC2_ADDRESS ansible_user='ubuntu' ansible_ssh_private_key_file='/home/MY_USER/MY_KEYS/MY_KEY.pem'
Test de la connexion à mon serveur:
$ ansible -i provisioner/inventory my_ec2_instance -m ping
default | SUCCESS => {
"changed": false,
"ping": "pong"
}
Maintenant, lorsque j'exécute mon playbook sur cet inventaire, j'obtiens l'erreur Timeout (12s) waiting for privilege escalation Prompt
comme suit:
$ ansible-playbook -i provisioner/inventory -l my_ec2_instance provisioner/playbook.yml
PLAY [Ubuntu14/Python3/Postgres/Nginx/Gunicorn/Django stack] *****
TASK [setup] *******************************************************************
fatal: [default]: FAILED! => {"failed": true, "msg": "ERROR! Timeout (12s) waiting for privilege escalation Prompt: "}
NO MORE HOSTS LEFT *************************************************************
PLAY RECAP *********************************************************************
default : ok=0 changed=0 unreachable=0 failed=1
Si je lance le même playbook en utilisant le .vagrant/provisioners/ansible/inventory/vagrant_ansible_inventory
Comme paramètre d'inventaire, cela fonctionne parfaitement sur mon instance de Vagrant (je crois que cela prouve qu'il n'y a rien de mal dans le playbook/les rôles lui-même)
De plus, si je l'exécute avec un -vvvv
, Copiez la ligne exec ssh
Et l'exécutez manuellement, il se connecte en effet à AWS sans problème.
Dois-je ajouter un autre paramètre dans mon fichier d'inventaire pour connecter une instance EC2? Qu'est-ce que je rate?
Il y a un problème git à propos de cette erreur qui affecte diverses versions d'Ansible 2.x ici https://github.com/ansible/ansible/issues/13278#issuecomment-216307695
Ma solution consistait simplement à ajouter timeout=30
à /etc/ansible/ansible.cfg
.
Ce n'est pas un délai d'attente de "tâche" ou de "rôle" et cela a suffi pour résoudre l'erreur (j'ai certains rôles/tâches qui prennent beaucoup plus de temps que cela).
Exécutez cela sur l'ordinateur cible
Sudo apt-get install python-simplejson
J'ai corrigé cette erreur pour mon système car j'avais oublié que j'avais modifié le fichier de configuration ansible:
Sudo vim /etc/ansible/ansible.cfg
Essayez de commenter les paramètres de privilège qui pourraient essayer de rooter Sudo.
ainsi:
[privilege_escalation]
#become=True
#become_method=su
#become_user=root
#become_ask_pass=False
#become_exe="Sudo su -"
Le compte que j'essayais de ssh n'avait pas la permission de devenir root.
Vérifiez s'il s'agit d'un problème avec une ancienne version de Sudo sur le serveur de destination. Certaines anciennes versions de Sudo n'ont pas l'option -n ansible utilisations.
Parfois, la phase de configuration prend plus de temps pour les instances ec2, vous devez modifier la valeur du délai d'expiration dans ansible.cfg en quelque chose comme timeout=40
. Cela définira la valeur du délai d'attente à 40 secondes.
Je crée des images sécurisées VM pour AWS, QEMU et VBox sur un réseau isolé, avec une prise en charge DNS limitée. L'augmentation du délai d'expiration SSH à 40 secondes a eu un effet limité dans ma situation.
J'utilise Packer v1.5.5, Ansible v2.9.2 et OpenSSH v7.4p1
Ma solution a été de changer le paramètre UseDNS
dans /etc/ssh/ssd_config
à no
.
J'ai ajouté les lignes suivantes dans ma configuration de kickstart RHEL/CentOS, avec un excellent résultat.
%post
# Disable DNS lookups by sshd to address Ansible timeouts
Perl -npe 's/^#UseDNS yes/UseDNS no/g' -i /etc/ssh/sshd_config
%end
J'ai exécuté la commande comme suit et cela fonctionne: commande:
ansible-playbook -c paramiko httpd.yml
Dans mon cas, c'était parce que mon livre de jeu avait
become_method: su
become_flags: "-"
qui invite une demande de mot de passe sur l'hôte.
Ajouter ansible-playbooks … --ask-become-pass
et la transmission du mot de passe ont résolu le problème.
vim /etc/ansible/ansible.cfg
timeout = 10 ( change to 60 )