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'erreurfaire défiler le texte suivant ↓

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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):
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
(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)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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é)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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