运维自动化工具 Ansible的安装部署和常用模块介绍

news/2024/12/29 10:10:28/

ansible安装

ansible的安装有很多种方式

官方文档:https://docs.ansible.com/ansible/latest/installation_guide/intro_installation.ht
ml
https://docs.ansible.com/ansible/latest/installation_guide/index.html

下载
https://releases.ansible.com/ansible/

pip下载
https://pypi.org/project/ansible/

包安装方式

#Centos 的 EPEL源rpm包安装
yum -y install ansible#ubuntu安装
apt -y install ansible

查看ansible 版本

#centos 查看
yum info ansible#ubuntu 查看
apt info ansible

在这里插入图片描述

PIP安装

pip 是安装python包的管理器,类似于 yum
在rocky8 上通过 pip3安装ansible

yum -y install python39 rust
pip3 install ansible
ansible --version

Inventory 主机清单

ansible的主要功用在于批量主机操作,为了便捷地使用其中的部分主机,可以在inventory 主机清单文件中将其分组组织

默认的inventory file为 /etc/ansible/hosts
inventory file可以有多个,且也可以通过Dynamic Inventory来动态生成

注意:

  • 生产建议在每个项目目录下创建项目独立的hosts文件
  • 通过项目目录下的ansible.cfg文件中的 inventory = ./hosts实现

官方文档:https://docs.ansible.com/ansible/latest/user_guide/intro_inventory.html

主机清单文件格式:
inventory文件遵循INI文件风格,中括号中的字符为组名。可以将同一个主机同时归并到多个不同的组中

此外,当如若目标主机使用了非默认的SSH端口,还可以在主机名称之后使用冒号加端口号来标明
如果主机名称遵循相似的命名模式,还可以使用列表的方式标识各主机

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 的路径....

范例:

ntp.qingtongqingc.org
[webservers]
www1.qingtongqingc.org:2222
www2.qingtongqingc.org
[dbservers]
db1.qingtongqingc.org
db2.qingtongqingc.org
db3.qingtongqingc.org
#或者
db[1:3].qingtongqingc.org#定义testsrvs组中包括两个其它分组,实现组嵌套
[testsrvs:children] 
webservers
dbservers

Ansible 相关工具

  • /usr/bin/ansible 主程序,临时命令执行工具
  • /usr/bin/ansible-doc 查看配置文档,模块功能查看工具,相当于man
  • /usr/bin/ansible-playbook 定制自动化任务,编排剧本工具,相当于脚本
  • /usr/bin/ansible-pull 远程执行命令的工具
  • /usr/bin/ansible-vault 文件加密工具
  • /usr/bin/ansible-console 基于Console界面与用户交互的执行工具
  • /usr/bin/ansible-galaxy 下载/上传优秀代码或Roles模块的官网平台

利用ansible实现管理的主要方式:

  • Ansible Ad-Hoc 即利用ansible命令,主要用于临时命令使用场景
  • Ansible playbook 主要用于长期规划好的,大型项目的场景,需要有前期的规划过程

ansible 使用前准备

ansible 相关工具大多数是通过ssh协议,实现对远程主机的配置管理、应用部署、任务执行等功能
建议:使用此工具前,先配置ansible主控端能基于密钥认证的方式联系各个被管理节点

先配置ssh免密

ssh-keygen 
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): #回车
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase): #回车
Enter same passphrase again: #回车
Your identification has been saved in /root/.ssh/id_rsa
Your public key has been saved in /root/.ssh/id_rsa.pub
The key fingerprint is: #回车
SHA256:hX+PEeHicKfimp2qPB0s74aY165TT5bHQukdfuqZFCE root@ubuntu2004
The key's randomart image is: #回车
+---[RSA 3072]----+
|            .    |
|         . . .   |
|        E.= +    |
|        oB.= .   |
|     . oS==.o    |
|    . +.*.=o.+   |
|   o B =.o.o. .  |
|  o.= =+.o.o     |
|   .+O*.o.+      |
+----[SHA256]-----+

将密钥发送到服务端

ssh-copy-id  IP地址

ansible-doc

此工具用来显示模块帮助,相当于man
格式:

ansible-doc [options] [module...]
-l, --list       #列出可用模块
-s, --snippet #显示指定模块的playbook片段

范例:

#列出所有模块
ansible-doc -l  
#查看指定模块帮助用法
ansible-doc ping  
#查看指定模块帮助用法
ansible-doc -s  ping

