目录
一、ansible的command模块
1.ad-hoc
2.playbook
3.command模块
二、ansible的shell模块
1.shell模块帮助
2.shell模块支持的参数和解释
3.简单试验
4.批量远程执行脚本
三、script模块
1.script模块帮助
2.shell模块支持的参数和解释
3.实践
四、ansible文件操作模块
1.copy模块
2.file模块
3.yum模块
4.system模块
5.cron模块
五、ansible剧本
一、ansible的command模块
ansible实现批量化主机管理的模式,主要有两种
- 利用ansible的纯命令行实现的批量管理,ad-hoc模式 ----- 好比简单操作
 - 利用ansible的playbook剧本来实现批量管理,playbook剧本模式 ---- 好比复杂操作
 
1.ad-hoc
ansible的ad-hoc模式是ansible的命令行形式,也就是处理一些临时的,简单的任务,可以直接使用ansible的命令行来操作比如
- 临时批量查看被管理机器的内存情况,cpu负载情况,网络情况
 - 比如临时的分发配置文件等等
 
2.playbook
ansible的playbook模式是针对比较具体,且比较大的任务,那么你就得实现写好剧本,应用场景
- 一键部署rsync备份服务器
 - 键部署Inmp环境
 
3.command模块
作用:在远程节点上执行一个命令
- ansible-doc-s command 查看该模块支持的参数
 - chdir:在执行命令之前,先通过cd进入该参数指定的目录
 - creates:在创建一个文件之前,判断该文件是否存在,如果存在了则跳过前面的东西,如果不存在则执行前面的动作
 - free_form:该参数可以输入任何的系统命令,实现远程执行和管理
 - removes:定义一个文件是否存在,如果存在了则执行前面的动作,如果不存在则跳过动作
 - command模块是ansible的默认基本模块,也可以省略不写,但是要注意如下的坑
 
- 使用command模块,不得出现shel变量 name,也不得出现特殊符号>、;这些符号command模块都不认识,如果你想用前面指定的变量,特殊符号,请使用 shell模块,command模块不适用这种场景
 
ansible manage -m command -a 'date' 

切换目录
ansible manage -m command -a 'pwd chdir=/tmp/'

判断目录是否存在
ansible manage -m command -a 'pwd chdir=/tmp/' 

ansible manage -m command -a 'pwd removes=/files' 

warn报警

这里有个warn警告,我们可以通过加warn=False消除这个警告
ansible manage -m command -a 'pwd creates=/tmp' 

二、ansible的shell模块
1.shell模块帮助
作用:在远程机器上执行命令 (复杂的命令)
了解模块用法的渠道
- linux命令行里面通过 ansible-doc
 

- ansible官网查看帮助信息ansible.builtin.shell module – Execute shell commands on targets — Ansible Documentation
 
2.shell模块支持的参数和解释
- chdir 在执行命令之前,通过cd进入该参数指定的目录
 - creates 定义一个文件是否存在,如果存在则不执行该命令,如果存在该文件,则执行shell命令
 - free_form 参数信息中可以输入任何的系统指令,实现远程管理
 - removes 定义一个文件是否存在,如果存在该文件,则执行命令,如果不存在,则跳过
 
3.简单试验
两台被管理机上添加两个后台程序
ping 192.168.0.103 > /dev/null &ps -ef | grep ping | grep -v grep 

ping 192.168.0.103 > /dev/null &ps -ef | grep ping | grep -v grep 

管理机
 ansible manage -m shell -a "ps -ef|grep ping|grep -v grep" 

4.批量远程执行脚本
该需要执行的脚本,必须要求在客户端机器上存在,否则会报错文件不存在,这是shell模块的特点,是因为还有一个专门执行脚本的模块
步骤:
- 创建文件
 - 创建shell脚本文件
 - 赋予脚本可执行权限
 - 执行脚本
 - 忽略warn信息
 
思路分析
最好所有的操作都是在 管理机器上,也就是(老板)这台机器 m01上进行远程的,批量化操作
ansible manage -m shell -a "mkdir -p /server/myscripts/; echo 'hostname'> /server/myscripts/hostname.sh; chmod +x /server/myscripts/hostname.sh; cd /server/myscripts/; bash hostname.sh; warn=False" 

弊端就是需要shell脚本存在于被管理机器,才能执行
三、script模块
1.script模块帮助
功能:吧管理机器上的脚本远程的传输到备管理节点上去执行
比起shel模块,script模块功能更强大,在管理机器本地有一份脚,就可以在所有被管理节点上去运行
- linux命令行里面通过 ansible-doc
 
- ansible官网查看帮助信息ansible.builtin.script module – Runs a local script on a remote node after transferring it — Ansible Documentation
 
2.shell模块支持的参数和解释
- chdir 在执行命令之前,通过cd进入该参数指定的目录
 - creates 定义一个文件是否存在,如果存在则不执行该命令,如果存在该文件,则执行shell命令
 - free_form 参数信息中可以输入任何的系统指令,实现远程管理
 - removes 定义一个文件是否存在,如果存在该文件,则执行命令,如果不存在,则跳过
 
3.实践
 cd /myshell/
echo -e "pwd\nhostname" > shell1.sh
cat shell1.sh chmod -x shell1.sh 
ansible manage -m script -a "/myshell/shell1.sh"
 

四、ansible文件操作模块
1.copy模块
作用:复制文件数据到远程主机
ansible-doc -s copy #查看copy模块的参数用法
参数解释如下
copy模块是远程推送数据的模块,只能把管理节点上的数据,推送给远程节点,无法拉取数据到本地
实际案例
吧管理节点上的文件数据,发给被管理节点
ansible manage -m command -a "useradd user"
ansible manage -m copy -a "src=/etc/hosts dest=/tmp/hosts owner=user group=user mode=0666" 


