4 pasos para crear usuarios de Linux desde un archivo csv con Ansible

Ansible simplificó la automatización y se convirtió en el lenguaje de automatización universal. Por ahora, los beneficios son bien conocidos en la comunidad de TI. Sin embargo, como toda buena tecnología, puede haber desafíos que superar o enfoques que combinar. Considere usar valores separados por comas (CSV) y archivos Ansible para crear cuentas de usuario de Linux.

En este artículo, el objetivo es automatizar la creación de usuarios con Ansible. Se puede pasar una lista de usuarios a través de un archivo de variables externas usando vars_files o directamente en el libro de jugadas usando un bucle. El problema surge cuando la lista de usuarios a crear solo está disponible en un formato como CSV mientras que el desarrollador de Ansible se siente más cómodo con una lista YAML. He experimentado personalmente situaciones en las que se proporciona una lista de usuarios que incluyen contraseñas en un archivo CSV con el requisito de crear estos usuarios en varias máquinas Linux utilizando una herramienta de automatización como Ansible.

Índice

    ¿Cuál es la solución?

    Afortunadamente, Ansible viene con más de mil módulos, incluido uno para leer archivos CSV. Este módulo puede proporcionar exactamente lo que se necesita para esta tarea. Verás el mod en acción a continuación.

    Considere el archivo CSV que incluye varios campos como nombre del usuario, UID, Nombre de pila, Apellidos, Grupos, y Contraseña indicada a continuación. El requisito es crear todos estos usuarios con su información relevante en múltiples servidores 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

    Etapa 1

    Ahora que tiene un archivo CSV, el siguiente paso es hacer que Ansible lea ese archivo CSV. Para lograr esto, utilice el leer_csv módulo. Para imprimir cómo analizó Ansible el CSV, use el depurar módulo. Note el uso de delegado_a: anfitrión local en la primera tarea. Esto se debe a que el archivo username.csv está presente en el nodo de control y no en los hosts administrados. Ansible analiza este CSV en un formato de lista con varios diccionarios dentro. Es por eso que necesita agregar la subvariable listado al final de su variable guardada original Lista de usuarios.

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

    2do paso

    Cuando ejecute este libro de jugadas, verá que la salida contiene una lista, como lo indica el par de corchetes. Esta lista incluye además un diccionario, que se indica mediante llaves. Cada línea del archivo CSV se ha convertido en un diccionario, según la separación de comas entre ellas. Un diccionario se utiliza para almacenar datos en un par de claves y valores. Por ejemplo, la clave es Nombre de pila, y el valor es Raquel.

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

    Paso 3

    Puede leer e imprimir el archivo CSV a través de Ansible. Ahora es el momento de probar y extraer uno de estos valores para ver si puede manipular este diccionario para satisfacer las necesidades del usuario módulo en Ansible. Pruebe algo básico como extraer el valor de la nombre del usuario clave para todos los diccionarios dentro de esta lista. Para ello, utilizará el diccionario. nombre del usuario key como una subvariable para su bucle 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----

    Como puede ver aquí, ha revisado el nombre del usuario valores de diccionario. Usando el mismo concepto, puede poner estos valores en el campo de la usuario Módulo para crear usuarios.

    Etapa 4

    Ahora que ha extraído el valor de la clave que desea, debería poder trabajar con todos los pares de clave y valor. Ponlos en el usuario Módulo para crear tus usuarios con toda la información necesaria. Observe la la contraseña Opción de módulo de usuario. Contiene un filtro para encriptar el Contraseña valor utilizando el algoritmo SHA-512. Esto se hace porque RHEL8 usa SHA-512 para cifrar las contraseñas de los usuarios. Esta contraseña se almacena en un formato cifrado en el /etc/shadow archivo en hosts administrados. también comentario La opción contiene dos variables porque desea que GECOS (Comentarios de usuario) campo de usuario para tener su nombre y apellido. Por ejemplo, el usuario booker12 tendrá su GECOS como "Rachel Booker". Además, utiliza la elevación de privilegios en esta tarea porque la creación de usuarios requiere privilegios de raíz.

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

    Conclusión

    Ha creado con éxito los usuarios dados con sus UID, Grupos, Contraseña, y GECOS extrayendo los valores deseados de un archivo CSV. Esto es conveniente porque la mayoría de las organizaciones usan formatos como CSV para almacenar y administrar sus datos. Un desarrollador de Ansible capaz de manipular archivos CSV puede administrar de manera eficiente su entorno sin escribir todo desde cero directamente en el libro de jugadas o en un archivo YAML de variable externa. Para administrar mejor su entorno, le recomiendo que utilice Torre Ansible, que es la solución Ansible empresarial que ofrece Red Hat. También puede optar por la oferta formativa DO447 - Automatización avanzada: Mejores prácticas de Ansible.

    Artículos de interés

    Subir