anisble 命令用法

格式:

ansible <host-pattern> [-m module_name] [-a args]

选项说明:

--version #显示版本
-m module   #指定模块,默认为command
-v #详细过程 -vv -vvv更详细
--list-hosts #显示主机列表,可简写 --list
-C, --check   #检查,并不执行
-T, --timeout=TIMEOUT #执行命令的超时时间,默认10s
-k, --ask-pass     #提示输入ssh连接密码,默认Key验证 
-u, --user=REMOTE_USER #执行远程执行的用户,默认root
-b, --become    #代替旧版的sudo实现通过sudo机制实现提升权限
--become-user=USERNAME  #指定sudo的runas用户,默认为root
-K, --ask-become-pass  #提示输入sudo时的口令
-f FORKS, --forks FORKS #指定并发同时执行ansible任务的主机数
-i INVENTORY, --inventory INVENTORY  #指定主机清单文件

范例:

#以qingtong用户执行ping存活检测
ansible all -m ping -u qingtong  -k
#以qingtong sudo至root执行ping存活检测
ansible all -m ping -u qingtong -k -b
#以qingtong sudo至test用户执行ping存活检测
ansible all -m ping -u qingtong -k -b --become-user=test
#以wang sudo至root用户执行ls 
ansible all -m command  -u qingtong -a 'ls /root' -b --become-user=root -k -K

使用普通用户进行远程管理

在所有控制端和被控制端创建用户和密码

useradd qingtong
echo qingtong:123456 | chpasswd

在所有被控制端对用户sudo 授权

[root@localhost ~]# visudo
qingtong ALL=(ALL) NOPASSWD: ALL[root@localhost ~]# visudo -c
/etc/sudoers: parsed OK#使用普通用户通过-b选项连接实现sudo提权后连接成功
ansible 192.168.31.111 -m shell -a 'ls -a /root' -b --become-user root

ansible的Host-pattern

用于匹配被控制的主机列表
ALL:表示所有Inventory中的所有主机
范例:

ansible all -m ping

*:通配符

ansible "*" -m ping 
ansible 192.168.31.* -m ping
ansible "srvs" -m ping
ansible "10.0.0.6 10.0.0.7" -m ping

或关系

ansible "websrvs:appsrvs" -m ping 
ansible "192.168.1.10:192.168.1.20" -m ping

逻辑与

#在websrvs组并且在dbsrvs组中的主机
ansible "websrvs:&dbsrvs" -m ping

逻辑非

#在所有主机,但不在websrvs组和dbsrvs组中的主机
#注意:此处为单引号
ansible 'all:!dbsrvs:!websrvs' -m ping

综合逻辑

ansible 'websrvs:dbsrvs:&appsrvs:!ftpsrvs' -m ping

ansible 命令执行过程

  1. 加载自己的配置文件,默认/etc/ansible/ansible.cfg
  2. 查找主机清单中对应的主机或主机组
  3. 加载自己对应的模块文件,如:command
  4. 通过ansible将模块或命令生成对应的临时py文件,并将该文件传输至远程服务器的对应执行用户
    $HOME/.ansible/tmp/ansible-tmp-数字/XXX.PY文件
  5. 给文件+x执行
  6. 执行并返回结果
  7. 删除临时py文件,退出

ansible 命令的执行状态

root@ubuntu2004:~# grep -A 14  '\[colors\]' /etc/ansible/ansible.cfg
[colors]
#highlight = white
#verbose = blue
#warn = bright purple
#error = red
#debug = dark gray
#deprecate = purple
#skip = cyan
#unreachable = red
#ok = green
#changed = yellow
#diff_add = green
#diff_remove = red
#diff_lines = cyan
  • 绿色:执行成功并且对目标主机不需要做改变的操作
  • 黄色:执行成功并且对目标主机做变更
  • 红色:执行失败

Ansible 常用模块

虽然模块众多,但最常用的模块也就2,30个而已,针对特定业务只需要熟悉10几个模块即可
常用模块帮助文档参考:
https://docs.ansible.com/ansible/2.9/modules/modules_by_category.html
https://docs.ansible.com/ansible/2.9/modules/list_of_all_modules.html

https://docs.ansible.com/ansible/latest/modules/list_of_all_modules.html
https://docs.ansible.com/ansible/latest/modules/modules_by_category.html

Command 模块

功能:在远程主机执行命令,此为默认模块,可忽略 -m 选项
注意:此命令不支持 $VARNAME < > | ; & 等,可能用shell模块实现
注意:此模块不具有幂等性
常见选项:

