ansible批量管理服务工具 ansible批量管理服务工具 批量管理服务器的工具 三种批量管理工具 jkenkins简介 Ansible服务器简单的综合安全管理策略 ansible查看帮助 安装ansible流程 如果Centos7版本 7.5yum安装ansible 安装支持包 下载python源码包 源码编译Python3.5 静心等待ansible安装完毕后 ansible的简单配置 ansible命令使用格式 command模块发布命令使用格式 ping模块发布命令使用格式 shell模块发布命令使用格式 raw模块使用格式仅通过ssh实现 copy模块注意事项 copy模块拷贝文件目录使用格式 script模块批量运行脚本使用格式 cron定时任务模块 yum模块批量安装软件包 user模块批量创建用户 setup模块批量查看服务的所有属性 ansible-playbook的初步使用 下发配置文件里面使用判断语法 Playbook下发可变配置文件 playbook使用register

ansible批量管理服务工具

 

 

批量管理服务器的工具

 
  1. 无须部署agent,通过ssh进行管理
  2. 流行的自动化运维工具:https://github.con/ansible/ansible
 

三种批量管理工具

 
  1. ansible (so easy) 500以下服务器
  2. saltstack (比较复杂) 10004万服务器
  3. puppet (超级复杂) 只有很老企业在用
 

jkenkins简介

 
  1. 可视化运维(主要用在可视化部署)
  2. 持续构建,可以和git,svn结合(存放开发代码的仓库)
  3. 可结合ssh实现可视化运维
  4. 可结合ansible实现可视化运维
 

Ansible服务器简单的综合安全管理策略

 
  1. #禁止非root用户查看Ansible管理服务器端/etc/hosts文件
  2. [root@ansible ~]# ll /etc/hosts
  3. -rw-r--r--. 1 root root 180 9 9 00:38 /etc/hosts
  4. [root@ansible ~]# chmod 600 /etc/hosts
  5. #禁止非root用户查看Ansible的主机清单配置文件
  6. [root@ansible ~]# ll /etc/ansible/hosts
  7. -rw-r--r-- 1 root root 87 9 9 21:59 /etc/ansible/hosts
  8. [root@ansible ~]# chmod 600 /etc/ansible/hosts
 

ansible查看帮助

 
  1. /usr/local/python/bin/ansible-doc -l(查看总帮助)
  2. /usr/local/python/bin/ansible-doc -s shell(查看shell模块的帮助)
  3. /usr/local/python/bin/ansible-doc -s raw
 

安装ansible流程

 

如果Centos7版本

需要安装yum -y install net-toolsvim

关闭防火墙:systemctl stop firewalld 关闭防火墙开机启动:systemctl disable fierwalld

关闭selinux

 

7.5yum安装ansible

7.5yum仓库全可以用,本地的需要自己手动打开

yum -y install epel-release

yum -y install ansible (自动安装sshpass软件包)

 

安装支持包

yum -y install lrzsz vim net-tools gcc gcc-c++ ncurses ncurses-devel unzip zlib-devel zlib openssl-devel openssl libffi-devel

 

下载python源码包

链接:https://pan.baidu.com/s/1nE0v2fN6dq4FHfhSTbBnsg 
提取码:ud04

需要云yum

wget https://www.python.org/ftp/python/3.5.2/Python-3.5.2.tgz

 

源码编译Python3.5

tar xf Python-3.5.2.tgz -C /usr/src

cd /usr/src/Python-3.5.2

./configure --prefix=/usr/local/python

make && make install

ln -s /usr/local/python/bin/python3 /usr/bin/python3(制作软链接)

which python3(查看命令是否存在)

python3 -V(查询python版本)

 

静心等待ansible安装完毕后

ln -s /usr/local/python/bin/ansible /usr/local/bin(制作软链接)

which ansible(查看命令是否存在)

ansible --version(查看ansible版本)

 

ansible的简单配置

通过pip安装的ansible是没有配置文件的

mkdir -p /etc/ansible(默认没有,需要手动创建)

vim /etc/ansible/hosts(默认没有,需要手动创建)

 

ansible命令使用格式

ansible -i 主机或主机组 -m 指定模块 -a 命令 (-i指定配置文件,不写就默认路径下/etc/ansible/hosts,-m指定模块,-a发布命令)

 

command模块发布命令使用格式

(对方需要有python包,发布命令)

ansible nginx -m command -a 'hostname -I' 
(分发模块内容格式,nginx是模块名,-a是条件,-m command是调用ansible里面的模块发布命令用)

ansible client2 -m command -a 'hostname -I' 
(分发单个主机格式,client2是主机名,-a是条件,-m command是调用ansible里面的模块发布命令用)

ansible client1 -m command -a 'hostname -I' 
(分发单个主机格式,client1是主机名,-a是条件,-m command是调用ansible里面的模块发布命令用)

ansible client1:client2 -m command -a 'hostname -I' 
(分发多个主机格式,client1:client2是主机名,-a是条件,-m command是调用ansible里面的模块发布命令用)

