第4天:Ansible模块
Ansible对远程服务器的实际操作实际是通过模块完成的,其工作原理如下:
1)将模块拷贝到远程服务器
2)执行模块定义的操做,完成对服务器的修改
3)在远程服务器中删除模块
需要说明的是,Ansible中的模块是幂等的。也就是说,多次执行相同的操作,只有第一次会起作用。这也是在编写自定义Ansible模块的需要注意的地方。
Ansible提供了大量的模块,ansible-doc命令用于在命令行查看模块列表,也可以使用该工具在命令行获取模块帮助信息
ansible-doc -l
下面命令用户获取file模块的帮助信息
ansible-doc file ansible-doc -l file
下面是一些比较基础,重要,同时也是使用频率比较高的模块
ping
ping模块是Ansible中最简单的模块,用来测试现有的SSH参数是否能够顺利连通远程服务器
ansible test -m ping
远程命令模块
command 是Ansible的默认模块,可以不指定模块名称直接运行Linux命令, 也可以显示地通过-m指定command模块
command在执行Linux命令时不能使用管道
ansible test -a 'hostname' ansible test -m command -a 'hostname'
raw模块相当于使用SSH直接执行Linux命令,不会进入到Ansible的模块子系统中
ansible test -m raw -a 'cat /etc/passwd|wc -l'
shell模块不仅可以执行Linux命令,还是可以执行远程服务器上的shell脚本文件
ansible test -m shell -a 'cat /etc/passwd|wc -l' ansible test -m shell -a '/home/heboan/test.sh' #脚本需要加上执行权限
script模块可以在远程服务器上执行主控节点的脚本文件,起功能相当于scp+shell的组合。脚本执行完成以后会在远程服务器上删除脚本文件
ansible test -m script -a 'test.sh'
file
file模块主要用于对远程服务器上的文件(包括链接和目录)进行操作,包括修改文件的权限,修改文件的所有者、创建文件、删除文件等。
创建一个目录
ansible test -m file -a 'path=/tmp/dd state=directory mode=0755' #目录不存在,会创建目录 #如果state取值为file,即使文件不存在也不会被创建
修改权限
ansible test -m file -a 'path=/tmp/dd state=touch mode='0644'' #如果文件不存在,则创建一个新文件,如果 文件或目录以存在,更新其最后访问时间和修改时间 #state取值为absent时,删除目录,文件或软连接
创建一个软连接
ansible test -m file -a "src=/tmp/dd dest=/tmp/dd1 owner=heboan group=heboan state=link"
修改一个文件的所有者
ansible test -m file -a "path=/tmp/dd owner=root group=root mode=0644"
copy
copy模块用来将主控节点的文件或目录拷贝到远程服务器上。
copy模块中的重要选项:
- src:要复制到远程主机的文件地址,可以是绝对路径,也可以是相对路径,如果路径是一个目录,将递归复制,如果路径使用‘/’结尾,则只复制目录里面的内容,包在包含目录在内的整个内容
- dest:文件复制的目的地,必须是一个绝对路径,如果源文件是一个目录,那么dest指向的也必须是一个目录
- force:默认取值 为yes,表示目标主机包含该文件,但内容不同时会强制覆盖,如果未no,只有目标主机不存在该文件时,才会进行复制
- backup:默认取值为no,如果取值为yes,那么,在覆盖之前将原文件进行备份
- directory_mode:递归设定目录权限,默认为系统默认权限
- others:所有file模块里的选项都可以在这里使用
拷贝文件到远程服务器
ansible test -m copy -a "src=test.sh dest=/tmp/test.sh"
拷贝文件到远程服务器,如果远程服务器已经存在,则备份文件
ansible test -m copy -a "src=test.sh dest=/tmp/test.sh backup=yes force=yes"
拷贝文件到远程服务器,并且修改文件的所有者和权限
ansible test -m copy -a "src=test.sh dest=/tmp/test.sh owner=root group=root force=yes" -become
user/group
创建一个用户
ansible test -m user -a "name=sellsa comment='sellsa' uid=1329 group=heboan" -become comment:用户的详细描述
删除一个用户
ansible test -m user -a 'name=sellsa state=absent' -become
创建一个组
ansible test -m group -a 'name=ansible state=present gid=1234' -become
删除一个组
ansible test -m group -a 'name=ansible state=absent' -become
get_url
下载文件到远程服务器
ansible test -m get_url -a "url=https://dldir1.qq.com/qqfile/qq.exe dest=/tmo/qq.exe"
下载文件到远程服务器,并修改文件的权限
ansible test -m get_url -a "url=https://dldir1.qq.com/qqfile/qq.exe dest=/tmo/qq.exe mode=0777"
下载文件到远程服务器,并检查文件的md5校验
ansible test -m get_url -a "url=https://dldir1.qq.com/qqfile/qq.exe dest=/tmo/qq.exe mode=0777 checksum=md5:xxxxxxx"
unarchive
unarchive模块用于解压文件,其作用类似于Linux下的tar命令。默认情况下是将控制节点的压缩包拷贝到远程服务器,然后进行解压。
ansible test -m unarchive -a "src=heboan.tar.gz dest=/tmp/data"
解压远程的文件
ansible test -m unarchive -a "src=/tmp/heboan.tar.gz dest=/tmp/data remote_src=yes "
git
git模块就是远程服务器执行git相关的操作,该模块常用的选项如下:
- repo:远程git 库地址,可以是git协议、ssh协议或http协议的地址
- dest:必选选项,git库clone到本地服务器以后保存的绝对路径
- version:克隆远程git库的版本,取值可以为HEAD、分支名称、tag的名称,也可以是一个commit的hash值
- force:默认值为no, 当为yes时,当本地的库有修改时,则会放弃本地的修改
- accept_hostkey:当该选项取值为yes时,如果git库的服务器不在know_hosts中,则添加到know_hosts中
- key_file:指定克隆远程git库地址时使用的私钥
ansible test -m git -a "repo=https://github.com/kennethreitz/requests.git dest=/tmp/requests version=HEAD"
stat
stat模块用户获取远程服务器上的文件信息,其作用类似于linux下的stat命令。stat模块可以获取atime、ctime、mtime、checksum、size、uid、gid等信息
stat只有path这一关必选项,用来指定文件或目录的路径
#获取文件的相应信息 ansible test -m stat -a "path=/etc/passwd"
cron
cron是管理Linux下计划任务的模块,该模块包含以下重要选项:
- backup:取值为yes 或no,默认为no,表示修改之前先做备份
- state:取值为present或absent,用来确认该任务是创建还是删除
- name:该任务的描述
- job:添加或删除任务,主要取决于state的值
- user:操作哪一个用户的crontab
- cront_file:如果指定该选项,则该文件替换远程主机上的cron.d目录下的用户任务计划
- month weekday day minute hour 取值与crontab类似,例如,对于minute的取值范围0-59,也可以选择‘*’表示没分钟运行,或者'*/5'表示每5分钟运行
ansible test -m cron -a "backup=yes name='test cron' minute=*/2 hour=* job='ls /tmp >/dev/null'"
service
service模块的作用类似于Linux下的service命令,用来启动、停止、重启服务。
- name:服务的名称,该选项为必选项
- state: 可以取值started、stopped、restarted和reloaded。其中started和stoped是幂等的,也就是说如果服务已经启动了,执行started不会执行任何操作
- sleep:重启的过程中,先停止服务然后sleep几秒再启动
- enabled:取值为yes或no,用来设置服务是否开机启动
ansible test -m service -a "name=redis state=started"
sysctl
该模块的作用于Linux下的 sysctl命令相似,用于控制Linux的内核参数,常用选项:
- name:需要设置的参数
- value:需要设置的值
- sysctl_file:sysctl.conf文件的绝对路径,默认路径是/etc/sysctl.conf
- reload:该选项可以取值为yes或no,默认为yes,表示设置完成以后是否需要执行sysctl -p操作
#将overcommit_memory参数的值为1 ansible test -m sysctl -a "name=vm.overcommit_memory value=1" -become
mount
在远程服务器上挂载磁盘每, 当进行磁盘操作时,如果挂载点指定的路径不存在,将创建该路径
#挂载/dev/vda盘到/mnt/data目录 ansible test -m mount -a "name=/mnt/data src=/dev/vda fstype=ext4 state=mounted"
synchronize
synchronize模块是对rsync命令的封装,以便对常见的 rsync任务进行处理
synchronize模块的常用选项:
- src:需要同步到远程服务器的文件或目录
- dest:远程服务器保存数据的路径
- archive:默认取值为yes,相当于同时开启recursive、links、perms、times、owner、group、-D选项
- compress:默认为yes,表示文件在同步过程中是否启用压缩
- delete:默认为no,当取值为yes时,表示删除dest中存在而src中不存在的文件
ansible test -m synchronize -a 'src=heboan/ dest=/tmp/www' #heboan/ 同步heboan目录里面的内容到www目录 #heboan 同步heboan整个目录到www目录