chdir=dir    #执行命令前,先切换至目录dir
creates=file #当file不存在时才会执行
removes=file #当file存在时才会执行

范例:

root@ubuntu2004:~# ansible all -m command -a 'chdir=/etc cat centos-release'
192.168.31.110 | CHANGED | rc=0 >>
CentOS Linux release 7.9.2009 (Core)
192.168.31.111 | CHANGED | rc=0 >>
CentOS Linux release 7.9.2009 (Core)

shell 模块

功能:和command相似,用shell执行命令,支持各种符号,比如:*,$, > , 相当于增强版的command模块
注意:此模块不具有幂等性,建议能不能就用此模块,最好使用专用模块
常见选项

chdir=dir    #执行命令前,先切换至目录dir
creates=file #当file不存在时才会执行
removes=file #当file存在时才会执行

范例:

root@ubuntu2004:~# ansible all -m shell -a 'echo $HOSTNAME'
192.168.31.111 | CHANGED | rc=0 >>
localhost.localdomain
192.168.31.110 | CHANGED | rc=0 >>
localhost.localdomainroot@ubuntu2004:~# ansible all -m shell -a 'echo hello > /data/hello.log'
192.168.31.110 | CHANGED | rc=0 >>192.168.31.111 | CHANGED | rc=0 >>root@ubuntu2004:~# ansible all -m shell -a 'cat /data/hello.log'
192.168.31.111 | CHANGED | rc=0 >>
hello
192.168.31.110 | CHANGED | rc=0 >>
hello

注意:调用bash执行命令 类似 cat /tmp/test.md | awk -F’|’ ‘{print $1,$2}’ &> /tmp/example.txt 这些复杂命令,即使使用shell也可能会失败,解决办法:写到脚本时,copy到远程,执行,再把需要的结果拉回执行命令的机器

范例:将shell模块代替command,设为模块

root@ubuntu2004:~#vim /etc/ansible/ansible.cfg
#修改下面一行
module_name = shell

Scripts 模块

功能:在远程主机上运行ansible服务器上的脚本(无需执行权限)
注意:此模块不具有幂等性
常见选项

chdir=dir    #执行命令前,先切换至目录dir
cmd          #指定ansible主机的命令
creates=file #当file不存在时才会执行
removes=file #当file存在时才会执行

范例:

ansible all -m script -a '/root/test.sh'

在这里插入图片描述

Copy 模块

功能:复制ansible服务器主控端或远程的本机的文件到远程主机
注意: src=file 如果是没指明路径,则为当前目录或当前目录下的files目录下的file文件
常见选项

src      #控制端的源文件路径
dest     #被控端的文件路径
owner    #属主
group    #属组
mode     #权限
backup   #是否备份
validate #验证成功才会执行copy
remote_src  #no是默认值,表示src文件在ansible主机,yes表示src文件在远程主机

范例:

root@ubuntu2004:~# ansible all -m copy -a "src=/root/test.sh dest=/opt"#验证文件是否复制成功
root@ubuntu2004:~# ansible all -m command -a "ls /opt"
192.168.31.111 | CHANGED | rc=0 >>
test.sh
192.168.31.110 | CHANGED | rc=0 >>
test.sh

File 模块

功能:设置文件属性,创建文件,目录和软链接等
常见选项

path #在被控端创建的路径
owner #属主
group #属组
mode #权限
state #状态=touch    #创建文件=directory #创建目录=link #软链接=hard     #硬链接
recurse     #yes表示递归授权

范例:

#创建空文件
ansible all -m file  -a 'path=/data/test.txt state=touch'
ansible all -m file  -a 'path=/data/test.txt state=absent'
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 path|dest|name=/data/testfile-link 
state=link'
#创建目录
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"

stat 模块

功能:检查文件或文件系统的状态
注意:对于Windows目标,请改用win_stat模块

常见选项

path #文件/对象的完整路径(必须)

常用的返回值判断:

