在自动化运维的过程中,我们常常会通过命令行的形式使用Ansible模块,ansible自带了259各模块,我们可以通过一些命令来查看ansible中所含的模块,也可以查看单一模块的信息。下面,我就为大家介绍一些常用的模块。
关于ansible的部署安装请参考:
部署自动化运维服务——Ansible
ansible-doc-l //显示所有自带模块
ansible-doc -s “模块名称” //查看具体模块的信息,使用‘q’退出介绍
Ad-Hoc命令格式
Ah-Hoc常用可选项如下:
- v:--verbose:输出更详细的执行过程信息,-vvv可得到执行过程所有信息
- i:PATH,--inventory=PATH:指定inventory信息,默认/etc/absible/hosts
- f:NUM,--forks=NUM:并发线程数,默认5个线程
- m:NAME,--module-name=NAME:指定执行使用的模块
- M:DIRECTORY,--module-path=DIRECTORY:指定模块存放路径,默认/usr/share/ansible,也可以通过ANSIBLE_LIBRARY设定默认路径
- a:'ARGUMENTS',--args='ARGUMENTS':模块参数
- k:--ask-pass SSH:认证密码
- K:--ask-sudo-pass sudo:用户的密码(--sudo时使用)
- o:--one-line:标准输出至一行
- s:--sudo:相当于Linux系统下的sudo命令
- c:CONNECTION,--connection=CONNECTION:指定连接方式,可用选项paramiko(SSH)、ssh、local,local方式常用于crontab和kickstarts
- --list-hosts:列出符合条件的主机列表,不执行任何命令
aommand模块
command命令用于系统命令,不如ping、tail、date等命令,接下来我就以date、tail为例,介绍他的使用方法,接下来的所有操作中,都会使用“web“分类。
ansible web -m command -a 'date' //-a后的参数需使用单引号
ansible web -m command -a 'tail -1 /etc/passwd'
cron模块
Ansible中的cron模块用于定义计划性任务。其中有两种状态(state):present表示添加(默认使用,可省略),absent表示移除。
创建计划性任务
ansible-doc -s cron //查看模块信息
ansible web -m cron -a 'minute="*/1" job="/bin/echo test" name="test cron job"'
//每分钟执行一次输出test,name的名称可以自定义,
ansible web -a 'crontab -l' //计划性任务,command为默认模块,-m可省略
移除计划性任务
ansible web -m cron -a 'name="test cron job" state=absent'
//在创建时所使用的名称,取消是也要相对应,若是在创建时为设定名称,使用name=None即可
ping模块
ping模块用来测试指定主机的联通性
ansible web -m ping
user模块
user模块用于创建新用户和更改、删除已存在的用户。其中name选项用于指明创建的用户名称
新建用户
生成密钥
因为ansible user的passwd参数需要接收加密的值,所以需要利用openssl命令来生成密码,采用md5加密。
echo ansible | openssl passwd -1 -stdin //此处为“一”,不是“L”,明文为ansible
新建用户
ansible web -m user -a 'name=zhang password="$1$zF5aYItH$MKXWT.NfH8kOV6OH3Y/Tp0"' -o
验证新建用户是否成功
ssh 172.16.10.30 -l zhang //ssh远程登陆
删除用户
ansible web -m user -a 'name="zhang" state=absent'
group模块
group模块用于对用户组管理
ansible web -m group -a 'name=mysql gid=306 system=yes' //新建mysql组,gid=306
ansible web -m user -a 'name=lisi uid=306 system=yes group=mysql' //新建用户lisi,uid=306,并加入到mysql组
copy模块
copy模块用于实现文件复制和批量下发文件。其中使用src来定义本地源文件路径,使用dest定义被管理主机文件路径,使用content则是通过指定信息内容来生成文件。注意,复制或者下发文件,一定时管理主机上有的文件,不要使用管理主机上不存在的文件或目录
批量下发、复制文件
批量下发文件时,可以同时指定文件的属组属主,文件权限等属性
ansible web -m copy -a 'src=/etc/fstab dest=/opt/fstab.bak owner=lisi group=mysql mode=600 backup=yes' -o
ansible web -m shell -a 'md5sum /opt/fstab.bak' -o //验证下发功能
写入指定内容到文件
ansible web -m copy -a 'content="hello word!" dest=/opt/a.txt' -o
ansible web -m shell -a 'md5sum /opt/a.txt' -o
shell模块
shell模块可在被管理主机上运行命令,并支持风管道符等功能的复杂命令
ansible zhangsan -m shell -a 'echo abc123 | passwd --stdin zhangsan' //免交互创建已有用户密码
file模块
file模块用来设置文件属性,其中使用path指定文件路径,使用src定义源文件路径,使用name或dest来替换创建文件的符号链接
设置文件权限
ansible web -m file -a 'owner=lisi group=mysql mode=644 path=/opt/a.txt' -o
ansible web -m shell -a 'ls -l /opt/a.txt'
设置链接文件
ansible web -m file -a 'path=/opt/fstab.link src=/etc/fstab state=link' -o //src后的目录及文件都为和管理主机上所有
删除文件
ansible web -m file -a "path=/opt/a.txt state=absent" -o
创建文件
ansible web -m file -a "path=/opt/test state=touch" -o //创建一个文件
yum模块
yum模块负责在被管理主机上安装与卸载软件包,可以使用本地yum仓库,或是在线yum源,如果选用本地yum仓库,则需为被管理主机搭建yum仓库。若是使用在线,则直接安装,本次测试采用在线安装,不搭建本地yum仓库。
安装软件包
ansible web -m yum -a 'name=httpd state=latest' -o //在被管主机上安装最新版本httpd软件
ansible web -m shell -a 'rpm -qa httpd' -o //查看软件包安装情况
卸载软件包
ansible web -m yum -a 'name=httpd state=absent' -o
ansible web -m shell -a 'rpm -qa httpd' -o
service模块
service模块用来控制管理服务的运行状态,其中,使用enablesd表示是否开机自启,取值为true或false;使用name定义服务名称;使用state指定服务状态,分别取值startd、stoped、restarted。
开启httpd服务
ansible web -m service -a 'enabled=true name=httpd state=started' -o
ansible web -m shell -a '/usr/bin/netstat -ntap | grep httpd' //查看服务启动是否成功
ansible web -a 'systemctl status httpd' //查看服务状态
script模块
script模块可以将本地脚本复制到被管理主机上进行运行。注意,使用相对路径来指定脚本
编写简单的shell脚本
cd /opt
vim test.sh
#!/bin/bash
echo this is ansible test > /opt/ansible.txt
chmod +x test.sh
下发shell脚本执行
ansible web -m script -a 'test.sh'
ansible web -m shell -a '/usr/bin/cat /opt/ansible.txt'
setup模块
setup模块收集、查看被管主机的facts(facts是ansible采集被管理主机设备信息的一个功能)。每个被管理主机在接收并运行管理命令之前。都会将自己的相关信息(操作系统、IP地址等)发送给控制主机。
ansible web -m setup //内容特别多就不贴图了