文件操作模块
file模块 ansible-doc file -s
path 参数 :必须参数,用于指定要操作的文件或目录,在之前版本的 ansible 中,使用 dest 参数或者 name 参数指定要操作的文件或目录,为了兼容之前的版本,使用 dest 或 name 也可以。state 参数 : Path=“ 路径 ” state= touch|directory|link|hard|absent此参数非常灵活,此参数对应的值需要根据情况设定,比如,当我们需要在远程主机中创建一个目录的时候,我们需要使用 path 参数指定对应的目录路径,假设,我想要在远程主机上创 建 /testdir/a/b 目录,那么我则需要设置 path=/testdir/a/b ,但是,我们无法从 "/testdir/a/b" 这个 路径看出 b 是一个文件还是一个目录, ansible 也同样无法单单从一个字符串就知道你要创建文件还 是目录,所以,我们需要通过 state 参数进行说明src 参数 :当 state 设置为 link 或者 hard 时,表示我们想要创建一个软链或者硬链,所以,我们必须指明软链或硬链链接的哪个文件,通过 src 参数即可指定链接源。force 参数 : 当 state=link 的时候,可配合此参数强制创建链接文件,当 force=yes 时,表示强制创 建链接文件,不过强制创建链接文件分为两种情况,情况一:当你要创建的链接文件指向的源文件 并不存在时,使用此参数,可以先强制创建出链接文件。情况二:当你要创建链接文件的目录中已 经存在与链接文件同名的文件时,将 force 设置为 yes ,回将同名文件覆盖为链接文件,相当于删除在远程主机上执行脚本[root@centos7 ~]# ansible test -m script -a "test.sh chdir=/tmp"172.20.21.120 | SUCCESS => {"changed": true,"rc": 0,"stderr": "Shared connection to 172.20.21.120 closed.\r\n","stdout": "/tmp\r\n","stdout_lines": ["/tmp"]}[root@centos7 ~]# ansible test -m raw -a "pwd"172.20.21.120 | SUCCESS | rc=0 >>/rootShared connection to 172.20.21.120 closed. 同名文件,创建链接文件。情况三:当你要创建链接文件的目录中已经存在与链接文件同名的文件,并且链接文件指向的源文件也不存在,这时会强制替换同名文件为链接文件。owner 参数 :用于指定被操作文件的属主,属主对应的用户必须在远程主机中存在,否则会报错。group 参数 :用于指定被操作文件的属组,属组对应的组必须在远程主机中存在,否则会报错。mode 参数 :用于指定被操作文件的权限,比如,如果想要将文件权限设置为 "rw-r-x---" ,则可以使用 mode=650 进行设置,或者使用 mode=0650 ,效果也是相同的,如果你想要设置特殊权限, 比如为二进制文件设置 suid ,则可以使用 mode=4700 ,很方便吧。recurse 参数 :当要操作的文件为目录,将 recurse 设置为 yes ,可以递归的修改目录中文件的属性。 -R
创建文件[root@server ~]# ansible web -m file -a 'path=/file.txt owner=redhat mode=0000 setype=default_t state=touch'创建软连接
删除链接
copy模块
src 参数 :用于指定需要 copy 的文件或目录dest 参数 :用于指定文件将被拷贝到远程主机的哪个目录中, dest 为必须参数content 参数 :当不使用 src 指定拷贝的文件时,可以使用 content 直接指定文件内容, src 与content 两个参数必有其一,否则会报错。force 参数 : 当远程主机的目标路径中已经存在同名文件,并且与 ansible 主机中的文件内容不同时,是否强制覆盖,可选值有 yes 和 no ,默认值为 yes ,表示覆盖,如果设置为 no ,则不会执行覆 盖拷贝操作,远程主机中的文件保持不变。backup 参数 : 当远程主机的目标路径中已经存在同名文件,并且与 ansible 主机中的文件内容不同时,是否对远程主机的文件进行备份,可选值有 yes 和 no ,当设置为 yes 时,会先备份远程主机中的 文件,然后再将 ansible 主机中的文件拷贝到远程主机。owner 参数 : 指定文件拷贝到远程主机后的属主,但是远程主机上必须有对应的用户,否则会报错。group 参数 : 指定文件拷贝到远程主机后的属组,但是远程主机上必须有对应的组,否则会报错。mode 参数 : 指定文件拷贝到远程主机后的权限,如果你想将权限设置为 "rw-r--r--" ,则可以使用mode=0644 表示,如果你想要在 user 对应的权限位上添加执行权限,则可以使用 mode=u+x 表 示。
复制文件
fetch 模块---拉取远程主机的文件
dest 目标地址src 源flat yes 不按照 src 的目录来创建目录, flat 为 no 就在当前路径创建和 src 一样的目录路径
synchronize 模块---同步文件
src :源文件dest: 目标文件archive : 是否采用归档模式同步 , 保证源文件和目标文件属性一致rsync_opts : 使用 rsync 参数--exclude=*.log : 此处为忽略 .log 结尾的文件 , 必须和 rsync_opts 使用例 (rsync_opts=--exclude=.txt)delete: 删除不存在的文件,默认 nomode : pull --- 拉 push --- 推[root@master ~]# ansible all -m yum -a 'name=rsync state=present' 如果没有 rsync 先安装
将/p1目录和目录文件同步到/p2(-avz --- 打包操作)
将p1目录中文件数据同步到p2且删除p2源文件(注意/p1 和 /p1/的区别)
控制端(server)目录下文件向受控端(node2)目录下文件保持一致
blockinfile模块---插入"一段文本"
path 参数 :必须参数,指定要操作的文件。[root@master ~]# ansible webservers -m fetch -a 'src=/etc/hosts dest=/opt'[root@master ~]# ll /opt/总用量 0drwxr-xr-x. 3 root root 17 3 月 3 21:25 node1.kongd.comdrwxr-xr-x. 3 root root 17 3 月 3 21:25 node2.kongd.comdrwxr-xr-x. 3 root root 17 3 月 3 21:25 node3.kongd.com[root@master ~]# ansible node3.kongd.com -m fetch -a 'src=/etc/hostsdest=/opt/hosts flat=yes'[root@master ~]# ansible node1.kongd.com -m synchronize -a 'src=/etc/hostsdest=/tmp mode=pull'注意: mode 默认为 push ,要拉取到主控节点,需要配置 mode 为 pull[root@master ~]# ansible node1.kongd.com -m synchronize -a "src=/tmp/ dest=/mntarchive=yes delete=yes rsync_opts=--excloud=*.txt "block 参数 :此参数用于指定我们想要操作的那 " 一段文本 " ,此参数有一个别名叫 "content" ,使用content 或 block 的作用是相同的。marker 参数 :假如我们想要在指定文件中插入一段文本, ansible 会自动为这段文本添加两个标记,一个开始标记,一个结束标记,默认情况下,开始标记为 # BEGIN ANSIBLE MANAGED BLOCK ,结束标记为 # END ANSIBLE MANAGED BLOCK ,我们可以使用 marker 参数自定义 " 标 记 " ,比如, marker=#{mark}test ,这样设置以后,开始标记变成了 # BEGIN test ,结束标记变成 了 # END test ,没错, {mark} 会自动被替换成开始标记和结束标记中的 BEGIN 和 END ,我们也可以 插入很多段文本,为不同的段落添加不同的标记,下次通过对应的标记即可找到对应的段落。state 参数 : state 参数有两个可选值, present 与 absent ,默认情况下,我们会将指定的一段文本 " 插入 " 到文件中,如果对应的文件中已经存在对应标记的文本,默认会更新对应段落,在执行插 入操作或更新操作时, state 的值为 present ,默认值就是 present ,如果对应的文件中已经存在对 应标记的文本并且将 state 的值设置为 absent ,则表示从文件中删除对应标记的段落。insertafter 参数 :在插入一段文本时,默认会在文件的末尾插入文本,如果你想要将文本插入在某一行的后面,可以使用此参数指定对应的行,也可以使用正则表达式 (python 正则 ) ,表示将文本 插入在符合正则表达式的行的后面,如果有多行文本都能够匹配对应的正则表达式,则以最后一个 满足正则的行为准,此参数的值还可以设置为 EOF ,表示将文本插入到文档末尾。insertbefore 参数 :在插入一段文本时,默认会在文件的末尾插入文本,如果你想要将文本插入在某一行的前面,可以使用此参数指定对应的行,也可以使用正则表达式 (python 正则 ) ,表示将文 本插入在符合正则表达式的行的前面,如果有多行文本都能够匹配对应的正则表达式,则以最后一 个满足正则的行为准,此参数的值还可以设置为 BOF ,表示将文本插入到文档开头。backup 参数 :是否在修改文件之前对文件进行备份。create 参数 :当要操作的文件并不存在时,是否创建对应的文件。
1. 将 /etc/rc.d/rc.local 文件复制到 /testdir 目录中,以做测试假如,我们想要在 test70 主机中的 /testdir/rc.local 文件尾部插入如下两行systemctl start mariadb systemctl start httpd #ansible test70 -m blockinfile -a 'path=/testdir/rc.local block="systemctl start mariadb\nsystemctl start httpd"' #BEGIN ANSIBLE MANAGED BLOCK systemctl start mariadb systemctl start httpd \# END ANSIBLE MANAGED BLOCK
2. 我们也可以自定义标记,但是自定义的标记仍然要 " 成对出现 " ,需要有开始标记和结束标记#ansible test70 -m blockinfile -a 'path=/testdir/rc.local block="systemctl start mariadb\nsystemctl start httpd" marker="#{mark} serivce to start" ' #BEGIN serivce to start systemctl start mariadb systemctl start httpd #END serivce to start
3. 当文本块标记已存在,但再次编辑内容会覆盖原标记中的内容#ansible test70 -m blockinfile -a 'path=/testdir/rc.local block="systemctl start mariadb" marker="#{mark} serivce to start" ' 文本块的内容被更新为如下文本。 #BEGIN serivce to start systemctl start mariadb #END serivce to start
4. 删除对应标记文本块当文本块为空时删除对应标记文本块 #ansible test70 -m blockinfile -a 'path=/testdir/rc.local block="" marker="# {mark} serivce to start" ' #ansible test70 -m blockinfile -a 'path=/testdir/rc.local marker="#{mark} serivce to start" state=absent'
5. 将文本块插入到文档的开头,可以使用 insertbefore 参数,将其值设置为 BOF , BOF 表示 Begin Of Fileansible test70 -m blockinfile -a 'path=/testdir/rc.local block="####blockinfile test####" marker="#{mark} test" insertbefore=BOF'
6. 如果使用如下命令,表示将文本块插入到文档的结尾,与默认操作相同,将 insertafter 参数设置为 EOF表示 End Of File#ansible test70 -m blockinfile -a 'path=/testdir/rc.local block="####blockinfile test####" marker="#{mark} test" insertafter=EOF'
7. 使用如下命令表示使用正则表达式匹配行,将文本块插入到 " 以 #!/bin/bash 开头的行 " 之后ansible test70 -m blockinfile -a 'path=/testdir/rc.local block="####blockinfile test####" marker="#{mark} test reg" insertafter="^#!/bin/bash" '
8. 使用 backup 参数,可以在操作修改文件之前,对文件进行备份,备份的文件会在原文件名的基础上添加时间戳ansible test70 -m blockinfile -a 'path=/testdir/rc.local marker="#{mark} test" state=absent backup=yes'
9. 使用 create 参数,如果指定的文件不存在,则创建它,示例如下ansible test70 -m blockinfile -a 'path=/testdir/test block="test" marker="#{mark} test" create=yes'
先创建文件
在文档尾部插入hellowd,插入成功标识为自定义的"test msg"
lineinfile模块---确保"某一行文本"存在于指定的文件中
path 参数 :必须参数,指定要操作的文件。line 参数 : 使用此参数指定文本内容。regexp 参数 :使用正则表达式匹配对应的行,当替换文本时,如果有多行文本都能被匹配,则只有最后面被匹配到的那行文本才会被替换,当删除文本时,如果有多行文本都能被匹配,这么这些 行都会被删除。state 参数 :当想要删除对应的文本时,需要将 state 参数的值设置为 absent , absent 为缺席之意,表示删除, state 的默认值为 presentbackrefs 参数 :默认情况下,当根据正则替换文本时,即使 regexp 参数中的正则存在分组,在 line 参数中也不能对正则中的分组进行引用,除非将 backrefs 参数的值设置为 yes , backrefs=yes 表示 开启后向引用,这样, line 参数中就能对 regexp 参数中的分组进行后向引用了。 backrefs=yes 开启 后向引用功能。另一个作用,使用正则表达式替换对应行时,如果正则没有匹配到任何的行,那么 line 对应的内容会被插入到文本的末尾,不过,如果使用了 backrefs=yes ,情况就不一样了,当使用正则表达式替 换对应行,那么当正则没有匹配到任何的行时,则不会对文件进行任何操作,相当于保持原文件不 变insertafter 参数 :借助 insertafter 参数可以将文本插入到 “ 指定的行 ” 之后, insertafter 参数的值可以设置为 EOF 或者正则表达式, EOF 为 End Of File 之意,表示插入到文档的末尾,默认情况下 insertafter 的值为 EOF ,如果将 insertafter 的值设置为正则表达式,表示将文本插入到匹配到正则 的行之后,如果正则没有匹配到任何行,则插入到文件末尾,当使用 backrefs 参数时,此参数会被 忽略。insertbefore 参数 :借助 insertbefore 参数可以将文本插入到 “ 指定的行 ” 之前, insertbefore 参数的值可以设置为 BOF 或者正则表达式, BOF 为 Begin Of File 之意,表示插入到文档的开头,如果将 insertbefore 的值设置为正则表达式,表示将文本插入到匹配到正则的行之前,如果正则没有匹配 到任何行,则插入到文件末尾,当使用 backrefs 参数时,此参数会被忽略。backup 参数 :是否在修改文件之前对文件进行备份。create 参数 :当要操作的文件并不存在时,是否创建对应的文件。
若文件存在则在file1插入1111,不存在则创建文件插入
unarchive解包解压缩
copy : 1 、将 ansible 主机上的压缩包传到远程主机后解压缩至特定目录,设置 copy=yes2、将远程主机上的某个压缩包解压缩到指定路径下,设置copy=noremote_src :和 copy 功能一样且互斥, yes 表示在远程主机,不在 ansible 主机, no 表示文件在ansible 主机上src :源路径,可以是 ansible 主机上的路径,也可以是远程主机上的路径,如果是远程主机上的路 径,则需要设置 copy=nodest :远程主机上的目标路径mode :设置解压缩后的文件权限#ansible all -m unarchive -a 'src=/data/foo.tgz dest=/var/lib/foo'#ansible all -m unarchive -a 'src=/tmp/foo.zip dest=/data copy=no mode=0777'src= 受控主机压缩文件 dest= 控制主机文件路径#ansible all -m unarchive -a 'src=https://example.com/example.zip dest=/datacopy=no'
计划任务
cron模块
backup :对远程主机上的原任务计划内容修改之前做备份cron_file :如果指定该选项,则用该文件替换远程主机上的 cron.d 目录下的用户的任务计划day :日( 1-31 , , /2,…… )hour :小时( 0-23 , , /2 , …… )minute :分钟( 0-59 , , /2 , …… )month :月( 1-12 , , /2 , …… )weekday :周( 0-7 , * , …… )job :要执行的任务,依赖于 state=presentname :该任务的描述special_time :指定什么时候执行,参数: reboot,yearly (每年), annually, (每年相当于yearly ) monthly,weekly,daily,hourlystate :确认该任务计划是创建还是删除user :以哪个用户的身份执行
用户管理
user模块
name= :用户名uid :用户的 uidgroup :所属组,即私有组groups :附加组。state :状态。remove : yes nopassword
group模块
name 参数:必须参数,用于指定要操作的组名称。state 参数:用于指定组的状态 , 两个值可选 ,present,absent, 默认为 present, 设置为 absent 表示删除组。gid 参数:用于指定组的 gid 。system 参数:系统组。
示例︰创建一个系统组rhce
[root@master ~]# ansible webservers -m group -a 'name=rhce system=yes'
软件包管理
yum_repository(在配置yum前先挂载mount)
name 参数:必须参数,用于指定要操作的唯一的仓库 ID ,也就是 ”.repo” 配置文件中每个仓库对应的 ” 中括号 ” 内的仓库 ID 。baseurl 参数:此参数用于设置 yum 仓库的 baseurl 。description 参数:此参数用于设置仓库的注释信息,也就是 ”.repo” 配置文件中每个仓库对应的 ”name 字段 ” 对应的内容。file 参数:此参数用于设置仓库的配置文件名称,即设置 ”.repo” 配置文件的文件名前缀,在不使用此参数的情况下,默认以 name 参数的仓库 ID 作为 ”.repo” 配置文件的文件名前缀,同一个 ”.repo” 配置文件中 可以存在多个 yum 源。enabled 参数:此参数用于设置是否激活对应的 yum 源,此参数默认值为 yes ,表示启用对应的yum 源,设置为 no 表示不启用对应的 yum 源。gpgcheck 参数:此参数用于设置是否开启 rpm 包验证功能,默认值为 no ,表示不启用包验证,设置为 yes 表示开启包验证功能。gpgkey 参数:当 gpgcheck 参数设置为 yes 时,需要使用此参数指定验证包所需的公钥。 state参数:默认值为 present ,当值设置为 absent 时,表示删除对应的 yum 源。示例:注意环境默认的 yum 源 http://content.example.com/rhel8.0/x86_64/dvd/AppStream// 为 webservers 的主机配置 yum 源,设置 ID 为 AppStream
yum/dnf模块
name 参数:必须参数,用于指定需要管理的软件包,比如 nginx 。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 参数可以同时使用。
案例
1.挂载本地光盘到/mnt
2.配置yum源仓库文件通过多种方式实现
仓库1 :
Name: RH294_Base
Description: RH294 base software
Base urt: file:///mnt/BaseOS
不需要验证钦件包 GPG 签名
启用此软件仓库
仓库 2:
Name: RH294_Stream
Description : RH294 stream software
Base url:file:///mnt/AppStream
不需要验证软件包 GPG 签名
3.配置成功后安装http软件包(多种方法实现)
1.[root@server ~]# ansible node1 -m mount -a 'src=/dev/sr0 path=/mnt fstype=iso9660 state=present'
2.[root@server ~]# ansible node1 -m yum_repository -a 'name=RH294_Base description="RH294 base software" baseurl="file:///mnt/BaseOS" gpgcheck=no'
[root@server ~]# ansible node1 -m yum_repository -a 'name=RH294_Stream description="RH294 stream software" baseurl="file:///mnt/AppStream" gpgcheck=no'
3. [root@server ~]# ansible node1 -m yum -a 'name=httpd disable_gpg_check=yes'
Service/systemd模块
name 参数:此参数用于指定需要操作的服务名称,比如 nginx 。state 参数:此参数用于指定服务的状态,比如,我们想要启动远程主机中的 nginx ,则可以将state 的值设置为 started ;如果想要停止远程主机中的服务,则可以将 state 的值设置为stopped 。此参数的可用值有 started 、 stopped 、 restarted 、 reloaded 。enabled 参数:此参数用于指定是否将服务设置为开机 启动项,设置为 yes 表示将对应服务设置为 开机启动,设置为 no 表示不会开机启动arguments: 给命令提供一些选项ansible all -m service -a "name=network state=restarted args=eth0"runlevel : 运行等级sleep: 如果运行看 restarted 则 stop and start 之间沉睡几秒中pattern :定义一个模式,如果通过 status 指令来查看服务的状态时,没有响应,就会通过 ps 指令在进程中根据该模式进行查找,如果匹配到,则认为该服务依然在运行
防火墙
firewalld 模块
State 指防火墙策略 enable disable present absentservice 指定服务immediate 立即启用port 端口 port=80/tcppermanent 永久生效
selinux模块
功能:管理远端主机的 SELINUX 防火墙;参数state Selinux 模式: enforcing 、 permissive 、 disabledpolicy targeted
配置网络
nmcli使用模块
Hostname模块管理主机名(永久生效)
上传下载文件
get_url 模块 --- 检验文件
sha256sum :下载完成后进行 sha256 check ;timeout :下载超时时间,默认 10surl :下载的 URLurl_password 、 url_username :主要用于需要用户名密码进行验证的情况owner :指定属主group :指定属组
uri模块 curl http://localhost -k -u tom: --- 获取网页信息
url= 指明请求的 url 的路径,如: http://10.1.32.68/test.jpguser= 如果请求的 url 需要认证,则认证的用户名是什么password= 如果请求的 url 需要认证,则认证的密码是什么method= 指明请求的方法,如 GET 、 POST…body= 指明报文中实体部分的内容,一般是 POST 方法或 PUT 方法时用到HEADER_ 自定义请求报文中的添加的首部return_content: 是否将返回主体作为字典中的 "content" 值返回validate_certs: 如果 “ 否 ” ,则不会验证 ssl 证书。这应该只设置为 “ 否 ” 使用个人控制的网站使用自签名证书。Force_basic_auth:
根据初始请求强制发送基本身份验证标头。 Uri 模块使用的库仅在 webservice 以 401 状态响应初始请求时发送身份验证信息。由于一些基本的认证服务没有正确地发送 401 ,登录将失败url: http://......validate_certs: noforce_basic_auth: yesuser=redhatpassword=web_passreturn_content: yes 返回 content ,默认不显示status_code: 200 正确状态值 200[ root@server ~ ] # ansible localhost -m uri -a 'url=http://localhost return_content=yes status_code=404' --- status_code指预判断的结果为404,也可以写200,如果结果和预判断的不一样则会显示红色错误结果,但是并不是语法错误,不影响
磁盘管理
mount模块
fstype :必选项,挂载文件的类型path :必选项,挂载点opts :传递给 mount 命令的参数src :必选项,要挂载的文件系统state :必选项 present :只处理 fstab 中的配置 absent挂载点mountedunmounted:卸载