Partage
  • Partager sur Facebook
  • Partager sur Twitter

(Cours Ansible) pb exécution playbook mediawiki

Sujet résolu
28 janvier 2022 à 10:32:14

Bonjour à tous,

Je me permet de solliciter votre aide.
J'ai un peu regardé avant et je n'ai pas vue d'erreur semblable (excusez moi si le sujet existe déjà). 


Lors de l'exécution du playbook mediawiki une erreur assez conséquente apparait.

(ansible2.9.27) user-ansible@nodemanager:~$ ansible-playbook -i inventaire.ini --user user-ansible --become --ask-become-pass --ask-vault-pass install-mediawiki.yml
BECOME password:
Vault password:

PLAY [MediaWiki db configuration] ********************************************************************************************************************

TASK [mediawiki/confdb : mediawiki database] *********************************************************************************************************
[DEPRECATION WARNING]: Distribution centos 9 on host bdd1 should use /usr/libexec/platform-python, but is using /usr/bin/python for backward
compatibility with prior Ansible releases. A future Ansible release will default to using the discovered platform python for this host. See
https://docs.ansible.com/ansible/2.9/reference_appendices/interpreter_discovery.html for more information. This feature will be removed in version
2.12. Deprecation warnings can be disabled by setting deprecation_warnings=False in ansible.cfg.
ok: [bdd1]

TASK [mediawiki/confdb : mediawiki user+privileges] **************************************************************************************************
[WARNING]: Module did not set no_log for update_password
ok: [bdd1]

PLAY [MediaWiki apache configuration] ****************************************************************************************************************

TASK [mediawiki/confapache : mediawiki directory] ****************************************************************************************************
[DEPRECATION WARNING]: Distribution centos 9 on host http1 should use /usr/libexec/platform-python, but is using /usr/bin/python for backward
compatibility with prior Ansible releases. A future Ansible release will default to using the discovered platform python for this host. See
https://docs.ansible.com/ansible/2.9/reference_appendices/interpreter_discovery.html for more information. This feature will be removed in version
2.12. Deprecation warnings can be disabled by setting deprecation_warnings=False in ansible.cfg.
ok: [http1]

TASK [mediawiki/confapache : uncompress mediawiki archive] *******************************************************************************************
ok: [http1]

