第二十四章 ansible自动化运维工具 (2)Playbook基础使用

257 阅读4分钟

@[TOC](第二十四章 ansible自动化运维工具 (2)Playbook基础使用)


Playbook中tags使用:标签、指定某个动作

tags 标签 指定某条任务执行,用于选择运行playbook中的部分代码。ansible具有幂等性,因此会自动跳过没有变化的部分,即便如此,有些代码为测试其 确实没有发生变化的时间依然会非常地长。此时,如果确信其没有变化,就可以通过tags跳过此些代码片断

  • ansible-playbook –t tagsname useradd.yml
#在文件中添加两个标签
[root@ansible playbook]# vim httpd.yml 

  remote_user: root

  tasks:
    - name: install
      yum: name=httpd
    - name: config
      copy: src=/data/playbook/httpd.conf dest=/etc/httpd/conf/
      tags: conf			<---
      notify: restart httpd
    - name: service
      service: name=httpd state=started enabled=yes
      tags: service		<---
  handlers: 

[root@ansible playbook]# vim httpd.conf 
...
Listen 95		#端口号改为95
...
#列出'httpd.yml'中playbook标签
[root@ansible playbook]# ansible-playbook --list-tags httpd.yml 

playbook: httpd.yml

  play #1 (appsrvs): appsrvs	TAGS: []
      TASK TAGS: [conf, service]		<--可以看到'conf','service'两个标签

#只执行'conf'这个标签、不触发其他无关动作、有选择性的操作
[root@ansible playbook]# ansible-playbook -t conf httpd.yml 

Playbook中变量使用

  • 变量名:仅能由字母、数字和下划线组成,且只能以字母开头
  • 变量来源:

:one: ansible setup facts远程主机的所有变量都可直接调用
:two: 在/etc/ansible/hosts中定义 普通变量:主机组中主机单独定义,优先级高于公共变量 公共(组)变量:针对主机组中所有主机定义统一变量
:three: 通过命令行指定变量,优先级最高 ansible-playbook –e varname=value
:four: 在playbook中定义 vars:

  • var1: value1
  • var2: value2

:five: 在独立的变量YAML文件中定义
:six: 在role中定义

  1. ansible setup facts远程主机的所有变量都可直接调用
#查看指定插件支持的参数、如'setup'
[root@ansible ~]# ansible-doc -s setup

#显示当前主机各种信息、也可用'all'表示所有
[root@ansible ~]# ansible 192.168.37.6 -m setup