exists: 判断是否存在
isuid: 调用用户的ID与所有者ID是否匹配
root@ubuntu2004:~# ansible 127.0.0.1 -m stat -a 'path=/etc/passwd'
127.0.0.1 | SUCCESS => {"changed": false,"stat": {"atime": 1683610546.334582,"attr_flags": "e","attributes": ["extents"],"block_size": 4096,"blocks": 8,"charset": "us-ascii","checksum": "e644c90df8a6b47b5ff04270caed35ff35931421","ctime": 1683610546.326582,"dev": 2053,"device_type": 0,"executable": false,"exists": true,"gid": 0,"gr_name": "root","inode": 275434,"isblk": false,"ischr": false,"isdir": false,"isfifo": false,"isgid": false,"islnk": false,"isreg": true,"issock": false,"isuid": false,"mimetype": "text/plain","mode": "0644","mtime": 1683610546.326582,"nlink": 1,"path": "/etc/passwd","pw_name": "root","readable": true,"rgrp": true,"roth": true,"rusr": true,"size": 2975,"uid": 0,"version": "1563825316","wgrp": false,"woth": false,"writeable": true,"wusr": true,"xgrp": false,"xoth": false,"xusr": false}
}

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 #远程主机上的目标路径
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 
copy=no'
ansible websrvs -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'
ansible websrvs -m unarchive -a 'src=http://nginx.org/download/nginx-
1.18.0.tar.gz dest=/usr/local/src/ copy=no'

Archive 模块

功能:打包压缩保存在被管理节点
常见选项

path   #压缩的文件或目录
dest   #压缩后的文件
format #压缩格式,支持gz,bz2,xz,tar,zip

范例:

ansible websrvs -m archive  -a 'path=/var/log/ dest=/data/log.tar.bz2 format=bz2 
owner=wang mode=0600'

Hostname 模块

功能:管理主机名
常见选项

name #修改后的主机名称

范例:

ansible node1 -m hostname -a "name=websrv"
ansible 192.168.31.111 -m hostname -a 'name=node2.qingtong.org'

Cron 模块

功能:计划任务
支持时间:minute,hour,day,month,weekday
常见选项

name #描述脚本的作用
minute    #分钟
hour #小时
weekday    #周
user #任务由哪个用户运行;默认root
job #任务

范例:

#备份数据库脚本
[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 192.168.31.111 -m cron -a 'hour=2 minute=30 weekday=1-5 name="backup mysql" 
job=/root/mysql_backup.sh'
ansible websrvs   -m cron -a "minute=*/5 job='/usr/sbin/ntpdate ntp.aliyun.com 
&>/dev/null' name=Synctime"#禁用计划任务
ansible websrvs   -m cron -a "minute=*/5 job='/usr/sbin/ntpdate 172.20.0.1 
&>/dev/null' name=Synctime disabled=yes"#启用计划任务
ansible websrvs   -m cron -a "minute=*/5 job='/usr/sbin/ntpdate 172.20.0.1 
&>/dev/null' name=Synctime disabled=no"#删除任务
ansible websrvs -m cron -a "name='backup mysql' state=absent"
ansible websrvs -m cron -a 'state=absent name=Synctime'

Yum 和 Apt 模块

功能:管理软件包
yum 管理软件包,只支持RHEL,CentOS,fedora,不支持Ubuntu其它版本
apt 模块管理 Debian 相关版本的软件包
yum常见选项

name #软件包名称
state #状态=present #安装,此为默认值=absent #删除=latest #最新版
list            #列出指定包
enablerepo #启用哪个仓库安装
disablerepo #不使用哪些仓库的包
exclude #排除指定的包
validate        #是否检验,默认为yes

范例:

#安装
[root@ansible ~]#ansible websrvs -m yum -a 'name=httpd state=present'  
#安装zabbix agent rpm包
[root@ansible ~]#ansible websrvs -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 websrvs -m yum -a 'name=nginx state=present 
enablerepo=epel'  
#升级除kernel和foo开头以外的所有包
[root@ansible ~]#ansible websrvs -m yum -a 'name=* state=lastest 
exclude=kernel*,foo*' 
#删除
[root@ansible ~]#ansible websrvs -m yum -a 'name=httpd state=absent'   
[root@ansible ~]#ansible websrvs -m yum -a 'name=sl,cowsay'

yum_repository 模块

功能: 此模块实现yum的仓库配置管理
常见选项

name #仓库id
description #仓库描述名称,对应配置文件中的name=
baseurl #仓库的地址
gpgcheck #验证开启
gpgkey              #仓库公钥路径

范例:

ansible websrvs -m yum_repository -a 'name=ansible_nginx description="nginx 
repo" baseurl="http://nginx.org/packages/centos/$releasever/$basearch/" 
gpgcheck=yes gpgkey="https://nginx.org/keys/nginx_signing.key"'
[root@rocky8 ~]#cat /etc/yum.repos.d/ansible_nginx.repo 
[ansible_nginx]
baseurl = http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck = 1
gpgkey = https://nginx.org/keys/nginx_signing.key
name = nginx repo

Service 模块

此模块和sytemd功能相似,选项很多相同
功能:管理服务
常见服务

name #服务名称
state #服务状态
=started #启动
=stopped #停止
=restarted    #重启
=reloaded    #重载
enabled #开启自启动
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 #是否创建家目录
password #设定对应的密码,必须是加密后的字符串才行,否则不生效
system #yes表示系统用户
groups          #附加组
append #追加附加组使用,yes表示增加新的附加组
state    #absen删除
remove #yes表示删除用户时将家目录一起删除
generate_ssh_key #创建私钥
ssh_keyu_bits    #私钥位数
ssh_key_file     #私钥文件路径

范例:

#创建用户
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加密的密码
ansible localhost -m debug -a "msg={{ '123456'| 
password_hash('sha512','salt')}}"
localhost | SUCCESS => {"msg": "$6$salt$MktMKPZJ6t59GfxcJU20DwcwQzfMvOlHFVZiOVD71w."
}
#用上面创建的密码创建用户
ansible websrvs -m user -a 'name=www group=www system=yes shell=/sbin/nlogin 
password="$6$salt$MktMKPZJ6t59GfxcJU20DwcwQzfMvOlHFVZiOVD71w."'
#创建用户test,并生成4096bit的私钥
ansible websrvs -m user -a 'name=test generate_ssh_key=yes ssh_key_bits=4096 
ssh_key_file=.ssh/id_rsa'

