Bonjour,
j'ai un soucis au déploiement d'un playbook. Il s'agit d'install-mediawiki dans un cours sur ansible.
Le réseau, un node-manager et deux nodes:
node-manager: debian11 - 192.168.0.102
http2: centos7 - 192.168.0.103
bdd2: centos7 - 192.168.0.104
Le node http2 est accessible lors des deux premières tâches d'un rôle, mais ne l'est plus à la 3ième tâche !
(Pour voir le message d'erreur → faire défiler le texte suivant ↓
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| (ansible2.7.10) user-ansible@node-manager:~$ ansible-playbook -i inventaire.ini --user user-ansible --become --ask-become-pass --ask-vault-pass install-me
SUDO password:
Vault password:
PLAY [mediaWiki db configuration] ************************************************************************************************************************
TASK [mediawiki/confdb : mediawiki database] *************************************************************************************************************
ok: [bdd2]
TASK [mediawiki/confdb : mediawiki user+privileges] ******************************************************************************************************
ok: [bdd2] => (item=['http2'])
PLAY [MediaWiki apache configuration] ********************************************************************************************************************
TASK [mediawiki/confapache : mediawiki directory] ********************************************************************************************************
ok: [http2]
TASK [mediawiki/confapache : uncompress mediawiki archive] ***********************************************************************************************
ok: [http2]
TASK [mediawiki/confapache : mediawiki configuration] ****************************************************************************************************
failed: [http2] (item=['http2']) => {"item": "['http2']", "msg": "Failed to connect to the host via ssh: ssh: Could not resolve hostname ['http2']: Name o true}
fatal: [http2]: UNREACHABLE! => {"changed": false, "msg": "All items completed", "results": [{"_ansible_ignore_errors": null, "_ansible_item_label": "['ht, "item": "['http2']", "msg": "Failed to connect to the host via ssh: ssh: Could not resolve hostname ['http2']: Name or service not known", "unreachable"
NO MORE HOSTS LEFT ***************************************************************************************************************************************
to retry, use: --limit @/home/user-ansible/install-mediawiki.retry
PLAY RECAP ***********************************************************************************************************************************************
bdd2 : ok=2 changed=0 unreachable=0 failed=0
http2 : ok=2 changed=0 unreachable=1 failed=0 |
Les parefeux et selinux sont éteints.
Mon fichier inventaire.ini sur le node-master est celui-ci:
1 2 3 4 5 6
| (ansible2.7.10) user-ansible@node-manager:~$ cat inventaire.ini
[apache]
http2
[db]
bdd2 |
Chacun des fichiers /etc/hosts des nodes, y compris le master, contiennent ces lignes:
1 2
| 192.168.0.103 http2
192.168.0.104 bdd2 |
Je peux pinguer mes nodes avec le module ping d'ansible (en particuliers http2):
1 2 3 4 5
| (ansible2.7.10) user-ansible@node-manager:~$ ansible -i inventaire.ini http2 -m ping
http2 | SUCCESS => {
"changed": false,
"ping": "pong"
} |
L'accès ssh aux nodes se fait par clés. La clé publique, après voir été créée sur le node-master, a été copiée dans les nodes par la commandes:
(ansible2.7.10) user-ansible@debian11:~$ ansible -i inventaire.ini -m authorized_key -a 'user=user-ansible state=present key="{{ lookup("file", "/home/user-ansible/.ssh/id_ecdsa.pub") }}"' --user user-ansible --become --ask-become-pass all
C'est pas mal, ça roule, mais la troisième tâche ne s'exécute pas 
Mon paybook install-mediawiki.yml (mediaWiki db configuration se passe bien, c'est dans MediaWiki apache configuration que ça coince)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| (ansible2.7.10) user-ansible@node-manager:~$ cat install-mediawiki.yml
---
- name: "mediaWiki db configuration"
hosts: db
gather_facts: no
tags: [ "mariadb", "mysql" ]
roles:
- role: "mediawiki/confdb"
- name: "MediaWiki apache configuration"
hosts: apache
gather_facts: no
tags: "apache"
roles:
- role: "mediawiki/confapache" |
Mon fichier roles/mediawiki/confapache/tasks/main.yml (c'est la 3ème tâche qui coince !)
Rem: la tâche N°2 crée le répertoire /var/www/html/mediawiki, avec les propriétaires apache/apache et désarchive une archive mediawiki-1.31.1.tar.gz dans ce répertoire… (ça a fonctionné, j'ai vérifié)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
| user-ansible@node-manager:~$ cat roles/mediawiki/confapache/tasks/main.yml
# ~/roles/mediawiki/confapache/tasks/main.yml
---
#1. Création du répertoire pour l'installation des fichiers Mediawiki
- name: "mediawiki directory"
file:
path: "{{mediawiki_directory}}" # => /var/www/html/mediawiki
owner: "apache"
group: "apache"
state: directory
#2. Décompresse le fichier source archive Mediawiki et le formate sans extension
- name: "uncompress mediawiki archive"
unarchive:
src: "{{mediawiki_archive_url}}" # => https://releases
/mediawiki/1.31/mediawiki-1.31.1.tar.gz
dest: "{{mediawiki_directory}}" # => /var/www/html/mediawiki
owner: "apache"
group: "apache"
remote_src: yes
# supprime mediawiki-1.xx.x/ du chemin
extra_opts: --transform=s/mediawiki-[0-9\.]*\///
#3. Exécute le tâche avec l'utilisateur apache, se place dans le répertoire de maintenance et exécute la commande de configuration si le fichier localsetting.php n'existe pas
- name: "mediawiki configuration"
become: yes
become_user: "apache"
args:
creates: "{{mediawiki_directory}}/LocalSettings.php" # => /var/www/html/mediawiki/LocalSettings.php
chdir: "{{mediawiki_maintenance_directory}}" # => /var/www/html/mediawiki/maintenance (contient install.php !!)
command:
php install.php --scriptpath /{{mediawiki_name}} --dbname mediawiki --lang fr --dbuser {{mediawiki_db_user}} --dbpass {{mediawiki_db_password}} --pass {{mediawiki_admin_password}} --dbserver {{mediawiki_db_host}} {{mediawiki_title}} {{mediawiki_admin_user}}
run_once: yes
delegate_to: "{{item}}"
with_items: "{{groups.apache}}"
#4. Exécute la tâche avec l'utilisatteur apache, se place dans le répertoire de maintenance et exćute la commande de mise à jour de la base une seule fois
- name: "mediawiki db update"
become: yes
become_user: "apache"
command: php update.php --quick
args:
chdir: "{{mediawiki_maintenance_directory}}" # => /var/www/html/mediawiki/maintenance (contient install.php !!)
run_once: yes
register: resultat
changed_when: "' ...done.' in resultat.stdout" |
Mes variables globales: roles/mediawiki/commun/defaults/main.yml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
| user-ansible@node-manager:~$ cat roles/mediawiki/commun/defaults/main.yml
# ~/roles/mediawiki/commun/defaults/main.yml
---
# nom de la base de données
mediawiki_db_name: "mediawiki"
# nom de l'utilisateur de la base de données et son mot de passe
mediawiki_db_user: "mediawiki"
mediawiki_db_password: !vault |
$ANSIBLE_VAULT;1.1;AES256
66356330613535306333666239643764663932353033333662643337386337656662356438376630
3864323234376537626464363539633861353632613539630a383462623937363638633833653165
64613564386532663437303438356330306131613339376532396339623264383264383033643362
6531663330323964650a373038323332626461363463396339363635646432316530346361353061
6662
# nom et mot de passe de l'administrateur Mediawiki
mediawiki_admin_user: "admin"
mediawiki_admin_password: !vault |
$ANSIBLE_VAULT;1.1;AES256
66356330613535306333666239643764663932353033333662643337386337656662356438376630
3864323234376537626464363539633861353632613539630a383462623937363638633833653165
64613564386532663437303438356330306131613339376532396339623264383264383033643362
6531663330323964650a373038323332626461363463396339363635646432316530346361353061
6662
# nom du Mediawiki et son titre
mediawiki_name: "mediawiki"
mediawiki_title: "ELS"
# l'emplacement du répertoire d'installation de Mediawiki
# => Mediawiki est un site internet
mediawiki_directory: "/var/www/html/{{mediawiki_name}}"
# répertoire de maintenance de mediawiki
mediawiki_maintenance_directory: "{{mediawiki_directory}}/maintenance"
# Definie le premier node du groupe mariadb
mediawiki_db_host: "{{groups.db.0}}"
# l'url des sources mediawiki
mediawiki_archive_url: "https://releases.wikimedia.org/mediawiki/1.31/mediawiki-1.31.1.tar.gz" |
une vue d'ensemble:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| (ansible2.7.10) user-ansible@node-manager:~$ tree roles/
roles/
├── apache
│ ├── handlers
│ │ └── main.yml
│ └── tasks
│ ├── main.yml
│ └── php7-install.yml
├── mariadb
│ └── tasks
│ └── main.yml
└── mediawiki
├── commun
│ └── defaults
│ └── main.yml
├── confapache
│ ├── meta
│ │ └── main.yml
│ └── tasks
│ └── main.yml
└── confdb
├── meta
│ └── main.yml
└── tasks
└── main.yml
14 directories, 9 files |
Merci pour votre aide
Partager