GNU/Linux >> Tutoriales Linux >  >> Linux

Guía de Ansible:Administrar archivos usando Ansible

En esta guía, le mostraré cómo administrar archivos mediante módulos ansible. Aprenderá a cómo copiar, editar, insertar, descargar y reemplazar archivos con Ansible.

¿Qué haremos?

  • Copiar archivo usando el módulo 'copiar' y 'plantillas'
  • Descargar archivo usando el módulo 'fetch'
  • Edite el archivo usando los módulos 'blockinfile', 'lineinfile' y 'replace'
  • Administrar atributos de archivo

Copiar archivo usando el módulo 'copiar' y 'plantillas' en Ansible

Ansible proporciona algunos módulos para copiar archivos desde el directorio local a las máquinas de destino remotas, es el módulo 'copiar' y 'plantilla'.

La diferencia entre el módulo 'copiar' y 'plantilla' es que el módulo de copia copiará el archivo del directorio 'archivos' y la 'plantilla' copiará la plantilla Jinja2 del directorio 'plantillas' en los libros de jugadas de Ansible.

El módulo 'copiar' es bueno para copiar archivos persistentes, como certificados, mientras que la 'plantilla' es más útil para configuraciones reutilizables, como la configuración de host virtual, etc.

1. Copie el archivo de la máquina de destino local a la remota

Copie la configuración 'sources.list' en el directorio local 'files' a la máquina remota '/etc/apt/sources.list'. Cuando haya configuración, se reemplazará y se realizará una copia de seguridad en función de las marcas de tiempo.

- name: Copy from Local to Remote Target Machine with 'copy'
  copy:
    src: sources.list
    dest: /etc/apt/sources.list
    backup: yes

2. Copie el archivo en la máquina remota a otro directorio

Copie la configuración de sudoers '/etc/sudoers.d/hakase' en la máquina remota al otro directorio '/home/hakase/hakase-suoers.txt'. Se puede hacer con la opción 'remote_src'.

- name: Copy file from one directory to other on the Remote Machine
  copy:
    src: /etc/sudoers.d/hakase
    dest: /home/hakase/hakase-sudoers.txt
    remote_src: yes

3. Copie el archivo y cambie el permiso y el propietario del archivo

Copie el archivo bash en el directorio 'archivos' a la máquina del servidor remoto y establezca el permiso de archivo predeterminado '0755' y el propietario del archivo es 'hakase'.

- name: Copy file and set up the permission and owner of the file
  copy:
    src: simple.sh
    dest: /home/hakase/simple.sh
    owner: hakase
    group: hakase
    mode: 0755

4. Copiar archivo con módulo Plantilla

Copie la configuración de la plantilla Jinja2 para el host virtual nginx del directorio 'templates' al directorio '/etc/sites-enabled/' en la máquina remota. Con la plantilla Jinja2, podemos crear variables para nuestra configuración y hacerla más reutilizable.

- name: Copy file using 'template' module
  template:
    src: default.j2
    dest: /etc/nginx/sites-enabled/
    backup: yes
    owner: root
    group: root
    mode: 0644

Descargar un archivo usando el módulo Fetch en Ansible

Para descargar un archivo desde la máquina remota a nuestro nodo ansible local, podemos usar el módulo ansible llamado 'fetch'.

1. Descargar desde una máquina remota a local

Descargue el archivo de configuración de nginx 'nginx.conf' desde el servidor remoto al directorio local de ansible-node '/home/hakase/backup' para crear una copia de seguridad. Y el módulo de recuperación predeterminado incluirá las estructuras de directorio.

- name: Download file from Remote Machine to Local ansible-node directory
  become: yes
  fetch:
    src: /etc/nginx/nginx.conf
    dest: /home/hakase/backup/

2. Descargar de remoto a local sin estructuras de directorio

Descargue desde la máquina remota al nodo ansible local sin estructuras de directorio agregando la opción 'plana'.

- name: Download file from Remote Machine to Local ansible node without directory structures
  become: yes
  fetch:
    src: /etc/nginx/nginx.conf
    dest: /home/hakase/backup/
    flat: yes

Editar archivos con Ansible

Ahora vamos a editar archivos usando módulos Ansible. Hay algunos módulos que debe conocer para editar archivos con Ansible, como blockinfile, lineinfile y replace.

El blockinfile insertará/eliminará varias líneas en el archivo. El archivo linein es para una sola línea y el módulo de reemplazo se puede usar para reemplazar una cadena.

1. Inserte varias líneas en el archivo usando 'blockinfile'

Agregue la configuración de varias líneas a la configuración ssh 'sshd_config' usando el módulo 'blockinfile'. Y la configuración predeterminada insertará la nueva configuración al final de las líneas.

- name: Insert multiple lines and Backup
  blockinfile:
    path: /etc/ssh/sshd_config
    backup: yes
    block: |
      ClientAliveInterval 360
      ClientAliveCountMax 0

2. Insertar varias líneas usando las opciones de marcador

O si desea insertar en la línea específica, puede usar la opción de marcador y seguir con 'insertar después' o 'insertar antes' y Regex, o puede usar ambos.

