自动化工具:Ansible

目录

一、运维自动化工具有哪些

[二、Ansible 概述](#二、Ansible 概述)

[1、Ansible 概念](#1、Ansible 概念)

[2、Ansible 特点](#2、Ansible 特点)

[3、Ansible 工作流程](#3、Ansible 工作流程)

三、安装部署Ansible

1、环境部署

[2、管理节点安装 Ansible](#2、管理节点安装 Ansible)

3、查看Ansible相关文件

4、配置主机清单

[5、免密管理 ssh-keygen](#5、免密管理 ssh-keygen)

5.1、测试连通性

5.2、简洁输出

[四、Ansible 命令行模块](#四、Ansible 命令行模块)

[1、command 模块](#1、command 模块)

[2、shell 模块](#2、shell 模块)

[3、cron 模块](#3、cron 模块)

[4、user 模块](#4、user 模块)

[5、group 模块](#5、group 模块)

[6、copy 模块](#6、copy 模块)

[7、file 模块](#7、file 模块)

[8、hostname 模块](#8、hostname 模块)

[9、ping 模块](#9、ping 模块)

[10、yum 模块](#10、yum 模块)

[11、service/systemd 模块](#11、service/systemd 模块)

[12、script 模块](#12、script 模块)

[13、setup 模块](#13、setup 模块)

[五、inventory 主机清单](#五、inventory 主机清单)

1、简单配置

2、变量

2.1、主机变量

2.2、组变量

2.3、组嵌套


一、运维自动化工具有哪些

  • Ansible:Ansible是一种基于Python开发的自动化工具,用于配置管理、应用部署和任务自动化。它使用SSH协议来与远程主机通信,并使用Playbooks来定义任务和配置
  • Puppet:Puppet是一种基于模型驱动的自动化工具,用于配置管理和自动化部署。它使用Puppet语言来描述系统配置,并通过代理在远程主机上执行配置
  • Chef:Chef是另一种配置管理工具,它使用Ruby语言来定义系统配置,并通过Chef客户端在远程主机上执行配置
  • SaltStack:SaltStack是一种事件驱动的自动化工具,用于配置管理、远程执行和监控。它使用Python语言和ZeroMQ消息队列来实现高效的通信和自动化

二、Ansible 概述

1、Ansible 概念

  • Ansible是一个基于Python开发的配置管理和应用部署工具,现在也在自动化管理领域大放异彩。它融合了众多老牌运维工具的优点,Pubbet和Saltstack能实现的功能,Ansible基本上都可以实现
  • Ansible能批量配置、部署、管理上千台主机。比如以前需要切换到每个主机上执行的一或多个操作,使用Ansible只需在固定的一台Ansible控制节点上去完成所有主机的操作
  • Ansible是基于模块工作的,它只是提供了一种运行框架,它本身没有完成任务的能力,真正执行操作的是Ansible的模块, 比如copy模块用于拷贝文件到远程主机上,service模块用于管理服务的启动、停止、重启等
  • Ansible其中一个比较鲜明的特性是Agentless,即无Agent的存在,它就像普通命令一样,并非C/S软件,也只需在某个作为控制节点的主机上安装一次Ansible即可,通常它基于ssh连接来控制远程主机,远程主机上不需要安装Ansible或其它额外的服务
  • 使用者在使用时,在服务器终端输入命令或者playbooks,会通过预定好的规则将playbook拆解为play,再组织成ansible可以识别的任务,调用模块和插件,根据主机清单通过SSH将临时文件发给远程的客户端执行并返回结果,执行结束后自动删除
  • Ansible的另一个比较鲜明的特性是它的绝大多数模块都具备幂等性(idempotence)。所谓幂等性,指的是多次操作或多次执行对系统资源的影响是一致的。比如执行 systemctl stop xxx 命令来停止服务,当发现要停止的目标服务已经处于停止状态, 它什么也不会做,所以多次停止的结果仍然是停止,不会改变结果,它是幂等的,而 systemctl restart xxx 是非幂等的
  • Ansible的很多模块在执行时都会先判断目标节点是否要执行任务,所以,可以放心大胆地让Ansible去执行任务,重复执行某个任务绝大多数时候不会产生任何副作用

2、Ansible 特点

  • 部署简单,只需在主控端部署Ansible环境, 被控端无需做任何操作
  • 默认使用SSH协议设备进行管理
  • 主从集中化管理
  • 配置简单、功能强大、扩张性强
  • 支持API及自定义模块,可以通过Pyhton轻松扩展
  • 通过playbooks 来定制强大的配置、状态管理
  • 对云计算平台、大数据都有很好的支持

3、Ansible 工作流程

Ansible 基于模块化工作,本身没有批量部署的能力,真正具有批量部署的是Ansible所运行的模块(Modules)

Ansible 只是提供了一种框架,在 Ansible 管理体系中,存在着管理节点(Control Node)和被管理节点(Managed Node)两种角色

被管理节点通常称之为资产,会放在主机清单(Inventory)文件中,Inventory 其实就是由 Ansible 所管理的主机形成的。在管理节点上,Ansible 将 Ad-Hoc(批量执行单条命令,即单模块)或者 Playbook(任务剧本)转化为 Python 脚本,最终通过 ssh 网络协议将这些 Python 脚本传递到被管理节点,在被管理服务器上依次执行,并且会实时将结果返回给管理节点,执行完后进行清理模块或命令。返回结果顺序根据网络、被管理服务器本身性能等因素有关

三、安装部署Ansible

1、环境部署

节点名称 IP 是否安装Ansible
control 管理节点 172.16.88.44
managed-1 被管理节点 172.16.88.55
managed-2 被管理节点 172.16.88.66

(1)关闭所有设备的防火墙和核心防护

cpp 复制代码
systemctl stop firewalld
setenforce 0

(2)修改三台设备的主机名,方便区分

cpp 复制代码
[root@localhost ~]#hostnamectl set-hostname control
[root@localhost ~]#bash
 
[root@localhost ~]#hostnamectl set-hostname managed-1
[root@localhost ~]#bash
 
[root@localhost ~]#hostnamectl set-hostname managed-2
[root@localhost ~]#bash

(3)管理节点配置本地的/etc/hosts文件

cpp 复制代码
echo "172.16.88.44 control" >> /etc/hosts
echo "172.16.88.55 managed-1" >> /etc/hosts
echo "172.16.88.66 managed-2" >> /etc/hosts

2、管理节点安装 Ansible

cpp 复制代码
yum install -y epel-release      #先安装epel源
yum install -y ansible           #再安装ansible
ansible --version                #查看ansible版本

3、查看Ansible相关文件

cpp 复制代码
tree /etc/ansible/     #查看ansible目录结构
 
ll /etc/ansible/       #查看ansible相关文件详细信息

4、配置主机清单

cpp 复制代码
vim /etc/ansible/hosts
[webs]                  #配置组名
172.16.88.55            #组里包含的被管理的主机IP地址或主机名(主机名需要先修改/etc/hosts文件)
 
[dbs]
172.16.88.66

5、免密管理 ssh-keygen

用于生成SSH密钥对的命令行工具。它通常用于创建公钥和私钥,以便进行安全的SSH通信

cpp 复制代码
#生成 SSH 密钥对
ssh-keygen -t rsa  # 一直回车
# rsa表示生成RSA密钥对,RSA是一种非对称加密算法
ls .ssh/
# id_rsa 是私钥文件;id_rsa.pub 是公钥文件
 
#ssh登录到远程管理节点,在ssh客户端即control服务器上生成known_hosts文件
ssh root@172.16.88.55
ssh root@172.16.88.66
ls .ssh/
#known_hosts 文件存放SSH服务器的公钥
 
#将本地主机上的SSH公钥复制到远程主机
sshpass -p '123' ssh-copy-id root@172.16.88.55
sshpass -p '123' ssh-copy-id root@172.16.88.66

5.1、测试连通性

(1)测试本机

cpp 复制代码
ansible localhost -m ping

(2)分别测试 managed-1 和 mansged-2,观察返回信息

cpp 复制代码
ansible webs -m ping
ansible dbs -m ping

返回结果的颜色:

  • 绿色:执行成功并且不需要做改变的操作
  • 黄色:执行成功并且对目标主机做变更
  • 红色:执行失败

5.2、简洁输出

cpp 复制代码
ansible 172.16.88.55 -m ping -o
ansible 172.16.88.66 -m ping -o

四、Ansible 命令行模块

指的是在不使用 Playbook 的情况下,直接使用 ansible 命令行工具执行临时命令

这些命令通常是一次性的、针对特定任务的,而不需要编写长期维护的 Playbook。通过 AD-Hoc 命令,可以快速地在远程主机上执行特定的任务,比如文件操作、软件安装、服务管理等

cpp 复制代码
命令格式:
ansible <组名> -m <模块> -a <参数列表>   #默认模块为command,可省略
cpp 复制代码
ansible-doc -l				            #列出所有已安装的模块,按q退出

1、command 模块

command 模块允许用户在目标主机上执行特定的命令,主要功能是在远程主机执行命令,此为默认模块,可忽略 -m 选项

此命令不支持 $VARNAME < > | ; & 等,可能用shell模块实现

注意此模块不具有幂等性 (幂等性是指在对系统进行操作时,无论执行多少次,系统的状态都保持一致的特性)

以下是 command 模块的一般用法:

cpp 复制代码
格式:ansible <host-pattern> [-m command] -a "<command>"
#<host-pattern> 是要操作的目标主机或主机组
#-m command 指定要使用的模块是 "command"
#-a "<command>" 传递给模块的参数,即要在目标主机上执行的命令
cpp 复制代码
ansible-doc -s command  #-s 列出指定模块的描述信息和操作动作
cpp 复制代码
ansible 172.16.88.55 -m command -a 'date'	#指定 ip 执行 date
ansible webs -m command -a 'date'			#指定组执行 date
ansible dbs -m command -a 'date'       
ansible all -m command -a 'date'			#all 代表所有 hosts 主机
ansible all -a 'ls /home'				    #如省略 -m 模块,则默认运行 command 模块

常用的参数:

cpp 复制代码
chdir:在远程主机上运行命令前提前进入目录
creates:判断指定文件是否存在,如果存在,不执行后面的操作
removes:判断指定文件是否存在,如果存在,执行后面的操作
cpp 复制代码
#在远程主机上运行命令前提前进入/home目录并查看当前目录
ansible webs -m command -a "chdir=/home ls ./"
cpp 复制代码
#removes:判断指定文件是否存在,如果存在,执行后面的操作
ansible webs -m command -a "removes=/mnt/1.txt ls /mnt"
#creates:判断指定文件是否存在,如果存在,不执行后面的操作
ansible webs -m command -a "creates=/mnt/1.txt ls /mnt"

2、shell 模块

在远程主机执行命令,相当于调用远程主机的shell进程,然后在该shell下打开一个子shell运行命令(支持管道符号等功能)

和command相似,用shell执行命令支持各种符号,比如:*,$, >,此模块不具有幂等性

cpp 复制代码
ansible-doc -s shell    #-s 列出指定模块的描述信息和操作动作
cpp 复制代码
#在名为 "webs" 的一组主机上,通过向标准输入传递密码,将用户 mimi 的密码更改为 123
ansible webs -m shell -a 'echo 123456 |passwd --stdin cxc'
cpp 复制代码
#获取名为 "webs" 的主机上网络接口 "ens33" 的第二行输出,并提取其中的第二个字段
ansible webs -m shell -a 'echo $(ifconfig ens33 | awk "NR==2 {print $2}") | cut -d " " -f2'
#在名为 "dbs" 的主机上执行一个类似的命令,但是它只是打印网络接口 "ens33" 的第二行输出
ansible dbs -m shell -a 'echo $(ifconfig ens33 | awk "NR==2 {print \$2}")'

3、cron 模块

用于管理 cron 作业(定时任务),支持时间:minute,hour,day,month,weekday

在远程主机定义任务计划。其中有两种状态(state):present表示添加(可以省略),absent表示移除

cpp 复制代码
minute/hour/day/month/weekday:分/时/日/月/周
job:任务计划要执行的命令
name:任务计划的名称
cpp 复制代码
ansible-doc -s cron    #-s 列出指定模块的描述信息和操作动作
cpp 复制代码
#在名为 "dbs" 的主机上设置一个 cron 任务。具体来说,它使用了 Ansible 的 cron 模块,传递了三个参数:minute="*/2" 表示每两分钟执行一次,job="/bin/echo welcome to China" 表示要执行的命令是输出 "welcome to China",name="crontab01" 表示这个任务的名称是 "crontab01"
ansible dbs -m cron -a 'minute="*/2" job="/bin/echo welcome to China" name="crontab01"'
 
#查看名为 "dbs" 的主机当前用户的 crontab 列表
ansible dbs  -a 'crontab -l'
 
#移除指定的计划任务,假如该计划任务没有取名字,name=None即可
ansible dbs -m cron -a 'name="crontab01" state=absent'            

4、user 模块

管理系统用户的模块。它允许用户创建、删除和修改系统用户以及相关属性

常用参数:

cpp 复制代码
name:用户名,必选参数
state=present|absent:创建账号或者删除账号,present表示创建,absent表示删除
system=yes|no:是否为系统账号
uid:用户uid
group:用户基本组
shell:默认使用的shell
move_home=yse|no:如果设置的家目录已经存在,是否将已经存在的家目录进行移动
password:用户的密码,建议使用加密后的字符串
comment:用户的注释信息
remove=yes|no:当state=absent时,是否删除用户的家目录
cpp 复制代码
ansible-doc -s user    #-s 列出指定模块的描述信息和操作动作
cpp 复制代码
#在名为 "dbs" 的主机上创建一个用户yiyi
ansible dbs -m user -a 'name="xiewei"'
#查看名为 "dbs" 的主机上 "/etc/passwd" 文件的末尾10行内容
ansible dbs  -a 'tail /etc/passwd'
cpp 复制代码
#删除用户yiyi,没有指定remove=yes参数,所以该用户的家目录没有被删除
ansible dbs -m user -a 'name="xiewei" state=absent'	
#查看名为 "dbs" 的主机上 "/etc/passwd" 文件的末尾10行内容
ansible dbs -m command -a 'tail /etc/passwd'
cpp 复制代码
ansible dbs  -a 'ls /home/'   #查看名为 "dbs" 的主机上的家目录
cpp 复制代码
#删除用户yiyi,指定remove=yes参数,该用户的家目录也会被删除
ansible dbs -m user -a 'name="dh" state=absent remove=yes'	
#查看名为 "dbs" 的主机上 "/etc/passwd" 文件的末尾10行内容
ansible dbs -m command -a 'tail /etc/passwd'
#查看名为 "dbs" 的主机上的家目录
ansible dbs  -a 'ls /home/'   

5、group 模块

管理系统用户组的模块。它允许用户创建、删除和修改系统用户组以及相关属性

cpp 复制代码
ansible-doc -s group    #-s 列出指定模块的描述信息和操作动作
cpp 复制代码
#在名为 "webs" 的主机上创建一个系统组为nginx
ansible webs -m group -a 'name=nginx gid=1314 system=yes'
#查看名为 "webs" 的主机上 "/etc/group" 文件的末尾10行内容
ansible webs -a 'tail /etc/group'
cpp 复制代码
#在名为 "webs" 的主机上创建一个名为 "nginx-test" 的系统用户,并添加到nginx系统组
ansible webs -m user -a 'name=nginx-test uid=2000 system=yes group=nginx'	
#在名为 "webs" 的主机上查看 "/etc/passwd" 文件的末尾10行内容
ansible webs -a 'tail /etc/passwd'
#在名为 "webs" 的主机上查看名为 "nginx-test" 的用户的身份信息
ansible webs -a 'id nginx-test'    

6、copy 模块

从 ansible 服务器主控端复制文件到远程主机,src=file 如果是没指明路径,则为当前目录或当前目录下的 files 目录下的 file 文件

常用参数:

cpp 复制代码
dest:指出复制文件的目标及位置,使用绝对路径,如果是源目录,指目标也要是目录,如果目标文件已经存在会覆盖原有的内容
src:指出源文件的路径,可以使用相对路径或绝对路径,支持直接指定目录,如果源是目录则目标也要是目录
mode:指出复制时,目标文件的权限 
owner:指出复制时,目标文件的属主
group:指出复制时,目标文件的属组
content:指出复制到目标主机上的内容,不能与 src 一起使用
cpp 复制代码
ansible-doc -s copy    #-s 列出指定模块的描述信息和操作动作
cpp 复制代码
#在名为 "webs" 的主机上,将名为 "/etc/fstab" 的文件复制到名为 "/opt/fstab.bak" 的文件中
ansible webs -m copy -a 'src=/etc/fstab dest=/opt/fstab.bak owner=root mode=777'
#在名为 "webs" 的主机上查看 "/opt" 目录的详细列表
ansible webs -a 'ls -l /opt'
#在名为 "webs" 的主机上查看名为 "/opt/fstab.bak" 的文件的内容
ansible webs -a 'cat /opt/fstab.bak'
cpp 复制代码
#在名为 "webs" 的主机上将字符串 "hello world" 写入名为 "/opt/1.txt" 的文件中,没有目标文件会自动创建
ansible webs -m copy -a 'content="hello world" dest=/opt/1.txt'  
#在名为 "webs" 的主机上查看名为 "/opt/1.txt" 的文件的内容
ansible webs -a 'cat /opt/1.txt' 

7、file 模块

设置文件属性,创建软链接等,关键字选项如下:

cpp 复制代码
path       #指定文件路径
state      #文件状态 有:新建(touch) 删除(absent) 文件夹(directory)  连接文件(link)等
src        #源文件
mode       #权限
owner      #属主
group      #属组
recurse    #递归,修改属性时有效
cpp 复制代码
ansible-doc -s file    #-s 列出指定模块的描述信息和操作动作

(1)设置文件属性

cpp 复制代码
#在名为 "webs" 的主机上,设置文件属性,修改文件的属主属组权限等
ansible webs -m file -a 'owner=dh group=dh mode=644 path=/opt/fstab.bak'
#在名为 "webs" 的主机上查看 "/opt" 目录的详细列表
ansible webs -a 'ls -l /opt'

(2)创建链接文件

cpp 复制代码
#在名为 "webs" 的主机上,设置/opt/fstab.link为/opt/fstab.bak的链接文件
ansible webs -m file -a 'path=/opt/fstab.link src=/opt/fstab.bak state=link' 
#在名为 "webs" 的主机上查看 "/opt" 目录的详细列表
ansible webs -a 'ls -l /opt'

(3)创建一个文件

cpp 复制代码
ansible webs -m file -a "path=/opt/123.txt state=touch"

(4)删除一个文件

cpp 复制代码
ansible webs -m file -a "path=/opt/123.txt state=absent"

8、hostname 模块

用于管理远程主机上的主机名,一般不使用模块,如果使用模块且模块中定义多个被管理节点,那么模块中的所有被管理节点的主机名会一致

cpp 复制代码
ansible-doc -s hostname    #-s 列出指定模块的描述信息和操作动作
cpp 复制代码
#将名为 "dbs-node1" 的主机名应用到名为 "dbs" 的主机上
ansible dbs -m hostname -a "name=dbs-node1"

9、ping 模块

检测远程主机的连通性

cpp 复制代码
ansible-doc -s ping    #-s 列出指定模块的描述信息和操作动作
cpp 复制代码
ansible all -m ping   #测试是否连通所有的主机

10、yum 模块

yum 管理软件包,只支持 RHEL,CentOS,fedora,不支持 Ubuntu 其它版本;在远程主机上安装与卸载软件包

常用参数:

cpp 复制代码
name参数:必须参数,用于指定需要管理的软件包
state参数:用于指定软件包的状态 ,默认值为。present,表示确保软件包已经安装,除了。present,其他可用值有 installed、latest、absent、removed,其中 installed 与present 等效,latest 表示安装 yum 中最新的版本,absent和removed 等效,表示删除对应的软件包。
disable_gpg_check参数:	用于禁用对 rpm 包的公钥 gpg 验证。默认值为 no,表示不禁用验证,设置为 yes 表示禁用验证,即不验证包,直接安装。在对应的 yum 源没有开启 gpg 验证的情况下,需要将此参数的值设置为 yes,否则会报错而无法进行安装。
enablerepo参数:用于指定安装软件包时临时启用的 yum 源。假如你想要从A源中安装软件,但是你不确定A源是否启用了,你可以在安装软件包时,将此参数的值设置为 yes,即使A源的设置是未启用,也可以在安装软件包时临时启用A源。
disablerepo参数:用于指定安装软件包时临时禁用的 yum 源。某些场景下需要此参数,比如,当多个 yum 源中同时存在要安装的软件包时,你可以使用此参数临时禁用某个源,这样设置后,在安装软件包时则不会从对应的源中选择安装包。
#其中enablerepo 参数和 disablerepo 参数可以同时使用
 
#如
name			   所安装的包的名称
state              present--->安装, latest--->安装最新的, absent---> 卸载软件
update_cache       强制更新yum的缓存
conf_file          指定远程yum安装时所依赖的配置文件(安装本地已有的包)
disable_pgp_check  是否禁止GPG checking,只用于presentor latest
disablerepo        临时禁止使用yum库。 只用于安装或更新时
enablerepo         临时使用的yum库。只用于安装或更新时
cpp 复制代码
ansible-doc -s yum    #-s 列出指定模块的描述信息和操作动作
cpp 复制代码
#在名为 "webs" 的主机上,安装httpd服务
ansible webs -m yum -a 'name=httpd'
cpp 复制代码
#在名为 "webs" 的主机上,卸载httpd服务
ansible webs -m yum -a 'name=httpd state=absent'
cpp 复制代码
#其他用法
ansible webs -m yum -a 'name=nginx state=present enablerepo=epel'  
#启用epel源进行安装nginx
 
ansible webs -m yum -a 'name=* state=lastest exclude=kernel*,foo*' 
#升级除kernel和foo开头以外的所有包,建议不要

11、service/systemd 模块

可以启动、停止、重新启动和重新加载系统服务;用于管理远程主机上的管理服务的运行状态;常用的参数

常用参数:

cpp 复制代码
name:被管理的服务名称
state=started|stopped|restarted:动作包含启动关闭或者重启
enabled=yes|no:表示是否设置该服务开机自启
runlevel:如果设定了enabled开机自启去,则要定义在哪些运行目标下自启动
cpp 复制代码
ansible-doc -s service    #-s 列出指定模块的描述信息和操作动作
cpp 复制代码
#在名为 "webs" 的主机上,查看httpd服务状态
ansible webs -a 'systemctl status httpd'
#在名为 "webs" 的主机上,开启httpd服务,并设置开机自启动
ansible webs -m service -a 'enabled=true name=httpd state=started'

12、script 模块

在远程主机上运行 ansible 服务器上的脚本(无需执行权限,本身不执行),此模块不具有幂等性

cpp 复制代码
ansible-doc -s script    #-s 列出指定模块的描述信息和操作动作
cpp 复制代码
#编写
vim test.sh
#!/bin/bash
echo "welcome to my world" > /opt/script.txt
 
#在远程主机上运行 ansible 服务器上的脚本
chmod +x test.sh   #必须添加可执行权限,才可运行脚本
ansible dbs -m script -a 'test.sh'
ansible dbs -a 'cat /opt/script.txt'

13、setup 模块

收集有关远程主机的各种系统信息。这些信息包括操作系统类型、IP 地址、内存和 CPU 使用情况、磁盘空间以及许多其他有用的系统级信息。这些 facts 信息可以直接以变量的形式使用,但是如果主机较多,会影响执行速度。可以使用 gather_facts: no 来禁止 Ansible 收集 facts 信息

常用参数:

cpp 复制代码
gather_subset: #指定要收集的子集信息,例如all, network, hardware, virtual等
gather_timeout:#设置收集信息的超时时间,以秒为单位
filter:        #用于过滤输出信息,可以根据需要选择性地显示特定信息,可配合正则表达式
fact_path:     #指定一个目录,将收集到的信息保存为 JSON 文件
retries:       #在发生连接问题时尝试重新连接的次数
cpp 复制代码
ansible-doc -s setup    #-s 列出指定模块的描述信息和操作动作
cpp 复制代码
#获取webs组主机的facts信息
ansible webs -m setup 
#使用filter可以筛选指定的facts信息,如筛选以 ipv4  结尾的信息              
ansible webs -m setup -a 'filter=*ipv4'    

五、inventory 主机清单

inventory(主机清单)是一个配置文件,用于定义Ansible可以操作的主机和组。这个文件可以是静态的,也可以是动态生成的,用于指定主机的IP地址、主机名以及这些主机的分组信息

Inventory支持对主机进行分组,每个组内可以定义多个主机,每个主机都可以定义在任何一个或多个主机组内

cpp 复制代码
官方文档:https://docs.ansible.com/ansible/latest/user_guide/intro_inventory.html  

1、简单配置

如果是名称类似的主机,可以使用列表的方式标识各个主机

(1)指定多个被管理的主机地址

cpp 复制代码
[dbs]
172.16.88.55
172.16.88.66
......

(2)指定ssh端口为非默认的端口

cpp 复制代码
[dbs]
172.16.88.55:777
172.16.88.66:666
......

(3)指定连续的主机地址

cpp 复制代码
[dbs]
172.16.88.[10:20]
 
[dbs]
db-[a:f].example.org	#支持匹配a~f

2、变量

在 Ansible Inventory 中,变量是用来存储主机和组级别的数据的元素。这些变量可以帮助您在执行 Ansible Playbook 时动态地为不同的主机或组提供不同的配置信息

变量名 说明
ansible_host ansible连接节点时的IP地址
ansible_port 连接对方的端口号,ssh连接时默认为22
ansible_user 连接对方主机时使用的主机名。不指定时,将使用执行命令的用户
ansible_password 连接时的用户的ssh密码,仅在未使用密钥对验证的情况下有效
ansible_ssh_private_key_file 指定密钥认证ssh连接时的私钥文件
ansible_ssh_common_args 提供给ssh、sftp、scp命令的额外参数
ansible_become 允许进行权限提升
ansible_become_method 指定提升权限的方式,例如sudo/su/runas等
ansible_become_user 提升为哪个用户的权限,默认提升为root
ansible_become_password 提升为指定用户权限时的密码

2.1、主机变量

cpp 复制代码
写法1:
[webs]
172.16.88.55 ansible_port=22 ansible_user=root ansible_password=CxC666666
172.16.88.66 ansible_port=22 ansible_user=root ansible_password=CxC666666
#webs组中被控制端 172.16.88.55 的端口号为22,登录时用户是root,密码为CxC666666
写法2:
[webs]
172.16.88.1[2:3] ansible_port=22 ansible_user=root ansible_password=CxC666666
#如果是名称类似的主机,可以使用列表的方式标识各个主机
写法3:
[webs]
172.16.88.55:22
172.16.88.66:1234
#默认ssh管理时的端口为22,若不是22则直接在被管理ip后加冒号和对应端口号

2.2、组变量

cpp 复制代码
[webs]
172.16.88.55
172.16.88.66
 
#表示webs组内所有主机定义变量控制时使用root账户密码为CxC666666
[webs:vars]     
ansible_user=root
ansible_password=CxC666666
 
#表示为所有组的所有主机定义变量使用ssh远程管理时都是22端口
[all:vars]       
ansible_port=22

2.3、组嵌套

cpp 复制代码
#webs组
[webs]
172.16.88.55
172.16.88.66
 
#dbs组
[dbs]
172.16.88.33
 
#组内嵌为onlys
[onlys:vars]
webs
dbs
#表示 onlys 组的成员即 vars 包括 webs和dbs
相关推荐
七夜zippoe6 小时前
CANN Runtime任务描述序列化与持久化源码深度解码
大数据·运维·服务器·cann
Fcy6488 小时前
Linux下 进程(一)(冯诺依曼体系、操作系统、进程基本概念与基本操作)
linux·运维·服务器·进程
袁袁袁袁满8 小时前
Linux怎么查看最新下载的文件
linux·运维·服务器
代码游侠8 小时前
学习笔记——设备树基础
linux·运维·开发语言·单片机·算法
Harvey9038 小时前
通过 Helm 部署 Nginx 应用的完整标准化步骤
linux·运维·nginx·k8s
珠海西格电力科技9 小时前
微电网能量平衡理论的实现条件在不同场景下有哪些差异?
运维·服务器·网络·人工智能·云计算·智慧城市
释怀不想释怀10 小时前
Linux环境变量
linux·运维·服务器
zzzsde10 小时前
【Linux】进程(4):进程优先级&&调度队列
linux·运维·服务器
聆风吟º11 小时前
CANN开源项目实战指南:使用oam-tools构建自动化故障诊断与运维可观测性体系
运维·开源·自动化·cann
NPE~12 小时前
自动化工具Drissonpage 保姆级教程(含xpath语法)
运维·后端·爬虫·自动化·网络爬虫·xpath·浏览器自动化