Greboca  

Suport technique et veille technologique

Aujourd’hui, les grandes entreprises et administrations publiques hésitent entre continuer à utiliser des logiciels propriétaires ou basculer vers les Logiciels Libres. Pourtant, la plupart des logiciels libres sont capables de bien traiter les données issues des logiciels propriétaire, et parfois avec une meilleur compatibilité.

C’est alors la barrière de la prise en main qui fait peur, et pourtant...

Les logiciels libres

L’aspect « Logiciel Libre » permet une évolution rapide et une plus grande participation des utilisateurs. Les aides et tutoriels foisonnent sur Internet ou sont directement inclus dans le logiciel lui-même.

Enfin, les concepteurs sont plus proches des utilisateurs, ce qui rend les logiciels libres plus agréable à utiliser et conviviaux.

Grâce à la disponibilité des logiciels libres, vous trouverez facilement des services de support techniques et la licence n’est plus un frein à l’utilisation de ces logiciels par votre personnel.

Notre support technique concerne essentiellement les logiciels libres, que ce soit sous forme de services ponctuels ou de tutoriels.

DLFP - Dépêches  -  Sortie de Squest, le portail de service pour Tower/AWX, en version 1.0

 -  Octobre 2021 - 

L’équipe de développement est heureuse de vous annoncer la sortie de la première version prête pour la production de Squest, l’outil à destination des DevOPs/SRE.

Pour rappel, Squest, que vous retrouverez en introduction dans une dépêche précédente dans sa version alpha, est un outil auto hébergé vous permettant d'exposer votre automatisation disponible depuis votre instance de Ansible Tower/AWX en tant que service.

Après un résumé des principales nouveautés, nous allons vous présenter un tutoriel de création d’un service.

Sommaire

Résumé des principales nouveautés

  • Image docker officielle ;
  • Gestion des annonces aux utilisateurs ;
  • Gestion de documentation (markdown) rattachable aux services ;
  • Gestion des jetons d’authentification pour l’API ;
  • Interface de détails pour les requêtes et les instances ;
  • Suppression/archive des requêtes ou instances en tant qu’administrateur ;
  • Ajout d’attribut de type « texte » sur les groupes de ressources ;
  • Ajout d’un ratio sur les attributs des groupes de ressources ;
  • Vérification de la compatibilité avec les « job templates » de Tower/AWX ;
  • Gestion intégrée de la sauvegarde.

Tutoriel de création d’un service

Squest permet d’exposer l’automatisation présente dans votre instance d’Ansible Tower/AWX en tant que service.

Nous allons ici exposer un service d’exemple sur le portail Squest. L’objectif est de comprendre les interactions entre le portail et le moteur d’automatisation sous-jacent Ansible.

Provisionner un service

Pour cet exemple, nous souhaitons exposer à nos utilisateurs un service qui permet de créer un fichier sur un serveur Linux et d’y placer du contenu. Voici le code Ansible permettant cette création :

- name: Create a directory with UUID
  ansible.builtin.file:
    path: "{{ file_path }}"
    state: directory
    recurse: yes
    mode: u+rw,g-wx,o-wx
    modification_time: preserve
    access_time: preserve

- name: Write the given content in file
  ansible.builtin.copy:
    content: "{{ file_content }}"
    dest: "{{ file_path }}/{{ file_name }}"

Il suffirait donc de placer ce playbook dans un répertoire Git, de déclarer le répertoire sur Tower, et enfin de créer un « job template » qui pointe sur le playbook.

Seulement voilà, si l’on souhaite effectuer plus tard d’autres opérations sur ce fichier en particulier, par exemple changer le contenu, il faut donner des informations à Squest pour le retrouver. C’est là qu’intervient l’instance.

Lorsqu’un utilisateur effectue une requête pour un service, Squest va automatiquement créer une « instance » et la placer en statut « en attente » (PENDING). L’idée est de faire en sorte que le playbook exécuté appel l’API de Squest afin de donner des informations permettant de retrouver l’objet que nous avons créé (ici un simple fichier).

En résumé la séquence est la suivante :

squest-request-workflow.png

Lorsque le playbook est exécuté sur Tower par la demande de Squest, ce dernier reçoit deux blocs d’information :

  • les variables de l’utilisateur (appelées « extra_vars ») qui proviennent du formulaire du service (survey) ;
  • une variable « squest » qui contient toutes les informations sur la requête et l’instance en attente sur Squest.

Notre playbook va donc se servir des « extra_vars » pour créer la ressource, dans notre exemple, un fichier. Nous aurons donc un formulaire qui demande un nom de fichier et un contenu.

Et enfin le playbook va se servir de la variable « squest » pour connaitre l’identifiant de l’instance en attente afin de lui donner des informations (spec) qui permettront de l’identifier de façon formelle dans un prochain appel.

Voici un exemple d’une variable « squest » que le playbook va recevoir :

squest:
  request:
    instance:
      id: 1
      name: test
      service: 1
      spec:
        file_name: foo.conf
      state: PROVISIONING

Voilà notre playbook de création au complet. (Les variables « file_name » et « file_content » proviennent du formulaire du « job template » et sont donc injectées au moment de l’exécution) :

