自动化运维-2.ansible详解(一)
1. ansible简介
ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet、cfengine、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。
ansible是基于模块工作的,本身没有批量部署的能力。真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架。主要包括:
(1)、连接插件connection plugins:负责和被监控端实现通信;
(2)、host inventory:指定操作的主机,是一个配置文件里面定义监控的主机;
(3)、各种模块核心模块、command模块、自定义模块;
(4)、借助于插件完成记录日志邮件等功能;
(5)、playbook:剧本执行多个任务时,非必需可以让节点一次性运行多个任务。
2. ansible特性
(1)、轻量级,部署简便,无需在客户端安装agent,基于python和ssh(默认已安装);
(2)、模块化:调用特定的模块,完成特定任务,比如:批量任务执行可以写成脚本,而且不用分发到远程就可以执行;
(3)、使用python编写;
(4)、安全,基于OpenSSH;
(5)、支持playbook编排任务(yaml[/ˈjæməl/]格式编排任务,支持丰富的数据结构);
(6)、幂等性:一个任务执行1遍和执行n遍效果一样,不因重复执行带来意外情况
(7)、支持自定义模块:可使用任何编程语言写模块
(8)、较强大的多层解决方案
3. ansible架构

上图中我们看到的主要模块如下:
Public/private Cloud:公有私有云(通过接口调用ansible)
User:用户(用户输入ansible命令操作)
Ansible:主控端(简单来说就是服务器安装了ansible)
HostInventory:记录由Ansible管理的主机清单(默认路径:/etc/ansible/hosts)。
Playbooks:"剧本"YAML格式文件,多个任务定义在一个文件中,定义主机需要调用哪些模块来完成的功能。
CoreModules:ansible核心模块,如shell,scripts,file。
CustomModules:自定义模块,完成核心模块无法完成的功能,支持多种语言。
ConnectionPlugins:连接插件,Ansible和Host通信使用,目前用的就是SSH协议
Plugins:其他插件,如邮件,日志...
4. 利用ansible实现管理的方式
(1)ad-hoc:即ansible命令,主要用于临时命令使用场景
(2)playbook:编写一个yaml文件,通过多个task集合完成一类功能
5. ansible安装注意事项
(1)执行ansible的主机一般称为主控端,中控,master或堡垒机;被ansible管理的主机称为被控端(下文会频繁使用主控端,被控端的概念)
(2)主控端的python版本需要2.6及以上:python -V 查看
(3)被控端的python小于2.4的话需要安装python-simplejson或者升级python
(4)被控端如开启selinux需要安装libselinux-python
(5)windows不能作为主控端
6. ansible 安装方式
(1).yum安装(常用)
yum install epel-release -y
yum install ansible –y
(2)pip程序安装
yum install python-pip
pip install ansible
(3)git安装
git clone git://github.com/ansible/ansible.git --recursive
cd ./ansible
source ./hacking/env-setup
安装完执行命令 ansible --version 查看版本确认是否安装完成
7. ansible文件列表
输入命令:rpm -ql ansible |less
(1)下面只列出比较重要且常用的配置文件
- /etc/ansible/ansible.cfg --ansible主配置列表
- /etc/ansible/hosts --主机清单
ansible的主要功用在于批量主机操作,而被控端的所有主机统一由主机清单管理,定义方式为:
a)直接指明ip或域名,比如
127.0.0.1
127.0.0.2
#或者
localhost
localhost1
b)或者定义主机组,以[]包裹名称
[group1]
127.0.0.1
127.0.0.2
#或者
[group1]
localhost
localhost1
3./etc/ansible/roles --ansible角色
(2)程序
/usr/bin/ansible --ansible主程序,临时命令执行工具
/usr/bin/ansible-doc --查看配置文档,模块功能查看工具
/usr/bin/ansible-galaxy --下载/上传优秀代码或roles模块的官网平台
/usr/bin/ansible-playbook --定制自动化任务,编排剧本工具
/usr/bin/ansible-pull --远程执行命令的工具
/usr/bin/ansible-vault --文件加密工具
/usr/bin/ansible-console --基于console界面与用户交互的执行工具
8.ansible命令
8.1 ansible命令列表
ansible <host-pattern> [-f forks] [-m module_name] [-a args]
也可以通过ansible -h来查看帮助,下面我们列出一些比较常用的选项,并解释其含义:
-a MODULE_ARGS #模块的参数,如果执行默认COMMAND的模块,即是命令参数,如: “date”,“pwd”等等
-k,--ask-pass #ask for SSH password。登录密码,提示输入SSH密码而不是假设基于密钥的验证
--ask-su-pass #ask for su password。su切换密码
-K,--ask-sudo-pass #ask for sudo password。提示输入sudo时的口令
--ask-vault-pass #ask for vault password。假设我们设定了加密的密码,则用该选项进行访问
-B SECONDS #后台运行超时时间
-C #--check 检查,并不执行
-c CONNECTION #连接类型使用
-f FORKS #并行任务数,默认为5
-i INVENTORY #指定主机清单的路径,默认为/etc/ansible/hosts
--list-hosts #显示主机列表,可简写 --list
-m MODULE_NAME #指定模块,默认为 command 模块,如果是只执行单一命令可以不用 -m参数
-o #压缩输出,尝试将所有结果在一行输出,一般针对收集工具使用
-S #用 su 命令
-R SU_USER #指定 su 的用户,默认为 root 用户
-s #用 sudo 命令
-U SUDO_USER #指定 sudo 到哪个用户,默认为 root 用户
-T TIMEOUT #指定 命令的超时时间,默认为10s,可在配置文件中修改
-u #--user = REMOTE_USER #远程用户,默认为 root 用户
-v #查看详细信息,-vv,-vvv递增查看更详细信息
8.2 ansible命令执行过程
- 加载配置文件,默认/etc/ansible/ansible.cfg
- 加载对应的模块文件,如command
- 通过ansible将模块或命令生成对应的临时py文件,并将该文件传输至远程服务器的对应执行用户$HOME/.ansible/temp/ansible-temp-数字/xxx.py文件
- 给文件+x执行
- 执行并返回结果
- 删除临时py文件,sleep 0退出
8.3 执行状态
- 绿色:执行成功并且不需要做改变的操作
- 黄色:执行成功并且对目标主机做变更
- 红色:执行失败
9. ansible常用模块(重点)
ansible-doc:显示模块帮助
ansible-doc [options][module]
-a 显示所有模块的文档
-l,--list 列出可用模块
-s,-snippet 显示指定模块的playbook片段
9.1 ping 模块(测试主控端与被控端的连通性)
ansible-doc ping #显示ping模块的帮助信息
ansible [host-pattern] -m ping #--host-pattern表示主机清单中添加的ip或者主机名 ;或者表示主机清单添加的组名;或者可以直接使用all表示全部被控端
举例如下:ansible 127.0.0.1:127.0.0.2 -m ping 或 ansible group1 -m ping
扩展知识:[host-pattern] 表示方式:逻辑或(:) 逻辑与(:&) 通配符(*) ,逻辑非(:!)
假设主机清单维护如下:
[group1]
127.0.0.1
127.0.0.2
[group2]
127.0.0.1
127.0.0.3
举例:正常host-pattern使用这些特殊关系需要用单引号包裹,逻辑或可省略
1.测试group1或者group2的连通性 ,命令如下:(结果为:两者之间的并集)
ansible group1:group2 -m ping
2. 测试group1且group2的连通性,命令如下(结果为:两者之间的交集)
ansible 'group1:&group2' -m ping
3.测试127.0.0开头的连通性,命令如下
ansible 127.0.0.* -m ping
4.测试在group1且不在group2的连通性,命令如下
ansible 'group1:!group2' -m ping
9.2 command 模块
command 模块可以帮助我们在远程主机上执行命令。
注意:使用 command 模块在远程主机中执行命令时,不会经过远程主机的 shell 处理,在使用 command 模块时,如果需要执行的命令中含有重定向、管道符等操作时,这些符号也会失效,比如”<”, “>”, “|”, “;” 和 “&” 这些符号,如果你需要这些功能,可以参考后面介绍的 shell 模块。还有一点需要注意,如果远程节点是 windows 操作系统,则需要使用 win_command 模块。
执行 ansible 时,不加 -m 默认使用 command ,可以在 /etc/ansible/ansible.cfg 中修改。
# default module name for /usr/bin/ansible
#module_name = command
ansible-doc command #显示command模块的帮助信息
该模块下常用的几个命令:
chdir # 先切换到该路径下,执行命令
executable # 切换shell来执行命令,需要使用命令的绝对路径
free_form # 要执行的Linux指令,一般使用Ansible的-a参数代替。
creates # 输入一个文件名,当这个文件存在,则该命令不执行
removes # 输入一个文件名,这个文件不存在,则该命令不执行
举例:
1.需求:显示所有被控端的根目录下root文件夹的信息
ansible all -m command -a 'ls /root'

