自动化运维-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)下面只列出比较重要且常用的配置文件

    1. /etc/ansible/ansible.cfg --ansible主配置列表
    2. /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命令执行过程

    1. 加载配置文件,默认/etc/ansible/ansible.cfg
    2. 加载对应的模块文件,如command
    3. 通过ansible将模块或命令生成对应的临时py文件,并将该文件传输至远程服务器的对应执行用户$HOME/.ansible/temp/ansible-temp-数字/xxx.py文件
    4. 给文件+x执行
    5. 执行并返回结果
    6. 删除临时py文件,sleep 0退出

8.3 执行状态

    1. 绿色:执行成功并且不需要做改变的操作
    2. 黄色:执行成功并且对目标主机做变更
    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  # 默认shell
state  # 设置帐号状态,不指定为创建,指定值为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  #组的gid
name  #组的名称
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'

    

 

posted @ 2021-02-01 09:20  鸣蝉  阅读(330)  评论(1)    收藏  举报