Replace 模块

该模块有点类似于sed命令,主要也是基于正则进行匹配和替换,建议使用
功能: 多行修改替换
常见选项

path #被控端文件的路径
regexp #正则匹配语法格式,表示被替换的内容
replace #替换为的内容
after           #插入到替换内容前面,
before          #插入到替换内容后面
backup          #修改前先备份
mode            #指定权限
owner           #指定用户
group           #指定组

范例:

ansible all -m replace -a "path=/etc/fstab regexp='^(UUID.*)' replace='#\1'"  
ansible all -m replace -a "path=/etc/fstab regexp='^#(UUID.*)' replace='\1'"

SElinux 模块

功能: 该模块管理 SELInux 策略
常见选项

policy     #指定SELINUXTYPE=targeted
state      #指定SELINUX=disabled

范例:

root@ubuntu2004:~# ansible all -m selinux -a 'state=disabled'
[WARNING]: SELinux state temporarily changed from 'enforcing' to 'permissive'. State change will take effect next reboot.
192.168.31.110 | CHANGED => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python"},"changed": true,"configfile": "/etc/selinux/config","msg": "","policy": "targeted","reboot_required": true,"state": "disabled"
}
192.168.31.111 | CHANGED => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python"},"changed": true,"configfile": "/etc/selinux/config","msg": "Config SELinux state changed from 'enforcing' to 'disabled'","policy": "targeted","reboot_required": true,"state": "disabled"
}[root@localhost ~]# grep -v '#' /etc/selinux/config SELINUX=disabled
SELINUXTYPE=targeted [root@localhost ~]# getenforce 
Permissive

reboot 模块

功能:重启
常见选项

msg               #重启提示
pre_reboot_delay  #重启前延迟时间的秒数
post_reboot_delay #重启后延迟时间的秒数后,再验证系统正常启动
reboot_timeout    #重启后延迟时间再执行测试成功与否的命令
test_command      #执行测试成功与否的命令

范例:

root@ubuntu2004:~#ansible websrvs -m reboot -a 'msg="host will be reboot"'

mount 模块

功能:挂载和卸载文件系统
常见选项

src    #源设备路径,或网络地址
path   #挂载至本地哪个路径下
fstype #设备类型; nfs
opts   #挂载的选项
state  #挂载还是卸载=present #永久挂载,但没有立即生效=absent #卸载临时挂载,并删除永久挂载=mounted #临时挂载=unmounted #临时卸载

范例:

#修改fstab文件永久挂载,但不立即生效
mount websrvs -m mount -a 'src="UUID=b3e48f45-f933-4c8e-a700-22a159ec9077" 
path=/home fstype=xfs opts=noatime state=present'
#临时取消挂载
mount websrvs -m mount -a 'path=/home fstype=xfs opts=noatime state=unmounted'
#永久挂载,并立即生效
ansible websrvs -m mount -a 'src=10.0.0.8:/data/wordpress path=/var/www/html/wpcontent/uploads opts="_netdev" state=mounted'
#永久卸载,并立即生效
ansible websrvs -m mount -a 'src=10.0.0.8:/data/wordpress path=/var/www/html/wpcontent/uploads state=absent'