也可以写成如下,效果一样
ansible all -m command -a 'chdir=/root ls'
2. 需求:当所有被控端根目录下的root目录下存在123.txt文件时,不执行ls
ansible all -m command -a 'creates=/root/123.txt ls'
[注:我的被控端/root/下不存在123.txt 所以会执行ls]

3. 需求:当所有被控端根目录下的root目录下不存在123.txt文件时,不执行ls
ansible all -m command -a 'removes=/root/123.txt ls'
[注:我的被控端/root/下不存在123.txt 所以不会执行ls]

9.3 shell模块
执行的命令中含有重定向、管道符等操作时,这些符号也会失效,比如”<”, “>”, “|”, “;” 和 “&” 这些符号,此时使用shell模块.
基本command模块能执行的命令,shell模块都能执行,还能执行特殊符号,我们可以直接使用shell替代command模块
ansible-doc shell #查看shell模块的帮助信息(参数与command模块大部分一致)
该模块下常用的几个命令:
chdir # 先切换到该路径下,执行命令
executable # 切换shell来执行命令,需要使用命令的绝对路径
free_form # 要执行的Linux指令,一般使用Ansible的-a参数代替。
creates # 输入一个文件名,当这个文件存在,则该命令不执行
removes # 输入一个文件名,这个文件不存在,则该命令不执行
举例:
1.需求:查看所有被控端的主机名称
ansible all -m shell -a 'echo $HOSTNAME'

