Ansible 参数·命令说明

目录

ansible 命令的执行过程

Inventory 参数说明

Script 模块 在远程主机上运行ansible服务器上的脚本(无需执行权限)

 Copy 模块  复制ansible服务器主控端或远程的本机的文件到远程主机

 Get_url 模块  功能: 用于将文件从http 等下载到被管理机节点上

Fetch 模块   功能:从远程主机提取文件至ansible的主控端

File 模块    功能:设置文件属性,创建文件,目录和软链接等

stat 模块  功能:检查文件或文件系统的状态

 unarchive 模块  功能:解包解压缩(推荐)

Archive 模块    打包压缩保存在被管理节点

常见选项 

Hostname 模块  管理主机名

Cron 模块  功能:计划任务

Yum 和 Apt 模块  功能:管理安装软件包

yum_repository 模块  功能: 此模块实现yum的仓库配置管理

 Service 模块  此模块和sytemd功能相似,选项很多相同  管理服务 启动自启等

 User 模块 管理用户

 Group 模块功能:管理组

 Lineinfile 模块     进行替换

 Replace 模块    类似于sed命令 于正则进行匹配和替换,建议使用

  SELinux 模块 该模块管理 SELInux (Linux 安全子系统)

 reboot 模块 功能: 重启 是立刻重启前面的会丢失notify重启前面不会

 notify 在不关闭整个应用程序的情况下重新启动单个服务

mount 模块  功能: 挂载和卸载文件系统

 Setup 模块   setup 模块来收集主机的系统信息

  debug 模块 功能类似于echo命令

 sysctl 模块   功能: 修改内核参数

 pam_limits      功能: 管理资源限制

apt_repository   此模块实现apt的仓库配置管理

 apt_key 模块     添加和删除apt key


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

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,举个简单的例子说明一下。 假设我们需要在目标机器上执行一个长时间运行的命令,比如安装一个非常大的软件包。我们希望在命令执行完成之后再进行后续操作,比如检查软件包是否安装成功。我们可以通过 async 特性来实现这个需求。 首先,在 Ansible 任务中添加 async 和 poll 参数,指定后台执行命令的时间和轮询状态的时间间隔: ```yaml - name: Install large software package command: /path/to/large_software_package_install_command async: 3600 # 1 hour poll: 60 # check every minute ``` 上面的代码中,async 参数指定后台执行命令的时间为 1 小时,poll 参数指定轮询命令状态的时间间隔为 1 分钟。 接下来,在后续任务中使用 async_status 模块来查询命令执行状态: ```yaml - name: Wait for large software package installation to complete async_status: jid: "{{ item.ansible_job_id }}" register: job_result until: job_result.finished retries: 720 # retry every minute for 12 hours delay: 60 # wait 1 minute between retries - name: Check if large software package is installed command: /path/to/check_large_software_package_installed_command when: job_result.finished ``` 上面的代码中,async_status 模块使用 ansible_job_id 变量来查询命令的执行状态,查询结果保存在 job_result 变量中。然后使用 until 条件来判断命令是否执行完成,如果未执行完成,则继续等待,直到命令执行完成为止。retries 和 delay 参数分别指定重试次数和等待时间间隔。最后,当命令执行完成时,再执行检查命令。 这样,我们就可以在 Ansible 执行命令时等待执行完成再进行后续操作了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值