目录
Script 模块 在远程主机上运行ansible服务器上的脚本(无需执行权限)
Copy 模块 复制ansible服务器主控端或远程的本机的文件到远程主机
Get_url 模块 功能: 用于将文件从http 等下载到被管理机节点上
Fetch 模块 功能:从远程主机提取文件至ansible的主控端
File 模块 功能:设置文件属性,创建文件,目录和软链接等
yum_repository 模块 功能: 此模块实现yum的仓库配置管理
Service 模块 此模块和sytemd功能相似,选项很多相同 管理服务 启动自启等
Replace 模块 类似于sed命令 于正则进行匹配和替换,建议使用
SELinux 模块 该模块管理 SELInux (Linux 安全子系统)
reboot 模块 功能: 重启 是立刻重启前面的会丢失notify重启前面不会
apt_repository 此模块实现apt的仓库配置管理
ansible 命令的执行过程
1. 加载自己的配置文件,默认/etc/ansible/ansible.cfg
2. 查找主机清单中对应的主机或主机组
3. 加载自己对应的模块文件,如:command
4. 通过ansible将模块或命令生成对应临时py文件,并将该文件传输至远程服务器的对应执行用户
$HOME/.ansible/tmp/ansible-tmp-数字/XXX.PY文件
5. 给文件+x执行
6. 执行并返回结果
7. 删除临时py文件,退出
ad-Hoc就是ansible的命令
Inventory 参数说明
ansible_ssh_host #将要连接的远程主机名.与你想要设定的主机的别名不同的话,可通过此变量设置.
ansible_ssh_port #ssh端口号.如果不是默认的端口号,通过此变量设置.这种可以使用 ip:端口
192.168.1.100:2222
ansible_ssh_user #默认的 ssh 用户名
ansible_ssh_pass #ssh 密码(这种方式并不安全,我们强烈建议使用 --ask-pass 或 SSH 密钥)
ansible_sudo_pass #sudo 密码(这种方式并不安全,我们强烈建议使用 --ask-sudo-pass)
ansible_sudo_exe (new in version 1.8) #sudo 命令路径(适用于1.8及以上版本)
ansible_connection #与主机的连接类型.比如:local, ssh 或者 paramiko. Ansible 1.2 以前默
认使用 paramiko.1.2 以后默认使用 'smart','smart' 方式会根据是否支持 ControlPersist, 来
判断'ssh' 方式是否可行.
ansible_ssh_private_key_file #ssh 使用的私钥文件.适用于有多个密钥,而你不想使用 SSH 代理的情况.
ansible_shell_type #目标系统的shell类型.默认情况下,命令的执行使用 'sh' 语法,可设置为
'csh' 或 'fish'.
ansible_python_interpreter #目标主机的 python 路径.适用于的情况: 系统中有多个 Python,
或者命令路径不是"/usr/bin/python",比如 \*BSD, 或者 /usr/bin/python 不是 2.X 版本的
Python.之所以不使用 "/usr/bin/env" 机制,因为这要求远程用户的路径设置正确,且要求 "python"可执行程序名不可为 python以外的名字(实际有可能名为python26).与
ansible_python_interpreter 的工作方式相同,可设定如 ruby 或 perl 的路径....
Script 模块 在远程主机上运行ansible服务器上的脚本(无需执行权限)
功能:在远程主机上运行ansible服务器上的脚本(无需执行权限)
注意:此模块不具有幂等性
常见选项
chdir=dir #执行命令前,先切换至目录dir
cmd #指定ansible主机的命令
creates=file #当file不存在时才会执行
removes=file #当file存在时才会执行
范例:
ansible webservers -m script -a /data/test.sh
Copy 模块 复制ansible服务器主控端或远程的本机的文件到远程主机
功能:复制ansible服务器主控端或远程的本机的文件到远程主机
注意: src=file 如果是没指明路径,则为当前目录或当前目录下的files目录下的file文件
常见选项
src #控制端的源文件路径
content #源文件内容
dest #被控端的文件路径
owner #属主
group #属组
mode #权限
backup #是否备份 backup=yes" #生成的备份文件格式
validate #验证成功才会执行copy 网络不确定性校验
remote_src #no是默认值,表示src文件在ansible主机,yes表示src文件在远程主机
范例:
#如目标存在,默认覆盖,此处指定先备 下,结果
ansible webservers -m copy -a "src=/root/test1.sh dest=/tmp/test2.sh
owner=wang mode=600 backup=yes"backup=yes" #生成的备份文件格式:rsync.pas.2029.2022-09-28@09:14:46~
#指定内容,直接生成目标文件 (不能创建文件夹)
ansible webservers -m copy -a "content='wang 123456\nxiao 654321\n'
dest=/etc/rsync.pas owner=root group=root mode=0600"#复制/etc目录自身,注意/etc/后面没有/
ansible webservers -m copy -a "src=/etc dest=/backup"#复制/etc/下的文件,不包括/etc/目录自身,注意/etc/后面有/
ansible webservers -m copy -a "src=/etc/ dest=/backup"#复制/etc/suders,并校验语法,下面的 %s 表示src指定的文件名
ansible webservers -m copy -a "src=/etc/suders dest=/etc/sudoers.edit
remote_src=yes validate=/usr/sbin/visudo -csf %s" #visudo检查语法知否正确
Get_url 模块 功能: 用于将文件从http 等下载到被管理机节点上
功能: 用于将文件从http、https或ftp下载到被管理机节点上
常用参数如下:
url #下载文件的URL,支持HTTP,HTTPS或FTP协议
dest #下载到目标路径(绝对路径),如果目标是一个目录,就用原文件名,如果目标设置了名称就用目标
设置的名称
owner #指定属主
group #指定属组
mode #指定权限
force #如果yes,dest不是目录,将每次下载文件,如果内容改变替换文件。如果no,则只有在目标不存在
时才会下载
checksum #对目标文件在下载后计算摘要,以确保其完整性
#示例: checksum="sha256:D98291AC[...]B6DC7B97",
checksum="sha256:http://example.com/path/sha256sum.txt"
url_username #用于HTTP基本认证的用户名。 对于允许空密码的站点,此参数可以不使用
`url_password'
url_password #用于HTTP基本认证的密码。 如果未指定`url_username'参数,则不会使用
`url_password'参数
validate_certs #如果“no”,SSL证书将不会被验证。 适用于自签名证书在私有网站上使用
timeout #URL请求的超时时间,秒为单位
[root@ubuntu2004 ~]#wget http://nginx.org/download/nginx-1.18.0.tar.gz 下载
[root@ubuntu2004 ~]#md5sum nginx-1.18.0.tar.gz 计算哈希值以确保完整形
ansible webservers -m get_url -a 'url=http://nginx.org/download/nginx-1.18.0.tar.gz dest=/usr/local/src/nginx.tar.gz checksum="md5:b2d33d24d89b8b1f87ff5d251aa27eb8"'
Fetch 模块 功能:从远程主机提取文件至ansible的主控端
功能:从远程主机提取文件至an sible的主控端,copy相反,目前不支持目录 可以压缩包
常见选项
src #被控制端的源文件路径,只支持文件
dest #ansible控制端的目录路径
范例:
[root@ubuntu2004 data]#ansible webservers -m fetch -a 'src=/data/test.sh dest=/data/scripts'
[root@ansible ~]#ansible all -m fetch -a 'src=/etc/os-release dest=/data/os'
[root@ansible ~]#tree /data/os/ (目录也不用建)
/data/os/
├── 10.0.0.6
│ └── etc
│ └── redhat-release
├── 10.0.0.7
│ └── etc
│ └── redhat-release
└── 10.0.0.8
└── etc
└── redhat-release
6 directories, 3 files
File 模块 功能:设置文件属性,创建文件,目录和软链接等
功能:设置文件属性,创建文件,目录和软链接等
常见选项
path/name #在被控端创建的路径 和dest name 功能相同
owner #属主
group #属组
mode #权限recurse #yes表示递归授权
state #状态
=touch #创建文件
=directory #创建目录
=link #软链接
=hard #硬链接=absent #删除
src #创建软硬链接时,指定源文件
3.4.7 File 模块
#创建空文件
ansible all -m file -a 'path=/data/test.txt state=touch' #如果/data/目录不存在,会失败
ansible all -m file -a "path=/root/test.sh owner=wang mode=755"
#创建目录
ansible all -m file -a "path=/data/mysql state=directory owner=mysql
group=mysql"
#创建软链接
ansible all -m file -a "src=/data/testfile state=link dest=/tmp/link"
#path|dest|name 那个都可以 注意路径他不能自己创建
#创建目录
ansible all -m file -a 'path=/data/testdir state=directory'
#递归修改目录属性,但不递归至子目录
ansible all -m file -a "path=/data/mysql state=directory owner=mysql
group=mysql"
#递归修改目录及子目录的属性
ansible all -m file -a "path=/data/mysql state=directory owner=mysql group=mysql
recurse=yes"
#递归删除,带文件夹
ansible 10.0.0.101 -m file -a 'path=/data/ state=absent'
stat 模块 功能:检查文件或文件系统的状态
功能:检查文件或文件系统的状态
注意:对于Windows目标,请改用win_stat模块
常见选项
path #文件/对象的完整路径(必须)
常用的返回值判断
exists: 判断是否存在
isuid: 调用用户的ID与所有者ID是否匹配[root@ubuntu2004 data]#ansible 10.0.0.101 -m stat -a 'path=/etc/passwd' 10.0.0.101 | SUCCESS => { "ansible_facts": { "discovered_interpreter_python": "/usr/bin/python3" }, "changed": false, "stat": { "atime": 1664367675.6140075, "attr_flags": "e", "attributes": [ "extents" ], "block_size": 4096, "blocks": 8, "charset": "us-ascii", "checksum": "9867357720d5526cb761205431f2c0bc5b52a4ca", "ctime": 1663405315.4957695, "dev": 64768, "device_type": 0, "executable": false, "exists": true, "gid": 0, "gr_name": "root", "inode": 131904, "isblk": false, "ischr": false, "isdir": false, "isfifo": false, "isgid": false, "islnk": false, "isreg": true, "issock": false, "isuid": false, "mimetype": "text/plain", "mode": "0644",
unarchive 模块 功能:解包解压缩(推荐)
功能:解包解压缩
实现有两种用法:
- 将ansible主机上的压缩包传到远程主机后解压缩至特定目录,设置remote_src=no,此为默认值,可省略
- 将远程本主机上或非ansible的其它主机的某个压缩包解压缩到远程主机本机的指定路径下,需要设置remote_src=yes
常见参数:
remote_src #和copy功能一样且选项互斥,yes表示源文件在远程被控主机或其它非ansible的其它主机上,no表示文件在ansible主机上,默认值为no, 此选项代替copy选项
copy #默认为yes,当copy=yes,拷贝的文件是从ansible主机复制到远程主机上,如果设置为copy=no,会在远程主机上寻找src源文件,此选项已废弃
src #源路径,可以是ansible主机上的路径,也可以是远程主机(被管理端或者第三方主机)上的路径,如果是远程主机上的路径,则需要设置remote_src=yes
dest #远程主机上的目标路径
owner #默认递归
group #默认递归
mode #设置解压缩后的文件权限,默认递归
creates=/path/file #当绝对路径/path/file不存在时才会执行
ansible all -m unarchive -a 'src=/data/foo.tgz dest=/var/lib/foo owner=wang group=bin'
ansible all -m unarchive -a 'src=/tmp/foo.zip dest=/data copy=no mode=0777'
ansible all -m unarchive -a 'src=https://example.com/example.zip dest=/data remote_src=yes'
ansible all -m unarchive -a 'src=https://nginx.org/download/nginx-1.20.2.tar.gz
dest=/data remote_src=yes owner=wang group=wang'
ansible webservers -m unarchive -a
'src=https://releases.ansible.com/ansible/ansible-2.1.6.0-0.1.rc1.tar.gz
dest=/data/ owner=root remote_src=yes'
Archive 模块 打包压缩保存在被管理节点
常见选项
path #需要压缩的文件或目录
dest #压缩后的文件
format #压缩格式,支持gz,bz2,xz,tar,zip
范例:
ansible webservers -m archive -a 'path=/var/log/ dest=/data/log.tar.bz2 format=bz2 owner=wang mode=0600'
[root@rocky8 data]#tar tvf log.tar.bz2 查看打包文
Hostname 模块 管理主机名
功能:管理主机名
常见选项
name #修改后的主机名称
[root@ubuntu2004 ~]#ansible 10.0.0.101 -m hostname -a 'name=ansible'
Cron 模块 功能:计划任务
功能:计划任务
支持时间:minute,hour,day,month,weekday
常见选项
name #描述脚本的作用
minute #分钟
hour #小时day #日
weekday #周month #月
user #任务由哪个用户运行;默认root
job #任务state=absent #删除
范例: crontab -l 查看预计执行任务
#备份数据库脚本 #用于计划任务 备份
[root@centos8 ~]#cat /root/mysql_backup.sh
#!/bin/bash
mysqldump -A -F --single-transaction --master-data=2 -q -uroot |gzip > /data/mysql_`date +%F_%T`.sql.gz
#创建任务 #引用计划任务指定脚本
ansible 10.0.0.8 -m cron -a 'hour=2 minute=30 weekday=1-5 name="backup mysql" job=/root/mysql_backup.sh'
ansible webservers -m cron -a "minute=*/5 job='/usr/sbin/ntpdate
ntp.aliyun.com &>/dev/null' name=Synctime"
#禁用计划任务
ansible webservers -m cron -a "minute=*/5 job='/usr/sbin/ntpdate 172.20.0.1
&>/dev/null' name=Synctime disabled=yes"
#启用计划任务
ansible webservers -m cron -a "minute=*/5 job='/usr/sbin/ntpdate 172.20.0.1
&>/dev/null' name=Synctime disabled=no"
#删除任务
ansible webservers -m cron -a "name='backup mysql' state=absent"
ansible webservers -m cron -a 'state=absent name=Synctime'
ansible 10.0.0.8 -m cron -a 'hour=2 minute=30 weekday=1-5 name="backup mysql" job=/root/mysql_backup.sh state=absent' 直接在后面家 state=absent
Yum 和 Apt 模块 功能:管理安装软件包
功能:管理软件包
yum 管理软件包,只支持RHEL,CentOS,fedora,不支持Ubuntu其它版本
apt 模块管理 Debian 相关版本的软件包
yum常见选项
name #软件包名称
state #状态
=present #安装,此为默认值 可多个
=absent #删除
=latest #最新版
list #列出指定包
enablerepo #启用哪个仓库安装
disablerepo #不使用哪些仓库的包
exclude #排除指定的包
validate #是否检验,默认为yes
范例:
#安装
[root@ubuntu2004 ~]#ansible webservers -m yum -a 'name=iotop,cowsay'
[root@ansible ~]#ansible webservers -m yum -a 'name=httpd state=present'
#安装zabbix agent rpm包
[root@ansible ~]#ansible webservers -m yum -a
'name=https://mirrors.tuna.tsinghua.edu.cn/zabbix/zabbix/5.0/rhel/8/x86_64/zabbi
x-agent2-5.0.24-1.el8.x86_64.rpm state=present validate_certs=no'
#启用epel源进行安装
[root@ansible ~]#ansible webservers -m yum -a 'name=nginx state=present
enablerepo=epel'
#升级除kernel和foo开头以外的所有包
[root@ansible ~]#ansible webservers -m yum -a 'name=* state=lastest
exclude=kernel*,foo*'
#删除
[root@ansible ~]#ansible webservers -m yum -a 'name=httpd state=absent'
#删除包并包括配置文件
[root@ubuntu2004 ~]#ansible 10.0.0.102 -m apt -a 'name=mysql-client
state=absent autoremove=yes purge=yes'
#查看
ansible all -m yum -a "list=tree"
yum_repository 模块 功能: 此模块实现yum的仓库配置管理
功能: 此模块实现yum的仓库配置管理
常见选项
name #仓库id
description #仓库描述名称,对应配置文件中的name=
baseurl #仓库的地址
gpgcheck #验证开启
gpgkey #仓库公钥路径
state
范例: 安装Zabbix Agent
[root@ansible ~]#ansible 10.0.0.8 -m yum_repository -a 'name=zabbix description="zabbix repo" baseurl="https://mirrors.aliyun.com/zabbix/zabbix/6.0/rhel/$releasever/$basearch/" gpgcheck=no'
[root@ansible ~]#ansible 10.0.0.8 -m yum -a 'name=zabbix-agent2'
#删除仓库配置
[root@ubuntu2004 ~]#ansible 10.0.0.8 -m yum_repository -a 'name=zabbix
state=absent'
Service 模块 此模块和sytemd功能相似,选项很多相同 管理服务 启动自启等
功能:管理服务
常见选项
name #服务名称
state #服务状态
=started #启动
=stopped #停止
=restarted #重启
=reloaded #重载
enabled #开启自启动 yes开机启动,no开机不启动
daemon_reload #加载新的配置文件,适用于systemd模块
ansible all -m service -a 'name=httpd state=started enabled=yes' #启动 开启自启动
ansible all -m service -a 'name=httpd state=stopped' #停止
ansible all -m service -a 'name=httpd state=reloaded' #重载
ansible all -m shell -a "sed -i 's/^Listen 80/Listen 8080/'
/etc/httpd/conf/httpd.conf"
ansible all -m service -a 'name=httpd state=restarted'#重启动指定网卡服务
ansible all -m service -a 'name=network state=absent args=eth0'
User 模块 管理用户
功能:管理用户
常见选项
name #创建的名称
uid #指定uid
group #指定基本组
shell #登录shell类型默认/bin/bash
create_home #是否创建家目录,默认会创建家目录,no不创建
password #设定对应的密码,必须是加密后的字符串才行,否则不生效
system #yes表示系统用户
groups #附加组
append #追加附加组使用,yes表示增加新的附加组
state #absen删除
remove #yes表示删除用户时将家目录一起删除
generate_ssh_key #创建私钥
ssh_keyu_bits #私钥位数
ssh_key_file #私钥文件路径home #家目录是什么
non_unique #是否允许uid重名
范例:
#创建用户 # comment= 就是个名字而已可加可不加
ansible all -m user -a 'name=user1 comment="test user" uid=2048 home=/app/user1 group=root'ansible all -m user -a 'name=nginx comment=nginx uid=88 group=nginx
groups="root,daemon" shell=/sbin/nologin system=yes create_home=no
home=/data/nginx non_unique=yes'#remove=yes表示删除用户及家目录等数据,默认remove=no
ansible all -m user -a 'name=nginx state=absent remove=yes'#生成123456加密的密码
openssl passwd -6 123456 #--help 可以生成各种加密算法#用上面创建的密码创建用户
ansible webservers -m user -a 'name=www group=www system=yes shell=/sbin/nlogin
password="$6$salt$MktMKPZJ6t59GfxcJU20DwcwQzfMvOlHFVZiOVD71w."'#创建用户test,并生成4096bit的私钥
ansible webservers -m user -a 'name=test generate_ssh_key=yes ssh_key_bits=4096
ssh_key_file=.ssh/id_rsa'
Group 模块功能:管理组
常见选项
name #指定组名称
gid #指定gid
state
=present #创建,默认
=absent #删除
system #是否是系统组
范例:
#创建组
ansible webservers -m group -a 'name=nginx gid=88 system=yes'
#删除组
ansible webservers -m group -a 'name=nginx state=absent'
Lineinfile 模块 进行替换
ansible在使用sed进行替换时,经常会遇到需要转义的问题,而且ansible在遇到特殊符号进行替换时,会存在问题,无法正常进行替换 。
ansible自身提供了两个模块:lineinfile模块和replace模块,可以方便的进行替换
一般在ansible当中去修改某个文件的单行进行替换的时候需要使用lineinfile模块
功能:相当于sed,主要用于修改一行的文件内容
常见选项
path #被控端文件的路径
regexp #正则匹配语法格式,表示被替换的内容
line #替换为的内容
state #absent表示删除
insertafter #插入到替换内容前面,如和regexp同时存在,只在没找到与regexp匹配时才使用insertafter
insertbefore #插入到替换内容后面,如和regexp同时存在,只在没找到与regexp匹配时才使用insertafter
backrefs #支持后面引用,yes和no
backup #修改前先备份
create #如果文件不存在,则创建,默认不存在会出错
mode #指定权限
owner #指定用户
group #指定组#注意
regexp参数 :使用正则表达式匹配对应的行,当替换文本时,如果有多行文本都能被匹配,则只有最后面被匹配到的那行文本才会被替换,当删除文本时,如果有多行文本都能被匹配,这么这些行都会被删除。
注意: 如果想进行多行匹配进行替换需要使用replace模块
#修改监听端口
ansible webservers -m lineinfile -a "path=/etc/httpd/conf/httpd.conf
regexp='^Listen' line='Listen 8080'"#修改SELinux
ansible all -m lineinfile -a "path=/etc/selinux/config regexp='^SELINUX='
line='SELINUX=disabled'"#添加网关
ansible webservers -m lineinfile -a 'path=/etc/sysconfig/network-scripts/ifcfg-
eth0 line="GATEWAY=10.0.0.254"'#给主机增加一个网关,但需要增加到NAME=下面
ansible webservers -m lineinfile -a 'path=/etc/sysconfig/network-scripts/ifcfg-
eth0 insertafter="^NAME=" line="GATEWAY=10.0.0.254"'#效果如下
cat /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
NAME=eth0
GATEWAY=10.0.0.254#给主机增加一个网关,但需要增加到NAME=上面
ansible webservers -m lineinfile -a 'path=/etc/sysconfig/network-scripts/ifcfg-
eth0 insertbefore="^NAME=" line="GATEWAY=10.0.0.254"'#效果如下
cat /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
GATEWAY=10.0.0.254
NAME=eth0#删除网关
ansible webservers -m lineinfile -a 'path=/etc/sysconfig/network-scripts/ifcfg-
eth0 regexp="^GATEWAY" state=absent'#删除#开头的行
ansible all -m lineinfile -a 'dest=/etc/fstab state=absent regexp="^#"'
Replace 模块 类似于sed命令 于正则进行匹配和替换,建议使用
该模块有点类似于sed命令,主要也是基于正则进行匹配和替换,建议使用
功能: 多行修改替换
常见选项
path #被控端文件的路径
regexp #正则匹配语法格式,表示被替换的内容
replace #替换为的内容
after #插入到替换内容前面,
before #插入到替换内容后面
backup #修改前先备份
mode #指定权限
owner #指定用户
group #指定组
范例:
ansible 10.0.0.8 -m replace -a "path=/etc/httpd/conf/httpd.conf regexp='^Listen.*' replace='Listen 1234'" #加.* 就是把后面换成1234 不加就在Listen后面加1234 后面不变
SELinux 模块 该模块管理 SELInux (Linux 安全子系统)
功能: 该模块管理 SELInux 策略 常见选项
policy #指定SELINUXTYPE=targeted
state #指定SELINUX=disabled (禁用,不提醒)改完需要重启 禁止改不了加强
enforcing(加强安全,禁止一些东西,并报警) 这不需要重启
permissive(不加强,但是提醒)
[root@ansible ~]#ansible 10.0.0.8 -m selinux -a 'state=disabled'
[WARNING]: SELinux state temporarily changed from 'enforcing' to 'permissive'.
State change will take effect next reboot.
10.0.0.8 | CHANGED => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/libexec/platform-python"
},
"changed": true,
"configfile": "/etc/selinux/config",
"msg": "Config SELinux state changed from 'enforcing' to 'disabled'",
"policy": "targeted",
"reboot_required": true,
"state": "disabled"
}
[root@centos8 ~]#grep -v '#' /etc/selinux/config
SELINUX=disabled
SELINUXTYPE=targeted
[root@centos8 ~]#getenforce
Permissive
reboot 模块 功能: 重启 是立刻重启前面的会丢失notify重启前面不会
常见选项
msg #重启提示
pre_reboot_delay #重启前延迟时间的秒数
post_reboot_delay #重启后延迟时间的秒数后,再验证系统正常启动
reboot_timeout #重启后延迟时间再执行测试成功与否的命令
test_command #执行测试成功与否的命令
范例:
[root@ansible ~]#ansible webservers -m reboot -a 'msg="host will be reboot"'
notify 在不关闭整个应用程序的情况下重新启动单个服务
notify这个action可用于在每个play的最后被触发,这样可以避免多次有改变发生时每次都执行指定的操作,取而代之,仅在所有的变化发生完成后一次性地执行指定操作。
承上启下,上面指定做什么,下面写任务,运行的时候就会在这里重启,且前面的数据不会丢
在task中使用notify关键字来指定处理程序的名称 ,例如:
- name: restart service
service:
name: nginx
state: restarted
notify: restart nginx
在playbook中定义处理程序的名称和执行操作,例如:
handlers:
- name: restart nginx
service:
name: nginx
state: restarted
mount 模块 功能: 挂载和卸载文件系统
常见选项
src #源设备路径,或网络地址
path #挂载至本地哪个路径下
fstype #设备类型; nfs
opts #挂载的选项
state #挂载还是卸载
=present #永久挂载,但没有立即生效
=absent #卸载临时挂载,并删除永久挂载
=mounted #永久和临时挂载
=unmounted #临时卸载
范例:
#修改fstab文件永久挂载,但不立即生效
mount webservers -m mount -a 'src="UUID=b3e48f45-f933-4c8e-a700-22a159ec9077"
path=/home fstype=xfs opts=noatime state=present'
#临时取消挂载
mount webservers -m mount -a 'path=/home fstype=xfs opts=noatime
state=unmounted'
#永久挂载,并立即生效
ansible webservers -m mount -a 'src=10.0.0.8:/data/wordpress
path=/var/www/html/wp-content/uploads opts="_netdev" state=mounted'
#永久卸载,并立即生效
ansible webservers -m mount -a 'src=10.0.0.8:/data/wordpress
path=/var/www/html/wp-content/uploads fstype=nfs state=absent'
Setup 模块 setup 模块来收集主机的系统信息
功能: setup 模块来收集主机的系统信息,这些 facts 信息可以直接以变量的形式使用,但是如果主机较多,会影响执行速度
可以使用 gather_facts: no 来禁止 Ansible 收集 facts 信息
常见选项
filter #指定过滤条件
范例:
ansible all -m setup
ansible all -m setup >ser/txt #也可以这样收集起来、
ansible all -m setup -a "filter=ansible_nodename" 查看指定内用
ansible all -m setup -a "filter=ansible_hostname"
ansible all -m setup -a "filter=ansible_domain"
ansible all -m setup -a "filter=ansible_memtotal_mb"
ansible all -m setup -a "filter=ansible_memory_mb"
ansible all -m setup -a "filter=ansible_memfree_mb
debug 模块 功能类似于echo命令
功能: 此模块可以用于输出信息,并且通过 msg 定制输出的信息内容,功能类似于echo命令
注意: msg后面的变量有时需要加 " " 引起来
常见选项
msg #指定命令输出的信息
var #指定变量名,和msg互斥
verbosity #详细度
范例: debug 模块默认输出Hello world
范例: 利用debug 输出shell命令的执行结果
[root@ansible ansible]#cat debug.yml
- hosts: webservers
remote_user: root
tasks:
- name: echo hello
shell:
cmd: echo hello
register:
result
- name: Display all variables/facts known for a host
debug:
msg: "{{ result.stdout }}"
sysctl 模块 功能: 修改内核参数
功能: 修改内核参数
常见选项
name #内核参数
value #指定值
state #是否保存在sysctl.conf文件中,默认present
sysctl_set #使用sysctl -w 验证值生效
范例:
ansible webservers -m sysctl -a 'name=net.ipv4.ip_forward value=1 state=present
范例: 内核参数优化
pam_limits 功能: 管理资源限制
功能: 管理资源限制
范例:
- name: Change Limit /etc/security/limit.conf
pam_limits:
domain: "*"
limit_type: "{{ item.limit_type }}"
limit_item: "{{ item.limit_item }}"
value: "{{ item.value }}"
loop:
- { limit_type: 'soft', limit_item: 'nofile',value: '100000' }
- { limit_type: 'hard', limit_item: 'nofile',value: '10000' }
apt_repository 此模块实现apt的仓库配置管理
模块 功能: 此模块实现apt的仓库配置管理
常见选项
repo #仓库信息
state #添加或删除
update_cache #是否apt update,默认yes
filename #仓库文件,默认放在/etc/apt/sources.list.d/file.list
ansible ubuntu-servers -m apt_repository -a 'repo="deb
http://archive.canonical.com/ubuntu focal partner" filename=google-chrome'
[root@ubuntu2004 ~]#cat /etc/apt/sources.list.d/google-chrome.list
deb http://archive.canonical.com/ubuntu focal partner
apt_key 模块 添加和删除apt key
功能: 添加和删除apt key
常见选项
url #key路径
state #添加或删除
范例: 生成ceph仓库配置
#先导入key,注意先后顺序
ansible ubuntu-servers -m apt_key -a
'url=https://download.ceph.com/keys/release.asc state=present'
#再生成apt配置,如果不导入key此步会出错
ansible ubuntu-servers -m apt_repository -a 'repo="deb
http://mirror.tuna.tsinghua.edu.cn/ceph/debian-pacific focal main"
filename=ansible_ceph'
#验证结果
[root@ubuntu2004 ~]#cat /etc/apt/sources.list.d/ansible_ceph.list
deb http://mirror.tuna.tsinghua.edu.cn/ceph/debian-pacific focal main