9.4 script模块
该模块用于将主控端的脚本在被控端上运行。
ansible-doc script #显示script模块的帮助信息
命令参数跟command以及shell模块大部分一样
首先,我们写一个脚本,并给其加上执行权限,举例如下:
1.需求:输出所有被控端的主机信息
mkdir -p /data/ansible
vi /data/ansible/ansible_test.sh
--ansible_test.sh内容如下:
#!/bin/bash
hostname
--保存退出后加执行权限,然后执行脚本
chmod +x /data/ansible/ansible_test.sh
ansible all -m script -a './data/ansible/ansible_test.sh'
--查看所有被控端下生成的df_detail.log文件信息
ansible all -m shell -a 'removes=/root/detail.log cat /root/df_detail.log'
9.5 copy模块
ansible-doc copy #显示copy模块的帮助信息
这个模块用于将主控端的文件复制到被控端,同时支持给定内容生成文件和修改权限等。
命令参数
src #源文件,被复制到被控端的主控端文件。绝对路径或者相对路径都行。如果填写的是一个目录,则会递归复制"
content #直接填写文件的内容【对于文件内容少的情况,可以直接声明】
dest #将源文件复制到的被控端的绝对路径【这个参数必须要有】
backup #当文件内容发生改变后,在覆盖之前把源文件备份,备份文件包含时间信息
mode #指定文件权限,默认系统权限
force #当被控端包含该文件,但内容不同时,设为"yes",表强制覆盖;设为"no",表示被控端的目标位置不存在该文件才复制。默认为"yes"
own #文件的所有者
举例:
1.需求:将主控端的/data/ansible/ansible_test.sh文件复制到所有被控端上的/root下,覆盖之前需要备份,文件权限给到644
ansible all -m copy -a 'src=/data/ansible/ansible_test.sh dest=/root backup=true mode=644 '
9.6 fetch模块
ansible-doc fetch #显示fetch模块的帮助信息
这个模块用于将被控端的单个文件传送到主控端。【跟copy模块正好相反】
命令参数:
dest #用来存放文件的目录【这个参数必须要有】(
src #被控端中的文件,并且必须是单个文件,不能是目录 【这个参数必须要有】
举例:假设命令如下:
ansible all -m fetch -a 'dest=/backup src=/etc/profile'
那么主控端的文件路径为: /backup/被控端主机名/etc/profile
9.7 file模块
ansible-doc file #显示file模块的帮助信息
file模块用于设置文件的各种属性
命令参数(只列举常用的):
force #当state=link的时候,可配合此参数强制创建链接文件,当force=yes时,表示强制创建链接文件。不过强制创建链接文件分为三种情况。情况一:当要创建的链接文件指向的源文件并不存在时,使用此参数,可以先强制创建出链接文件。情况二:当要创建链接文件的目录中已经存在与链接文件同名的文件时,将force设置为yes,会将同名文件覆盖为链接文件,相当于删除同名文件,创建链接文件。情况三:当要创建链接文件的目录中已经存在与链接文件同名的文件,并且链接文件指向的源文件也不存在,这时会强制替换同名文件为链接文件。
group #用于指定被操作文件的属组,属组对应的组必须在远程主机中存在,否则会报错。
mode #用于指定被操作文件的权限,比如,如果想要将文件权限设置为”rw-r-x---“,则可以使用mode=650进行设置,或者使用mode=0650,效果也是相同的。如果想要设置特殊权限,比如为二进制文件设置suid,则可以使用mode=4700。
owner #用于指定被操作文件的属主,属主对应的用户必须在远程主机中存在,否则会报错。
recurse #当要操作的文件为目录,将recurse设置为yes,可以递归的修改目录中文件的属性,此时state必须是directory。
src #当state设置为link或者hard时,表示我们想要创建一个软链或者硬链,所以,我们必须指明软链或硬链链接的哪个文件,通过src参数即可指定链接源。
path #必须参数,用于指定要操作的文件或目录,在之前版本的ansible中,使用dest参数或者name参数指定要操作的文件或目录,为了兼容之前的版本,使用dest或name也可以。
state #状态,有以下选项:
directory:如果目录不存在,就创建目录
file:如果文件不存在,那么它将不会被创建
link:创建软链接
hard:创建硬链接
touch:如果文件不存在,则会创建一个新的文件,如果文件或目录已存在,则更新其最后修改时间
absent:删除目录、文件或者取消链接文件
举例:
1.需求:在所有被控端的/root下创建一个file_test.txt文件
ansible all -m file -a 'path=/root/file_test.txt state=touch'
2.需求:在所有被控端的/root下删除file_test.txt文件
ansible all -m file -a 'path=/root/file_test.txt state=absent'
3.需求:在所有被控端下创建/data/ansible目录,然后创建file_test.txt,file_test1.txt,file_test2.txt共三个文件名
ansible all -m file -a 'path=/data/ansible state=directory'
ansible all -m file -a 'path=/data/ansible/file_test.txt state=touch'
ansible all -m file -a 'path=/data/ansible/file_test1.txt state=touch'
ansible all -m file -a 'path=/data/ansible/file_test2.txt state=touch'
4.需求:将所有被控端/data/ansible/下的所有文件权限改成755
ansible all -m file -a 'path=/data/ansible state=directory recurse=yes mode=755'
9.8 cron模块
ansible-doc cron #显示cron模块的帮助信息
cron 模块可以帮助我们管理远程主机中的计划任务,功能相当于 crontab 命令。
命令参数:
minute #设置cron计划中的分钟值,分钟设定位的值默认为"*"。
hour #设置cron计划中小时值,小时设定位的值默认为"*"。
day #设置cron计划中的日值,日设定位的值默认为"*"。
month #设置cron计划中月值,月设定位的值默认为"*"。
weekday #此参数用于设置计划任务中周几设定位的值,周几设定位的值默认为"*"。
special_time #计划任务的时间设定格式为 @reboot 或者@hourly。@reboot 表示重启时执行,@hourly 表示每小时执行一次,相当于设置成"0 0 * * *" ,这种@开头的时间设定格式则需要使用 special_time 参数进行设置,special_time 参数的可用值有 reboot(重启后)、yearly(每年)、annually(每年,与yearly相同)、monthly(每月)、weekly(每周)、daily(每天)、hourly(每时)。
user #此参数用于设置当前计划任务属于哪个用户,当不使用此参数时,默认为管理员用户。
job #此参数用于指定计划的任务中需要实际执行的命令或者脚本
name #此参数用于设置计划任务的名称,计划任务的名称会在注释中显示,当不指定计划任务的名称时,ansible 会默认为计划任务加入注释,注释的内容为 #Ansible: None,假设指定计划任务的名称为 test,那么注释的内容为#Ansible: test,在一台机器中,计划任务的名称应该具有唯一性,方便我们以后根据名称修改或删除计划任务。
state #当计划任务有名称时,我们可以根据名称修改或删除对应的任务,当删除计划任务时,需要将 state 的值设置为 absent。
disabled #当计划任务有名称时,我们可以根据名称使对应的任务"失效"(注释掉对应的任务)。注意,使用此参数时,除了需要指定任务的名称,还需要同时指定任务的job 以及任务的时间设定,而且任务的时间设定必须和对应任务完全相同,否则在注释任务的同时,任务的时间设定会被修改,除非你确定这样做。
backup #如果此参数的值设置为 yes,那么当修改或者删除对应的计划任务时,会先对计划任务进行备份,然后再对计划任务进行修改或者删除,cron 模块会在远程主机的 /tmp 目录下创建备份文件,以 crontab 开头并且随机加入一些字符,具体的备份文件名称会在返回信息的 backup_file 字段中看到,推荐将此参数设置为 yes。
注意:当上述时间单位设定参数都未指定时,计划任务的时间设定默认会被设定为"* * * * *",这样表示每秒都会执行一次计划任务,所以,在使用cron模块时,我们应该确定对应的时间参数设置正确。
举例:
1.需求:定义一个cron任务为:wall_test每分钟输出广播hell world
ansible all -m cron -a 'minute=* job="/usr/bin/wall hollo world" name=wall_test'
主控端查看cron任务是否已经配置成功
ansible all -m shell -a 'crontab -l'

