Ansible-doc en acción

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"

Supongo que te gusta

Origin blog.csdn.net/xiaolong1155/article/details/131170655
Recomendado
Clasificación