GNU/Linux >> Tutoriels Linux >  >> Linux

4 étapes pour créer des utilisateurs Linux à partir d'un fichier csv avec Ansible

Ansible a simplifié l'automatisation et est devenu le langage d'automatisation universel. À l'heure actuelle, les avantages sont bien connus dans la communauté informatique. Cependant, comme toutes les bonnes technologies, il peut y avoir des défis à relever ou des approches à combiner. Envisagez d'utiliser des fichiers CSV (valeurs séparées par des virgules) et Ansible pour créer des comptes utilisateur Linux.

Dans cet article, l'objectif est d'automatiser la création d'utilisateurs à l'aide d'Ansible. Une liste d'utilisateurs peut être transmise via un fichier de variable externe en utilisant vars_files ou directement dans le playbook à l'aide d'une boucle. Le problème se pose lorsque la liste des utilisateurs à créer n'est disponible qu'au format CSV alors que le développeur Ansible est plus à l'aise avec une liste YAML. J'ai personnellement rencontré des situations où une liste d'utilisateurs comprenant des mots de passe est fournie dans un fichier CSV avec l'obligation de créer ces utilisateurs sur plusieurs machines Linux à l'aide d'un outil d'automatisation tel qu'Ansible.

[ Vous pourriez également aimer : Automatiser le déploiement de machines virtuelles avec Ansible :Conception ]

Quelle est la solution ?

Heureusement, Ansible est livré avec plus d'un millier de modules, dont un pour lire les fichiers CSV. Ce module peut fournir exactement ce qui est nécessaire pour cette tâche. Vous verrez le module en action ci-dessous.

Considérez le fichier CSV qui comprend plusieurs champs tels que Nom d'utilisateur , UID , Prénoms , Noms de famille , Groupes , et Mot de passe indiqué ci-dessous. L'exigence est de créer tous ces utilisateurs avec leurs informations pertinentes sur plusieurs serveurs Linux.

Username,UID,First_name,Last_name,Groups,Password
booker12,9012,Rachel,Booker,Operations,iambooker
grey07,2070,Laura,Grey,Developers,iamgrey
johnson81,4081,Craig,Johnson,Operations,iamjohnson
jenkins46,9346,Mary,Jenkins,Developers,iamjenkins
smith79,5079,Jamie,Smith,Operations,iamsmith

Étape 1

Maintenant que vous avez un fichier CSV, l'étape suivante consiste à demander à Ansible de lire ce fichier CSV. Pour ce faire, utilisez le read_csv module. Pour imprimer comment Ansible a analysé le CSV, utilisez le debug module. Notez l'utilisation de delegate_to :localhost dans la première tâche. C'est parce que le fichier username.csv est présent sur le nœud de contrôle et non sur les hôtes gérés. Ansible analyse ce CSV dans un format de liste avec plusieurs dictionnaires à l'intérieur. C'est pourquoi vous devez ajouter la sous-variable list à la fin de votre variable enregistrée d'origine user_list .

---
- name: create users from csv file
  hosts: all
  tasks:
   - name: reading the csv file
     read_csv:
      path: username.csv
     register: user_list
     delegate_to: localhost

   - name: display user_list data
     debug:
      var: user_list.list

Étape 2

Lorsque vous exécutez ce playbook, vous verrez que la sortie contient une liste, comme indiqué par la paire de parenthèses. Cette liste comprend en outre un dictionnaire, qui est indiqué par les accolades. Chaque ligne du fichier CSV a été convertie en dictionnaire, sur la base de la séparation par virgule entre elles. Un dictionnaire est utilisé pour stocker des données dans une paire de clés et de valeurs. Par exemple, la clé est First_name , et la valeur est Rachel .

ok: [192.168.0.3] => {
    "user_list.list": [
        {
            "First_name": "Rachel",
            "Groups": "Operations",
            "Last_name": "Booker",
            "Password": "iambooker",
            "UID": "9012",
            "Username": "booker12"
        },
        {
            "First_name": "Laura",
            "Groups": "Developers",
            "Last_name": "Grey",
            "Password": "iamgrey",
            "UID": "2070",
            "Username": "grey07"
        },
        {
            "First_name": "Craig",
            "Groups": "Operations",
            "Last_name": "Johnson",
            "Password": "iamjohnson",
            "UID": "4081",
            "Username": "johnson81"
        },
      -------OUTPUT OMITTED-------
        }
    ]
}

Étape 3

