第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目录

 

posted @ 2018-11-13 14:43  sellsa  阅读(269)  评论(0编辑  收藏  举报