TASK [mediawiki/confapache : mediawiki configuration] ************************************************************************************************
[WARNING]: Unable to use /usr/share/httpd/.ansible/tmp as temporary directory, failing back to system: [Errno 13] Permission non accordée:
'/usr/share/httpd/.ansible'
fatal: [http1 -> http1]: FAILED! => {"changed": true, "cmd": ["php", "install.php", "--scriptpath", "/mediawiki", "--dbname", "mediawiki", "--lang", "fr", "--dbuser", "mediawiki", "--dbpass", "foobar", "--pass", "foobar", "--dbserver", "bdd1", "ELS", "admin"], "delta": "0:00:00.264825", "end": "2022-01-27 01:11:45.818319", "msg": "non-zero return code", "rc": 1, "start": "2022-01-27 01:11:45.553494", "stderr": "PHP Warning:  \"continue\" targeting switch is equivalent to \"break\". Did you mean to use \"continue 2\"? in /var/www/html/mediawiki/includes/json/FormatJson.php on line 297\nPHP Warning:  Undefined array key \"SERVER_NAME\" in /var/www/html/mediawiki/includes/GlobalFunctions.php on line 1432\nPHP Warning:  \"continue\" targeting switch is equivalent to \"break\". Did you mean to use \"continue 2\"? in /var/www/html/mediawiki/languages/LanguageConverter.php on line 773\nPHP Warning:  Undefined array key \"SERVER_NAME\" in /var/www/html/mediawiki/includes/GlobalFunctions.php on line 1432\nPHP Warning:  compact(): Undefined variable $fallback in /var/www/html/mediawiki/includes/cache/localisation/LocalisationCache.php on line 531\nPHP Warning:  compact(): Undefined variable $messages in /var/www/html/mediawiki/includes/cache/localisation/LocalisationCache.php on line 531\nPHP Warning:  compact(): Undefined variable $rtl in /var/www/html/mediawiki/includes/cache/localisation/LocalisationCache.php on line 531\nPHP Warning:  compact(): Undefined variable $capitalizeAllNouns in /var/www/html/mediawiki/includes/cache/localisation/LocalisationCache.php on line 531\nPHP Warning:  compact(): Undefined variable $digitTransformTable in /var/www/html/mediawiki/includes/cache/localisation/LocalisationCache.php on line 531\nPHP Warning:  compact(): Undefined variable $minimumGroupingDigits in /var/www/html/mediawiki/includes/cache/localisation/LocalisationCache.php on line 531\nPHP Warning:  compact(): Undefined variable $fallback8bitEncoding in /var/www/html/mediawiki/includes/cache/localisation/LocalisationCache.php on line 531\nPHP Warning:  compact(): Undefined variable $linkPrefixExtension in /var/www/html/mediawiki/includes/cache/localisation/LocalisationCache.php on line 531\nPHP Warning:  compact(): Undefined variable $linkPrefixCharset in /var/www/html/mediawiki/includes/cache/localisation/LocalisationCache.php on line 531\nPHP Warning:  compact(): Undefined variable $datePreferences in /var/www/html/mediawiki/includes/cache/localisation/LocalisationCache.php on line 531\nPHP Warning:  compact(): Undefined variable $datePreferenceMigrationMap in /var/www/html/mediawiki/includes/cache/localisation/LocalisationCache.php on line 531\nPHP Warning:  compact(): Undefined variable $defaultDateFormat in /var/www/html/mediawiki/includes/cache/localisation/LocalisationCache.php on line 531\nPHP Warning:  compact(): Undefined variable $extraUserToggles in /var/www/html/mediawiki/includes/cache/localisation/LocalisationCache.php on line 531\nPHP Warning:  compact(): Undefined variable $imageFiles in /var/www/html/mediawiki/includes/cache/localisation/LocalisationCache.php on line 531\nPHP Warning:  compact(): Undefined variable $preloadedMessages in /var/www/html/mediawiki/includes/cache/localisation/LocalisationCache.php on line 531\nPHP Warning:  compact(): Undefined variable $digitGroupingPattern in /var/www/html/mediawiki/includes/cache/localisation/LocalisationCache.php on line 531\nPHP Warning:  compact(): Undefined variable $pluralRules in /var/www/html/mediawiki/includes/cache/localisation/LocalisationCache.php on line 531\nPHP Warning:  compact(): Undefined variable $pluralRuleTypes in /var/www/html/mediawiki/includes/cache/localisation/LocalisationCache.php on line 531\nPHP Warning:  compact(): Undefined variable $compiledPluralRules in /var/www/html/mediawiki/includes/cache/localisation/LocalisationCache.php on line 531\nPHP Warning:  compact(): Undefined variable $messages in /var/www/html/mediawiki/includes/cache/localisation/LocalisationCache.php on line 531\nPHP Warning:  compact(): Undefined variable $minimumGroupingDigits in /var/www/html/mediawiki/includes/cache/localisation/LocalisationCache.php on line 531\nPHP Warning:  compact(): Undefined variable $digitGroupingPattern in /var/www/html/mediawiki/includes/cache/localisation/LocalisationCache.php on line 531\nPHP Warning:  compact(): Undefined variable $pluralRules in /var/www/html/mediawiki/includes/cache/localisation/LocalisationCache.php on line 531\nPHP Warning:  compact(): Undefined variable $pluralRuleTypes in /var/www/html/mediawiki/includes/cache/localisation/LocalisationCache.php on line 531\nPHP Warning:  compact(): Undefined variable $compiledPluralRules in /var/www/html/mediawiki/includes/cache/localisation/LocalisationCache.php on line 531\nPHP Warning:  compact(): Undefined variable $messages in /var/www/html/mediawiki/includes/cache/localisation/LocalisationCache.php on line 531\nPHP Warning:  compact(): Undefined variable $minimumGroupingDigits in /var/www/html/mediawiki/includes/cache/localisation/LocalisationCache.php on line 531\nPHP Warning:  compact(): Undefined variable $digitGroupingPattern in /var/www/html/mediawiki/includes/cache/localisation/LocalisationCache.php on line 531\nPHP Warning:  compact(): Undefined variable $pluralRules in /var/www/html/mediawiki/includes/cache/localisation/LocalisationCache.php on line 531\nPHP Warning:  compact(): Undefined variable $pluralRuleTypes in /var/www/html/mediawiki/includes/cache/localisation/LocalisationCache.php on line 531\nPHP Warning:  compact(): Undefined variable $compiledPluralRules in /var/www/html/mediawiki/includes/cache/localisation/LocalisationCache.php on line 531", "stderr_lines": ["PHP Warning:  \"continue\" targeting switch is equivalent to \"break\". Did you mean to use \"continue 2\"? in /var/www/html/mediawiki/includes/json/FormatJson.php on line 297", "PHP Warning:  Undefined array key \"SERVER_NAME\" in /var/www/html/mediawiki/includes/GlobalFunctions.php on line 1432", "PHP Warning:  \"continue\" targeting switch is equivalent to \"break\". Did you mean to use \"continue 2\"? in /var/www/html/mediawiki/languages/LanguageConverter.php on line 773", "PHP Warning:  Undefined array key \"SERVER_NAME\" in /var/www/html/mediawiki/includes/GlobalFunctions.php on line 1432", "PHP Warning:  compact(): Undefined variable $fallback in /var/www/html/mediawiki/includes/cache/localisation/LocalisationCache.php on line 531", "PHP Warning:  compact(): Undefined variable $messages in /var/www/html/mediawiki/includes/cache/localisation/LocalisationCache.php on line 531", "PHP Warning:  compact(): Undefined variable $rtl in /var/www/html/mediawiki/includes/cache/localisation/LocalisationCache.php on line 531", "PHP Warning:  compact(): Undefined variable $capitalizeAllNouns in /var/www/html/mediawiki/includes/cache/localisation/LocalisationCache.php on line 531", "PHP Warning:  compact(): Undefined variable $digitTransformTable in /var/www/html/mediawiki/includes/cache/localisation/LocalisationCache.php on line 531", "PHP Warning:  compact(): Undefined variable $minimumGroupingDigits in /var/www/html/mediawiki/includes/cache/localisation/LocalisationCache.php on line 531", "PHP Warning:  compact(): Undefined variable $fallback8bitEncoding in /var/www/html/mediawiki/includes/cache/localisation/LocalisationCache.php on line 531", "PHP Warning:  compact(): Undefined variable $linkPrefixExtension in /var/www/html/mediawiki/includes/cache/localisation/LocalisationCache.php on line 531", "PHP Warning:  compact(): Undefined variable $linkPrefixCharset in /var/www/html/mediawiki/includes/cache/localisation/LocalisationCache.php on line 531", "PHP Warning:  compact(): Undefined variable $datePreferences in /var/www/html/mediawiki/includes/cache/localisation/LocalisationCache.php on line 531", "PHP Warning:  compact(): Undefined variable $datePreferenceMigrationMap in /var/www/html/mediawiki/includes/cache/localisation/LocalisationCache.php on line 531", "PHP Warning:  compact(): Undefined variable $defaultDateFormat in /var/www/html/mediawiki/includes/cache/localisation/LocalisationCache.php on line 531", "PHP Warning:  compact(): Undefined variable $extraUserToggles in /var/www/html/mediawiki/includes/cache/localisation/LocalisationCache.php on line 531", "PHP Warning:  compact(): Undefined variable $imageFiles in /var/www/html/mediawiki/includes/cache/localisation/LocalisationCache.php on line 531", "PHP Warning:  compact(): Undefined variable $preloadedMessages in /var/www/html/mediawiki/includes/cache/localisation/LocalisationCache.php on line 531", "PHP Warning:  compact(): Undefined variable $digitGroupingPattern in /var/www/html/mediawiki/includes/cache/localisation/LocalisationCache.php on line 531", "PHP Warning:  compact(): Undefined variable $pluralRules in /var/www/html/mediawiki/includes/cache/localisation/LocalisationCache.php on line 531", "PHP Warning:  compact(): Undefined variable $pluralRuleTypes in /var/www/html/mediawiki/includes/cache/localisation/LocalisationCache.php on line 531", "PHP Warning:  compact(): Undefined variable $compiledPluralRules in /var/www/html/mediawiki/includes/cache/localisation/LocalisationCache.php on line 531", "PHP Warning:  compact(): Undefined variable $messages in /var/www/html/mediawiki/includes/cache/localisation/LocalisationCache.php on line 531", "PHP Warning:  compact(): Undefined variable $minimumGroupingDigits in /var/www/html/mediawiki/includes/cache/localisation/LocalisationCache.php on line 531", "PHP Warning:  compact(): Undefined variable $digitGroupingPattern in /var/www/html/mediawiki/includes/cache/localisation/LocalisationCache.php on line 531", "PHP Warning:  compact(): Undefined variable $pluralRules in /var/www/html/mediawiki/includes/cache/localisation/LocalisationCache.php on line 531", "PHP Warning:  compact(): Undefined variable $pluralRuleTypes in /var/www/html/mediawiki/includes/cache/localisation/LocalisationCache.php on line 531", "PHP Warning:  compact(): Undefined variable $compiledPluralRules in /var/www/html/mediawiki/includes/cache/localisation/LocalisationCache.php on line 531", "PHP Warning:  compact(): Undefined variable $messages in /var/www/html/mediawiki/includes/cache/localisation/LocalisationCache.php on line 531", "PHP Warning:  compact(): Undefined variable $minimumGroupingDigits in /var/www/html/mediawiki/includes/cache/localisation/LocalisationCache.php on line 531", "PHP Warning:  compact(): Undefined variable $digitGroupingPattern in /var/www/html/mediawiki/includes/cache/localisation/LocalisationCache.php on line 531", "PHP Warning:  compact(): Undefined variable $pluralRules in /var/www/html/mediawiki/includes/cache/localisation/LocalisationCache.php on line 531", "PHP Warning:  compact(): Undefined variable $pluralRuleTypes in /var/www/html/mediawiki/includes/cache/localisation/LocalisationCache.php on line 531", "PHP Warning:  compact(): Undefined variable $compiledPluralRules in /var/www/html/mediawiki/includes/cache/localisation/LocalisationCache.php on line 531"], "stdout": "PHP 8.0.12 est installé.\nAttention : impossible de trouver APCu ou WinCache. La mise en cache d’objets n’est pas activée.\nLa bibliothèque graphique GD intégrée a été trouvée. La miniaturisation d'images sera activée si vous activez le téléversement de fichiers.\nLogiciel de contrôle de version Git non trouvé.\nUtilisation de l'URL de serveur \"/mediawiki\".\nAttention: Votre répertoire par défaut pour les imports(/var/www/html/mediawiki/images/) n'est pas contrôlé concernant la vulnérabilité d'exécution de scripts arbitraires lors de l'installation CLI.\nUtilisation de l’extension PECL intl pour la normalisation Unicode.\nL’environnement a été vérifié. Vous pouvez installer MediaWiki.\nCréation de la base de données\nCannot access the database: No route to host (bdd1). Vérifier le nom d’hôte, le nom d’utilisateur et le mot de passe ci-dessous puis réessayer. ", "stdout_lines": ["PHP 8.0.12 est installé.", "Attention : impossible de trouver APCu ou WinCache. La mise en cache d’objets n’est pas activée.", "La bibliothèque graphique GD intégrée a été trouvée. La miniaturisation d'images sera activée si vous activez le téléversement de fichiers.", "Logiciel de contrôle de version Git non trouvé.", "Utilisation de l'URL de serveur \"/mediawiki\".", "Attention: Votre répertoire par défaut pour les imports(/var/www/html/mediawiki/images/) n'est pas contrôlé concernant la vulnérabilité d'exécution de scripts arbitraires lors de l'installation CLI.", "Utilisation de l’extension PECL intl pour la normalisation Unicode.", "L’environnement a été vérifié. Vous pouvez installer MediaWiki.", "Création de la base de données", "Cannot access the database: No route to host (bdd1). Vérifier le nom d’hôte, le nom d’utilisateur et le mot de passe ci-dessous puis réessayer. "]}