ansible all -m command -a 'hostname -I' 
(all是分发所有主机格式,-a是条件,-m command是调用ansible里面的模块发布命令用)

 
ansible批量管理服务工具
ansible批量管理服务工具
批量管理服务器的工具
三种批量管理工具
jkenkins简介
Ansible服务器简单的综合安全管理策略
ansible查看帮助
安装ansible流程
如果Centos7版本
7.5yum安装ansible
安装支持包
下载python源码包
源码编译Python3.5
静心等待ansible安装完毕后
ansible的简单配置
ansible命令使用格式
command模块发布命令使用格式
ping模块发布命令使用格式
shell模块发布命令使用格式
raw模块使用格式仅通过ssh实现
copy模块注意事项
copy模块拷贝文件目录使用格式
script模块批量运行脚本使用格式
cron定时任务模块
yum模块批量安装软件包
user模块批量创建用户
setup模块批量查看服务的所有属性
ansible-playbook的初步使用
下发配置文件里面使用判断语法
Playbook下发可变配置文件
playbook使用register输出命令运行结果
playbook的自定义变量和内置变量
playbook的简单shell模块的使用
playbook的简单copy模块的使用
Playbook的notify通知和下发nginx配置
nginx配置下发并检测
ansible的script模块批量运行脚本
使用roles标准化Playbook
ansible批量管理企业案例 
ansible批量管理服务工具
ansible批量管理服务工具
批量管理服务器的工具
三种批量管理工具
jkenkins简介
Ansible服务器简单的综合安全管理策略
ansible查看帮助
安装ansible流程
如果Centos7版本
7.5yum安装ansible
安装支持包
下载python源码包
源码编译Python3.5
静心等待ansible安装完毕后
ansible的简单配置
ansible命令使用格式
command模块发布命令使用格式
ping模块发布命令使用格式
shell模块发布命令使用格式
raw模块使用格式仅通过ssh实现
copy模块注意事项
copy模块拷贝文件目录使用格式
script模块批量运行脚本使用格式
cron定时任务模块
yum模块批量安装软件包
user模块批量创建用户
setup模块批量查看服务的所有属性
ansible-playbook的初步使用
下发配置文件里面使用判断语法
Playbook下发可变配置文件
playbook使用register输出命令运行结果
playbook的自定义变量和内置变量
playbook的简单shell模块的使用
playbook的简单copy模块的使用
Playbook的notify通知和下发nginx配置
nginx配置下发并检测
ansible的script模块批量运行脚本
使用roles标准化Playbook
ansible批量管理企业案例
ansible批量管理服务工具
ansible批量管理服务工具
批量管理服务器的工具
三种批量管理工具
jkenkins简介
Ansible服务器简单的综合安全管理策略
ansible查看帮助
安装ansible流程
如果Centos7版本
7.5yum安装ansible
安装支持包
下载python源码包
源码编译Python3.5
静心等待ansible安装完毕后
ansible的简单配置
ansible命令使用格式
command模块发布命令使用格式
ping模块发布命令使用格式
shell模块发布命令使用格式
raw模块使用格式仅通过ssh实现
copy模块注意事项
copy模块拷贝文件目录使用格式
script模块批量运行脚本使用格式
cron定时任务模块
yum模块批量安装软件包
user模块批量创建用户
setup模块批量查看服务的所有属性
ansible-playbook的初步使用
下发配置文件里面使用判断语法
Playbook下发可变配置文件
playbook使用register输出命令运行结果
playbook的自定义变量和内置变量
playbook的简单shell模块的使用
playbook的简单copy模块的使用
Playbook的notify通知和下发nginx配置
nginx配置下发并检测
ansible的script模块批量运行脚本
使用roles标准化Playbook
ansible批量管理企业案例

 

ping模块发布命令使用格式

(对方需要有python包)

ping模块检查服务器是否连接正常,ping模块不需要-a指定参数

ansible all -m ping (ansible的ping模块格式)

 

shell模块发布命令使用格式

(对方需要有python包)

shell模块支持管道符格式 
ansible all -m shell -a 'echo test | grep t'

shell模块支持重定向格式 
ansible all -m shell -a "echo bb >> /tmp/testansible"

shell模块支持awk格式 
ansible all -m shell -a "cat /etc/passwd | awk -F":" '{print $1}'" (如果遇到特殊符号需要加入转义)


ansible批量管理服务工具
ansible批量管理服务工具
批量管理服务器的工具
三种批量管理工具
jkenkins简介
Ansible服务器简单的综合安全管理策略
ansible查看帮助
安装ansible流程
如果Centos7版本
7.5yum安装ansible
安装支持包
下载python源码包
源码编译Python3.5
静心等待ansible安装完毕后
ansible的简单配置
ansible命令使用格式
command模块发布命令使用格式
ping模块发布命令使用格式
shell模块发布命令使用格式
raw模块使用格式仅通过ssh实现
copy模块注意事项
copy模块拷贝文件目录使用格式
script模块批量运行脚本使用格式
cron定时任务模块
yum模块批量安装软件包
user模块批量创建用户
setup模块批量查看服务的所有属性
ansible-playbook的初步使用
下发配置文件里面使用判断语法
Playbook下发可变配置文件
playbook使用register输出命令运行结果
playbook的自定义变量和内置变量
playbook的简单shell模块的使用
playbook的简单copy模块的使用
Playbook的notify通知和下发nginx配置
nginx配置下发并检测
ansible的script模块批量运行脚本
使用roles标准化Playbook
ansible批量管理企业案例
ansible批量管理服务工具
ansible批量管理服务工具
批量管理服务器的工具
三种批量管理工具
jkenkins简介
Ansible服务器简单的综合安全管理策略
ansible查看帮助
安装ansible流程
如果Centos7版本
7.5yum安装ansible
安装支持包
下载python源码包
源码编译Python3.5
静心等待ansible安装完毕后
ansible的简单配置
ansible命令使用格式
command模块发布命令使用格式
ping模块发布命令使用格式
shell模块发布命令使用格式
raw模块使用格式仅通过ssh实现
copy模块注意事项
copy模块拷贝文件目录使用格式
script模块批量运行脚本使用格式
cron定时任务模块
yum模块批量安装软件包
user模块批量创建用户
setup模块批量查看服务的所有属性
ansible-playbook的初步使用
下发配置文件里面使用判断语法
Playbook下发可变配置文件
playbook使用register输出命令运行结果
playbook的自定义变量和内置变量
playbook的简单shell模块的使用
playbook的简单copy模块的使用
Playbook的notify通知和下发nginx配置
nginx配置下发并检测
ansible的script模块批量运行脚本
使用roles标准化Playbook
ansible批量管理企业案例

 

raw模块使用格式仅通过ssh实现

(不依赖python包)

 
ansible批量管理服务工具
ansible批量管理服务工具
批量管理服务器的工具
三种批量管理工具
jkenkins简介
Ansible服务器简单的综合安全管理策略
ansible查看帮助
安装ansible流程
如果Centos7版本
7.5yum安装ansible
安装支持包
下载python源码包
源码编译Python3.5
静心等待ansible安装完毕后
ansible的简单配置
ansible命令使用格式
command模块发布命令使用格式
ping模块发布命令使用格式
shell模块发布命令使用格式
raw模块使用格式仅通过ssh实现
copy模块注意事项
copy模块拷贝文件目录使用格式
script模块批量运行脚本使用格式
cron定时任务模块
yum模块批量安装软件包
user模块批量创建用户
setup模块批量查看服务的所有属性
ansible-playbook的初步使用
下发配置文件里面使用判断语法
Playbook下发可变配置文件
playbook使用register输出命令运行结果
playbook的自定义变量和内置变量
playbook的简单shell模块的使用
playbook的简单copy模块的使用
Playbook的notify通知和下发nginx配置
nginx配置下发并检测
ansible的script模块批量运行脚本
使用roles标准化Playbook
ansible批量管理企业案例 
ansible批量管理服务工具
ansible批量管理服务工具
批量管理服务器的工具
三种批量管理工具
jkenkins简介
Ansible服务器简单的综合安全管理策略
ansible查看帮助
安装ansible流程
如果Centos7版本
7.5yum安装ansible
安装支持包
下载python源码包
源码编译Python3.5
静心等待ansible安装完毕后
ansible的简单配置
ansible命令使用格式
command模块发布命令使用格式
ping模块发布命令使用格式
shell模块发布命令使用格式
raw模块使用格式仅通过ssh实现
copy模块注意事项
copy模块拷贝文件目录使用格式
script模块批量运行脚本使用格式
cron定时任务模块
yum模块批量安装软件包
user模块批量创建用户
setup模块批量查看服务的所有属性
ansible-playbook的初步使用
下发配置文件里面使用判断语法
Playbook下发可变配置文件
playbook使用register输出命令运行结果
playbook的自定义变量和内置变量
playbook的简单shell模块的使用
playbook的简单copy模块的使用
Playbook的notify通知和下发nginx配置
nginx配置下发并检测
ansible的script模块批量运行脚本
使用roles标准化Playbook
ansible批量管理企业案例

 