Vous êtes en mesure de lire et d'imprimer le fichier CSV avec succès via Ansible. Il est maintenant temps d'essayer d'extraire l'une de ces valeurs pour voir si vous pouvez manipuler ce dictionnaire en fonction des besoins de l'utilisateur module dans Ansible. Essayez quelque chose de basique comme extraire la valeur du nom d'utilisateur key pour tous les dictionnaires de cette liste. Pour ce faire, vous utiliserez le nom d'utilisateur du dictionnaire key comme sous-variable pour votre boucle Ansible.

----OUTPUT OMITTED----
- name: extract Username from all dictionaries
  debug:
    msg: "{{ item.Username }}"
    loop: "{{ user_list.list }}"

ok: [192.168.0.3] => (item={'Username': 'booker12', 'UID': '9012', 'First_name': 'Rachel', 'Last_name': 'Booker', 'Groups': 'Operations', 'Password': 'iambooker'}) => {
    "msg": "booker12"
}
ok: [192.168.0.3] => (item={'Username': 'grey07', 'UID': '2070', 'First_name': 'Laura', 'Last_name': 'Grey', 'Groups': 'Developers', 'Password': 'iamgrey'}) => {
    "msg": "grey07"
}
----OUTPUT OMITTED----

Comme vous pouvez le voir ici, vous avez extrait le nom d'utilisateur valeurs des dictionnaires. En utilisant le même concept, vous pouvez mettre ces valeurs dans le nom champ de l'utilisateur module pour créer les utilisateurs.

Étape 4

Maintenant que vous avez extrait la valeur de la clé souhaitée, vous devriez pouvoir travailler avec toutes les paires clé et valeur. Mettez-les dans l'utilisateur module pour créer vos utilisateurs avec toutes les informations requises. Remarquez le mot de passe option du module utilisateur. Il contient un filtre pour chiffrer le Mot de passe valeur à l'aide de l'algorithme SHA-512. Ceci est fait parce que RHEL8 utilise SHA-512 pour chiffrer les mots de passe des utilisateurs. Ce mot de passe est stocké dans un format crypté dans le /etc/shadow fichier sur les hôtes gérés. En outre, le commentaire l'option contient deux variables car vous voulez que le GECOS (Commentaires de l'utilisateur) de l'utilisateur pour avoir son prénom et son nom. Par exemple, l'utilisateur booker12 auront leur GECOS comme "Rachel Booker". De plus, vous utilisez l'élévation des privilèges dans cette tâche car la création d'un utilisateur nécessite des privilèges root.

-----OUTPUT OMITTED-----  
- name: create users from the csv
  user:
    name: "{{ item.Username }}"
    uid: "{{ item.UID }}"
    groups: "{{ item.Groups }}"
    append: true
    password: "{{ item.Password | password_hash('sha512') }}"
    comment: "{{ item.First_Name }} {{ item.Last_Name }}"
    state: present
  loop: "{{ user_list.list }}"
  become: true

[ Un cours gratuit pour vous :présentation technique de la virtualisation et de la migration d'infrastructure. ] 

Récapitulez

Vous avez créé avec succès les utilisateurs donnés avec leur UID , Groupes , Mot de passe , et GECOS en extrayant les valeurs souhaitées d'un fichier CSV. Cela est pratique car la plupart des organisations utilisent des formats tels que CSV pour stocker et gérer leurs données. Un développeur Ansible capable de manipuler des fichiers CSV peut gérer efficacement son environnement sans tout écrire à partir de zéro directement dans le playbook ou dans un fichier YAML de variable externe. Pour mieux gérer votre environnement, je vous recommande d'utiliser Ansible Tower, qui est la solution d'entreprise Ansible proposée par Red Hat. Optez peut-être également pour l'offre de formation DO447 - Advanced Automation :Ansible Best Practices.


Linux
  1. Comment créer un swap sous Linux

  2. Comment créer un fichier d'échange sous Linux

  3. Comment créer un fichier sous Linux à partir de la fenêtre du terminal ?

  4. Créer un PEM à partir d'un fichier PPK

  5. Comment puis-je créer un fichier avec une taille spécifique à partir d'une ligne de commande ?

Comment créer un fichier sous Linux

Commande Linux WC avec exemples

Comment créer des répertoires à partir d'un fichier texte sous Linux

Comment créer de nouveaux utilisateurs dans OpenShift avec htpasswd et OAuth

4 façons de créer un nouveau fichier sous Linux

4 commandes Stat sous Linux avec exemple pour les utilisateurs débutants