1 ansible
- Herramientas para gestionar servidores de forma masiva
- Adquirida por Red Hat en 2015
- Escrito en lenguaje Python
- La administración se basa en ssh, por lo que no es necesario instalar ningún software en el lado administrado
- Cuando ansible administra hosts remotos, opera principalmente a través de varios módulos
1.1 Preparación del entorno
nombre de la CPU | dirección IP | Role |
---|---|---|
control | 192.168.199.51 | maestro de nodo de control |
nodo1 | 192.168.199.52 | Nodo controlado nodo1 |
nodo2 | 192.168.199.53 | nodo controlado nodo2 |
1.2 Requisitos ambientales
- Requisitos para el nodo de control:
- configurar la resolución de nombres y poder acceder a todos los nodos por nombre
- configurar para iniciar sesión en todos los nodos a través de ssh sin contraseña
- instalar ansible
配置域名解析
[root@control ~]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.199.51 control
192.168.199.52 node1
192.168.199.53 node2
[root@control ~]#
配置免密登录
[root@control ~]# ssh-keygen
[root@control ~]# ssh-copy-id node1
[root@control ~]# ssh-copy-id node2
安装ansible
[root@control ~]# yum install epel-release.noarch -y
[root@control ~]# yum install ansible -y
1.3 Configurar herramientas de administración de ansible
Porque los hosts remotos a administrar pueden ser diferentes. Por lo tanto, las configuraciones con el mismo método de administración se colocan en un directorio.
El directorio de instalación predeterminado es /etc/ansible/
# 创建ansible工作目录,目录名自己定义,不是固定的。
[root@control ~]# mkdir ansible
[root@control ~]# cd ansible
# 创建配置文件。默认的配置文件是/etc/ansible/ansible.cfg,但是一般不使用它,而是在工作目录下创建自己的配置文件
[root@control ansible]# vim ansible.cfg # 文件名必须是ansible.cfg
[defaults]
inventory = hosts # 管理的主机,配置在当前目录的hosts文件中,hosts名是自定义的。=号两边空格可有可无。
# 创建主机清单文件。写在[]里的是组名,[]下面的是组内的主机名
[root@control ansible]# vim hosts
[web1]
node1
[web2]
node2
[root@control ansible]# ansible all --list-hosts
hosts (2):
node2
node1
[root@control ansible]#
2 comandos ansible-doc
2.1 Gramática
ansible 主机或组列表 -m 模块 -a "参数" # -a是可选的
2.2 módulo ansible
[root@control ansible]# ansible-doc -l |wc -l
3387
# 查看与yum相关的模块
[root@control ansible]# ansible-doc -l | grep yum
yum Manages packa...
yum_repository Add or remove...
[root@control ansible]#
- El módulo de aprendizaje principalmente sabe qué módulo se necesita para realizar una determinada función.
- Los módulos se utilizan de la misma manera. Principalmente para ver que parámetros tiene el módulo.
2.3 La diferencia entre el módulo de comando y el módulo de shell
- Módulo predeterminado de Ansible para ejecutar comandos arbitrarios en hosts remotos
- El comando no admite funciones de shell como tuberías y redirección.
# 在所有被管主机上创建目录/tmp/demo
[root@control ansible]# ansible all -a "mkdir /tmp/demo"
# 查看node1的ip地址
[root@control ansible]# ansible node1 -a "ip a s"
[root@control ansible]# ansible node1 -a "ip a s | head" # 报错
módulo de concha
- Similar al módulo de comando, pero admite funciones de shell como tuberías y redirección
# 查看node1的ip地址,只显示前10行
[root@control ansible]# ansible node1 -m shell -a "ip a s | head"
3 módulos en acción
Módulo de secuencia de comandos 3.1
- Se utiliza para ejecutar el script en el host remoto, copiar el script local en el host remoto y ejecutar
[root@control ansible]# vim test.sh
#!/bin/bash
#author zoey
touch /root/script.txt
echo "this is a script model" >script.txt
[root@control ansible]# ansible all -m script -a "test.sh"
node2 | CHANGED => {
"changed": true,
"rc": 0,
"stderr": "Shared connection to node2 closed.\r\n",
"stderr_lines": [
"Shared connection to node2 closed."
],
"stdout": "",
"stdout_lines": []
}
node1 | CHANGED => {
"changed": true,
"rc": 0,
"stderr": "Shared connection to node1 closed.\r\n",
"stderr_lines": [
"Shared connection to node1 closed."
],
"stdout": "",
"stdout_lines": []
}
[root@control ansible]#
[root@node1 ~]# cat script.txt
this is a script model
[root@node1 ~]#
3.2 módulo de archivo
- Puede crear archivos, directorios, enlaces, etc., y modificar permisos, atributos, etc.
- Opciones de uso común:
- ruta: especifique la ruta del archivo
- propietario: establece el propietario del archivo
- grupo: establece el grupo al que pertenece el archivo
- estado: estado. tocar significa crear un archivo, directorio significa crear un directorio, enlace significa crear un enlace suave y ausente significa eliminar
- modo: establecer permisos
- src: abreviatura de fuente, fuente
- dest: abreviatura de destino, objetivo
# 查看使用帮助
[root@control ansible]# ansible-doc file
EXAMPLES:
- name: Change file ownership, group and permissions
file:
path: /etc/foo.conf
owner: foo
group: foo
mode: '0644'
在WEB1主机上创建/tmp/file.txt
[root@control ansible]# ansible web1 -m file -a "path=/tmp/file.txt state=touch"
删除web1主机上/tmp/file.txt
[root@control ansible]# ansible web1 -m file -a "path=/tmp/file.txt state=absent"
在web1主机上创建/etc/hosts的软链接,目标是/tmp/hosts.txt
[root@control ansible]# ansible web1 -m file -a "src=/etc/hosts dest=/tmp/hosts.txt state=link"
3.3 módulo de copia
- Se utiliza para copiar archivos desde el extremo de control al extremo controlado
- Opciones comunes:
- origen: fuente. Ruta del archivo de control
- destino: destino. La ruta del archivo del extremo controlado
- contenido: contenido. Lo que debe escribirse en el archivo.
[root@control ansible]# echo "AAA" > a3.txt
[root@control ansible]# ansible web1 -m copy -a "src=a3.txt dest=/root/"
#在目标主机上创建/tmp/mytest.txt,内容是Hello World
[root@control ansible]# ansible web1 -m copy -a "content='hello word' dest=/tmp/mytest.txt"
3.4 módulo de búsqueda
- A diferencia del módulo de copia, copiar es cargar y buscar es descargar
- Opciones comunes:
- origen: fuente. La ruta del archivo del extremo controlado
- destino: destino. Ruta del archivo de control
# 将web1主机上的/etc/hostname下载到本地用户的家目录下
[root@control ansible]#
[root@control ansible]# ansible web1 -m fetch -a "src=/etc/hostname dest=./"
Módulo de archivo de 3.5 líneas
- Se utiliza para garantizar que haya una determinada línea de contenido en el archivo de destino guardado
- Opciones comunes:
- ruta: la ruta del archivo a modificar
- línea: una línea para escribir en el archivo
- regexp: expresión regular, utilizada para encontrar el contenido en el archivo
# web1组中的主机,/etc/issue中一定要有一行Hello World。如果该行不存在,则默认添加到文件结尾
[root@control ansible]# ansible web1 -m lineinfile -a "path=/etc/issue line='hello world'"
# web1组中的主机,把/etc/issue中有Hello的行,替换成chi le ma
ansible web1 -m lineinfile -a "path=/etc/issue line='chi le ma' regexp='hello'"
3.6 reemplazar módulo
- lineinfile reemplazará una línea y replace puede reemplazar palabras clave
- Opciones comunes:
- ruta: la ruta del archivo a modificar
- replace: reemplaza el contenido encontrado por la expresión regular con el contenido de replace
- regexp: expresión regular, utilizada para encontrar el contenido en el archivo
# 把web1组中主机上/etc/issue文件中的chi,替换成he
[root@control ansible]# ansible web1 -m replace -a "path=/etc/issue regexp='chi' replace='he'"
3.7 Ejercicio integral de explotación de ficheros
- Todas las operaciones surten efecto en los hosts del grupo web1
- Cree el directorio /tmp/mydemo en el host de destino, el propietario y el grupo son adm y los permisos son 0777
- Cargue el archivo /etc/hosts del terminal de control en el directorio /tmp/mydemo del host de destino, tanto el propietario como el grupo son adm, y la autoridad es 0600
- Reemplace node5 en el host de destino /tmp/mydemo/hosts archivo con server5
- Descargue el archivo host de destino /tmp/mydemo/hosts al directorio actual de la terminal de control
在目标主机上创建/tmp/mydemo目录,属主和属组都是adm,权限为0777
[root@control ansible]# ansible web1 -m file -a "path=/tmp/mydemo owner=adm group=adm mode='0777' state=directory"
将控制端的/etc/hosts文件上传到目标主机的/tmp/mydemo目录中,属主和属组都是adm,权限为0600
[root@control ansible]# ansible web1 -m copy -a "src=/etc/hosts dest=/tmp/mydemo owner=adm group=adm mode='0600'"
[root@node1 ~]# cd /tmp/mydemo/
[root@node1 mydemo]# ls
hosts
[root@node1 mydemo]# cat hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.199.51 control
192.168.199.52 node1
192.168.199.53 node2
[root@node1 mydemo]#
替换目标主机/tmp/mydemo/hosts文件中的node1为server1
[root@control ansible]# ansible web1 -m replace -a "path=/tmp/mydemo/hosts regexp='node1' replace='server1'"
[root@node1 mydemo]# cat hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.199.51 control
192.168.199.52 server1
192.168.199.53 node2
[root@node1 mydemo]#
将目标主机/tmp/mydemo/hosts文件下载到控制端的当前目录
[root@control ansible]# ansible web1 -m fetch -a "src=/tmp/mydemo/hosts dest=."
node1 | CHANGED => {
"changed": true,
"checksum": "442afbbcbd4539223c68db745e45cc99fdbf4382",
"dest": "/root/ansible/node1/tmp/mydemo/hosts",
"md5sum": "79d1195a2aa818f6dbfb940121402e57",
"remote_checksum": "442afbbcbd4539223c68db745e45cc99fdbf4382",
"remote_md5sum": null
}
[root@control ansible]# cd node1/tmp/mydemo/
[root@control mydemo]# ls
hosts
[root@control mydemo]#
3.8 módulo de usuario
- Implementar la gestión de usuarios de Linux
- Opciones comunes:
- name: el nombre del usuario a crear
- uid: ID de usuario
- grupo: establecer el grupo principal
- grupos: establecer grupos adicionales
- inicio: establecer el directorio de inicio
- contraseña: establecer contraseña de usuario
- estado: estado. presente significa creación, que es la opción predeterminada. ausente significa borrar
- eliminar: elimina el directorio de inicio, el buzón, etc. El valor es sí o verdadero.
在web1组中的主机上,创建tom用户
[root@control ansible]# ansible web1 -m user -a "name=tom"
# 在web1组中的主机上,创建jerry用户。设置其uid为1010,主组是adm,附加组是daemon和root,家目录是/home/jerry
[root@control ansible]# ansible web1 -m user -a "name=jerry uid=1010 group=adm groups=daemon,root home=/home/jerry"
# 设置tom的密码是123456
# {
{}}是固定格式,表示执行命令。password_hash是函数,sha512是加密算法,则password_hash函数将会把123456通过sha512加密变成tom的密码
[root@control ansible]# ansible web1 -m user -a "name=tom password={
{'123456'|password_hash('sha512')}} "
# 删除tom用户,不删除家目录
[root@control ansible]# ansible web1 -m user -a "name=tom state=absent"
# 删除jerry用户,同时删除家目录
[root@control ansible]# ansible web1 -m user -a "name=jerry state=absent remove=yes"
Módulo de grupo 3.9
- Crear y eliminar grupos
- Opciones comunes:
- nombre: el nombre del grupo a crear
- gid: el número de identificación del grupo
- estado: presente significa creación, que es la opción predeterminada. ausente significa borrar
# 在web1组中的主机上创建名为devops的组
[root@control ansible]# ansible web1 -m group -a "name=devops"
# 在web1组中的主机上删除名为devops的组
[root@control ansible]# ansible web1 -m group -a "name=devops state=absent"
módulo 3.10 yum
- Se utiliza para la gestión de paquetes rpm, como instalación, actualización, desinstalación
- Opciones comunes:
- nombre: nombre del paquete
- estado: estado. Presente significa instalar, si ya está instalado, ignórelo; Latest significa instalar o actualizar a la última versión; Ausente significa desinstalar.
#在test组中的主机上安装tar
[root@control ansible]# ansible web1 -m yum -a "name=tar state=present"
# 在web1组中的主机上卸载wget
[root@control ansible]# ansible web1 -m yum -a "name=wget state=absent"
3.11 servicio
- Se utiliza para controlar los servicios. Inicio, apagado, reinicio, inicio automático.
- Opciones comunes:
- nombre: el nombre del servicio del control
- estado: iniciado significa inicio; detenido significa apagado; reiniciado significa reiniciar
- habilitado: sí significa configurar el inicio para que se inicie automáticamente; no significa configurar el inicio para que no se inicie automáticamente.
# 在web1主机上安装httpd
[root@control ansible]# ansible web1 -m yum -a "name=httpd state=latest"
# 在web1主机上启动httpd,并设置它开机自启
[root@control ansible]# ansible web1 -m service -a "name=httpd state=started enabled=yes"
Módulo de montaje 3.12
- para montar sistemas de archivos
- Opciones comunes:
- ruta: punto de montaje. Si el punto de montaje no existe, se creará automáticamente.
- src: el dispositivo a montar
- fstype: tipo de sistema de archivos
- estado: montado, significa montado permanentemente
# 在web1组中的主机上,把/dev/myvg/mylv永久挂载到/data
[root@control ansible]# ansible web1 -m mount -a "path=/data src=/dev/myvg/mylv state=mounted fstype=xfs"
# 在web1组中的主机上,卸载/dev/myvg/mylv
[root@control ansible]# ansible web1 -m mount -a "path=/data state=absent"