copy模块注意事项

yum -y install libselinux-python(传送失败的话说明对方没有这个支持包)

 

copy模块拷贝文件目录使用格式

ansible all -m copy -a 'src=/root/xin dest=/tmp' 
(src源文件,dest目标位置,对方没有目录模块自动创建)


ansible批量管理服务工具
ansible批量管理服务工具
批量管理服务器的工具
三种批量管理工具
jkenkins简介
Ansible服务器简单的综合安全管理策略
ansible查看帮助
安装ansible流程
如果Centos7版本
7.5yum安装ansible
安装支持包
下载python源码包
源码编译Python3.5
静心等待ansible安装完毕后
ansible的简单配置
ansible命令使用格式
command模块发布命令使用格式
ping模块发布命令使用格式
shell模块发布命令使用格式
raw模块使用格式仅通过ssh实现
copy模块注意事项
copy模块拷贝文件目录使用格式
script模块批量运行脚本使用格式
cron定时任务模块
yum模块批量安装软件包
user模块批量创建用户
setup模块批量查看服务的所有属性
ansible-playbook的初步使用
下发配置文件里面使用判断语法
Playbook下发可变配置文件
playbook使用register输出命令运行结果
playbook的自定义变量和内置变量
playbook的简单shell模块的使用
playbook的简单copy模块的使用
Playbook的notify通知和下发nginx配置
nginx配置下发并检测
ansible的script模块批量运行脚本
使用roles标准化Playbook
ansible批量管理企业案例 
ansible批量管理服务工具
ansible批量管理服务工具
批量管理服务器的工具
三种批量管理工具
jkenkins简介
Ansible服务器简单的综合安全管理策略
ansible查看帮助
安装ansible流程
如果Centos7版本
7.5yum安装ansible
安装支持包
下载python源码包
源码编译Python3.5
静心等待ansible安装完毕后
ansible的简单配置
ansible命令使用格式
command模块发布命令使用格式
ping模块发布命令使用格式
shell模块发布命令使用格式
raw模块使用格式仅通过ssh实现
copy模块注意事项
copy模块拷贝文件目录使用格式
script模块批量运行脚本使用格式
cron定时任务模块
yum模块批量安装软件包
user模块批量创建用户
setup模块批量查看服务的所有属性
ansible-playbook的初步使用
下发配置文件里面使用判断语法
Playbook下发可变配置文件
playbook使用register输出命令运行结果
playbook的自定义变量和内置变量
playbook的简单shell模块的使用
playbook的简单copy模块的使用
Playbook的notify通知和下发nginx配置
nginx配置下发并检测
ansible的script模块批量运行脚本
使用roles标准化Playbook
ansible批量管理企业案例

ansible all -m copy -a 'src=/root/xin dest=/tmp backup=yes' 
(src源文件,dest目标位置,backup=yes覆盖同时是否备份源文件)


ansible批量管理服务工具
ansible批量管理服务工具
批量管理服务器的工具
三种批量管理工具
jkenkins简介
Ansible服务器简单的综合安全管理策略
ansible查看帮助
安装ansible流程
如果Centos7版本
7.5yum安装ansible
安装支持包
下载python源码包
源码编译Python3.5
静心等待ansible安装完毕后
ansible的简单配置
ansible命令使用格式
command模块发布命令使用格式
ping模块发布命令使用格式
shell模块发布命令使用格式
raw模块使用格式仅通过ssh实现
copy模块注意事项
copy模块拷贝文件目录使用格式
script模块批量运行脚本使用格式
cron定时任务模块
yum模块批量安装软件包
user模块批量创建用户
setup模块批量查看服务的所有属性
ansible-playbook的初步使用
下发配置文件里面使用判断语法
Playbook下发可变配置文件
playbook使用register输出命令运行结果
playbook的自定义变量和内置变量
playbook的简单shell模块的使用
playbook的简单copy模块的使用
Playbook的notify通知和下发nginx配置
nginx配置下发并检测
ansible的script模块批量运行脚本
使用roles标准化Playbook
ansible批量管理企业案例 
ansible批量管理服务工具
ansible批量管理服务工具
批量管理服务器的工具
三种批量管理工具
jkenkins简介
Ansible服务器简单的综合安全管理策略
ansible查看帮助
安装ansible流程
如果Centos7版本
7.5yum安装ansible
安装支持包
下载python源码包
源码编译Python3.5
静心等待ansible安装完毕后
ansible的简单配置
ansible命令使用格式
command模块发布命令使用格式
ping模块发布命令使用格式
shell模块发布命令使用格式
raw模块使用格式仅通过ssh实现
copy模块注意事项
copy模块拷贝文件目录使用格式
script模块批量运行脚本使用格式
cron定时任务模块
yum模块批量安装软件包
user模块批量创建用户
setup模块批量查看服务的所有属性
ansible-playbook的初步使用
下发配置文件里面使用判断语法
Playbook下发可变配置文件
playbook使用register输出命令运行结果
playbook的自定义变量和内置变量
playbook的简单shell模块的使用
playbook的简单copy模块的使用
Playbook的notify通知和下发nginx配置
nginx配置下发并检测
ansible的script模块批量运行脚本
使用roles标准化Playbook
ansible批量管理企业案例

 
(owner=属主是谁,group=属组是谁,mode=它权限)


