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

        "Un problème clairement exposé est à moitié résolu." ·· Pas de questions techniques en MP.

          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

            "Un problème clairement exposé est à moitié résolu." ·· Pas de questions techniques en MP.

              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

                "Un problème clairement exposé est à moitié résolu." ·· Pas de questions techniques en MP.

                  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

                          (Cours Ansible) pb exécution playbook mediawiki

                          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                          • Editeur
                          • Markdown