Pour un peu de contexte, j'utilise packer avec un provisionneur ansible pour créer des images AMI sur AWS.
Les parties pertinentes du packer et de l'ansible :
packer.json
"provisioners": [{
"type": "shell",
"inline": [
"sleep 15",
"sudo apt-get update",
"sudo apt-get install -y aptitude python"
]
}, {
"type": "ansible",
"playbook_file": "../provision/ansible-playbook.yml",
"groups": ["webworker"],
"extra_arguments": [
"--become-method=sudo"
]
}]
tasks.yml
- name: Install tools
become: true
apt:
name: "{{ item }}"
state: latest
with_items:
- build-essential
- git
Sur ma machine locale, tout se passe bien.
Mais dans le cadre d'un CI, nous utilisons notre serveur Jenkins pour exécuter ce packer script mais il échoue sur la première tâche ansible qui a un become
en place, dans ce cas la première étape est d'installer quelques outils via apt
module :
amazon-ebs: "W: chmod 0700 of directory /var/lib/apt/lists/partial failed - SetupAPTPartialDirectory (1: Operation not permitted)",
amazon-ebs: "E: Could not open lock file /var/lib/apt/lists/lock - open (13: Permission denied)",
amazon-ebs: "E: Unable to lock directory /var/lib/apt/lists/",
amazon-ebs: "W: Problem unlinking the file /var/cache/apt/pkgcache.bin - RemoveCaches (13: Permission denied)",
amazon-ebs: "W: Problem unlinking the file /var/cache/apt/srcpkgcache.bin - RemoveCaches (13: Permission denied)",
amazon-ebs: "E: Could not open lock file /var/lib/dpkg/lock - open (13: Permission denied)",
amazon-ebs: "E: Unable to lock the administration directory (/var/lib/dpkg/), are you root?"
J'ai vérifié les autorisations, l'utilisateur, et même s'il y avait un autre utilisateur, j'ai vérifié les autorisations. apt
en cours d'exécution en arrière-plan qui avait le verrou : rien.
La chose la plus intéressante est que si je remplace l'ansible par un command
con sudo aptitude ...
cela fonctionne, et aussi qu'avant la tâche ansible il y a un Shell provisioner qui s'exécute aussi apt-get
sans erreur.
Encore une fois, cela fonctionne à partir de ma machine (et de deux autres ordinateurs), mais pas à partir d'un serveur. Je n'ai pas de fichier ansible.cfg sur aucune machine (même pas celle par défaut).