ansible批量管理服务工具
ansible批量管理服务工具
批量管理服务器的工具
三种批量管理工具
jkenkins简介
Ansible服务器简单的综合安全管理策略
ansible查看帮助
安装ansible流程
如果Centos7版本
7.5yum安装ansible
安装支持包
下载python源码包
源码编译Python3.5
静心等待ansible安装完毕后
ansible的简单配置
ansible命令使用格式
command模块发布命令使用格式
ping模块发布命令使用格式
shell模块发布命令使用格式
raw模块使用格式仅通过ssh实现
copy模块注意事项
copy模块拷贝文件目录使用格式
script模块批量运行脚本使用格式
cron定时任务模块
yum模块批量安装软件包
user模块批量创建用户
setup模块批量查看服务的所有属性
ansible-playbook的初步使用
下发配置文件里面使用判断语法
Playbook下发可变配置文件
playbook使用register输出命令运行结果
playbook的自定义变量和内置变量
playbook的简单shell模块的使用
playbook的简单copy模块的使用
Playbook的notify通知和下发nginx配置
nginx配置下发并检测
ansible的script模块批量运行脚本
使用roles标准化Playbook
ansible批量管理企业案例 
ansible批量管理服务工具
ansible批量管理服务工具
批量管理服务器的工具
三种批量管理工具
jkenkins简介
Ansible服务器简单的综合安全管理策略
ansible查看帮助
安装ansible流程
如果Centos7版本
7.5yum安装ansible
安装支持包
下载python源码包
源码编译Python3.5
静心等待ansible安装完毕后
ansible的简单配置
ansible命令使用格式
command模块发布命令使用格式
ping模块发布命令使用格式
shell模块发布命令使用格式
raw模块使用格式仅通过ssh实现
copy模块注意事项
copy模块拷贝文件目录使用格式
script模块批量运行脚本使用格式
cron定时任务模块
yum模块批量安装软件包
user模块批量创建用户
setup模块批量查看服务的所有属性
ansible-playbook的初步使用
下发配置文件里面使用判断语法
Playbook下发可变配置文件
playbook使用register输出命令运行结果
playbook的自定义变量和内置变量
playbook的简单shell模块的使用
playbook的简单copy模块的使用
Playbook的notify通知和下发nginx配置
nginx配置下发并检测
ansible的script模块批量运行脚本
使用roles标准化Playbook
ansible批量管理企业案例

 

script模块批量运行脚本使用格式

ansible all -m script -a "/service/scripts/auto_nginx.sh"

 
  1. #操作示例-->远程批量分发并自动部署nginx
  2. #所有被管理端需要挂载光盘,并创建本地yum配置文件
  3. [root@ansible scripts]# pwd
  4. /service/scripts
  5. [root@ansible scripts]# ls | xargs -n1
  6. auto_nginx.sh #自动安装nginx脚本
  7. fenfa.sh #批量分发脚本
  8. nginx-1.10.2.tar.gz #nginx源码包
  9. [root@ansible scripts]# cat auto_nginx.sh #nginx安装脚本
  10. #!/bin/sh
  11. #nginx install shell scripts
  12. test -d /media/cdrom || mkdir -p /media/cdrom
  13. mount /dev/sr0 /media/cdrom &>/dev/null
  14. yum -y install gcc gcc-c++ make pcre pcre-devel zlib zlib-devel openssl openssl-devel &>/dev/null
  15. test -d /service/scripts || exit 3
  16. cd /service/scripts/
  17. tar xf nginx-1.10.2.tar.gz -C /usr/src/
  18. cd /usr/src/nginx-1.10.2/
  19. ./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-http_stub_status_module &>/dev/null
  20. make &>/dev/null
  21. make install &>/dev/null
  22. exit 0
  23. [root@ansible scripts]# cat fenfa.sh #源码包和安装脚本的批量分发脚本
  24. #!/bin/sh
  25. #批量分发脚本
  26. Group=$1
  27. ansible $Group -m copy -a "src=/service/scripts/ dest=/service/scripts/"
  28. ansible $Group -m script -a "/service/scripts/auto_nginx.sh"
  29. [root@ansible scripts]# sh fenfa.sh all #激活脚本
 

cron定时任务模块

Ansible中的cron模块用于定义任务计划。主要包括两种状态(state)

 
  1. #添加定时任务计划,在所有被管理的主机里每十分钟输出hello字符串,定时任务描述为test cron job
  2. [root@ansible ~]# ansible all -m cron -a 'minute="*/10" job="/bin/echo hello" name="test cron job"'
  3. Web02 | SUCCESS => {
  4. "changed": true,
  5. "envs": [],
  6. "jobs": [
  7. "test cron job"
  8. ]
  9. }
  10. Web01 | SUCCESS => {
  11. "changed": true,
  12. "envs": [],
  13. "jobs": [
  14. "test cron job"
  15. ]
  16. }
  17. [root@ansible ~]# ansible all -m shell -a 'crontab -l'
  18. Web01 | SUCCESS | rc=0 >>
  19. #Ansible: test cron job
  20. */10 * * * * /bin/echo hello
  21. Web02 | SUCCESS | rc=0 >>
  22. #Ansible: test cron job
  23. */10 * * * * /bin/echo hello
  24. #删除描述为test cron job的定时任务
  25. [root@ansible ~]# ansible all -m cron -a 'minute="*/10" job="/bin/echo hello" name="test cron job" state=absent'
  26. Web02 | SUCCESS => {
  27. "changed": true,
  28. "envs": [],
  29. "jobs": []
  30. }
  31. Web01 | SUCCESS => {
  32. "changed": true,
  33. "envs": [],
  34. "jobs": []
  35. }
  36. [root@ansible ~]# ansible all -m shell -a 'crontab -l'
  37. Web02 | SUCCESS | rc=0 >>
  38. Web01 | SUCCESS | rc=0 >>
  39. #给Web01服务器上的普通用户yunjisuan添加一个定时任务
  40. [root@ansible ~]# ansible Web01 -m shell -a 'id yunjisuan'
  41. Web01 | SUCCESS | rc=0 >>
  42. uid=1000(yunjisuan) gid=1000(yunjisuan) 组=1000(yunjisuan)
  43. [root@ansible ~]# ansible Web01 -m cron -a 'minute="*/10" job="/bin/echo hello" name="yunjisuan cron job" user="yunjisuan"'
  44. Web01 | SUCCESS => {
  45. "changed": true,
  46. "envs": [],
  47. "jobs": [
  48. "yunjisuan cron job"
  49. ]
  50. }
  51. [root@ansible ~]# ansible Web01 -m shell -a 'crontab -u yunjisuan -l'
  52. Web01 | SUCCESS | rc=0 >>
  53. #Ansible: yunjisuan cron job
  54. */10 * * * * /bin/echo hello
  55. [root@ansible ~]# ansible Web01 -m cron -a 'minute="*/10" job="/bin/echo hello" name="yunjisuan cron job" user="yunjisuan" state="absent"'
  56. Web01 | SUCCESS => {
  57. "changed": true,
  58. "envs": [],
  59. "jobs": []
  60. }
  61. [root@ansible ~]# ansible Web01 -m shell -a 'crontab -u yunjisuan -l'
  62. Web01 | SUCCESS | rc=0 >>
 