#查看指定的ansible主机的名称
[root@ansible ~]# ansible 192.168.37.6 -m setup -a 'filter=ansible_nodename'
192.168.37.6 | SUCCESS => {
    "ansible_facts": {
        "ansible_nodename": "centos6", 		<---主机名
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": false
}

#查看指定的ansible主机的内存大小
[root@ansible ~]# ansible 192.168.37.6 -m setup -a 'filter=ansible_memtotal_mb'
192.168.37.6 | SUCCESS => {
    "ansible_facts": {
        "ansible_memtotal_mb": 3944,  		<---内存大小
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": false
}

##查看操作系统版本
[root@ansible ~]# ansible 192.168.37.6 -m setup -a 'filter=ansible_distribution_major_version'
192.168.37.6 | SUCCESS => {
    "ansible_facts": {
        "ansible_distribution_major_version": "6", 	<---系统版本
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": false
}
[root@ansible ~]# cd /data/playbook/

[root@ansible playbook]# vim vars.yml	#在/data/目录下创建ansible主机的名称开头、log结尾的文件

---
- hosts: websrvs

  tasks:
    - name: create file
      file: name=/data/{{ansible_nodename}}.log state=touch

#检查语法
[root@ansible playbook]# ansible-playbook -C vars.yml

#执行
[root@ansible playbook]# ansible-playbook vars.yml

6\18主机

[root@centos6 ~]$ ls /data/
centos6.log  lost+found  mysql


[root@centos7-1 ~]# ls /data/
CentOS7-1.log  mysql
  1. 在/etc/ansible/hosts中定义
  • 2.1 普通变量:主机组中主机单独定义,优先级高于公共变量
[root@ansible playbook]# vim /etc/ansible/hosts
...
[websrvs]
192.168.37.6 hostname=node1			<---
192.168.37.18 hostname=node2			<---
...


[root@ansible playbook]# cp vars.yml vars2.yml 
[root@ansible playbook]# vim vars2.yml 

---
- hosts: websrvs

  tasks:
    - name: create file
      file: name=/data/{{hostname}}.log state=touch		<---修改为{{hostname}}

[root@ansible playbook]# ansible-playbook vars2.yml		#执行

6/18

[root@centos6 ~]$ ll /data/
total 20
-rw-r--r--  1 root  root      0 Jun 22 02:27 centos6.log
drwx------. 2 root  root  16384 Apr  5 01:04 lost+found
drwxr-xr-x  5 mysql mysql  4096 Jun 22 00:41 mysql
-rw-r--r--  1 root  root      0 Jun 22 02:41 node1.log		<---


[root@centos7-1 ~]# ll /data/
total 0
-rw-r--r-- 1 root  root    0 Jun  23 02:26 centos7-1.log
drwxr-xr-x 5 mysql mysql 295 Jun  22 01:54 mysql
-rw-r--r-- 1 root  root    0 Jun  23 02:41 node2.log		<---
  • 2.2 公共(组)变量:针对主机组中所有主机定义统一变量
[root@ansible playbook]# vim /etc/ansible/hosts
...
[websrvs]
192.168.37.6 hostname=node1
192.168.37.18 hostname=node2

[websrvs:vars]		<---#websrvs 统一变量
suf=txt		<---

[appsrvs]
192.168.37.[1:2]8
...


[root@ansible playbook]# cp vars2.yml vars3.yml 
[root@ansible playbook]# vim vars3.yml 

---
- hosts: websrvs

  tasks:
    - name: create file
      file: name=/data/{{hostname}}.{{suf}} state=touch		<---

[root@ansible playbook]# ansible-playbook vars3.yml		#执行

6/18

[root@centos6 ~]$ ll /data/
total 20
-rw-r--r--  1 root  root      0 Jun 22 02:27 centos6.log
drwx------. 2 root  root  16384 Apr  5 01:04 lost+found
drwxr-xr-x  5 mysql mysql  4096 Jun 22 00:41 mysql
-rw-r--r--  1 root  root      0 Jun 22 02:41 node1.log
-rw-r--r--  1 root  root      0 Jun 22 02:53 node1.txt

[root@centos7-1 ~]# ll /data/
total 0
-rw-r--r-- 1 root  root    0 Jun  23 02:26 centos7-1.log
drwxr-xr-x 5 mysql mysql 295 Jun  22 01:54 mysql
-rw-r--r-- 1 root  root    0 Jun  23 02:41 node2.log
-rw-r--r-- 1 root  root    0 Jun  23 02:52 node2.txt
  1. 通过命令行指定变量、优先级最高
#'-e'优先级最高
[root@ansible playbook]# ansible-playbook -e hostname=test -e suf=log vars.yml

6/18

[root@centos6 ~]$ ll /data/
total 20
-rw-r--r--  1 root  root      0 Jun 22 03:00 centos6.log	<---
drwx------. 2 root  root  16384 Apr  5 01:04 lost+found
drwxr-xr-x  5 mysql mysql  4096 Jun 22 00:41 mysql
-rw-r--r--  1 root  root      0 Jun 22 02:41 node1.log
-rw-r--r--  1 root  root      0 Jun 22 02:53 node1.txt

[root@centos7-1 ~]# ll /data/
total 0
-rw-r--r-- 1 root  root    0 Jun  23 02:59 centos7-1.log	<---
drwxr-xr-x 5 mysql mysql 295 Jun  22 01:54 mysql
-rw-r--r-- 1 root  root    0 Jun  23 02:41 node2.log
-rw-r--r-- 1 root  root    0 Jun  23 02:52 node2.txt
  1. 在PLAYBOOK中定义
[root@ansible playbook]# cp vars3.yml vars4.yml
[root@ansible playbook]# vim vars4.yml

---
- hosts: websrvs
  vars:
    - hostname: testfile
    - suf: html
  tasks:
    - name: create file
      file: name=/data/{{hostname}}.{{suf}} state=touch

[root@ansible playbook]# ansible-playbook vars4.yml	#执行

6/18

[root@centos6 ~]$ ll /data/
...
-rw-r--r--  1 root  root      0 Jun 22 03:09 testfile.html


[root@centos7-1 ~]# ll /data/
...
-rw-r--r-- 1 root  root    0 Jun  23 03:09 testfile.html

优先级排序:-e > yml文件 > hosts

#-e比'vars4.yml'中变量优先级高
[root@ansible playbook]# ansible-playbook -e hostname=file -e suf=pdf vars4.yml

6/18

[root@centos6 ~]$ ll /data/
...
-rw-r--r--  1 root  root      0 Jun 22 03:14 file.pdf


[root@centos7-1 ~]# ll /data/
...
-rw-r--r-- 1 root  root    0 623 03:14 file.pdf
  1. 在独立的变量yaml文件中定义
[root@ansible playbook]# mv vars.yml vars1.yml

[root@ansible playbook]# vim vars.yml		#创建文件、专门方变量
hostname: testnode
suf: yml


[root@ansible playbook]# cp vars4.yml vars5.yml
[root@ansible playbook]# vim vars5.yml
---
- hosts: websrvs
  vars_files: vars.yml		<--把刚刚定义文件名写入
  
  tasks:
    - name: create file
      file: name=/data/{{hostname}}.{{suf}} state=touch

[root@ansible playbook]# ansible-playbook vars5.yml		#执行

6/18

[root@centos6 ~]$ ll /data/
...
-rw-r--r--  1 root  root      0 Jun 22 03:38 testnode.yml


[root@centos7-1 ~]# ll /data/
...
-rw-r--r-- 1 root  root    0 Jun  23 03:38 testnode.yml

模板template

:one:文本文件,嵌套有脚本(使用模板编程语言编写) :two:Jinja2语言,使用字面量,有下面形式

  • 字符串:使用单引号或双引号
  • 数字:整数,浮点数
  • 列表:[item1, item2, ...]
  • 元组:(item1, item2, ...)
  • 字典:{key1:value1,key2:value2, ...}
  • 布尔型:true/false

:three:算术运算:+, -, *, /, //, %, ** :four:比较操作:==,!=, >, >=, <, <= :five:逻辑运算:and,or,not
:six:流表达式:For,If,When

#查看指定插件支持的参数、如'template'
[root@ansible playbook]# ansible-doc -s template

#创建一个模板文件夹、放模板文件
[root@ansible playbook]# mkdir /data/playbook/templates

[root@ansible playbook]# cp httpd.conf templates/httpd.conf.j2
[root@ansible playbook]# vim templates/httpd.conf.j2
...
Listen {{ httpd_port }}	<---端口号写成变量
...

#修改appsrvs组内容为下
[root@ansible playbook]# vim /etc/ansible/hosts
...
[appsrvs]
192.168.37.18 httpd_port=8018		<---端口号
192.168.37.28 httpd_port=8028		<---端口号

[root@ansible playbook]# cp httpd.yml httpd_template.yml 

[root@ansible playbook]# vim httpd_template.yml 
---
- hosts: appsrvs
  remote_user: root

  tasks:
    - name: install
      yum: name=httpd
    - name: config
      template: src=httpd.conf.j2 dest=/etc/httpd/conf/httpd.conf		<---
      tags: conf
      notify: restart httpd
    - name: service

18/28 端口号都为'95'

[root@centos7-1 ~]# ss -ntlp |grep httpd
LISTEN     0      128         :::95                      :::*                   users:(("httpd",pid=11378,fd=4),("httpd",pid=11377,fd=4),("httpd",pid=11376,fd=4),("httpd",pid=11375,fd=4),("httpd",pid=11374,fd=4),("httpd",pid=9252,fd=4))


[root@centos7-2 ~]# ss -ntlp|grep httpd
LISTEN     0      128         :::95                      :::*                   users:(("httpd",pid=14689,fd=4),("httpd",pid=14688,fd=4),("httpd",pid=14687,fd=4),("httpd",pid=14686,fd=4),("httpd",pid=14685,fd=4),("httpd",pid=8957,fd=4))

ansible主机

[root@ansible playbook]# ansible-playbook httpd_template.yml

18/28 端口号发生变化、分别为'8018'、’8028‘,同时配置文件也发生不同变化

[root@centos7-1 ~]# ss -ntlp |grep httpd
LISTEN     0      128         :::8018                    :::*                   users:(("httpd",pid=19553,fd=4),("httpd",pid=19552,fd=4),("httpd",pid=19551,fd=4),("httpd",pid=19550,fd=4),("httpd",pid=19549,fd=4),("httpd",pid=19540,fd=4))

[root@centos7-1 ~]# vim /etc/httpd/conf/httpd.conf 
...
Listen 8018
...


[root@centos7-2 ~]# ss -ntlp|grep httpd
LISTEN     0      128         :::8028                    :::*                   users:(("httpd",pid=21760,fd=4),("httpd",pid=21759,fd=4),("httpd",pid=21758,fd=4),("httpd",pid=21757,fd=4),("httpd",pid=21756,fd=4),("httpd",pid=21741,fd=4))

[root@centos7-2 ~]# vim /etc/httpd/conf/httpd.conf 
...
Listen 8028
...

ansible主机

[root@ansible playbook]# vim template/httpd.conf.j2 
...
Listen {{ httpd_port+100 }}	<--端口号+100
...

[root@ansible playbook]# ansible-playbook httpd_template.yml	#执行

18/28 看看端口号是否+100

#看看端口号是否+100
[root@centos7-1 ~]# ss -ntlp |grep httpd
LISTEN     0      128         :::8118                    :::*                   users:(("httpd",pid=20192,fd=4),("httpd",pid=20191,fd=4),("httpd",pid=20190,fd=4),("httpd",pid=20189,fd=4),("httpd",pid=20188,fd=4),("httpd",pid=20187,fd=4))

[root@centos7-2 ~]# ss -ntlp|grep httpd
LISTEN     0      128         :::8128                    :::*                   users:(("httpd",pid=22428,fd=4),("httpd",pid=22427,fd=4),("httpd",pid=22426,fd=4),("httpd",pid=22425,fd=4),("httpd",pid=22424,fd=4),("httpd",pid=22414,fd=4))

ansible主机

#查看cpu个数、显示当前有几颗cpu
[root@ansible playbook]# ansible all -m setup |grep cpu
        "ansible_processor_vcpus": 2, 
        "ansible_processor_vcpus": 2, 
        "ansible_processor_vcpus": 2, 

#可以加cpu 在这里插入图片描述

#cpu个数发生变化
[root@ansible playbook]# ansible all -m setup |grep cpu
        "ansible_processor_vcpus": 2, 
        "ansible_processor_vcpus": 2, 
        "ansible_processor_vcpus": 4, 	<--

18/28

[root@centos7-1 ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0 
TYPE="Ethernet"
BOOTPROTO="static"
DEFROUTE="yes"
NAME="eth0"
DEVICE="eth0"
ONBOOT="yes"
IPADDR=192.168.37.18
GATEWAY=192.168.37.2		 <---
DNS1=192.168.37.2		 <---
PREFIX=24


[root@centos7-2 ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0 
TYPE="Ethernet"
BOOTPROTO="static"
DEFROUTE="yes"
NAME="eth0"
DEVICE="eth0"
ONBOOT="yes"
IPADDR=192.168.37.28
GATEWAY=192.168.37.2		 <---
DNS1=192.168.37.2		 <---
PREFIX=24

ansible主机

[root@ansible playbook]# yum install nginx -y

18/28 下载epel源并启动

[root@centos7-1 ~]# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo

[root@centos7-1 ~]# yum install -y epel-release

ansible主机

[root@ansible playbook]# cp /etc/nginx/nginx.conf /data/playbook/templates/nginx.conf.j2

[root@ansible playbook]# pwd
/data/playbook
[root@ansible playbook]# vim nginx.yml

---
- hosts: appsrvs
  remote_user: root

  tasks:
    - name: install
      yum: name=nginx
    - name: service
      service: name=nginx state=started enabled=yes

[root@ansible playbook]# ansible-playbook -C nginx.yml	#检查语法
[root@ansible playbook]# ansible-playbook nginx.yml	#执行

18/28

#看看端口谁在监听、可以看到是nginx
[root@centos7-1 ~]# ss -ntlp |grep nginx
LISTEN     0      128          *:80                       *:*                   users:(("nginx",pid=20894,fd=6),("nginx",pid=20893,fd=6),("nginx",pid=20892,fd=6))
LISTEN     0      128         :::80                      :::*                   users:(("nginx",pid=20894,fd=7),("nginx",pid=20893,fd=7),("nginx",pid=20892,fd=7))

使用浏览器 192.168.37.18 会显示nginx的界面 在这里插入图片描述

#看看端口谁在监听httpd、发现是8118
[root@centos7-1 ~]# ss -ntlp |grep httpd
LISTEN     0      128         :::8118                    :::*                   users:(("httpd",pid=20948,fd=4),("httpd",pid=20947,fd=4),("httpd",pid=20946,fd=4),("httpd",pid=11156,fd=4),("httpd",pid=11155,fd=4),("httpd",pid=11154,fd=4),("httpd",pid=11153,fd=4),("httpd",pid=11152,fd=4),("httpd",pid=8948,fd=4))

而192.168.37.18:8118、是httpd界面 在这里插入图片描述ansible主机

#修改此项、使cpu进程*2
[root@ansible playbook]# vim templates/nginx.conf.j2 
...
worker_processes {{ ansible_processor_vcpus*2 }};	<---CPU个数*2
...


[root@ansible playbook]# vim nginx.yml 

---
- hosts: appsrvs
  remote_user: root

  tasks:
    - name: install
      yum: name=nginx
    - name: config	<---
      template: src=nginx.conf.j2 dest=/etc/nginx/nginx.conf	<---
      notify: restart nginx	<---
    - name: service
      service: name=nginx state=started enabled=yes

  handlers:	<---
    - name: restart nginx	<---
      service: name=nginx state=restarted	<---

18/28 查看cpu个数

[root@centos7-1 ~]# lscpu
Architecture:          x86_64
CPU op-mode(s):        32-bit, 64-bit
Byte Order:            Little Endian
CPU(s):                2		<---


[root@centos7-1 ~]# pstree -p		#nginx进程数2个、因为有2颗cpu
...
           ├─nginx(19791)─┬─nginx(19792)
           │              └─nginx(19793)
...
[root@centos7-2 ~]# lscpu
Architecture:          x86_64
CPU op-mode(s):        32-bit, 64-bit
Byte Order:            Little Endian
CPU(s):                4		<---


[root@centos7-2 ~]# pstree -p		#nginx进程数4个、因为有4颗cpu
...
           ├─nginx(11185)─┬─nginx(11186)
           │              ├─nginx(11187)
           │              ├─nginx(11188)
           │              └─nginx(11189)
...

ansible主机

[root@ansible playbook]# ansible-playbook -C nginx.yml 
[root@ansible playbook]# ansible-playbook nginx.yml 

18/28 进程数发生变化、变成'*2'

[root@centos7-1 ~]# pstree -p		#进程数从之前的2个*2、变成四个
...
           ├─nginx(19791)─┬─nginx(19792)
           │              ├─nginx(19793)
           │              ├─nginx(19794)
           │              └─nginx(19795)
...
[root@centos7-2 ~]# pstree -p		#进程数从之前的4个*2、变成八个
...
           ├─nginx(11185)─┬─nginx(11186)
           │              ├─nginx(11187)
           │              ├─nginx(11188)
           │              ├─nginx(11189)
           │              ├─nginx(11190)
           │              ├─nginx(11191)
           │              ├─nginx(11192)
           │              └─nginx(11193)
...

when条件判断

在这里插入图片描述

6主机

#安装httpd服务
[root@centos6 ~]$ yum install httpd -y

#将CentOS6版本的'http.conf'文件传过去
[root@centos6 ~]$ scp /etc/httpd/conf/httpd.conf 192.168.37.7:/data/playbook/httpd6.conf

ansible主机

#将CentOS7版本的'http.conf'改名为'http7.conf'
[root@ansible playbook]# mv httpd.conf httpd7.conf 

[root@ansible playbook]# ll	#可以看到CentOS6和CentOS7版本的httpd配置文件
...
-rw-r--r--  1 root root     34419 Jun 23 23:40 httpd6.conf
-rw-r--r--  1 root root     11753 Jun 22 01:22 httpd7.conf
...

[root@ansible playbook]# cp httpd{6,7}.conf templates/
[root@ansible playbook]# mv templates/httpd6.conf templates/httpd6.conf.j2
[root@ansible playbook]# mv templates/httpd7.conf templates/httpd7.conf.j2

#修改CentOS6版本的'httpd.conf'文件 
[root@ansible playbook]# vim templates/httpd6.conf.j2 
...
Listen {{ httpd_port }}	<---
...

#修改CentOS7版本的'httpd.conf'文件 
[root@ansible playbook]# vim templates/httpd7.conf.j2 
...
Listen {{ httpd_port }}	<---
...

[root@ansible playbook]# vim /etc/ansible/hosts

# leading 0s:

## db-[99:101]-node.example.com

[websrvs]
192.168.37.6 hostname=node1 httpd_port=6666	<---
192.168.37.18 hostname=node2 httpd_port=7777	<---

[websrvs:vars]
suf=txt

[appsrvs]
192.168.37.18	<---如果有变量、需要删除掉、负责后面的变量会覆盖上面的变量
192.168.37.28	<---
[root@ansible playbook]# cp httpd.yml httpd_when.yml 

#通过when来条件判断、版本不同拷贝的模板是不一样的
[root@ansible playbook]# vim httpd_when.yml 

    - name: config
      template: src=httpd6.conf.j2 dest=/etc/httpd/conf/httpd.conf
      tags: conf
      notify: restart httpd
      when: ansible_distribution_major_version=="6"
---
- hosts: websrvs
  remote_user: root

  tasks:
    - name: install
      yum: name=httpd
    - name: config
      template: src=httpd6.conf.j2 dest=/etc/httpd/conf/httpd.conf
      tags: conf
      notify: restart httpd
      when: ansible_distribution_major_version=="6"	<---
    - name: config
      template: src=httpd7.conf.j2 dest=/etc/httpd/conf/httpd.conf
      tags: conf
      notify: restart httpd
      when: ansible_distribution_major_version=="7"	<---
    - name: service
      service: name=httpd state=started enabled=yes
      tags: service

  handlers:
    - name: restart httpd
      service: name=httpd state=restarted


[root@ansible playbook]# ansible-playbook -C httpd_when.yml
[root@ansible playbook]# ansible-playbook httpd_when.yml

6/18 可以看到CentOS6的httpd端口6666、CentOS7的httpd端口7777

[root@centos6 ~]$ ss -ntlp| grep 6666
LISTEN     0      128                      :::6666                    :::*      users:(("httpd",36139,6),("httpd",36142,6),("httpd",36143,6),("httpd",36144,6),("httpd",36145,6),("httpd",36147,6),("httpd",36148,6),("httpd",36149,6),("httpd",36150,6))


[root@centos7-1 ~]# ss -ntlp|grep httpd
LISTEN     0      128          *:7777                     *:*                   users:(("httpd",pid=25805,=3),("httpd",pid=25801,fd=3),("httpd",pid=25800,fd=3))

迭代 with_ietms

迭代:当有需要重复性执行的任务时,可以使用迭代机制

  • 对迭代项的引用,固定变量名为"item"
  • 要在task中使用with_items给定要迭代的元素列表
  • 列表格式: -- 字符串 -- 字典

ansible主机、创建用户

#创建用户
[root@ansible playbook]# vim items.yml

---
- hosts: websrvs

  tasks:
    - name: create user
      user: name={{ item }}
      with_items:
       - tom
       - alice
       - jack
       - rose

[root@ansible playbook]# ansible-playbook -C items.yml
[root@ansible playbook]# ansible-playbook items.yml

6/18 创建了四个用户、分别是tom、alice、jack、rose

[root@centos6 ~]$ getent passwd
...
tom:x:501:501::/home/tom:/bin/bash
alice:x:502:502::/home/alice:/bin/bash
jack:x:503:503::/home/jack:/bin/bash
rose:x:504:504::/home/rose:/bin/bash


[root@centos7-1 ~]# getent passwd
...
tom:x:1001:1001::/home/tom:/bin/bash
alice:x:1002:1002::/home/alice:/bin/bash
jack:x:1003:1003::/home/jack:/bin/bash
rose:x:1004:1004::/home/rose:/bin/bash

ansible主机、删除用户及家目录

#删除用户及家目录: 删除用户'state=absent', 删除家目录'remove=yes'
[root@ansible playbook]# vim items.yml 

---
- hosts: websrvs

  tasks:
    - name: delete user
      user: name={{ item }} state=absent remove=yes
      with_items:
       - tom
       - alice
       - jack
       - rose

[root@ansible playbook]# ansible-playbook items.yml

6/18 4个用户已经删除、家目录也被删除

[root@centos6 ~]$ getent passwd
[root@centos6 ~]$ ll /home/
total 4
drwx------. 4 wang wang 4096 Apr  5 01:14 wang


[root@centos7-1 ~]# getent passwd
[root@centos7-1 ~]# ll /home/
total 0
drwx------. 3 wang wang 78 Apr  11 2018 wang