Voici le contenu du fichier qui pose problème en parti.

---

#1. Création du repertoire pour l’installation des fichiers Mediawiki
- name: "mediawiki directory"
  file:
    path: "{{mediawiki_directory}}"
    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}}"
    dest: "{{mediawiki_directory}}"
    owner: "apache"
    group: "apache"
    remote_src: yes
# supprime mediawiki-1.xx.x/ du chemin
    extra_opts: --transform=s/mediawiki-[0-9.]*///

#3. Exécute la 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"
    chdir: "{{mediawiki_maintenance_directory}}"
  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: "http1"

#4. Exécute la tâche avec l'utilisateur apache, se place dans le répertoire de maintenance et exécute la commande de mise à jour de la baseune seule fois
- name: "mediawiki db update"
  become: yes
  become_user: "apache"
  command:
    php update.php --quick
  args:
    chdir: "{{mediawiki_maintenance_directory}}"
  # La mise à jour à besoin d'être lancée une seule fois
  run_once: yes
  register: resultat
  changed_when: "' ...done.' in resultat.stdout"



Je ne sais pas pourquoi mes groupes ne fonctionne pas. (pourtant je ping http1 et bdd1 et mon fichier inventaire.ini a bien les groupes renseignés)
J'ai donc indiqué directement http1 dans delegate_to 


Également je vous partage le fichier de variables globales qui est sollicité
Mais je n'ai rien changé si ce n'est les clé.
(en relisant le fichier peut être lui indiquer la dernière version du wiki?)

---

# 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
          36303465393465353930367638353332653636616562366339356466373862333934666162363834
          3831323563616534396536346364383262363762663433610a316634303839386539616661316461
          62303332393135663631656538373031363363646636626335343134623535313737353637366264
          3437336235353033640a356164666134646135313138326564303930633331313235353439386632
          3731

# nom et mot de passe de l’administrateur Mediawiki
mediawiki_admin_user: "admin"
mediawiki_admin_password: !vault |
          $ANSIBLE_VAULT;1.1;AES256
          36303465393465353930367638353332653636616562366339356466373862333934666162363834
          3831323563616534396536346364383262363762663433610a316634303839386539616661316461
          62303332393135663631656538373031363363646636626335343134623535313737353637366264
          3437336235353033640a356164666134646135313138326564303930633331313235353439386632
          3731

# nom du Mediawiki et son titre
mediawiki_name: "mediawiki"
mediawiki_title: "ELS"

# l’emplacement du répertoire d'installation de Mediawiki
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"


J'imagine que le problème vient de la fin du message et plus précisément soit de l'user ou du mot de passe. 

Cannot access the database: No route to host (bdd1). Vérifier le nom d’hôte, le nom d’utilisateur et le mot de passe ci-dessous puis réessayer


Je vous remercie d'avance pour votre aide. :)

  • Partager sur Facebook
  • Partager sur Twitter
5 mars 2022 à 14:27:56

Bonjour,

dans ton fichier roles/mediawiki/confapache/tasks/main.yml, à la ligne 20 tu as écrit:

extra_opts: --transform=s/mediawiki-[0-9.]*///