被控端可以看到广播成功

2.需求:将任务wall_test失效
ansible all -m cron -a ' job="/usr/bin/wall hollo world" name=wall_test disabled=yes'
3.需求:将任务wall_test删除
ansible all -m cron -a 'job="/usr/bin/wall hollo world" name=wall_test state=absent'
9.9 yum模块
ansible-doc yum #显示yum模块的帮助信息
yum 模块可以帮助我们在远程主机上通过 yum 源管理软件包(必须要求远程主机已经安装yum)。
命令参数:
name #必须参数,用于指定需要管理的软件包,比如 httpd。
state #用于指定软件包的状态 ,默认值为None但实际默认操作时present,“present”和“installed”只会确保所需的包已经安装。除了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 参数可以同时使用。
update_cache #是否强制更新缓存 yes/no
举例:
1.需求:给所有被控端安装httpd
ansible all -m yum -a 'name=httpd state=present'
(如果需要一次安装多个软件,用逗号分隔 如ansible all -m yum -a 'name=httpd,mysql state=present')
如果有时遇到安装失败,可能是缓存问题,清空缓存再安装,命令如下
ansible all -m yum -a 'name=httpd state=present update_cache=yes'

9.10 archive/unarchive 模块
ansible-doc unarchive #查看unarchive模块的帮助信息
解压缩模块
1、将ansible主控端上的压缩包在本地解压缩后传到被控端上,这种情况下,copy=yes
2、将被控端上的某个压缩包解压缩到指定路径下。这种情况下,需要设置copy=no
命令参数:
copy:在解压文件之前,是否先将文件复制到远程主机,默认为yes。若为no,则要求目标主机上压缩包必须存在(该选项已弃用,改为' remote_src')。
creates:指定一个文件名,当该文件存在时,则解压指令不执行
dest:归档文件应解包的远程绝对路径。
group:解压后的目录或文件的属组
list_files:如果为yes,则会列出压缩包里的文件,默认为no,2.0版本新增的选项
mode:解决后文件的权限
remote_src:设置为' yes'表示归档文件在被控端上,而不是主控端。此选项与“copy”互斥。
src:指定压缩文件的源路径 (必须的)
owner:解压后文件或目录的所有者
举例:
1.需求:主控端将/data/ansible/ansible_test.sh压缩成target.tar,然后将target.tar解压并复制到所有被控端的/data/ansible目录下
[root@localhostVMware ansible]# cd /data/ansible/
[root@localhostVMware ansible]# tar cvf target.tar ansible_test.sh
--如果要解压的话,命令为 tar xvf target.tar
[root@localhostVMware ansible]# ansible all -m unarchive -a 'src=/data/ansible/target.tar dest=/data/ansible remote_src=no'
2.需求:将所有被控端下的/data/ansible/target.tar解压到被控端的/data/ansible目录
ansible all -m unarchive -a 'src=/data/ansible/target.tar dest=/data/ansible remote_src=yes'
注意:target.tar里包括了/data/ansible/ansible_test.sh,所以解压之后文件路径为/data/ansible/data/ansible/ansible_test.sh
ansible-doc archive #查看archive模块的帮助信息
压缩模块
命令参数:
dest: # 目标存档的文件名。当' path'通过指定glob、目录或列表中的多个路径来指向多个文件时,这是必需的。
format: # 要使用的压缩类型 (Choices: bz2, gz, tar, xz, zip)[Default: gz]
mode: # 生成的文件或目录应有的权限
owner: # 所有者
path: # (必需) 要压缩或归档的文件的远程绝对路径(会将整个路径进行压缩)
remove: # 在添加到存档文件后,删除所有添加的源文件。
exclude_path :要从存档中排除的文件的远程绝对路径、glob或路径或glob列表
举例:
1.需求:将上个例子解压缩到/data/ansible文件下的ansible_test.sh压缩成target.tar,压缩后删除源文件
ansible all -m archive -a 'path=/data/ansible/ansible_test.sh dest=/data/ansible/target.tar format=tar remove=yes'
注意:path =/data/ansible/ansible_test.sh整个进行压缩,解压的时候会生成/data/ansible/ansible_test.sh
9.11 service模块
ansible-doc service #显示service模块的帮助模块
这个模块主要是管理服务程序
命令参数:
arguments #命令行提供额外的参数enabled #设置是否开机启动。类似于【systemctl enable serverName】name= #管理的服务名runlevel #开机启动的级别,一般不用指定。sleep #在重启服务的过程中,是否睡眠state #有四种状态,分别为:started(启动)stopped(停止) restarted(重启) reloaded(重载配置)
举例:
1.需求:将httpd重启
ansible all -m service -a 'name=httpd state=restarted'
9.12 user模块
ansible-doc user #显示user模块的帮助模块
这个模块主要是管理用户
命令参数:
comment # 用户的描述信息createhome # 是否创建家目录force # 在使用state=absent时, 行为与userdel –force一致.group # 基本组groups # 附加组,如果指定为(groups=)表示删除所有组home # 用户家目录move_home # 如果设置为home=时, 试图将用户主目录移动到指定的目录name # 用户名non_unique # 该选项允许改变非唯一的用户ID值password # 用户密码remove # 在使用state=absent时, 行为是与userdel –remove一致 (相当于是否把家目录删除),shell # 默认shellstate # 设置帐号状态,不指定为创建,指定值为absent表示删除system # 当创建一个用户,设置这个用户是系统用户。这个设置不能更改现有用户uid # 用户的uid
举例:
1.需求:创建一个nginx用户
ansible all -m user 'name=nginx password=nginx'
2.需求:删除nginx用户,把家目录一起删除
ansible all -m user 'name=nginx state=absent remove=yes'
9.13 group模块
ansible-doc group#显示group模块的帮助模块
这个模块主要是管理组
命令参数:
gid #组的gidname #组的名称state #组的状态,默认为创建,absent表示删除system #是否创建为系统组,值为:yes/no
举例:
1.需求:建立一个nginx组,为系统组
ansible all -m group -a 'name=nginx system=yes'
2.需求:删除nginx组
ansible all -m group -a 'name=nginx state=absent'
浙公网安备 33010602011771号