yum模块批量安装软件包

利用yum模块安装软件包,虽然能被shell模块替代,但是用yum模块更显专业一些

 

user模块批量创建用户

用户管理模块。管理用户账号

 
  1. #在Web02上创建一个普通用户yunjisuan,并设置用户的密码为123123
  2. [root@ansible ~]# ansible Web02 -m user -a 'name=yunjisuan comment="welcom to yunjisuan" uid=1066 groups=wheel password=123123 shell=/bin/bash home=/home/yunjisuan'
  3. Web02 | SUCCESS => {
  4. "changed": true,
  5. "comment": "welcom to yunjisuan",
  6. "create_home": true,
  7. "group": 1066,
  8. "groups": "wheel",
  9. "home": "/home/yunjisuan",
  10. "name": "yunjisuan",
  11. "password": "NOT_LOGGING_PASSWORD",
  12. "shell": "/bin/bash",
  13. "state": "present",
  14. "system": false,
  15. "uid": 1066
  16. }
  17. [root@ansible ~]# ansible Web02 -m shell -a 'tail -1 /etc/passwd'
  18. Web02 | SUCCESS | rc=0 >>
  19. yunjisuan:x:1066:1066:welcom to yunjisuan:/home/yunjisuan:/bin/bash
  20. [root@ansible ~]# ansible Web02 -m shell -a 'tail -1 /etc/shadow'
  21. Web02 | SUCCESS | rc=0 >>
  22. yunjisuan:123123:17783:0:99999:7::: #密码居然是明文!!!

利用ansible的user模块状态用户时要注意在password参数的后边添加密文,否则不能登陆用户 
通过Python的pip程序安装passlib即可为密码加密

 
  1. #安装Python2的pip工具,并通过pip工具安装Python的加密模块来给密码加密
  2. [root@ansible ~]# yum -y install epel-release
  3. [root@ansible ~]# yum -y install python2-pip
  4. [root@ansible ~]# pip install passlib
  5. #生成密文密码
  6. [root@ansible ~]# python -c "from passlib.hash import sha512_crypt;import getpass;print sha512_crypt.encrypt(getpass.getpass())"
  7. Password: #输入你想要加密的密码
  8. $6$rounds=656000$Tw15COd8DLh/VS94$Mcmz/8CcjBKiEl0mYHcOQQCxEA5mz66EcGH2qXVk6o.Sm7FsRS.DsDVy6ET8iI6jDa045I94slZqWFwyYnRSW1 #加密后的密码
  9. #删除之前创建的yunjisuan用户,并删除它的家目录
  10. [root@ansible ~]# ansible Web02 -m user -a 'name=yunjisuan state=absent remove=true'
  11. Web02 | SUCCESS => {
  12. "changed": true,
  13. "force": false,
  14. "name": "yunjisuan",
  15. "remove": true,
  16. "state": "absent"
  17. }
  18. #继续在Web02上创建yunjisuan用户
  19. [root@ansible ~]# ansible Web02 -m user -a 'name=yunjisuan comment="welcom to yunjisuan" uid=1066 groups=wheel password=$6$rounds=656000$Tw15COd8DLh/VS94$Mcmz/8CcjBKiEl0mYHcOQQCxEA5mz66EcGH2qXVk6o.Sm7FsRS.DsDVy6ET8iI6jDa045I94slZqWFwyYnRSW1 shell=/bin/bash' home=/home/yunjisuan'
  20. [root@ansible ~]# ansible Web02 -m shell -a 'tail -1 /etc/shadow'
  21. Web02 | SUCCESS | rc=0 >>
  22. yunjisuan:$6$rounds=656000$Tw15COd8DLh/VS94$Mcmz/8CcjBKiEl0mYHcOQQCxEA5mz66EcGH2qXVk6o.Sm7FsRS.DsDVy6ET8iI6jDa045I94slZqWFwyYnRSW1:17783:0:99999:7::: #终于密文了
 

setup模块批量查看服务的所有属性