Ne faut-il pas échapper quelques caractères ? Il s'agit de BRE 'basic regular expression' et non de ERE 'extended regular expression'.

  • . comme ceci \.
  • / comme ceci \/

Chez moi j'ai:

extra_opts: --transform=s/mediawiki-[0-9\.]*\///

Rem:

Je viens d'essayer par curiosité sans les caractères d'échappement, j'obtiens une erreur chez moi. C'est bizarre que tu n'aies pas eu d'erreur ? (au moins pour le deuxième caractère d'échappement)

-
Edité par DenebeDenebe 5 mars 2022 à 16:17:01

  • Partager sur Facebook
  • Partager sur Twitter
5 mars 2022 à 15:51:02

entre crochets, les caractères spéciaux (point, astérisque...) perdent leur caractère spécial. ;)

[0-9.] devrait fonctionner

  • Partager sur Facebook
  • Partager sur Twitter

Validez la réponse utile « Un problème clairement exposé est à moitié résolu. » Pas de MP technique

5 mars 2022 à 20:02:49

+1 (merci)

https://www.regular-expressions.info/refcharclass.html

All characters except ^ - ] \  are literal characters that add themselves to the character class.


Dans le cours, c'est

extra_opts: --transform=s/mediawiki-[0-9\.]*\///


=> le premier \ n'échappe rien et est considéré comme un caractère littéral, et donc il est ici inutile !

=> le cours a pris la tangente !

Par contre, il reste le second échappement \, celui échappant un slash / . Sans lui, la commande "sed" considére ce slash / comme un délimiteur de la commande sed. Et de part en part, un slash / est de trop.

Le second échappement doit rester je pense, sinon il y a un slah / en trop ?

Ici le but est de changer tous les chemins de chacun des fichiers pendant le désarchivage comme ceci:

/var/www/html/mediawiki/mediawiki-1.31.1/fichier_ou_dossier… => /var/www/html/mediawiki/fichier_ou_dossier…


Pour info, le module unarchive d'ansible est joué (exécuté) sur l'hôte http1, ce module utilise la commande gnu tar.

Avec le paramètre extra_opts du module unarchive, derrière on peut utiliser les arguments de la commande gnu tar.

Il s'agit ici de --transform

--transform=EXPRESSION, --xform=EXPRESSION
    use sed replace EXPRESSION to transform file names 



-
Edité par DenebeDenebe 6 mars 2022 à 8:35:00

  • Partager sur Facebook
  • Partager sur Twitter
6 mars 2022 à 0:05:54

Le second échappement doit rester je pense, sinon il y a un slash / en trop ?

oui.

il y a obligatoirement un numéro de version ?
alors je remplacerais l'astérisque par un plus, pour dire qu'il ne peut pas ne rien y avoir
(*= un, plusieurs, ou aucun) :

extra_opts: --transform=s/mediawiki-[0-9\.]\+\///



-
Edité par dantonq 6 mars 2022 à 0:06:43

  • Partager sur Facebook
  • Partager sur Twitter

Validez la réponse utile « Un problème clairement exposé est à moitié résolu. » Pas de MP technique

6 mars 2022 à 8:06:12

dantonq a écrit:

il y a obligatoirement un numéro de version ?

alors je remplacerais l'astérisque par un plus, pour dire qu'il ne peut pas ne rien y avoir
(*= un, plusieurs, ou aucun) :

extra_opts: --transform=s/mediawiki-[0-9\.]\+\///



-
Edité par dantonq il y a environ 7 heures

  • Obligatoirement un numéro de version ? Je dirais que oui. Factuellement le fichier à télécharger proposé dans le cours en a un.

    Tu peux le voir vers la fin du premier post à la ligne 40, ou à la fin de ce fichier (rôle) dans le cours.
    La toute dernière ligne alloue "https://releases.wikimedia.org/mediawiki/1.31/mediawiki-1.31.1.tar.gz" à la variable mediawiki_archive_url.
    Cette dernière est la source que l'on souhaite désarchiver, elle est utilisée à la ligne 14 d'un des codes de ce premier post… Sinon ici dans le cours.
  • Le + ne doit pas être échappé. Sinon l'idée est intéressante.

================================================

DenebeDenebe a écrit:


=> le premier \ n'échappe rien et est considéré comme un caractère littéral, et donc il est ici inutile !

=> le cours a pris la tangente !


-
Edité par DenebeDenebe il y a environ 12 heures


Correction:
[\.] est équivalent [.] , donc \ n'est pas considéré comme un caractère littéral dans ce cas.
Cela dit, il est inutile…
Testé ici: https://www.regextester.com/111539

-
Edité par DenebeDenebe 6 mars 2022 à 8:39:26

  • Partager sur Facebook
  • Partager sur Twitter
6 mars 2022 à 16:56:59

normalement, dans une BRE, le + doit être échappé. 

par exemple avec grep (en BRE) :

$ grep ' +a' <<<' a'
$ grep ' \+a' <<<' a'
 a

alors qu'en ERE :

$ grep -E ' \+a' <<<' a'                                                                                                                                                                                             
$ grep -E ' +a' <<<' a'                                                                                                                                                                                            
 a
  • Partager sur Facebook
  • Partager sur Twitter

Validez la réponse utile « Un problème clairement exposé est à moitié résolu. » Pas de MP technique

9 mars 2022 à 10:20:52

Bonjour,

Tout d'abord merci à ceux qui ont répondu à la question de l'auteur du sujet, car je suis également bloqué au même niveau que lui

Je suis complètement débutant, mais quand on regarde le code d'erreur, on voit clairement :

"PHP Notice:  Undefined index: SERVER_NAME in /var/www/html/mediawiki/includes/GlobalFunctions.php on line 1432\nPHP Notice:  Undefined index: SERVER_NAME in /var/www/html/mediawiki/includes/GlobalFunctions.php on line 1432"

On dirait que le fichier LocalSettings.php ne se crée pas, et que du coup PHP ne connait pas le serveur distant... ?!

Peut-être que je me trompe, mais en tous cas sur mon serveur HTTP1, je ne trouve pas LocalSettings.php.

Est-ce donc possible que ce soit cela qui pose problème ?

En tous cas merci à vous pour votre aide !



  • Partager sur Facebook
  • Partager sur Twitter
10 mars 2022 à 9:04:43

RomainJacek a écrit:

Je suis complètement débutant, mais quand on regarde le code d'erreur, on voit clairement :

On dirait que le fichier LocalSettings.php ne se crée pas, et que du coup PHP ne connait pas le serveur distant... ?!