内容添加
ansible manage -m copy -a "content='content hosts_ansible\n'  dest=/tmp/1.txt backup=yes" 

2.file模块
作用,创建,修改文件,目录的属性
ansible-doc -s file #查看模块详细信息与用法
file模块常用的参数解释:
- group 定义文件/目录的 属组
 - owner 定义属主
 - mode 定义权限
 - path 必选参数,定义文件路径
 - dest 创建出来的软连接 它的路径
 - src 定义源文件路径,主要用于创建link类型文件使用
 - state 参数:
 
- file: 如果目标文件不存在,那么不会创建该文件
 - touch: 如果文件不存在,则创建一个新的文件,如果文件已经存在了,则修它的最后修改时间
 - directory:如果目录不存在,那么会创建目录
 - link: 用于创建软连接类型
 - absent :删除目录,文件或者取消连接
 
创建目录
ansible manage -m file -a "dest=/tmp/dir1 "
 

ansible manage -m file -a "dest=/tmp/dir1 state=directory" 

远程批量生成文件
 ansible manage -m file -a "dest=/tmp/dir1/1.txt mode=666 state=file" 
这个会报错,因为文件不存在

ansible manage -m file -a "dest=/tmp/dir1/1.txt mode=666 state=touch owner=user group=user" 

创建软链接
ansible manage -m file -a "src=/etc/hosts dest=/tmp/hosts_link state=link" 

3.yum模块

在使用ansible的yum模块时,state选项有如下几种:
- absent
 - installed
 - latest
 - present
 - removed
 
比较疑惑的是present 和installed,absent和removed的区别,其实他们含义是一样的,源码:
if state in ['installed','present']:if disable_gpg_check:yum_basecmd.append('--nogpgcheck")res = install(module, pkgs, repoq, yum_basecmd, conf_file, en_repos, dis_repos)elif state in ['removed','absent']:res = remove(module, pkgs,repoq, yum_basecmd, conf_file, en_repos, dis_repos)elif state == 'latest':if disable_gpg_check:yum_basecmd.append('--nogpgcheck')res = latest(module, pkgs, repoq, yum_basecmd, conf_file, en_repos, dis_repos)
else:# should be caught by AnsibleModule argument_specmodule.fail_json(msg-"we should never get here unless this all"failed",changed=False, results='',errors='unexpected state')
return res 
批量检查所有被管理节点是否安装了nginx服务
ansible manage -m shell -a "rpm -qa nginx warn=false" 
通过yum模块批量安装
ansible manage -m yum -a "name=nginx state=installed" 
批量卸载
ansible manage -m yum -a "name=nginx state=absend" 
升级软件包
ansible manage -m yum -a "name=nginx state=latest" 
升级系统所有软件包,排除某个服务不升级
ansible manage -m yum -a "name='*' state=latest exclude='nginx'" 
 
4.system模块
ansible-doc -s serviceansible-doc -s systemd 
费注意的是serivce对centos7有效
当你使用service命令管理服务,系统自动的重定向为eyetemct1服务管理命令
- name 指定服务的名宇,比如nginx.serivce,如crond.serivce
 - state 填入你要执行的操作,reloaded,restarted,started,stopped
 - enabled 指定服务开机自启 systemctl enable nginx
 - danmon_reload 每当修改了配置文件,使用systemd重读配置文件
 
查看服务是否正常运行
ansible manage -m shell -a "systemctl status crond | grep Active" 
检查crond服务是否开机自启了
ansible manage -m shell -a "systemctl list-unit-files | grep crond" 
system模块管理服务
ansible manage -m systemd -a "name=crond state=stopped"
ansible manage -m systemd -a "name=crond state=restart"
ansible manage -m systemd -a "name=crond state=restarted" 
启动nginx服务
ansible manage -m systemd -a "name=nginx state=started enabled=yes" 
5.cron模块
cron模块主要是管理linux的定时任务条目
分 时 日 月 周 执行命令的绝对路径
* * * * *
定时crontab条目都是遵循了规则
每5分钟执行命令
*/5 * * * *   
每个月的3号,13号,早上8点整 重启nginx
0 8 3,13 * * /usr/bin/systemctl restart nginx 
添加定时任务,每2分钟进行时间同步
ansible manage -m cron -a "name=ntp_cron job='/usr/sbin/ntpdate ntp.aliyuan.com > /dev/mull 2>&1' minute=*/2" 
查看下
ansible manage -m shell -a "crontab -l" 

再添加一个记录,事件是每个月的3号,13号,早上8点整 重启nginx
ansible manage -m cron -a "name=ntp_cron job='/usr/bin/systemctl restart nginx' minute=0 hour=8 day=3,13 " 
ansible manage -m shell -a "crontab -l |grep nginx" 

五、ansible剧本
1.概念
ansible核心的功能,作用就是进行配置管理
ansible需要编写的playbook剧本需要遵循一定的规则,格式,这个格式就称之为yaml语法
2.使用剧本批量安装nginx
先批量卸载nginx服务
ansible manage -m yum -a "name=nginx state=absent" 
创建yaml剧本
 mkdir /myyamlcd /myyaml/vim nginx_install.yaml 
 
  1 # install nginx yaml2 - hosts: all3   tasks: all4       - name: Install nginx service5         yum: name=nginx state=present6       - name: Copy Nginx.conf to every_server7         copy: src=./nginx.conf dest=/etc/nginx/conf/nginx.conf mode=0644 
 