Ansible中使用setup模块收集,查看被管理主机的facts(facts是Ansible采集被管理主机设备信息的一个功能)。每个被管理主机在接收并运行管理命令之前,都会将自己的相关信息(操作系统版本,IP地址等)发送给控制主机

 
  1. #查看远程主机的facts信息
  2. [root@ansible ~]# ansible Web01 -m setup | head
  3. Web01 | SUCCESS => {
  4. "ansible_facts": {
  5. "ansible_all_ipv4_addresses": [
  6. "192.168.200.184"
  7. ],
  8. "ansible_all_ipv6_addresses": [
  9. "fe80::20c:29ff:fe77:16ad"
  10. ],
  11. "ansible_apparmor": {
  12. "status": "disabled"
 

ansible-playbook的初步使用

playbook可以把ansible的模块进行组合

 
  1. ln -s /usr/local/python/bin/ansible-playbook /usr/local/bin (优先制作软链接)
  2. shell模块支持很多模式,copy模块分发文件或目录,register模块输出命令运行结果,nginx_conf配置下发并检测,vars自定义变量,setupvars内置变量,filevars可变配置文件
  3. vim test_shell[copy,register,nginx_conf,vars,setupvars,filevars].yaml (执行模板)
  4. ansible-playbook test_shell[copy,register,nginx_conf,vars,setupvars,filevars].yaml (执行配置文件)
  5. 我们可以使用ansible all -m setup | less (查看ansible内置变量)
  6. vim if.j2 (下发配置文件模板样式)
 

下发配置文件里面使用判断语法

 
  1. vim /tmp/if.j2
  2. {% if PORT %} #if PORT存在
  3. ip=0.0.0.0:{{ PORT }}
  4. {% else %} #否则的话
  5. ip=0.0.0.0:80
  6. {% endif %} #结尾
  7. vim test_ifvars.yaml
  8. ---
  9. - hosts: all
  10. gather_facts: True #开启系统内置变量
  11. vars:
  12. - PORT: 90 #自定义变量
  13. tasks:
  14. - name: jinja2 if test
  15. template: src=/tmp/if.j2 dest=/root/test
  16. ansible-playbook test_ifvars.yaml (下达分发命令)
  17. 如果我们将变量PORT值为空的话,就会进入else否则的80端口
  18. ---
  19. - hosts: all
  20. gather_facts: True
  21. vars:
  22. - PORT: #置空
  23. tasks:
  24. - name: jinja2 if test
  25. template: src=/tmp/if.j2 dest=/root/test
 

Playbook下发可变配置文件

 
  1. #利用template模块下发可变的配置文件
  2. ---
  3. - hosts: all
  4. gather_facts: True #开启系统变量
  5. vars:
  6. - myname: "yunjisuan" #自定义变量
  7. tasks:
  8. - name: template test
  9. template: src=/tmp/test dest=/root/test #使用template下发可变配置文件

配置文件如果使用copy模块去下发的话,那配置都是一样的; 
如果下发的配置文件里有可变的配置,需要用到template模块。

 

playbook使用register输出命令运行结果

 
  1. ---
  2. - hosts: all
  3. tasks:
  4. - name: test register
  5. shell: echo "welcome to yunjisuan"
  6. register: print_result #将之前命令的输出结果保存在变量print_result里
  7. - debug: var=print_result #将变量的值作为debug输出出来。
  8. 我们在用playbook进行ansible模块操作的时候,并没有命令的执行结果输出,默认被隐藏了
  9. 我们可以通过register模块追加输出命令的执行结果
 

playbook的自定义变量和内置变量

我们可以使用ansible all -m setup | less查看ansible内置变量

 
  1. ---
  2. - hosts: all
  3. vars: #定义变量
  4. - name: "yunjisuan" #第一个name变量
  5. age: "3" #第二个age变量
  6. tasks:
  7. - name: "{{ name }}" #{{}}两对大括号引用变量,变量名两头空格
  8. shell: echo "myname {{ name }},myage {{ age }}"
  9. register: var_result
  10. - debug: var=var_result
 
  1. ---
  2. - hosts: all
  3. gather_facts: True
  4. tasks:
  5. - name: setup var
  6. shell: echo "ip {{ ansible_all_ipv4_addresses[0] }} cpu {{ ansible_processor_count }}" >> /tmp/test
  7. - name: setup var2
  8. shell: echo "time {{ ansible_date_time["date"] }}" >> /tmp/test
  9. register: var_result
  10. - debug: var=var_result
  11. 特别提示:
  12. 引用变量需要在双引号中引用。
  13. 在使用自定义变量时,我们要特别注意不要和系统的内置保留变量同名,容易引发问题。
  14. Found variable using reserved name: name #name是一个保留的内置变量,我们在自定义时不能用,会有警告
 
  1. ---
  2. - hosts: all
  3. gather_facts: True #使用ansible内置变量
  4. tasks:
  5. - name: setup var
  6. shell: echo "ip {{ ansible_all_ipv4_addresses[0] }} cpu {{ ansible_processor_count }}" >> /tmp/test
  7. - name: setup var2
  8. shell: echo "time {{ ansible_date_time["date"] }}" >> /tmp/test
  9. register: var_result
  10. - debug: var=var_result
  11. #python取变量方法
  12. a = [1,3,5] --> a[0]=1 #这样取值就不会带[]
  13. a = {"sl":123123,"sl1"123321} --> a[sl]=123123 #这样取值就不会带[]
 

playbook的简单shell模块的使用

 
  1. --- #开头三个小-开头
  2. - hosts: webB
  3. tasks:
  4. - name: test
  5. shell: echo "welcome to yunjisaun" >> /tmp/username
  6. - name: test2
  7. shell: echo "welcome to yunjisuan" >> /tmp/username
  8. 模板说明:
  9. --- #开头必须有三个小-,顶格写
  10. - hosts #正文配置代码的第一级,必须有两个空格(-占一个空格位)
  11. - host: webB #webB是host参数的值,值和hosts:之间要有一个空格
  12. tasks: #tasks:表示接下来要执行的具体任务
  13. - name: #相对于tasks再多缩进两个格(-占一个空格位),表示属于tasks的下一级
  14. - name: test #test只是要执行的具体命令的名字可以随便写。name:后还是有一个空格要注意
  15. shell: #表示调用shell模块执行命令相对于tasks仍旧要多缩进两个空格
  16. shell: echo "xxx" >> xxx #shell:后边还是要有个空格,需要注意。
 

playbook的简单copy模块的使用

 
  1. ---
  2. - hosts: all
  3. tasks:
  4. - name: test copy
  5. copy: src=/tmp/copy_test dest=/tmp/
  6. 模板说明:
  7. --- #开头必须有三个小-,顶格写
  8. - hosts #正文配置代码的第一级,必须有两个空格(-占一个空格位)
  9. tasks: #tasks:表示接下来要执行的具体任务
  10. - name: test #test只是要执行的具体命令的名字可以随便写。name:后还是有一个空格要注意
  11. copy: src=/tmp/copy_test dest=/tmp/ #把源文件拷贝到对方的位置
 

Playbook的notify通知和下发nginx配置

 
  1. vim nginx.j2
  2. worker_processes {{ ansible_processor_count }}; #可变的参数
  3. #实战下发可执行动作的可变的nginx配置文件
  4. ---------------------------------------------------------------------------
  5. vim test_nginxvars.yaml
  6. ---
  7. - hosts: all
  8. gather_facts: True #开启系统内置变量
  9. tasks:
  10. - name: nginx conf
  11. template: src=/tmp/nginx.j2 dest=/usr/local/nginx/conf/nginx.conf
  12. notify:
  13. - reload nginx #下发通知给handlers模块执行名字叫做reload nginx的动作
  14. handlers: #定义动作
  15. - name: reload nginx #动作的名字
  16. shell: /usr/local/nginx/sbin/nginx -s reload
  17. ansible-playbook test_nginxvars.yaml (执行分发命令)
 

nginx配置下发并检测

 
  1. ---
  2. - hosts: all
  3. tasks:
  4. - name: copy nginx.conf
  5. copy: src=/tmp/nginx.conf dest=/usr/local/nginx/conf/ backup=yes
  6. - name:
  7. shell: /usr/local/nginx/sbin/nginx -t
  8. register: nginx_result
  9. - debug: var=nginx_result
 

ansible的script模块批量运行脚本

 
  1. #操作示例-->远程批量分发并自动部署nginx
  2. #所有被管理端需要挂载光盘,并创建本地yum配置文件
  3. auto_nginx.sh #自动安装nginx脚本
  4. fenfa.sh #批量分发脚本
  5. nginx-1.10.2.tar.gz #nginx源码包
  6. #!/bin/sh
  7. #nginx install shell scripts
  8. test -d /media/cdrom || mkdir -p /media/cdrom
  9. mount /dev/sr0 /media/cdrom &>/dev/null
  10. yum -y install gcc gcc-c++ make pcre pcre-devel zlib zlib-devel openssl openssl-devel &>/dev/null
  11. test -d /service/scripts || exit 3
  12. cd /service/scripts/
  13. tar xf nginx-1.10.2.tar.gz -C /usr/src/
  14. cd /usr/src/nginx-1.10.2/
  15. ./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-http_stub_status_module &>/dev/null
  16. make &>/dev/null
  17. make install &>/dev/null
  18. exit 0
  19. #源码包和安装脚本的批量分发脚本
  20. #!/bin/sh
  21. #批量分发脚本
  22. Group=$1
  23. ansible $Group -m copy -a "src=/service/scripts/ dest=/service/scripts/"
  24. ansible $Group -m script -a "/service/scripts/auto_nginx.sh"
 

使用roles标准化Playbook

roles功能可以用来规范playbook的编写

 

创建所需要的roles原型目录结构

 
  1. #创建roles基本原型的目录结构
  2. [root@ansible myroles]# tree /myroles/
  3. /myroles/
  4. ├── nginx.yaml #入口触发配置文件
  5. └── roles #playbook的原型配置目录
  6. └── nginx #nginx相关模组配置目录
  7. ├── files #copy模块和script模块的参数src默认会从这个文件夹查找
  8. ├── handlers #用来存放notify的
  9. ├── tasks #用来存放ansible模块任务的
  10. ├── templates #用来存放j2的
  11. └── vars #用来存放变量的
  12. 7 directories, 1 file
  13. #入口触发配置文件
  14. [root@ansible myroles]# cat /myroles/nginx.yaml
  15. ---
  16. - hosts: all #执行的主机范围
  17. gather_facts: True #开启系统内置变量
  18. roles: #启用roles原型配置
  19. - nginx #执行nginx原型模组
 

roles中tasks任务编排模组的使用

 
  1. #在nginx模组添加tasks任务配置文件
  2. [root@ansible myroles]# cat roles/nginx/tasks/main.yaml
  3. ---
  4. - name: check alived #任务1的名字
  5. ping: #执行ping模块
  6. - name: #任务2的名字
  7. shell: ls / #执行shell模块
  8. register: ls_result #将执行结果保存给变量
  9. - debug: var=ls_result #变量的值赋值给debug进行输出
  10. #完成后的目录结构如下所示
  11. [root@ansible myroles]# tree /myroles/
  12. /myroles/
  13. ├── nginx.yaml #nginx模组入口配置文件
  14. └── roles
  15. └── nginx #nginx原型模组目录
  16. ├── files
  17. ├── handlers
  18. ├── tasks
  19. └── main.yaml #nginx模组的tasks任务配置文件
  20. ├── templates
  21. └── vars
  22. 7 directories, 2 files
 

执行简单的roles任务模型

 
  1. #执行nginx入口配置文件
  2. [root@ansible myroles]# ansible-playbook nginx.yaml
  3. PLAY [all] ****************************************************************************************************
  4. TASK [Gathering Facts] ****************************************************************************************
  5. ok: [webA]
  6. ok: [webB]
  7. TASK [nginx : check alived] ***********************************************************************************
  8. ok: [webA]
  9. ok: [webB]
  10. TASK [nginx : shell] ******************************************************************************************
  11. changed: [webA]
  12. changed: [webB]
  13. TASK [nginx : debug] ******************************************************************************************
  14. ok: [webA] => {
  15. "ls_result": {
  16. "changed": true,
  17. "cmd": "ls /",
  18. "delta": "0:00:00.002805",
  19. "end": "2018-06-21 11:52:29.343592",
  20. "failed": false,
  21. "rc": 0,
  22. "start": "2018-06-21 11:52:29.340787",
  23. "stderr": "",
  24. "stderr_lines": [],
  25. "stdout": "bin boot dev etc home lib lib64 media mnt opt proc roo root run sbin service srv sys tmp usr var",
  26. "stdout_lines": [
  27. "bin",
  28. "boot",
  29. "dev",
  30. "etc",
  31. "home",
  32. "lib",
  33. "lib64",
  34. "media",
  35. "mnt",
  36. "opt",
  37. "proc",
  38. "roo",
  39. "root",
  40. "run",
  41. "sbin",
  42. "service",
  43. "srv",
  44. "sys",
  45. "tmp",
  46. "usr",
  47. "var"
  48. ]
  49. }
  50. }
  51. ok: [webB] => {
  52. "ls_result": {
  53. "changed": true,
  54. "cmd": "ls /",
  55. "delta": "0:00:00.002708",
  56. "end": "2018-06-21 11:52:29.359754",
  57. "failed": false,
  58. "rc": 0,
  59. "start": "2018-06-21 11:52:29.357046",
  60. "stderr": "",
  61. "stderr_lines": [],
  62. "stdout": "bin boot dev etc home lib lib64 media mnt opt proc roo root run sbin service srv sys tmp usr var",
  63. "stdout_lines": [
  64. "bin",
  65. "boot",
  66. "dev",
  67. "etc",
  68. "home",
  69. "lib",
  70. "lib64",
  71. "media",
  72. "mnt",
  73. "opt",
  74. "proc",
  75. "roo",
  76. "root",
  77. "run",
  78. "sbin",
  79. "service",
  80. "srv",
  81. "sys",
  82. "tmp",
  83. "usr",
  84. "var"
  85. ]
  86. }
  87. }
  88. PLAY RECAP ****************************************************************************************************
  89. webA : ok=4 changed=1 unreachable=0 failed=0
  90. webB : ok=4 changed=1 unreachable=0 failed=0

ansible-playbook执行入口配置文件nginx.yaml后,它会自动在roles目录下查找nginx目录并进入后查找tasks任务目录并执行main.yaml的任务配置文件。

其实,这个roles的操作等效于以下配置

 
  1. #本配置和之前的roles配置等效
  2. [root@ansible myroles]# cat /service/scripts/test.yaml
  3. ---
  4. - hosts: all
  5. gather_facts: True
  6. tasks: #其实roles的本质就是将tasks任务单独写了。
  7. - name: check alived #并在入口文件里追加了roles去查找tasks配置文件路径
  8. ping:
  9. - name:
  10. shell: ls /
  11. register: ls_result
  12. - debug: var=ls_result
 

roles中vars自定义变量模组的使用

 
  1. #创建自定义变量vars模组的配置文件
  2. [root@ansible myroles]# cat roles/nginx/vars/main.yaml
  3. ---
  4. my_name: yunjisuan
  5. phone: 1800000000
  6. [root@ansible myroles]# cat roles/nginx/tasks/main.yaml
  7. ---
  8. - name: check alived
  9. ping:
  10. - name:
  11. shell: ls /
  12. register: ls_result
  13. - debug: var=ls_result
  14. - name: #添加对变量引用的任务编排
  15. shell: echo my phone is {{ phone }}
  16. register: echo_result
  17. - debug: var=echo_result
  18. [root@ansible myroles]# ansible-playbook nginx.yaml #执行入口配置文件
 

使用copy,script模块的标准化

roles模型里使用copy,script模块,默认从roles/nginx/files这里面找

 
  1. [root@ansible myroles]# cat roles/nginx/files/test
  2. welcome to yunjisuan
  3. [root@ansible myroles]# cat roles/nginx/files/test.sh
  4. echo "aaa" >> /tmp/test
  5. [root@ansible myroles]# chmod +x roles/nginx/files/test.sh
  6. [root@ansible myroles]# cat roles/nginx/tasks/main.yaml
  7. ---
  8. - name: check alived
  9. ping:
  10. - name:
  11. shell: ls /
  12. register: ls_result
  13. - debug: var=ls_result
  14. - name:
  15. shell: echo my phone is {{ phone }}
  16. register: echo_result
  17. - debug: var=echo_result
  18. - name: #添加copy模块
  19. copy: src=test dest=/root/
  20. - name: #添加script模块(自动在目标IP机器上执行脚本)
  21. script: test.sh
  22. [root@ansible myroles]# ansible-playbook nginx.yaml
 

roles中template模块的使用

roles模型里使用template模块,默认从roles/nginx/template里面找

 
  1. [root@ansible myroles]# cat roles/nginx/templates/test.j2
  2. myname is {{ my_name }},my phone is {{ phone }} #引用自定义变量
  3. my ipaddress is {{ansible_all_ipv4_addresses[0]}} #引用内置变量
  4. [root@ansible myroles]# cat roles/nginx/tasks/main.yaml
  5. ---
  6. - name: check alived
  7. ping:
  8. - name:
  9. shell: ls /
  10. register: ls_result
  11. - debug: var=ls_result
  12. - name:
  13. shell: echo my phone is {{ phone }}
  14. register: echo_result
  15. - debug: var=echo_result
  16. - name:
  17. copy: src=test dest=/root/
  18. - name:
  19. script: test.sh
  20. - name:
  21. template: src=test.j2 dest=/root/test2 #下发可变配置文件
  22. [root@ansible myroles]# ansible-playbook nginx.yaml
 

roles中notify模块的使用

roles使用notify模块,默认从roles/nginx/handles里面找

 
  1. [root@ansible myroles]# cat roles/nginx/handlers/main.yaml
  2. ---
  3. - name: start_nginx #定义handlers的动作类型
  4. shell: /usr/local/nginx/sbin/nginx
  5. - name: stop_nginx #定义handlers的动作类型
  6. shell: /usr/local/nginx/sbin/nginx -s stop
  7. - name: reload_nginx #定义handlers的动作类型
  8. shell: /usr/local/nginx/sbin/nginx -s reload
  9. [root@ansible myroles]# cat roles/nginx/tasks/main.yaml
  10. ---
  11. - name: check alived
  12. ping:
  13. - name:
  14. shell: ls /
  15. register: ls_result
  16. - debug: var=ls_result
  17. - name:
  18. shell: echo my phone is {{ phone }}
  19. register: echo_result
  20. - debug: var=echo_result
  21. - name:
  22. copy: src=test dest=/root/
  23. - name:
  24. script: test.sh
  25. - name:
  26. template: src=test.j2 dest=/root/test2
  27. notify: start_nginx #执行template任务后下发通知给handlers执行start_nginx
  28. [root@ansible myroles]# ansible-playbook nginx.yaml
 

特别提示:

notify下发通知只有当之前的任务造成了变化那么才会被执行,如果没有发生任何改变,则notify不会被执行。例如:

 
  1. #tasks任务造成改变,触发notify
  2. [root@ansible myroles]# cat /tmp/test.yaml
  3. ---
  4. - hosts: webA
  5. gather_facts: True
  6. tasks:
  7. - name:
  8. copy: src=/tmp/test dest=/root/ #这步造成目标改变才能出发notify
  9. notify: start_nginx
  10. handlers:
  11. - name: start_nginx
  12. shell: /usr/local/nginx/sbin/nginx
  13. [root@ansible myroles]# ansible-playbook /tmp/test.yaml
  14. PLAY [webA] ***************************************************************************************************
  15. TASK [Gathering Facts] ****************************************************************************************
  16. ok: [webA]
  17. TASK [copy] ***************************************************************************************************
  18. changed: [webA] #发生了改变
  19. RUNNING HANDLER [start_nginx] #触发notify *********************************************************************************
  20. changed: [webA]
  21. PLAY RECAP ****************************************************************************************************
  22. webA : ok=3 changed=2 unreachable=0 failed=0
  23. #我们再次执行/tmp/test.yaml
  24. [root@ansible myroles]# ansible-playbook /tmp/test.yaml
  25. PLAY [webA] ***************************************************************************************************
  26. TASK [Gathering Facts] ****************************************************************************************
  27. ok: [webA]
  28. TASK [copy] ***************************************************************************************************
  29. ok: [webA] #没有造成任务改变,未触发notify通知
  30. PLAY RECAP ****************************************************************************************************
  31. webA : ok=2 changed=0 unreachable=0 failed=0
 

ansible批量管理企业案例

4.1 ansible all -m copy -a 'src=/root/xin.sh dest=/root'

4.2 ansible all -m user -a 'name=yunjisuan shell=/sbin/nologin createhome=no'

4.3 ansible all -m shell -a 'echo "123123" | pass --stdin root'

4.4 ansible all -m user -a 'name=benet password=321321 shell=/bin/bash'

4.5 ansible all -m cron -a 'job="/bin/echo xin > /tmp/sl" name="test cron job"'

4.6 ansible all -m shell -a 'vmstat'