GNU/Linux >> Tutoriales Linux >  >> Linux

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

Ansible ha simplificado la automatización y se ha convertido en el lenguaje de automatización universal. Por ahora, los beneficios son bien conocidos en la comunidad de TI. Sin embargo, como todas las buenas tecnologías, puede haber desafíos que enfrentar o enfoques que combinar. Considere usar archivos de valores separados por comas (CSV) y 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 variable externo usando vars_files o directamente en el libro de jugadas mediante 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 usando una lista YAML. Personalmente, he experimentado situaciones en las que se proporciona una lista de usuarios que incluye contraseñas en un archivo CSV con el requisito de crear esos usuarios en varias máquinas Linux utilizando una herramienta de automatización como Ansible.

[ También te puede interesar: Automatización de la implementación de máquinas virtuales con Ansible:Diseño ]

¿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á el módulo en acción a continuación.

Considere el archivo CSV que incluye varios campos, como Nombre de usuario , UID , Nombres , Apellidos , Grupos y Contraseña mostrado 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

Paso 1

Ahora que tiene un archivo CSV, el siguiente paso es hacer que Ansible lea este archivo CSV. Para lograr esto, utilice el read_csv módulo. Para imprimir cómo Ansible ha analizado el CSV, use la depuración módulo. Observe el uso de delegate_to:localhost 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 lista hasta el final de su variable registrada original 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

Paso 2

A medida que ejecuta 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 corchetes. Cada fila 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 First_name y el valor es 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-------
        }
    ]
}

Paso 3

Puede leer e imprimir correctamente el archivo CSV a través de Ansible. Ahora es el momento de intentar extraer uno de estos valores para ver si puede manipular este diccionario para satisfacer las necesidades del usuario. módulo en Ansible. Prueba algo básico como extraer el valor del Nombre de usuario clave para todos los diccionarios dentro de esta lista. Para ello, utilizará el nombre de usuario del diccionario. 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í, extrajo el Nombre de usuario valores de los diccionarios. Usando el mismo concepto, puede poner estos valores en el nombre campo del usuario módulo para crear los usuarios.

Paso 4

Ahora que ha extraído el valor de la clave deseada, debería poder trabajar con todos los pares de clave y valor. Póngalos en el usuario Módulo para crear tus usuarios con toda la información requerida. Observe la contraseña opción del módulo de usuario. Contiene un filtro para encriptar la 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 encriptado en el /etc/shadow archivo en los hosts administrados. Además, el comentario contiene dos variables porque desea que GECOS (Comentarios del usuario) campo del usuario para tener su nombre y apellido. Por ejemplo, el usuario booker12 tendrán sus GECOS como "Rachel Booker". Además, está utilizando la escalada de privilegios en esta tarea porque la creación de usuarios requiere privilegios de 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 curso gratuito para usted:Resumen técnico de virtualización y migración de infraestructura. ] 

Resumir

Ha creado con éxito los usuarios dados con su UID , Grupos , Contraseña y GECOS extrayendo los valores deseados de un archivo CSV. Esto es útil porque la mayoría de las organizaciones usan formatos como CSV para almacenar y administrar sus datos. Un desarrollador de Ansible que puede 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 más eficazmente su entorno, recomendaría usar Ansible Tower, que es la solución Ansible empresarial que ofrece Red Hat. Tal vez opte también por la oferta de capacitación DO447 - Automatización avanzada:Mejores prácticas de Ansible.


Linux
  1. Cree una bóveda de archivos cifrados en Linux

  2. Permisos de archivo en Linux con ejemplo

  3. Cómo crear un sistema de archivos ZFS con compresión de archivos en Linux

  4. ¿Cómo crear un archivo con un tamaño determinado en Linux?

  5. Crear un PEM a partir de un archivo PPK

Cómo crear un archivo en Linux

Comando WC de Linux con ejemplos

Cómo crear directorios desde un archivo de texto en Linux

Cómo crear nuevos usuarios en OpenShift con htpasswd y OAuth

4 formas de crear un nuevo archivo en Linux

4 Comandos Stat en Linux con Ejemplo para Usuarios Principiantes