Partage
  • Partager sur Facebook
  • Partager sur Twitter

Ansible - Failed to connect to the host via ssh

Sujet résolu
    2 mars 2022 à 16:46:37

    Bonjour,

    j'ai un soucis au déploiement d'un playbook. Il s'agit d'install-mediawiki dans le cours sur ansible.

    Le réseau, un node-manager et deux nodes:

    • node-manager: debian11 - 192.168.0.102
    • http2: centos7 - 192.168.0.103
    • bdd2: centos7 - 192.168.0.104

    Le node http2 est accessible lors des deux premières tâches d'un rôle, mais ne l'est plus à la 3ième tâche !

    (ansible2.7.10) user-ansible@node-manager:~$ ansible-playbook -i inventaire.ini --user user-ansible --become --ask-become-pass --ask-vault-pass install-me
    SUDO password: 
    Vault password: 
    
    PLAY [mediaWiki db configuration] ************************************************************************************************************************
    
    TASK [mediawiki/confdb : mediawiki database] *************************************************************************************************************
    ok: [bdd2]
    
    TASK [mediawiki/confdb : mediawiki user+privileges] ******************************************************************************************************
    ok: [bdd2] => (item=['http2'])
    
    PLAY [MediaWiki apache configuration] ********************************************************************************************************************
    
    TASK [mediawiki/confapache : mediawiki directory] ********************************************************************************************************
    ok: [http2]
    
    TASK [mediawiki/confapache : uncompress mediawiki archive] ***********************************************************************************************
    ok: [http2]
    
    TASK [mediawiki/confapache : mediawiki configuration] ****************************************************************************************************
    failed: [http2] (item=['http2']) => {"item": "['http2']", "msg": "Failed to connect to the host via ssh: ssh: Could not resolve hostname ['http2']: Name o true}
    fatal: [http2]: UNREACHABLE! => {"changed": false, "msg": "All items completed", "results": [{"_ansible_ignore_errors": null, "_ansible_item_label": "['ht, "item": "['http2']", "msg": "Failed to connect to the host via ssh: ssh: Could not resolve hostname ['http2']: Name or service not known", "unreachable"
    
    NO MORE HOSTS LEFT ***************************************************************************************************************************************
            to retry, use: --limit @/home/user-ansible/install-mediawiki.retry
    
    PLAY RECAP ***********************************************************************************************************************************************
    bdd2                       : ok=2    changed=0    unreachable=0    failed=0   
    http2                      : ok=2    changed=0    unreachable=1    failed=0

    Les parefeux et selinux sont éteints.

    Mon fichier inventaire.ini sur le node-master est celui-ci:

    (ansible2.7.10) user-ansible@node-manager:~$ cat inventaire.ini 
    [apache]
    http2
    
    [db]
    bdd2

    Chacun des fichiers /etc/hosts des nodes, y compris le master,  contiennent ces lignes:

    192.168.0.103   http2
    192.168.0.104   bdd2
    


    Je peux pinguer mes nodes avec le module ping d'ansible (en particuliers http2):

    (ansible2.7.10) user-ansible@node-manager:~$ ansible -i inventaire.ini http2 -m ping
    http2 | SUCCESS => {
        "changed": false,
        "ping": "pong"
    }
    

    L'accès ssh aux nodes se fait par clés. La clé publique, après voir été créée sur le node-master, a été copiée dans les nodes par la commandes:

    (ansible2.7.10) user-ansible@debian11:~$ ansible -i inventaire.ini -m authorized_key -a 'user=user-ansible state=present key="{{ lookup("file", "/home/user-ansible/.ssh/id_ecdsa.pub") }}"' --user user-ansible --become --ask-become-pass all


    C'est pas mal, ça roule, mais la troisième tâche ne s'exécute pas :(


    Mon paybook instal-mediawiki.yml

    (ansible2.7.10) user-ansible@node-manager:~$ cat install-mediawiki.yml  
    ---
    
    - name: "mediaWiki db configuration"
     hosts: db
     gather_facts: no
     tags: [ "mariadb", "mysql" ]
     roles:
       - role: "mediawiki/confdb"
    
    - name: "MediaWiki apache configuration"
     hosts: apache
     gather_facts: no
     tags: "apache"
     roles:
       - role: "mediawiki/confapache"



    Mon fichier roles/mediawiki/confapache/tasks/main.yml

    user-ansible@node-manager:~$ cat roles/mediawiki/confapache/tasks/main.yml
    # ~/roles/mediawiki/confapache/tasks/main.yml
    ---
    
    #1. Création du répertoire pour l'installation des fichiers Mediawiki
    - name: "mediawiki directory"     
      file:
        path: "{{mediawiki_directory}}"     # => /var/www/html/mediawiki
        owner: "apache"
        group: "apache"
        state: directory
    
    #2. Décompresse le fichier source archive Mediawiki et le formate sans extension
    - name: "uncompress mediawiki archive"
      unarchive:
        src: "{{mediawiki_archive_url}}"    # => https://releases… …/mediawiki/1.31/mediawiki-1.31.1.tar.gz
        dest: "{{mediawiki_directory}}"     # => /var/www/html/mediawiki
        owner: "apache"
        group: "apache"
        remote_src: yes
          # supprime mediawiki-1.xx.x/ du chemin
        extra_opts: --transform=s/mediawiki-[0-9\.]*\///
    
    #3. Exécute le tâche avec l'utilisateur apache, se place dans le répertoire de maintenance et exécute la commande de configuration si le fichier localsetting.php n'existe pas
    - name: "mediawiki configuration"
      become: yes
      become_user: "apache"
      args:
        creates: "{{mediawiki_directory}}/LocalSettings.php"    # => /var/www/html/mediawiki/LocalSettings.php
        chdir: "{{mediawiki_maintenance_directory}}"            # => /var/www/html/mediawiki/maintenance (contient install.php !!)
      command:
        php install.php --scriptpath /{{mediawiki_name}} --dbname mediawiki --lang fr --dbuser {{mediawiki_db_user}} --dbpass {{mediawiki_db_password}} --pass {{mediawiki_admin_password}} --dbserver {{mediawiki_db_host}} {{mediawiki_title}} {{mediawiki_admin_user}}
      run_once: yes
      delegate_to: "{{item}}"
      with_items: "{{groups.apache}}"
    
    #4. Exécute la tâche avec l'utilisatteur apache, se place dans le répertoire de maintenance et exćute la commande de mise à jour de la base une seule fois
    - name: "mediawiki db update"
      become: yes
      become_user: "apache"
      command: php update.php --quick
      args:
        chdir: "{{mediawiki_maintenance_directory}}"            # => /var/www/html/mediawiki/maintenance (contient install.php !!)
      run_once: yes
      register: resultat
      changed_when: "' ...done.' in resultat.stdout"
    

    Mes variables globales: roles/mediawiki/commun/defaults/main.yml

    user-ansible@node-manager:~$ cat roles/mediawiki/commun/defaults/main.yml
    # ~/roles/mediawiki/commun/defaults/main.yml
    ---
    
    # nom de la base de données
    mediawiki_db_name: "mediawiki"
    
    # nom de l'utilisateur de la base de données et son mot de passe
    mediawiki_db_user: "mediawiki"
    mediawiki_db_password: !vault |
              $ANSIBLE_VAULT;1.1;AES256
              66356330613535306333666239643764663932353033333662643337386337656662356438376630
              3864323234376537626464363539633861353632613539630a383462623937363638633833653165
              64613564386532663437303438356330306131613339376532396339623264383264383033643362
              6531663330323964650a373038323332626461363463396339363635646432316530346361353061
              6662
    
    # nom et mot de passe de l'administrateur Mediawiki
    mediawiki_admin_user: "admin"
    mediawiki_admin_password: !vault |
              $ANSIBLE_VAULT;1.1;AES256
              66356330613535306333666239643764663932353033333662643337386337656662356438376630
              3864323234376537626464363539633861353632613539630a383462623937363638633833653165
              64613564386532663437303438356330306131613339376532396339623264383264383033643362
              6531663330323964650a373038323332626461363463396339363635646432316530346361353061
              6662
    
    # nom du Mediawiki et son titre
    mediawiki_name: "mediawiki"
    mediawiki_title: "ELS"
    
    # l'emplacement du répertoire d'installation de Mediawiki
    # => Mediawiki est un site internet…
    mediawiki_directory: "/var/www/html/{{mediawiki_name}}"
    
    # répertoire de maintenance de mediawiki
    mediawiki_maintenance_directory: "{{mediawiki_directory}}/maintenance"
    
    # Definie le premier node du groupe mariadb
    mediawiki_db_host: "{{groups.db.0}}"
    
    # l'url des sources mediawiki
    mediawiki_archive_url: "https://releases.wikimedia.org/mediawiki/1.31/mediawiki-1.31.1.tar.gz"

    une vue d'ensemble:

    (ansible2.7.10) user-ansible@node-manager:~$ tree roles/
    roles/
    ├── apache
    │   ├── handlers
    │   │   └── main.yml
    │   └── tasks
    │       ├── main.yml
    │       └── php7-install.yml
    ├── mariadb
    │   └── tasks
    │       └── main.yml
    └── mediawiki
        ├── commun
        │   └── defaults
        │       └── main.yml
        ├── confapache
        │   ├── meta
        │   │   └── main.yml
        │   └── tasks
        │       └── main.yml
        └── confdb
            ├── meta
            │   └── main.yml
            └── tasks
                └── main.yml
    
    14 directories, 9 files
    

    Le cours: ici.

    Merci pour mon aide :)

    -
    Edité par DenebeDenebe 2 mars 2022 à 16:50:30

    • Partager sur Facebook
    • Partager sur Twitter
      8 mars 2022 à 11:44:15

      Bonjour,

      je ne sais pas trop ce qui cafouille, si ce n'est la résolution du nom http2… Peut-être que cela a voir avec la précédence, une configuration à adapter dans un environnement virtuel python, l'inventaire, le fichier hosts (d'ansible, pas le /etc/hosts) ?

      Par contre, j'ai testé en installant ansible sur une Ubuntu 20.04 avec apt et en adaptant tout le début du cours pour faire jouer à cette Ubuntu le rôle de node-master, dans les grandes lignes comme ceci:

      => installation ansible, sshpass

      => création de l'utilisateur user-ansible, se loguer avec lui ; configurer la résolution de http2 et bdd2 dans /etc/hosts

      => création de paire de clés ssj-keygen -t ecdsa ; exportation de la clé publique…

      => importation des dossiers/fichiers déjà saisis dans le premier node-master (celui du début du post) avec scp…

      => configuration de l'inventaire: dans /etc/ansible/hosts ; !!! donc je n'ai plus utilisé -i inventaire.ini dans les lignes de commandes (ad-hoc)

      J'ai lancé (joué) le playbook install-mediawiki, c'est passé comme une lettre à la poste.

      Puis j'ai rentré http://http2/mediawiki dans mon navigateur.

      Résultat:

      Avec curl:

      (ansible2.7.10) user-ansible@node-manager:~$ curl http://http2/mediawiki
      <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
      <html><head>
      <title>301 Moved Permanently</title>
      </head><body>
      <h1>Moved Permanently</h1>
      <p>The document has moved <a href="http://http2/mediawiki/">here</a>.</p>
      </body></html>
      
      (ansible2.7.10) user-ansible@node-manager:~$ curl -L http://http2/mediawiki
      <!DOCTYPE html>
      <html class="client-nojs" lang="en" dir="ltr">
      <head>
      <meta charset="UTF-8"/>
      <title>Main Page - ELS</title>
      …
      -L, --location
                    (HTTP)  If the server reports that the requested page has moved to a different location (indicated with a Location: header and a 3XX response code), this option will make curl
                    redo the request on the new place.



      Je mets résolu.

      -
      Edité par DenebeDenebe 8 mars 2022 à 12:26:01

      • Partager sur Facebook
      • Partager sur Twitter

      Ansible - Failed to connect to the host via ssh

      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
      × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
      • Editeur
      • Markdown