Peut-être que je me trompe, mais en tous cas sur mon serveur HTTP1, je ne trouve pas LocalSettings.php

Bonjour Romain,

pour Mickael Co, il faudrait maintenant qu'il essaye ce qui a été proposé…

Te concernant, il manque beaucoup d'informations, c'est difficile de te répondre. Le mieux est d'ouvrir ton post, je pense.

Cela étant dit, j'ai aussi personnellement cherché de longues heures  :D à savoir pourquoi le fichier LocalSettings.php ne se créait-il pas, oui, j'ai eu le même problème. J'ai essayé de le debuguer, sans succès. Et finalement j'ai contourné le problème en ne passant plus par un environnement python virtuel.

Ma solution est ici. Le début de mon post était légèrement différent, bien que dans les "mêmes eaux".

Bye.

-
Edité par DenebeDenebe 10 mars 2022 à 9:05:23

  • Partager sur Facebook
  • Partager sur Twitter
14 avril 2022 à 10:17:39

Bonjour, 

Je pense avoir le même soucis. 

------

failed: [http1 -> http1] (item=http1) => {"ansible_loop_var": "item", "changed": true, "cmd": ["php", "install.php", "--scriptpath", "/mediawiki", "--dbname", "mediawiki", "--lang", "fr", "--dbuser", "mediawiki", "--dbpass", "foobar", "--pass", "foobar", "--dbserver", "bdd1", "ELS", "admin"], "delta": "0:00:00.284007", "end": "2022-04-13 11:38:21.389883", "item": "http1", "msg": "non-zero return code", "rc": 1, "start": "2022-04-13 11:38:21.105876", "stderr": "", "stderr_lines": [], "stdout": "PHP 7.2.24 est installé.\nLa bibliothèque graphique GD intégrée a été trouvée. La miniaturisation d'images sera activée si vous activez le téléversement de fichiers.\nLogiciel de contrôle de version Git non trouvé.\nUtilisation de l'URL de serveur \"/mediawiki\".\nAttention: Votre répertoire par défaut pour les imports(/var/www/html/mediawiki/images/) n'est pas contrôlé concernant la vulnérabilité d'exécution de scripts arbitraires lors de l'installation CLI.\nUtilisation de l’extension PECL intl pour la normalisation Unicode.\nL’environnement a été vérifié. Vous pouvez installer MediaWiki.\nCréation de la base de données\nCannot access the database: No route to host (bdd1). Vérifier le nom d’hôte, le nom d’utilisateur et le mot de passe ci-dessous puis réessayer. ", "stdout_lines": ["PHP 7.2.24 est installé.", "La bibliothèque graphique GD intégrée a été trouvée. La miniaturisation d'images sera activée si vous activez le téléversement de fichiers.", "Logiciel de contrôle de version Git non trouvé.", "Utilisation de l'URL de serveur \"/mediawiki\".", "Attention: Votre répertoire par défaut pour les imports(/var/www/html/mediawiki/images/) n'est pas contrôlé concernant la vulnérabilité d'exécution de scripts arbitraires lors de l'installation CLI.", "Utilisation de l’extension PECL intl pour la normalisation Unicode.", "L’environnement a été vérifié. Vous pouvez installer MediaWiki.", "Création de la base de données", "Cannot access the database: No route to host (bdd1). Vérifier le nom d’hôte, le nom d’utilisateur et le mot de passe ci-dessous puis réessayer. "]}

-----

 Pourriez vous me dire comment vous avez résolu ce problème ? 

Merci d'avance.

  • Partager sur Facebook
  • Partager sur Twitter
14 avril 2022 à 11:30:56

@Dar_light

Ouvre un autre post. Que tu puisses y mettre toutes les informations nécessaires.

  • l'endroit dans le cours où tu bloques (avec liens)
  • tes différents codes
  • quelles commandes rentres-tu dans le prompt
  • quels sont les mots de passe que tu rentres
  • des infos sur les connexions ssh (même brève), ton réseau…

Je sais c'est long et fastidieux, mais c'est le meilleur moyen d'éventuellement obtenir une aide.

  • Partager sur Facebook
  • Partager sur Twitter
3 juin 2022 à 17:41:17

Désolé un peu absent j'ai passé un diplôme RNCP niveau 6 et maintenant je cherche une alternance pour un RNCP niveau 7 équivalent d'un master.

Pour le cours ansible j'ai bloqué sur le dernier chapitre Python n'ayant aucune connaissance j'ai abandonné le temps de me concentrer sur mon diplôme le stage etc.
Je vais tenter un copier coller de mes notes pas sur de ce que ca va rendre ici.



TP ANSIBLE
Déploiement d’un wikimedia avec Ansible


(* Les étoiles représentent des informations à renseigner)


Lab:


- 1 node manager (ubuntu 20.04.3 LTS) 192.168.192.5

python

virtualenv (outils python permettant de créer un environnement isolé)

sshpass (paquet permettant une connexion SSH avec Ansible)
ansible v5.2.0 (ou core 2.12)


- 1 node http1 (centos stream 9) 192.168.192.10

python

apache

php

mediawiki


- 1 node bdd1 (centos stream 9) 192.168.192.15

python

mariadb

mediawiki


- 1 windows client connexion ssh dhcp

kitty



1 Prérequis configuration générale:


1.1Installation des OS

1.2mise à jour (root)
ubuntu 

apt update && apt upgrade


centos

yum update && yum upgrade


1.3adresse ip fixe

ubuntu

si non initialisé 

netplan generate


fichier de config