- hosts: squest_testing
  become: False
  gather_facts: False

  tasks:
    - name: Generate UUID
      set_fact:
        uuid_file: "{{ file_name | to_uuid }}"

    - name: Generate path
      set_fact:
        file_path: "/tmp/squest_functional_test/{{ uuid_file }}"

    - name: Prints variables
      ansible.builtin.debug:
        msg:
          - "UUID: {{ uuid_file }}"
          - "file_name: {{ file_name }}"
          - "file_content: {{ file_content }}"

    - name: Create a directory with UUID
      ansible.builtin.file:
        path: "{{ file_path }}"
        state: directory
        recurse: yes
        mode: u+rw,g-wx,o-wx
        modification_time: preserve
        access_time: preserve

    - name: Write the given content in file
      ansible.builtin.copy:
        content: "{{ file_content }}"
        dest: "{{ file_path }}/{{ file_name }}"

    - name: Update squest instance with spec
      uri:
        validate_certs: no
        url: "{{ squest_api_url }}/service_catalog/admin/instance/{{ squest['request']['instance']['id'] }}/"
        headers:
          Authorization: "Token {{ squest_token }}"
        method: PATCH
        body:
          spec:
            file_name: "{{ file_name }}"
            uuid_file: "{{ uuid_file }}"
        status_code: 200
        body_format: json

Vous aurez remarqué que, dans cet exemple, nous générons notre propre identifiant unique (uuid).

L’identifiant unique va totalement dépendre du service que vous souhaitez exposer. L’idée est de nourrir le spec de l’instance avec des informations qui permettront à un autre playbook de modifier cette instance précise et pas une autre.

Si, par exemple, votre service propose la création d’une base de données dans un serveur Postgres, l’identifiant unique de cette base sera son nom et le nom du serveur qui l’héberge.

Mise à jour ou suppression d’un service

Pour chaque service dans le catalogue de Squest il est possible d’attacher des « opérations » qui permettent de gérer le cycle de vie de l’objet créé via ce service. Une opération correspond à un « job template » et donc un playbook Ansible.

Ce nouveau playbook devra lire les informations envoyées dans la variable « squest » et plus particulièrement les valeurs placées dans le champ « spec » afin de mettre à jour l’objet qui avait été créé dans l’opération de provisionnement.

Si l’on repart de notre exemple, et que nous souhaitons cette fois proposer a l’utilisateur de modifier le contenu du fichier qu’il avait créé. Au moment de l’appel, Squest va automatiquement attacher la variable « squest » avec toutes les informations « spec » fournies au moment du provisionnement de l’instance.

La séquence est cette fois-ci la suivante :

squest-request-update-workflow.png

Voici un exemple de variable « squest » qu’un playbook pourrait recevoir :

squest:
  request:
    instance:
      id: 1
      state: UPDATING
      spec:
        file_name: 'my_file.txt'
        uuid_file: 51b1d14c-cedf-5837-9063-b8cb45f950fe

Et voici un exemple de code Ansible qui permettrait la mise à jour du fichier :

- hosts: squest_testing
  become: False
  gather_facts: False

  tasks:
    - name: Get UUID and file name from Squest
      set_fact:
        uuid_file: "{{ squest['request']['instance']['spec']['uuid_file'] }}"
        file_name: "{{ squest['request']['instance']['spec']['file_name'] }}"

    - name: Generate path
      set_fact:
        file_path: "/tmp/squest_functional_test/{{ uuid_file }}"

    - name: Prints variables
      ansible.builtin.debug:
        msg:
          - "UUID: {{ uuid_file }}"
          - "file_name: {{ file_name }}"
          - "file_content: {{ file_content }}"

    - name: Write the given content in file
      ansible.builtin.copy:
        content: "{{ file_content }}"
        dest: "{{ file_path }}/{{ file_name }}"

Dans l’exemple nous avons effectué une mise à jour, mais nous aurions pu tout aussi bien supprimer le fichier et donc l’instance sur Squest.

Commentaires : voir le flux Atom ouvrir dans le navigateur

par sispheor, palm123, Pierre Jarillon, Xavier Teyssier, Benoît Sibaud, Ysabeau

DLFP - Dépêches

LinuxFr.org

L’informatique sans écran

 -  21 avril - 

Lors d’un Noël de ma tendre jeunesse pré-adolescente est arrivé un « ordinateur » dans le foyer. Ce PC (Intel 386) a été installé dans le bureau et a (...)


Entretien avec GValiente à propos de Butano

 -  16 avril - 

GValiente développe un SDK pour créer des jeux pour la console Game Boy Advance : Butano.Cet entretien revient sur son parcours et les raisons (...)


Nouveautés d'avril 2024 de la communauté Scenari

 -  11 avril - 

Scenari est un ensemble de logiciels open source dédiés à la production collaborative, publication et diffusion de documents multi-support. Vous (...)


Annuaire de projets libres (mais pas de logiciels)

 -  9 avril - 

Les communs sont une source énorme de partage !S’il est plutôt facile dans le monde francophone de trouver des ressources logicielles (Merci (...)


Les enchères en temps réel, un danger pour la vie privée mais aussi pour la sécurité européenne

 -  7 avril - 

Les enchères en temps réel, ou Real-Time Bidding (RTB), sont une technologie publicitaire omniprésente sur les sites web et applications mobiles (...)