debug 模块

功能: 此模块可以用于输出信息,并且通过 msg 定制输出的信息内容,功能类似于echo命令
注意: msg后面的变量有时需要加 " " 引起来
常见选项

msg       #指定命令输出的信息
var       #指定变量名,和msg互斥
verbosity #详细度

范例:debug 模块默认输出 hello world

root@ubuntu2004:~# ansible all -m debug
192.168.31.110 | SUCCESS => {"msg": "Hello world!"
}
192.168.31.111 | SUCCESS => {"msg": "Hello world!"
}
#默认没有指定msg,默认输出"Hello world!"

http://www.ppmy.cn/news/65950.html

相关文章

设计模式之【适配器模式】,两个人之间确实需要月老的搭线~

文章目录 一、什么是适配器模式1、适配器模式使用场景2、代理、桥接、装饰器、适配器 4 种设计模式的区别3、适配器模式结构 二、类适配器1、实例 三、对象适配器1、实例 四、接口适配器1、实例 五、源码中的应用 一、什么是适配器模式 适配器模式&#xff08;Adapter Design …

KingbaseES 分区表修改字段类型

KingbaseES普通表修改表结构请参考&#xff1a;KingbaseES变更表结构表重写问题 数据类型转换重写与不重写&#xff1a; varchar(x) 转换到 varchar(y) 当 y>x&#xff0c;不需要重写。numeric(x,z) 转换到 numeric(y,z) 当 y>x&#xff0c;或者不指定精度类型&#xff0…

Hacking The Box----Awkward

信息收集 nmap扫描&#xff0c;发现22号端口和80号端口打开&#xff0c;80号端口上运行着http服务器。访问ip后URL变为hat-valley.htb 修改/etc/hosts文件&#xff0c;添加10.10.11.185 hat-valley.htb&#xff0c;然后就能正常访问网站。可以看到是一家卖帽子的公司的网站&a…

品类超全的免费 API 大全整理

AI 绘画&#xff1a;通过AI 生成图片&#xff0c;包括图生文、文生图等。人脸检测&#xff1a;快速检测图片中的人脸并返回人脸位置&#xff0c;输出人脸关键点坐标&#xff0c;支持识别多张人脸。静态活体检测&#xff1a;静态活体检测主要用于针对用户上传图像&#xff0c;返…

如何将ChatGPT训练成某个领域的专家!附完整示例!

背景 最近听了 八叉的一个ChatGPT讲座&#xff0c;讲的是如何将ChatGPT训练成领域专家&#xff0c;这样我们就可以用它来解决该领域的各种问题。 整个讲座中最让我印象深刻的就是训练方法&#xff0c;它是通过让ChatGPT向我们提问&#xff0c;然后由我们给出答案的方式进行训…

SpringCloud最流行的39道面试题含答案

目录 官方文档地址1. 什么是 Spring Cloud?2. Spring Cloud 的主要组件是什么&#xff1f;3. 如何配置 Eureka?4. 什么是 Hystrix?5. 如何编写一个基于 zuul 的微服务&#xff1f;6. 什么是 Ribbon?7. 如何编写一个基于 Ribbon 的微服务&#xff1f;8. 什么是 Eureka 客户端…

重要通知|Sui测试网将于5月11日重置

致Sui社区成员们&#xff1a; 正如之前公告所述&#xff0c;部分社区成员发现测试网可能会定期清除数据并重新启动。鉴于此&#xff0c;我们宣布计划将于2023年5月11日进行首次测试网清除。 对于想要继续读取和访问当前测试网络的社区成员&#xff0c;请使用由Mysten Labs在…

GB/T25915.1法规基本标准-附 录 B(资料性)等级划分计算

附 录 B(资料性)等级划分计算实例 B.1 示例1 B.1.1 某个洁净室占地面积18m2,规定洁净度级别为动态ISO5级。使用采样流量为28.3L/min的 离散粒子计数器进行分级测试。2个关注粒径分别为:D≥0.3μm 和D≥0.5μm。 查表 A.1,采样点数 NL 为6。 B.1.2 从表1查得ISO5级的粒子浓度…