vi /etc/netplan/*.yaml

network:

    ethernets:

        eth0:

            addresses: [192.168.1.200/24]

            gateway4: 192.168.1.1

            nameservers:

                addresses: [8.8.8.8, 8.8.4.4]

            dhcp4: false

            dhcp6: false

    version: 2


applique les changements

netplan apply


relancer le service

systemctl restart systemd-networkd


affiche les informations réseaux 

ip a


centos

affiche les informations réseaux 

ip a


création d’un fichier de configuration réseau avec le nom de l’interface récupéré

vi /etc/sysconfig/network-scripts/ifcfg-*

DEVICE=eth0

TYPE=Ethernet

BOOTPROTO=none

ONBOOT=yes

USERCTL=yes


IPADDR=192.168.0.15

GATEWAY=192.168.0.254

NETMASK=255.255.255.0


DNS1=127.0.0.1


relancer la machine
reboot


affiche les informations réseaux 

ip a

1.4 sécurité sur les nodes (pour le tp on désactivera les éléments de sécurité, en prod il faudra ajuster la sécurité en fonction des flux autorisés.)

désactiver temporairement SElinux :  

setenforce 0


désactiver définitivement SElinux : 

éditez le fichier  /etc/selinux/config  

puis ajoutez-y la ligne SELINUX=permissive 


désactiver temporairement le firewalling : 

systemctl stop firewalld.service


pour désactiver définitivement le firewalling : 

systemctl disable firewalld.service


1.5 résolutions de noms (sans dns avec le fichier hosts)
vi /etc/hosts 

192.168.122.11 http1

192.168.122.12 bdd1




2 Installation Ansible:


2.1 Connexion ssh

linux 

ssh *@192.168.192.5


windows

on utilisera kitty ou putty indiquer l’adresse ip et valider la clé


2.2 installation des prérequis python3-virtualenv et sshpass 

sudo apt install python3-virtualenv sshpass


2.3 création d’un user user-ansible

adduser user-ansible


2.4 se connecter sur un utilisateur

su user-ansible


2.5 créer un environnement virtualenv (mettre un nom cohérent)
virtualenv ansible2.12


2.6 activer l’environnement virtuel

source ansible2.12/bin/activate


2.7 installer ansible dans l’environnement virtuel avec la version 5.2.0

pip install ansible==5.2.0


2.8 vérifier la version d’Ansible

ansible --version



3 Préparer la communication:


3.1 inventaire des nodes sur linux(à faire sur DNS mais pour le tp on le fera sur le fichier hosts)

vi /etc/hosts

127.0.0.1 localhost

127.0.1.1 nodemanager

192.168.192.10 http1

192.168.192.15 bdd1


3.2 création du fichier d’inventaire des nodes sur Ansible

vi /home/user-ansible/inventaire.ini

[apache]

http1

[db]

bdd1

[nom_du_groupe]

nom_du_node


3.3 sshpass ne gérant pas le fingerprint on effectue une première connexion ssh pour récupérer l’empreinte des nodes
ssh root@bdd1
yes (quand on nous demande de valider l’empreinte)

mdp

exit


ssh root@http1

yes (quand on nous demande de valider l’empreinte)

mdp

exit


3.4 ping avec Ansible (commande Ad-Hoc (manuel, sans script))

ansible -i inventaire.ini -m ping http1 --user root --ask-pass


-i emplacement du fichier inventaire

-m utiliser le module désigner ensuite

--user indique l’utilisateur à utiliser

--ask-pass indique qu’il faut demander le mdp

http1 lancer la commande sur le node indiqué


si l'envoi/réception du module ping est un succès la réponse est pong


3.5 vérifier l’installation de python sur les nodes

ansible -i inventaire.ini -m raw -a "yum install -y python3" bdd1 --user root --ask-pass


ansible -i inventaire.ini -m raw -a "yum install -y python3" http1 --user root --ask-pass


3.6 générer un mdp avec Ansible

ansible localhost -i inventaire.ini -m debug -a "msg={{ 'respons11!' | password_hash('sha512', 'sceretsalt') }}"


localhost pour indiquer de le faire en local

le module debug avec l’argument msg pour transformer le mot de passe "passforce" en une chaîne chiffrée avec l’algorithme sha512.
“Sceretsalt” est le sel. C’est un mot qui permet de renforcer la sécurité de l’algorithme en apportant une inconnue en plus dans le processus de cryptage du mot de passe.


3.7 créer user-ansible sur les nodes

ansible -i inventaire.ini -m user -a 'name=user-ansible password=*' --user root --ask-pass all


module user avec les arguments name et password (l’étoile doit être remplacé par la clé)

all sur tous les nodes présents dans le fichier inventaire


3.8 ajouter user-ansible dans le groupe wheel (droit sudo)

ansible -i inventaire.ini -m user -a 'name=user-ansible groups=wheel append=yes' --user root --ask-pass all


3.9 vérifier l’acquisition des droits sudo pour user-ansible (mdp a utiliser passforce)

ansible -i inventaire.ini -m user -a 'name=user-ansible groups=wheel append=yes' --user user-ansible --ask-pass --become --ask-become-pass all


3.10 créer les clés ssh (se connecter en tant que user-ansible)

ssh-keygen -t ecdsa


La passphrase est utilisée pour renforcer la connexion SSH par un mot de passe.
(pour le tp nous n’en mettrons pas)


3.11 ajouter la clé publique de user-ansible sur les nodes (virtualenv)

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 --ask-pass --become --ask-become-pass all


-m authorized_key : module authorized_key (ajoute ou supprime les clés SSH pour des utilisateurs)

state=present : indique d’ajouter le fichier s'il n'est pas déjà présent

key="{{ lookup("file", "/home/user-ansible/.ssh/id_ecdsa.pub") }}" : utilise la commande lookup pour rechercher le fichier concerné.


3.12 test sans --ask-pass (demande mdp ssh) (1 seul mdp (root) sera demandé)

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



4 Création de l’arborescence Ansible :


4.1 créer le répertoire qui contiendra les rôles et se placer dans la répertoire
mkdir roles

cd roles


4.2 utilisation de Ansible-galaxy pour créer automatiquement le rôle apache

ansible-galaxy init apache


L'arborescence contient les répertoires suivants vides :

-files : tous les fichiers à copier sur le node ;

-templates : tous les fichiers de template Jinja ;

-tasks : liste des instructions à exécuter (le fichier main.yml est obligatoire) ;

-handlers : même chose pour les instructions handlers (le fichier main.yml est obligatoire) ;

-vars : fichier contenant des déclarations de variables (le fichier main.yml est obligatoire) ; les variables définies ici sont prioritaires par rapport aux variables définies dans l'inventaire ;

-defaults : valeurs par défaut (le fichier main.yml est obligatoire) avec une priorité moindre ;

-meta : dépendances du rôle et informations (auteur, licence, plateformes...) sur le rôle (le fichier main.yml est obligatoire).


4.3 déplacement dans le dossier apache et suppression des dossiers et fichiers inutiles pour le déploiement du tp

cd apache && rm -r files meta templates vars defaults tests README.md


Seuls les répertoires handlers, meta et tasks seront conservés :

-handlers : contient les tâches à exécuter après une notification (redémarrer le service Apache)

-tasks :  contient les tâches à exécuter pour installer Apache.


4.4 créer le rôle mariadb dans le dossier roles et dedans créer un fichier main.yml pour les tâches

mkdir -p mariadb/tasks/

touch mariadb/tasks/main.yml


4.5 créer un répertoire mediawiki dans roles

mkdir mediawiki


4.6 créer le rôles commun avec le dossier defaults et un fichier main.yml pour contenir les variables globales

mkdir -p mediawiki/commun/defaults/

touch mediawiki/commun/defaults/main.yml


4.7 créer le rôle confdb avec les répertoires meta et tasks puis leur créer un fichier main.yml

mkdir -p mediawiki/confdb/meta mediawiki/confdb/tasks

touch mediawiki/confdb/tasks/main.yml

touch mediawiki/confdb/meta/main.yml


4.8 créer le rôle confapache avec les répertoires meta et tasks puis leur créer un fichier main.yml

mkdir -p mediawiki/confapache/meta mediawiki/confapache/tasks

touch mediawiki/confapache/tasks/main.yml mediawiki/confapache/meta/main.yml


Arborescence créé et contenu des rôles

└── 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



A Le rôle apache :

-un fichier tasks/main.yml contient les actions pour installer Apache, un appel à un fichier de configuration pour installer PHP et une notification pour redémarrer Apache ;

-un fichier tasks/php7-install.yml contient les actions pour installer PHP ;

-un fichier handler/main.yml contient les actions pour redémarrer le service Apache.


B Le rôle mariadb :

-un fichier tasks/main.yml contient les actions pour installer MariaDB.


C Le rôle commun de MediaWiki :

-un fichier defaults/main.yml contient les variables d'installation qui seront utilisées dans les rôles suivants.


D Le rôle confapache de MediaWiki :

-un fichier meta/main.yml contient la dépendance avec le rôle commun ;

-un fichier tasks/main.yml contient les actions pour configurer Apache pour MediaWiki.


E Le rôle confdb de MediaWiki :

-un fichier meta/main.yml contient la dépendance avec le rôle commun ;

-un fichier tasks/main.yml contient les actions pour configurer MariaDB pour MediaWiki.


Les rôles peuvent être indépendants ou dépendants les uns des autres. Par exemple, les rôles apache, mariadb et commun sont indépendants et peuvent être utilisés séparément. Par contre, les rôles confapache et confdb dépendent du rôle commun.



5 complétion des fichiers de configurations yaml


5.1.1 installation d’apache

vi roles/apache/tasks/main.yml

---


#1. Cette tâche permet d’installer Apache (httpd) à l’aide du module yum

- name: "apache installation"

  yum:

    name: "httpd"

    state: "present"


#2. Cette tâche active le service Apache

- name: "apache service activation"

  service:

    name: "httpd"

    state: "started"

    enabled: yes


#3. Cette tâche fait appel à un autre fichier de configuration pour installer PHP. Elle est exécutée uniquement si la variable php_install est à vraie (par défaut, elle est à faux)

- name: "install php7 packages"

  include: "php7-install.yml"

  when: php_install|default(False)|bool


5.1.2 installation de php

vi roles/apache/tasks/php7-install.yml

---


- rpm_key:

      state: present

      key: https://rpms.remirepo.net/RPM-GPG-KEY-remi2021


- rpm_key:

      state: present

      key: https://dl.fedoraproject.org/pub/epel/RPM-GPG-KEY-EPEL-9


#1. Cette tâche installe le dépôt  EPEL (Extra Packages for Enterprise Linux)

- name: "epel activation"

  yum:

    name: https://dl.fedoraproject.org/pub/epel/epel-release-latest-{{ ansible_distribution_major_version }}.noarch.rpm

    state: present


#2. Cette tâche installe le dépôt REMI pour bénéficier du paquet PHP7

- name: "remi repo activation"

  yum:

    name: "https://rpms.remirepo.net/enterprise/remi-release-9.rpm"

    state: present


#3. Cette tâche installe PHP7 et ses extensions

- name: "install php74 packages"

  yum:

    name: "php74,php74-php-mysqlnd,php74-php-xml,php74-php-mbstring,php74-php-pecl-mcrypt.x86_64,php74-php,php74-php-intl"

    state: present

    enablerepo: "remi-php74"

  changed_when: yes

  notify: [ "apache restart" ]


5.1.3 création du script handler pour relancer le service

vi roles/apache/handlers/main.yml

---

- name: "apache restart"

  service:

    name: "httpd"

    state: "restarted"


# handlers file for apache


5.2.1 installation de mariadb

vi roles/mariadb/tasks/main.yml

---


# Installation des paquets mariadb serveur et son extension Python

- name: "mariadb-server installation"

  yum:

    name:  "mariadb-server,python3-PyMySQL"

    state: "installed"


# Active le service MariaDB

- name: "start mariadb service"

  service:

    name:  "mariadb"

    state: "started"

    enabled: yes


5.3.1 chiffrer un mdp (Ansible2019)

ansible-vault encrypt_string 'Ansible2019' --name 'mediawiki_db_password'


5.3.2 configuration du fichier des variables globales

vi 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

          32626562646435393331646637336139646361306430623239393835623536336231666630366538

          3735343631636533356366306330383039646464636530340a643933383666333134613066376532

          36303432336265613037616465633237356164333335343963303931323033383564333434323439

          3237356231373634390a663739633936333339623166626531373131666637376330363763313033

          3436


# nom et mot de passe de l’administrateur Mediawiki

mediawiki_admin_user: "admin"

mediawiki_admin_password: !vault |

          $ANSIBLE_VAULT;1.1;AES256

          32626562646435393331646637336139646361306430623239393835623536336231666630366538

          3735343631636533356366306330383039646464636530340a643933383666333134613066376532

          36303432336265613037616465633237356164333335343963303931323033383564333434323439

          3237356231373634390a663739633936333339623166626531373131666637376330363763313033

          3436


# nom du Mediawiki et son titre

mediawiki_name: "mediawiki"

mediawiki_title: "ELS"


# l’emplacement du répertoire d'installation de Mediawiki

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}}"


# l’url des sources Mediawiki

mediawiki_archive_url: "https://releases.wikimedia.org/mediawiki/1.37/mediawiki-1.37.1.tar.gz"


5.4.1 Déclarez la dépendance avec le rôle commun pour confdb

vi roles/mediawiki/confdb/meta/main.yml

dependencies:

  - role: "mediawiki/commun"


5.4.2 configurer mariadb pour mediawiki

vi roles/mediawiki/confdb/tasks/main.yml

---


#1. Installation de la base de donnée Mediawiki

- name: "mediawiki database"

  mysql_db:

    name: "{{mediawiki_db_name}}"

    state: present

    login_unix_socket: /var/lib/mysql/mysql.sock


#2. Création d’un accès utilisateur et attribution des privilèges sur la base Mediawiki

- name: "mediawiki user+privileges"

  mysql_user:

    name: "{{mediawiki_db_user}}"

    password: "{{mediawiki_db_password}}"

    priv: "{{mediawiki_db_name}}.*:ALL"

    host: "http1"

    login_unix_socket: /var/lib/mysql/mysql.sock

    state: present


5.5.1 Déclarez la dépendance avec le rôle commun pour confapache

vi roles/mediawiki/confapache/meta/main.yml

dependencies:

  - role: "mediawiki/commun"


5.5.2 configurer les fichiers mediawiki dans apache

vi roles/mediawiki/confapache/tasks/main.yml

---


#1. Création du repertoire pour l’installation des fichiers Mediawiki

- name: "mediawiki directory"

  file:

    path: "{{mediawiki_directory}}"

    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}}"

    dest: "{{mediawiki_directory}}"

    owner: "apache"

    group: "apache"

    remote_src: yes

# supprime mediawiki-1.xx.x/ du chemin

    extra_opts: --transform=s/mediawiki-[0-9\.]*\///


#3. Exécute la 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"

    chdir: "{{mediawiki_maintenance_directory}}"

  command:

    php74 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: "http1"


#4. enlève la redirection localhost sur le mediawiki
- name: "fix mediawiki redirection"

  lineinfile:

    path: "{{mediawiki_directory}}/LocalSettings.php"

    regex: '\$wgServer.*'

    line: '$wgServer = $_SERVER["HOST"];'

#5. Exécute la tâche avec l'utilisateur apache, se place dans le répertoire de maintenance et exécute la commande de mise à jour de la base une seule fois

- name: "mediawiki db update"

  become: yes

  become_user: "apache"

  command:

    php74 update.php --quick

  args:

    chdir: "{{mediawiki_maintenance_directory}}"

  # La mise à jour à besoin d'être lancée une seule fois

  run_once: yes

  register: resultat

  changed_when: "' ...done.' in resultat.stdout"



6 Assemblez les opérations avec les playbooks pour automatiser le déploiement


6.1 créer le playbook pour installer apache

vi install-apache.yml

---

- name: "Installation apache"

  hosts: http1

  roles:

    - role: "apache"

      php_install: yes


6.2 Lancer le playbook pour installer apache sur http1

ansible-playbook -i inventaire.ini --user user-ansible --become --ask-become-pass install-apache.yml


6.3 vérifier l’installation de apache et php sur le node http1

sur le node http1, lancer la commande pour connaitre la version de PHP

php --version


Lancez un navigateur et connectez vous sur http://http1 si la page test ce lance le service est démarré


6.4 créer le playbook pour installer mariadb

vi install-mariadb.yml

---

- name: "Installation MariaDB"

  hosts: bdd1

  gather_facts: no

  roles:

    - role: mariadb


6.5 Lancer le playbook pour installer mariadb

ansible-playbook -i inventaire.ini --user user-ansible --become --ask-become-pass install-mariadb.yml


6.6 vérifier l’installation de mariadb

sur le node bdd1 interrogez le statut du service MariaDB

sudo systemctl status mariadb


6.7 créer le playbook pour configurer mediawiki

vi 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"


6.8 Lancer le playbook pour configurer mediawiki

ansible-playbook -i inventaire.ini --user user-ansible --become --ask-become-pass --ask-vault-pass install-mediawiki.yml

6.9 vérifier l’installation de mediawiki

Lancez un navigateur et connectez vous sur http://192.168.192.10/mediawiki si la page mediawiki ce lance le site est fonctionnel



7 Créer un module Ansible personnalisé avec python


7.1 créer le répertoire library au même niveau que les playbooks

mkdir library


7.2 créer le fichier count_page.py dans library

vi library/count_page.py

#!/usr/bin/python

# -*- coding: utf-8 -*-


DOCUMENTATION='''

module: count_page

author: Alexandre

description: Module qui permet d'exécuter une requête SQL

options:

  db_name:

description: nom de la base de données

required: yes

  request:

description: requête à exécuter

required: yes

'''


EXAMPLES='''

- name: "SQL"

  count_page:

db_name: "BDD"

request: "select * from user;"

'''


RETURN = '''

results:

description: retourne le résultat de la requête

'''


from ansible.module_utils.basic import AnsibleModule  

def main():

module = AnsibleModule(

argument_spec=dict(

db_name= dict(required=True, type='str'),

request= dict(required=True, type='str'),

)

)



db_name_local  = module.params.get('db_name')

request_local  = module.params.get('request')


import MySQLdb


db = MySQLdb.connect(db=db_name_local)

cur = db.cursor()

cur.execute(request_local)

resultat = cur.fetchall()

db.close()


module.exit_json(changed=False, results=resultat)  

if __name__ == "__main__":

main()


7.3 création d’un playbook module.yml pour le test du module count_page.py

vi module.yml

---

- name: "Requete dans une base"

  hosts: bdd1

  gather_facts: no

  tasks:

- name: "compte le nombre de pages dans le Wiki"

  count_page:

    db_name: "mediawiki"

    request: "select count(*) from page;"

      register: resultat

- debug: var=resultat


7.4 lancement du playbook module.yml 

ansible-playbook -i inventaire.ini module.yml -K -b


7.5 utiliser ansible doc pour afficher l’aide de notre module
ansible-doc -M library count_page



https://doc.ubuntu-fr.org/netplan

https://doc.fedora-fr.org/wiki/Le_service_network


https://github.com/ansible/ansible/tree/devel

https://pypi.org/project/ansible/5.2.0/#history


https://www.mediawiki.org/wiki/Compatibility/fr


en
https://docs.ansible.com/ansible/latest/user_guide/vault.html

fr

https://docs-ansible-com.translate.goog/ansible/latest/user_guide/vault.html?_x_tr_sl=en&_x_tr_tl=fr&_x_tr_hl=fr&_x_tr_pto=sc


en

https://mariadb.com/kb/en/authentication-from-mariadb-104/

fr

https://mariadb-com.translate.goog/kb/en/authentication-from-mariadb-104/?_x_tr_sl=en&_x_tr_tl=fr&_x_tr_hl=fr&_x_tr_pto=sc



https://gist.github.com/mariusv/71e6e75941d495956234


https://access.redhat.com/discussions/5473561


https://blog.remirepo.net/pages/Config


https://linux-packages.com/



├── install-apache.yml

├── install-mariadb.yml

├── install-mediawiki.yml

├── inventaire.ini

└── 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

  • Partager sur Facebook
  • Partager sur Twitter