Ansible自动化运维这部分我将会分为五个部分来为大家讲解
(一)介绍、无密钥登录、安装部署、设置主机清单
(二)Ansible 中的 ad-hoc 模式 模块详解(15)个
(三)Playbook 模式详解
(四)jinja2 模板 Roles角色详解
(五)运维实战
相关标题以及链接 |
---|
Ansible自动化运维(一)介绍、无密钥登录、安装部署_ansible自动化运维免费版本-优快云博客 |
Ansible自动化运维(二) ad-hoc 模式 模块详解_ansible ad-hoc-优快云博客 |
Ansible自动化运维(三)playbook剧本详解-优快云博客 |
Jinja2模板、Roles角色详解-优快云博客 |
Ansible自动化运维(五) 运维实战-优快云博客 |
目录
Ansible中的 ad-hoc 模式
Ad-hoc模式的使用场景:
查看某个进程的信息
拷贝日志到本地
一、Ansible模块基本使用
An-hoc模式的命令格式:
ansible 主机组名称 -m 模块 -a “具体命令”
常用选项:
-m 指定要使用的模块,不指定默认使用command模块
-a 指定要执行的具体命令
-i 指定自定义的主机清单配置文件
-f 一次返回几个结果
1、Ansible帮助命令
ansible-doc #帮助命令
ansible-doc -l #列出所以的模块
ansible-doc 模块名 #查看模块的详细信息
ansible-doc 模块名 -s #查看模块的选项使用说明
2、ad-hoc 模式执行流程
模块执行的工作流程
1.主控端命令行执行命令;
2.将模块拷贝到受控端;
3.按照模块定义的操作在受控端执行;
4.返回信息,删除受控端模块;
说明:
ansible模块可以使用的前提是:主控端与受控端python版本一致,
并且Ansible的模块是幂等执行的
Ansible执行命令的返回值颜色:
屎黄色:执行命令成功,并且做了修改;
草帽绿:执行命令成功,只查看信息,没有修改
玫瑰红:执行失败,报错
葡萄紫:表示对命令发错的操作有警告信息
比如一篇章,最开始的主机清单配置规则中,返回的结果就是绿色的,表示只查看,并不会做修改。
3、Ansible中常见的返回值
返回值 | 返回值含义 |
changed | 几乎所有的Ansible模块都会返回该变量,表示模块是否对远程主机执行了修改操作 |
failed | 如果模块未能执行完成,将返回failed为true |
msg | 模块执行失败的原因,常见的错误如ssh连接失败 |
rc | 与命令行工具相关的模块会返回rc,表示执行Linux命令的状态码 |
stdout | 与rc类似,返回的是标准输出的结果 |
stderr | 与rc类似,返回的是标准错误的结果 |
backup_file | 所有存在backup选项的模块,用来返回备份文件的路径 |
results | 应用在playbook中存在循环的情况,返回多个结果 |
4、常用模块
远程命令相关
1. command # 默认使用模块,用于远程执命令,不支持管道
2. shell # 远程执行命令,支持管道
3. raw # ssh登录,再执行
4. script # 远程执行本地脚本
5. yum # 远程安装
6. copy # 推送文件
7. file # 对文件操作
8. service # 控制启动关闭服务
9. systemd # 控制启动关闭服务
10. mount # 挂载与卸载模块
11. user/group # 用于管理的用户创建与删除
12. unarchive # 解压缩模块
13. get_url # 下载文件,类似于curl
14. setup # 获取主机信息
15. git # git命令模块
16. sysctl # 控制内核
二、常用模块的用法(15个)
首先我们先查看分组
cat /etc/ansible/hosts
注:因为分组设置的太多了,所以下面我只把要每一部分要查看的分组的内容部分给大家看
1、command模块
1、作用:用于远程执行命令,不支持管道
优点:
command 模块非常适合那些不需要复杂 shell 功能的简单命令执行场景。更加安全
缺点:
不够灵活,不支持管道
2、用法:
ansible 主机组名称 -m command -a “具体命令”
ansible 主机组名称 -a “具体命令”
# 默认为command模块
3、案例:
[root@server ~]# cat /etc/ansible/hosts
[node4]
host1
Host2
检查 node4 组里的所有主机 /etc/yum.repos.d/ 文件中的内容
ansible node4 -m command -a "ls /etc/yum.repos.d/"
因为我之前安装过nginx,mariadb mariadb-server。所以这里就直接检查状态了,大家也可以自己试一试自己动手安装nginx,看看能不能和下面一样可以检查它的运行状态吧
ansible node1 -m command -a "systemctl status nginx"
注:紫色信息意味着在Ansible的组名中发现了无效字符。这通常不会影响命令的执行结果,文档前后都已经做完更改,正常你们不会出现
2、shell模块
1、作用:远程执行命令,支持管道
优点:
shell 模块非常适合那些需要利用 shell 功能的任务。支持管道。
缺点:
安全性较低,在一些不需要shell功能的情况,推荐使用 command 模块,以提高安全性和效率。
2、用法:
ansible 主机组名称 -m shell -a “具体命令”
3、案例:
[root@server ~]# cat /etc/ansible/hosts
[node1]
host1
[node4]
host1
host2
使用管道的方法来查看 nginx 、mariadb 的进程
注:command模块不支持用管道哦
ansible node1 -m shell -a "ps aux | grep nginx"
ansible node4 -m shell -a "ps aux | grep mariadb"
大家可以先试试用 command 模块来为其他节点主机下载这两个服务,来进行测试
3、ping模块
1、作用:用于测试与远程主机的连接
优点:
可以快速验证远程主机的可达性
多次执行不会对系统产生影响。
适用于多种操作系统和环境。
缺点:
仅用于测试连接,无法执行其他任务。
如果 SSH 配置有问题,可能会导致误报。
只能告诉你连接是否成功,不能提供更多关于主机状态的信息。
2、用法:
ansible 主机组名称 -m ping
3、案例
[root@server ~]# cat /etc/ansible/hosts
[node4]
host1
host2
# 接下来我们试试 ping 组名为 node4 的组
[root@server ~]# ansible node4 -m ping
4、raw模块
1、作用:ssh登录,再执行
优点:
raw 模块更加简单和轻量级,因为它不依赖于 Python,并且可以在没有 Python 环境的情况下运行。这使得 raw 模块特别适合用于初始化系统或当目标机器缺少 Python 解释器时的情况。
缺点:
raw 模块不支持复杂的参数传递,不像其他模块那样提供了丰富的功能选项,如幂等性控制、错误处理等。不支持复杂的参数传递和错误处理,可能不如其他模块可靠。
2、用法:
ansible 主机组名称 -m raw -a “具体命令”
3、案例:
[root@server ~]# cat /etc/ansible/hosts
[node4]
host1
host2
[root@server ~]# ansible node4 -m raw -a "ls /etc/yum.repos.d"
5、script模块
1、作用:远程执行本地脚本
优点:
可以执行复杂的脚本逻辑,包括循环、条件判断等。可以在本地编写和测试脚本,然后通过 Ansible 在远程主机上部署。可以通过环境变量或其他方式传递参数给脚本,使脚本更加灵活。
缺点:直接执行脚本可能会带来安全风险,特别是如果脚本包含敏感操作或接受外部输入。
不像一些其他Ansible模块那样提供内置的幂等性支持,可能需要手动处理。相比于单个Ansible任务,整个脚本作为一个整体执行可能更难以调试。
2、用法:
ansible 主机组名称 -m script -a "your_script_file"
在这个命令中,将主机组名称替换为您的目标主机名或组名,并将your_script_file替换为您要在目标主机上执行的脚本文件的本地路径。
3、案例:
创建脚本文件 a.sh
再去执行命令,我们先简单的写一个小脚本
[root@server ~]# cat /etc/ansible/hosts
[node4]
host1
host2
[root@server ~]# vi a.sh
[root@server ~]# cat a.sh
#!/bin/bash
install_nginx() {
yum -y install epel-release
yum -y install nginx
systemctl start nginx
systemctl status nginx
}
install_nginx
[root@server ~]# ansible node3 -m script -a "a.sh"
太长了,就不全截下来了,反正成功了。
这将在目标主机上执行a.sh脚本文件。
请注意,script模块会将脚本文件传输到目标主机,然后在目标主机上执行它。因此,确保脚本文件在控制节点上可用,并且具有可执行权限(使用chmod +x命令添加执行权限)。
与raw模块不同,script模块允许您在目标主机上执行本地脚本文件,而不需要手动传输脚本内容。这对于执行复杂的本地操作非常有用。
6、yum模块
1、作用:可以在远程主机上安装、升级、卸载和查询软件包。
优点:
可以管理单个或多个软件包,并且支持多种状态(安装、卸载、最新)。
语法简单,易于理解和使用。yum 模块支持幂等性操作,即多次运行相同的任务不会导致不同的结果。
提供了丰富的参数选项,如更新缓存、启用/禁用仓库、GPG 检查等。
2、用法:
ansible 主机组名称 -m yum -a "name=包名 state=安装/卸载/更新"
name=软件包的名,多个软件包逗号隔开
state= installed/present安装
removed/absent卸载
lastest 更新
installed列出已安装的包
3、案例:
[root@server ~]# cat /etc/ansible/hosts
[node1]
host1
# 卸载 nginx
[root@server ~]# ansible node1 -m yum -a "name=nginx state=removed"
# 把 nginx 下载回来
[root@server ~]# ansible node1 -m yum -a "name=nginx state=installed"
7、copy模块
1、作用:将文件从控制节点复制到远程主机。如果目标文件已经存在且内容不同,可以自动更新目标文件。
优点:
copy 模块非常直观,易于理解和使用。
只需要指定源文件路径和目标文件路径即可。
可以设置文件的所有者、组、权限等属性。
支持备份功能,可以在修改之前保留旧版本。
可以复制文本文件、二进制文件、目录等。
缺点:
对于大型文件或大量文件,传输时间可能会比较长。
对于非常大的文件,使用 copy 模块可能不是最佳选择。在这种情况下,可以考虑使用 rsync 模块,它支持增量传输,更高效。
copy 模块主要用于静态文件,如果你需要动态生成文件内容,可能需要结合其他模块如 template 模块。
2、用法:
ansible 主机组名称 -m copy -a "src=文件路径及文件 dest=目录文件路径"
推送文件模块
src= 源文件路径
dest= 目标文件路径
content= 指定文件内容,只有目标文件;如果文件不存在会创建
owner= 指定属主
group= 指定属组
mode= 指定权限
3、案例
[root@server ~]# cat /etc/ansible/hosts
[node2]
Host2
[root@server ~]# ansible node2 -m copy -a "src=/etc/yum.repos.d/rzc.repo dest=/etc/opt/"
# 这条命令的意思是将主机里的rzc.repo文件复制到host2远程主机/etc/opt/目录下,
接下来我们利用command模块知识点进行查看。
ansible node2 -m command -a "ls /etc/opt"
这里也是可以成功查看到rzc.repo文件中的内容
ansible node2 -m command -a "cat /etc/opt/rzc.repo"
8、file 模块
1、作用:对文件操作
对文件操作,创建文件或目录、删除文件或目录、修改文件权限
优点:
1.file 模块非常直观,易于理解和使用。
2.可以设置文件或目录的所有者、组、权限等属性。
3.如果文件或目录已经存在并且属性与预期一致,则不会进行任何操作,从而避免不必要的更改。
4.适用于各种文件和目录管理任务,从简单的文件创建到复杂的目录结构管理。
缺点:
1.对于大量文件或复杂目录结构,处理时间可能会较长。对于这种情况,可以考虑使用其他工具如 rsync 或 find 命令结合 Ansible 的 shell 或 command 模块。
2.file 模块主要用于管理文件和目录属性,而不是传输大文件。对于大文件传输,建议使用 copy 或 synchronize 模块。
3.对于更复杂的文件操作(如编辑文件内容、合并文件等),可能需要结合其他模块如 lineinfile 或 template。
2、用法:
path 指定路径 mode 指定权限
src 源文件路径 state 指定文件的状态
recurse 递归授权 directory 在远端创建目录
owner 指定属主 touch 在远端创建文件
group 指定属组 link 创建软连接
hard 创建硬连接 absent 表示删除文件或目录
ansible 主机组名称 -m file -a "操作内容"
3、案例
[root@server ~]# cat /etc/ansible/hosts
[node1]
host1
#执行:
# 创建一个目录
ansible node1 -m file -a "path=/home/cs state=directory"
# 创建一个文件
ansible node1 -m file -a "path=/home/cs/cs.sh state=touch"
# 将/home/test/lifeng.sh软连接到/home/cs/下
ansible node1 -m file -a "src=/home/test/lifeng.sh path=/home/cs/lifeng_link.sh state=link"
# 创建一个文件并给予root用户和执行权限
ansible node1 -m file -a "path=/home/cs/lv.sh state=touch mode=777 owner=root group=root"
9、service模块
1、作用:控制启动关闭服务
优点:
非常直观,易于理解和使用,只需要指定服务名称和服务状态即可。
如果服务已经处于所需状态,则不会进行任何操作,从而避免不必要的更改。
service 模块支持多种操作系统和服务管理系统(如 systemd, upstart, init.d 等)。
缺点:
service 模块依赖于目标主机上的服务管理器(如 systemd, upstart, init.d 等)。如果这些服务管理器未安装或配置不正确,任务可能会失败。
对于更复杂的任务(如配置服务的具体参数、处理服务依赖关系等),可能需要结合其他模块或直接使用 shell 或 command 模块来执行特定的命令。
2、用法:
name:要管理的服务名称。
state:服务的状态,可选值包括:
started:启动服务。
stopped:停止服务。
restarted:重启服务。
reloaded:重新加载服务配置。
status:检查服务状态。
enabled:是否启用服务的自启动(开机启动),可选值为 yes 或 no。
ansible 主机组名称 -m service -a "name=服务名称 state=服务操作 enabled=是否设置开机自启"
3、案例
[root@server ~]# cat /etc/ansible/hosts
[node3]
host3
先在 host3 节点上安装一个 nginx 服务,来进行接下来的测试
ansible node3 -m yum -a "name=nginx state=present"
启动 nginx 服务
ansible node3 -m service -a "name=nginx state=started"
停止 nginx 服务
ansible node3 -m service -a "name=nginx state=stopped"
重启 nginx 服务
ansible node3 -m service -a "name=nginx state=restarted"
设置 nginx 服务开机自启
ansible node3 -m service -a "name=nginx enabled=yes"
检查 nginx 服务运行状态
ansible node3 -m command -a "systemctl status nginx"
10、user/group模块
1、作用:用于管理的用户创建与删除
user用于管理用户的创建与删除,相当于useradd,userdel,usermod;
group模块用于管理用户组的,相当于groupadd,groupdel等。
2、用法
ansible 主机组名称 -m user -a "操作内容"
ansible 主机组名称 -m group -a "操作内容"
name(必需):指定用户的用户名。
state: 指定用户账户的状态。可以是以下之一:
present: 创建用户(默认值)。
absent: 删除用户。
locked: 锁定用户账户。
unlocked: 解锁用户账户。
password: 仅更改用户的密码。
uid: 指定用户的用户ID(UID)
gid: 指定用户的用户ID(GID)
group: 指定用户的初始主组。
groups: 指定用户所属的其他组。
home: 指定用户的家目录路径。
shell: 指定用户的登录 shell。
password: 指定用户的密码(已加密的密码)。
append: 如果为 yes,则添加用户到组而不是替换(默认为 no)。
remove: 如果为 yes,则删除用户的家目录和邮箱文件(默认为 no)。
move_home: 如果为 yes,则在更改用户的主目录时移动用户的文件(默认为 no)。
create_home: 如果为 yes,则创建用户的主目录(默认为 yes)。
update_password: 如果为 always,则始终更新密码(默认为 on_create)。
3、案例
[root@server ~]# cat /etc/ansible/hosts
[node1]
host1
在host1主机上创建用户,使用 user 模块创建一个名为 lifeng 的新用户
ansible node1 -m user -a "name=lifeng state=present"
查看一下:
ansible node1 -m command -a "tail -3 /etc/passwd"
删除这个名为 lifeng 的用户
ansible node1 -m user -a "name=lifeng state=absent"
再次进行检查
ansible node1 -m command -a "tail -3 /etc/passwd"
这里可以看到,已经成功将 lifeng 用户删除
接下来让我们继续:
创建组,使用 group 模块创建一个名为 mygroup 的新组:
ansible node1 -m group -a "name=mygroup state=present"
查看一下是否添加进去
ansible node1 -m command -a "tail -3 /etc/group"
删除这个名为 mygroup 的组
ansible node1 -m group -a "name=mygroup state=absent"
进行检查
ansible node1 -m command -a "tail -3 /etc/group"
这里可以看到,已经成功将 mygroup 这个组删除掉
将 lifeng 用户和 mygroup 组重新进行创建
ansible node1 -m user -a "name=lifeng state=present"
ansible node1 -m group -a "name=mygroup state=present"
添加用户到组,使用 user 模块将用户 lifeng 添加到组 mygroup:
ansible node1 -m user -a "name=lifeng group=mygroup append=yes"
ansible node1 -m command -a "tail -3 /etc/passwd"
这一行表示用户 lifeng 的信息:
lifeng:用户名
x:密码字段(实际密码存储在 /etc/shadow 中)
1000:用户 ID (UID)
1001:主要组 ID (GID)
空:用户全名或注释
/home/lifeng:家目录
/bin/bash:默认 shell
你也可以进一步验证用户 lifeng 是否属于 mygroup 组:
ansible node1 -m command -a "id lifeng"
用户创建成功:用户 lifeng 已经被成功创建。
主要组设置成功:用户 lifeng 的主要组已经被设置为 mygroup。
家目录和 shell 设置:用户 lifeng 的家目录是 /home/lifeng,默认 shell 是 /bin/bash。
11、unarchive模块
1、作用:解压缩模块(两种方法)
将ansible主机上的压缩包在本地解压缩后传到远程主机上,
这种情况下,copy=yes.本地解压缩,解压缩位置不是默认的目录,
没找到或传完删了后传到远程主机
将远程主机上的某个压缩包解压缩到指定路径下。
这种情况下,需要设置copy=no远程主机上面的操作,不涉及ansible服务端
优点:
非常直观,易于理解和使用。只需要指定源文件路径和目标目录即可。
可以使用 creates 参数来避免重复解压。
如果目标目录已经存在且内容相同,则不会进行任何操作,从而避免不必要的更改。
可以处理控制节点上的本地文件或远程主机上的文件。
与其他 Ansible 模块和任务无缝集成,可以轻松地将解压操作纳入到更大的自动化流程中
缺点:
有依赖性,解压操作依赖于目标主机上安装的相应工具(如 unzip, tar 等)。
如果这些工具未安装或版本不兼容,任务将会失败。需要确保目标主机上有正确的工具。
对于大型归档文件或复杂的归档结构,解压时间可能会比较长。
解压操作通常需要管理员权限,特别是在设置文件的所有者和权限时。
如果没有足够的权限,任务将会失败。
默认情况下,unarchive 模块会覆盖目标目录中的现有文件。
虽然可以通过 creates 参数来避免这种情况,但如果不小心配置,可能会导致数据丢失。
2、用法
ansible 主机组名称 -m unarchive -a "src=源路径 dest=目标路径 其他参数"
tar、.tar.gz、.tar.bz2、.zip等都支持
copy: 默认为no,当copy=yes,
那么拷贝的文件是从ansible主机复制到远程主机上而不是在原地解压缩
如果设置为copy=no,
那么会在远程主机上寻找src源文件;
src: 源路径
可以是ansible主机上的路径,也可以是远程主机上的路径,
如果是远程主机上的路径,则需要设置copy=no
dest: 指定了解压缩后文件的目标目录
mode: 设置解压缩后的文件权限,可以使用数字或符号模式,例如 "0644" 或 "u=rw,go=r"。
list_files: 默认值为no,如果设置为yes,解压同时,返回压缩包的文件列表
remote_src: 如果设置为 yes,则表示 src 参数是远程主机上的路径。
extra_opts: 允许您指定解压缩命令的额外选项。这对于一些特定格式的存档文件非常有用。
creates: 如果指定了此选项,只有在 creates 中指定的文件或目录不存在时,才会执行解压缩操作。
owner: 设置解压缩后文件的所有者。
group: 设置解压缩后文件的所属组。
3、案例
[root@server ~]# cat /etc/ansible/hosts
[node1]
host1
[root@server ~]# ansible node1 -m unarchive -a "src=/root/wordpress-6.7.1-zh_CN.zip dest=/root/hhh"
这里的意思是:我们将已经上传好的wordpress-6.7.1-zh_CN.zip包复制到host1主机/root/hhh目录里并且进行解压
12、get_url模块
1、作用:下载文件到远程主机
优点:
1.使用简单直观,只需要提供几个参数即可完成文件下载任务。
2.支持多种协议,并可设置文件权限、所有者等属性。
缺点:
对于大文件或者带宽受限的情况,get_url 的效率可能不如直接使用命令行工具如 wget 或 curl,因为这些工具提供了更多的控制选项来优化下载过程。
2、用法
url (必需): 指定要下载文件的URL。这是一个必需参数。
dest (必需): 指定文件将保存到本地目标主机上的目标路径。这是一个必需参数。
force (可选): 如果设置为 yes,将强制下载文件,即使文件已经存在。默认为 no。
checksum (可选): 提供要下载文件的校验和,以确保文件完整性。
backup (可选): 如果设置为 yes,将在下载之前备份现有文件。默认为 no。
timeout (可选): 设置下载文件的超时时间(秒)。
url_username (可选): 如果目标URL需要身份验证,可以提供用户名。
url_password (可选): 如果目标URL需要身份验证,可以提供密码。
owner (可选): 设置下载后文件的所有者。
group (可选): 设置下载后文件的所属组。
mode (可选): 设置下载后文件的权限模式
3、案例
[root@server ~]# cat /etc/ansible/hosts
[node1]
host1
ansible node1 -m get_url -a "url=https://cn.wordpress.org/latest-zh_CN.zip dest=/opt/"
这条命令意思是:将主机里的word press文件下载到host1主机的/opt/目录下
现在我们来测试一下看看是否真的传进去了(这里我用的是command模块来进行操作的)
ansible node1 -m command -a "ls /opt/"
13、setup模块
1、作用:获取主机信息
setup 模块不仅是一个常见的模块,而且是一个特殊的模块。它用于获取目标主机的系统信息和事实(facts),并将这些信息返回到 Ansible Playbook 中,以供后续任务使用。setup 模块通常不需要额外的参数,因为它会自动获取系统信息。
2、用法:
ansible node1 -m setup
ansible_all_ipv4_addresses # ipv4的所有地址
ansible_all_ipv6_addresses # ipv6的所有地址
ansible_date_time # 获取到控制节点时间
ansible_default_ipv4 # 默认的ipv4地址
ansible_distribution # 系统
ansible_distribution_major_version # 系统的大版本
ansible_distribution_version # 系统的版本号
ansible_domain #系统所在的域
ansible_env #系统的环境变量
ansible_hostname #系统的主机名
ansible_fqdn #系统的全名
ansible_machine #系统的架构
ansible_memory_mb #系统的内存信息
ansible_os_family # 系统的家族
ansible_pkg_mgr # 系统的包管理工具
ansible_processor_cores #系统的cpu的核数(每颗)
ansible_processor_count #系统cpu的颗数
ansible_processor_vcpus #系统cpu的总个数=cpu的颗数*CPU的核数
ansible_python # 系统上的python
3、案例:
[root@server ~]# cat /etc/ansible/hosts
[node1]
host1
获取host1主机所有信息
ansible node1 -m setup
14、rsync模块
1、作用:高效地复制或同步文件(大量数据)
在Ansible中,rsync模块用于执行rsync命令来同步文件和目录。这使得可以在远程主机之间高效地复制或同步文件,同时支持增量更新、压缩传输以及多种其他选项以优化性能。
rsync特别适用于需要频繁同步大量数据的情况,因为它可以显著减少网络带宽的使用。
2、用法:
ansible 主机名组名称 -m rsync -a "src=源路径 dest=目标路径“
src: 源路径,可以是本地文件/目录或者是远程主机上的路径(如果指定了user@hostname:)。
dest: 目标路径,指定要将文件/目录同步到的位置。
archive: 开启归档模式,保持符号链接、权限、时间戳等属性,并递归处理目录。
delete: 删除目标上存在但源中不存在的文件。
compress: 启用压缩以减少传输量。
owner, group: 设置文件所有者和组。
mode: 设置文件权限。
注意:
确保目标主机已经安装了rsync工具。
当使用rsync进行远程同步时,确保有适当的权限访问远程位置。
如果你在使用SSH密钥认证之外的方式连接到远程主机,请确保适当配置了ansible_ssh_pass等变量或使用--ask-pass选项手动输入密码。
在生产环境中部署前,最好先在一个测试环境中验证你的命令
15、template模块
1、作用:用于将Jinja2模板文件处理成目标主机上的配置文件
Ansible的template模块用于将Jinja2模板文件处理成目标主机上的配置文件。这个模块非常有用,因为它允许你在部署过程中动态生成配置文件,从而实现更灵活和可维护的自动化流程。
2、用法:
ansible 主机组名称 -m template -a "src=模板文件的路径 dest=目标文件的路径"
src: 模板文件的路径(相对于控制节点)。
dest: 目标文件的路径(在远程主机上)。
owner, group: 设置文件所有者和组。
mode: 设置文件权限。
backup: 如果设置为yes,则在覆盖之前备份目标文件。
validate: 可以指定一个命令来验证模板生成的文件是否有效。