Introducción
Ansible es una herramienta de infraestructura como código que le permite usar una única ubicación central (nodo de control de Ansible) para monitorear y controlar una gran cantidad de servidores remotos (hosts).
Utilice Ansible para configurar una serie de tareas que pueden realizar los hosts remotos, incluida la creación de nuevos archivos y directorios.
Este tutorial cubre diferentes formas en las que puede usar Ansible para crear archivos en hosts remotos.

Requisitos previos
- Un sistema que ejecuta Ubuntu 20.04
- Acceso a la línea de comandos/ventana de terminal
- Ansible instalado y configurado (consulte nuestras guías sobre Instalación de Ansible en Windows o Instalación de Ansible en Ubuntu)
Creación de un libro de jugadas de Ansible
Los playbooks de Ansible son listas de tareas que desea que realicen sus hosts remotos. Se pueden guardar y reutilizar, lo que le permite automatizar procesos complejos.
Cada comando que desee enviar a un host remoto, incluida la creación de archivos y carpetas, es una tarea que debe incluir en un libro de jugadas. Una vez que ejecuta un libro de jugadas, su host remoto realiza todas las tareas definidas en él.
Para crear un libro de jugadas de Ansible, use el comando:
sudo nano /etc/ansible/playbook.yaml
Este comando crea un archivo .yaml llamado ‘playbook’ en la carpeta de instalación de Ansible. Usaremos tareas en playbook.yaml archivo para crear archivos y carpetas en nuestros hosts remotos.
El uso de la función de ejecución en seco de Ansible permite a los usuarios ejecutar un libro de jugadas sin realizar cambios en los servidores. Utiliza el modo de verificación incorporado para probar un libro de estrategias en busca de errores antes de la ejecución.
Crear un archivo vacío
La forma más rápida de crear un archivo vacío es usando el file
de Ansible. módulo.
Agregue la siguiente configuración a su libro de jugadas de Ansible:
---
- hosts: all
tasks:
- name: Creating an empty file
file:
path: "/your path"
state: touch

El archivo anterior tiene los siguientes componentes:
hosts
: Define en qué hosts remotos de su archivo de inventario de Ansible desea ejecutar la tarea. Todo significa que cada host recibe el comando, pero también puede ingresar el nombre de una categoría de host o un host individual.tasks
: Anuncia que el host remoto necesita realizar una tarea.name
:Le permite definir un nombre para la tarea. El nombre es solo para su referencia y no tiene influencia en la tarea en sí.file
:Activa el módulo de archivos de Ansible para crear un nuevo archivo.path
:define la ruta para el nuevo archivo en el disco duro del host remoto.state
:Similar al comando táctil en la terminal de Ubuntu, ingresandotouch
crea un archivo vacío en la ubicación que elija.
Para ejecutar el libro de jugadas, use:
ansible-playbook /etc/ansible/playbook.yaml

Crear un archivo con contenido
Si desea crear un nuevo archivo con contenido, primero puede usar el método anterior para crear un archivo vacío y luego usar blockinfile
o lineinfile
módulo para insertar contenido.
Una forma más rápida es usar la copy
módulo. Aunque este módulo se usa para copiar un archivo desde el nodo de control al host remoto, puede incluir el content
parámetro para agregar instantáneamente contenido a un archivo vacío.
Utilice esta configuración en su libro de jugadas:
---
- hosts: all
tasks:
- name: Creating a file with content
copy:
dest: "/your path"
content: |
line 01
line 02
En el archivo, usamos:
copy
:activa el módulo de copia de Ansible.dest
:Define la ruta para su nuevo archivo.content
:Este parámetro agregaráline 01
yline 02
como el contenido del nuevo archivo.
Creación de varios archivos
Puede crear varios archivos utilizando una sola tarea en un libro de jugadas de Ansible.
Utilice la siguiente configuración para crear varios archivos:
---
- hosts: all
tasks:
- name: Create multiple files
file:
path: "{{ item }}"
state: touch
with_items:
- test01.txt
- test02.txt
- test03.txt
- test04.txt
En el archivo de configuración anterior, definimos:
path
:El"{{ item }}"
El valor significa que Ansible creará una ruta separada para cada archivo respectivo. De forma predeterminada, estos archivos se encuentran en la carpeta de inicio del host remoto. Defina una ruta diferente usando/your_folder_path/"{{ item }}"
.with_items
:Este parámetro se utiliza para iniciar una lista de archivos para crear. Enumere tantos archivos como desee. En nuestro ejemplo, creamos una lista de cuatro archivos titulada prueba .
Creación de un directorio
La creación de un nuevo directorio utiliza la misma configuración que cuando se crea un archivo vacío. La única diferencia es que bajo el state
parámetro, ingresa directory
como el valor:
---
- hosts: all
tasks:
- name: Creating a new directory
file:
path: "/your path"
state: directory
Eliminar archivos
Los playbooks de Ansible también pueden eliminar archivos existentes. Para hacer esto, establezca el state
parámetro a absent
:
---
- hosts: all
tasks:
- name: Removing a file
file:
path: "/your path"
state: absent
Si el archivo ya se eliminó, este comando no hace nada.
Configuración de permisos de archivos
Con todos los ejemplos anteriores, también puede establecer el permiso para nuevos archivos y carpetas. Para esto, necesitas usar el mode
parámetro.
Hay dos formas de hacer esto:
- Usando el formato de modo octal: Puede usar números octales, como 0644 o 0777. No olvide el 0 inicial, ya que omitirlo puede generar resultados inesperados.
- Uso del formato de modo simbólico: Puede usar valores como
u=rwx
,g=rx
, oo=rx
, dondeu
significa propietario ,g
significa grupo yo
significa otros . Los permisos se definen comor
para leer ,w
para escribir yx
para ejecutar .
Por ejemplo, puede usar el valor octal 0755, al definir el propietario:
---
- hosts: all
tasks:
- name: Create a new file with permissions
file:
path: "/your path"
state: touch
mode: 0755
owner: test
También puede usar el equivalente simbólico a 0755:
---
- hosts: all
tasks:
- name: Create a new file with permissions
file:
path: "/your path"
state: touch
mode: u=rwx,g=rx,o=rx
owner: test