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.
1. Crear enlace simbólico de archivo
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