El libro de jugadas a continuación insertará una nueva configuración adicional en el archivo 'sshd_config'. La configuración adicional se agregará antes de la línea 'UserPAM' que rodea el marcador predeterminado '# BEGIN ANSIBLE MANAGED BLOCK'.

- name: Insert after regex, backup, and validate
  blockinfile:
    path: /etc/ssh/sshd_config
    backup: yes
    marker: "# {mark} ANSIBLE MANAGED BLOCK "
    insertbefore: '^UsePAM '
    block: |
      AllowUsers hakase vagrant
      PermitEmptyPasswords no
      PermitRootLogin no
    validate: '/usr/sbin/sshd -T -f %s'

3. Eliminar/Eliminar varias líneas bloquean los alrededores dentro de los marcadores

Elimine el bloque de líneas que lo rodea con el marcador ansible '# BEGIN ANSIBLE MANAGED BLOCK'.

- name: Remote text block surrounding by markers
  blockinfile:
    path: /etc/ssh/sshd_config
    marker: "# {mark} ANSIBLE MANAGED BLOCK"
    content: ""
    backup: yes

4. Insertar una nueva línea en el archivo

Inserte la nueva línea de configuración 'PasswordAuthentication no' debajo de la línea regex '#PermitEmptyPasswords' en la configuración de ssh '/etc/ssh/sshd_config'.

- name: Insert New Line under the Regex configuration
  lineinfile:
    path: /etc/ssh/sshd_config
    backup: yes
    regexp: '^PasswordAuthentication '
    insertafter: '^#PermitEmptyPasswords '
    line: 'PasswordAuthentication no'
    validate: '/usr/sbin/sshd -T -f %s'

5. Elimina la línea del archivo usando el módulo lineinfile

Para eliminar/eliminar una línea del archivo, puede usar la opción 'estado:ausente' y seguir la expresión regular de la línea, como se muestra a continuación.

- name: Remove a line from the file
  lineinfile:
    path: /etc/ssh/sshd_config
    state: absent
    regexp: '^PasswordAuthentication'

6. Reemplazar cadenas de patrón con expresiones regulares y reemplazar módulo

Ahora vamos a reemplazar una cadena usando el módulo 'reemplazar'. El módulo de reemplazo requería la expresión regular como referencia de back-end para reemplazar el tipo de cadenas.

Cambie el nombre del host en el archivo '/etc/hosts' usando reemplazar el módulo.

- name: Replace the default
  replace:
    path: /etc/hosts
    regexp: '(\s+)node\.provision\.labs(\s+.*)?$'
    replace: '\1box.hakase.labs\2'
    backup: yes

7. Descomentar configuraciones

El módulo de reemplazo se puede usar para descomentar la configuración en el sistema Linux. Simple, podemos eliminar la cadena de comentarios '#' al comienzo de la línea usando el módulo de reemplazo.

Descomente la configuración de la línea 'server_tokens' en el archivo '/etc/nginx/nginx.conf'.

- name: Uncomment configuration
  replace:
    path: /etc/nginx/nginx.conf
    regexp: '#(\s+)server_tokens'
    replace: 'server_tokens'
    backup: yes

8. Comentar la Línea de Configuración

A continuación se puede comentar la configuración de la línea agregando el '#' al comienzo de la línea.

- name: Comment Line configuration
  replace:
    path: /etc/nginx/nginx.conf
    regexp: '(\s+)gzip on'
    replace: '\n\t#gzip on'
    backup: yes

Establecer atributos de archivos usando el módulo de archivos en Ansible

El módulo de archivo se puede utilizar para establecer los atributos de los archivos en sí, como cambiar el propietario, el grupo y el permiso, crear un enlace simbólico, crear un nuevo directorio y eliminar un enlace simbólico, un archivo o un directorio.

Cree un archivo de enlace simbólico en el host remoto para la configuración del host virtual nginx llamado 'vhost' en el directorio '/etc/nginx/sites-enabled/'.

- name: Create Symlink of file
  file:
    src: /etc/nginx/sites-available/vhost
    dest: /etc/nginx/sites-enabled/vhost
    owner: root
    group: root
    state: link

2. Cree un nuevo directorio usando el módulo de archivo

Para crear un nuevo directorio usando el módulo de archivo, necesitamos usar la opción de estado con el valor 'directorio' como se muestra a continuación.

- name: Create a New Directory using file
  file:
    path: /etc/nginx/ssl
    state: directory
    owner: root
    group: root
    mode: 0755

Linux
  1. Copiar archivos en la terminal de Linux

  2. Administrar el inicio usando systemd

  3. Cómo usar Logrotate para administrar archivos de registro

  4. Cómo copiar varios archivos simultáneamente usando scp

  5. Implementación de una carpeta de archivos de plantilla usando ansible

Comando Cp en Linux (Copiar archivos)

Cómo compartir archivos localmente en Linux usando NitroShare

Archivos de inventario y configuración de Ansible

Cómo copiar archivos con una extensión de archivo específica recursivamente

Cómo copiar archivos en Linux usando el comando CP

Transferir archivos usando WinSCP