ansible ad-hoc和常用模块总结

1. ad-hoc介绍

  ansible中有两种模式:ad-hoc模式和ansible-playbook模式。

  ad-hoc命令是一种可以快速输入的命令,而且不需要保存起来的命令。

  ad-hoc适合解决一些简单或者平时工作中临时遇到的困难。

2. ad-hoc的使用场景

  • 在多台机器上,查看某个进程是否启动
  • 在多台机器上,拷贝指定文件到本地等等

3. ad-hoc模式命令的使用

  命令+主机名称+指定的模块+模块名称+模块动作+具体的命令

  如:ansible ans -m shell -a 'ls /root'

4. ansible帮助查看方式

ansible-doc -l           #查看所有的模块与简要说明
ansible-doc copy         #查看指定模块的方式
ansible-doc -s copy      #查看指定模块的playbook代码段

5. ad-hoc命令参数

ansible  <host-pattern> [options]

-v|--version                                                #输出更详细的执行过程信息,-vvv可得到执行过程所有的信息
-i|PATH|--inventory(清单)=PATH                               #指定inventory(清单)信息,默认/etc/ansible/hosts
-f NUM|--forks=NUM                                          #并发线程数,默认是5个
--private-key=PRIVATE_KEY_FILE                              #指定密钥文件
-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命令。
-t DIRECTORY,--tree=DIRECTORY                              #输出信息至DIRECTORY目录下,结果文件以远程主机命名。
-T SECONDS,--timeout=SECONDS                               #指定连接远程主机的最大超时,单位是秒。
-B NUM,--background=NUM                                    #后台执行命令,超NUM秒后中止正在执行的任务。
-P NUM,--poll=NUM                                          #定期返回后台任务进度。
-u USERNAME,--user=USERNAME                                #指定远程主机以USERNAME运行命令。
-U SUDO_USERNAME,--sudo-user=SUDO_USERNAME                 #使用sudo,相当于LInux下的sudo命令。
-c CONNECTION,--connection=CONNECTION                      #指定连接方式,可用选项paramiko(SSH)、ssh、local,local方式常用于crontab和kickstarts。
-l  SUBSET,--limit=SUBSET                                  #指定运行主机。
-l ~REGEX,--limit=~REGEX                                   #指定运行主机(正则)。
--list-hosts                                                #列出符合条件的主机列表,不执行任何命令。

6. ansible常用模块

  模块(也被称为 “task plugins” 或 “library plugins”)是在 Ansible 中实际在执行的.它们就 是在每个 playbook 任务中被执行的.你也可以仅仅通过 ‘ansible’ 命令来运行它们。

6.1 command模块

  命令模块适合使用简单的命令,无法支持"<"、">"、"|"、";"、"&"等符号,功能是在远程主机上执行命令,此模块为默认模块,可以忽略-m选项。

chdir          #在执行命令前,进入到指定的目录中
creates        #判断指定文件是否存在,如果存在,不执行后面的操作
removes        #判断指定文件是否存在,如果存在,执行后面的操作
free_from      #必须要输入一个合理的命令

ansible mail -m command -a 'chdir=/data pwd'
ansible mail -m command -a "touch my_right.cnf creates=/data/my_right.cnf"
ansible mail -m command -a "rm -f mysql.repo removes=/data/mysql.repo"

6.2 shell模块

  类似于command模块,但是功能比command要更强大。支持"<"、">"、"|"、";"、"&"等符号。

chdir                #在执行命令前,进入到指定目录中
creates              #判断指定文件是否存在,如果存在,不执行后面的操作
removes              #判断指定文件是否存在,如果存在,执行后面的操作
free_form            #必须要输入一个合理的命令
exectuable #默认系统会使用bash这个shell执行,如果要切换shell就使用这个命令 ansible mail -m shell -a "ps -ef | grep ssh"

6.3 copy模块

  主要是从管理机器复制文件到远程主机上。copy模块在复制数据的时候,如果数据是软连接文件,会将链接指定的源文件进行复制。

src               #用于指定本地文件的保存位置,也就是ansible管理主机的文件位置
backup            #默认数据复制到远程主机,会覆盖原有的文件(yes会将源文件进行备份)
force #远程主机文件存在强制拷贝,默认两个选项yes/no content #用于替代src参数使用,可以直接设定指定文件的值 dest(required) #指定文件将被拷贝到远程主机的哪个目录中,此选项必选 group #文件数据复制到远程主机,设置文件的属组的信息 mode #文件数据复制到远程主机,设置文件的权限 owner #文件数据复制到远程主机,设置文件的属主的信息 remote_src #如果设置yes,表示将远程主机上的数据进行移动操作,如果设置为no,表示将管理主机上的数据进行分发操作
others #所有的file模块里的选项都可以在这里使用
directory_mode #递归设定目录的权限,默认为系统默认权限
ansible mail -m copy -a "src=/data/mysql.repo dest=/data/ backup=yes"

6.4 fetch模块

  主要是抓取文件到管理机器上。

src               #要获取的远程系统上文件,必须是文件,不能是目录
dest              #用于保存文件的目录

ansible mail -m  fetch -a "src=/root/default.conf dest=/data"

6.5 file模块

  实现创建/删除文件信息、对数据权限进行修改。

dest/path/name                #将数据复制到远程节点的路径信息
group                         #文件数据复制到远程主机,并设置文件的属组信息
mode                          #文件数据复制到远程主机,并设置数据权限
owner                         #文件数据复制到远程主机,并设置文件属主
src                           #被链接源文件路径/只应用于state=link,只用于软连接或硬链接
dest #被链接到的路径/只应用于state=link,只用于软连接或硬链接
recurse #递归设置文件的属性,相当于chmod -R
state #状态 state 后面的参数有: absent #文件状态:删除或取消一个链接 directory #文件状态:如果目录不存在则创建 file #文件状态:即使目录不存在也不创建 touch #文件状态:文件不存在则创建 hark/link #创建连接文件 ansible mail -m file -a "path=/data/kai state=directory"

6.6 yum模块

  使用yum模块来对软件进行安装、升级、降级、删除和列出软件包和组。

name                     #指定软件名称信息
state                    #使用remove/absent将软件进行卸载,使用present/installed进行软件的安装,使用latest安装最新的软件
disable_gpg_check #用于禁用对rpm包的公钥gpg验证,默认值为no
enablerepo #用于指定安装软件包时临时启用yum源
diablerepo #用于指定安装软件包临时禁用的yum源

6.7 service模块

  管理服务的运行状态。

enable                  #设置服务器是否自开启,如果参数不指定,原有的服务开机自启动状态进行保留
name                    #设置要启动/停止服务器的名称
state                   #使用参数reloaded是平滑重启,restarted参数是重启,started参数是启动,stopped参数是停止

6.8 mount模块

  批量管理主机进行挂载卸载的操作。

fstype                 #指定挂载文件的系统类型
opts                   #指定挂载的参数信息
path                   #定义一个挂载点信息
src                    #定义设备文件信息
state                  #使用参数absent会进行卸载,也会修改fstab文件信息,使用unmounted会进行卸载但是不会修改fstab文件,present不会挂载,只会修改fstab文件,mounted会进行挂载也会修改fstab文件

6.9 cron模块

  定时任务模块,可以帮助我们管理远程主机中的计划任务,功能相当于crontab命令。 

job                           #指定计划的任务中需要实际执行的命令或者脚本
name                          #用于设置计划任务的名称,计划任务的名称会在注释中显示
state                         #如果参数是absent代表删除定时任务,如果参数是disabled代表将指定的定时任务进行注释或者取消注释
user #用于设置当前计划任务属于哪个用户,当不使用此参数时,默认为管理员用户
backup #此参数的值设置为yes,那么当修改或者删除对应的计划任务时,会对计划任务备份
$time #指定具体的执行时间,minute分,hour时,day天,month月,weekday 0-7 代表周
注意:如果时间参数不写,默认是*

6.10 group模块

  远程批量创建用户组信息。

gid          #创建组的ID信息
name         #创建组的名称信息
state        #如果参数是absent代表删除指定的用户组,如果参数是present代表是创建指定的用户组

6.11 user模块

  远程批量创建用户信息。

password       #输入密码信息
name           #指定用户名信息
uid            #指定用户UID信息
group          #指定用户主要属于哪个用户组
groups         #指定用户属于哪个附加组信息
shell          #/bin/bash或者/sbin/nologin用来指定用户是否能够登陆
create_home    #是否创建家目录
home           #指定家目录创建在什么路径默认是/home
注意:password设置密码的时候不能使用明文的方式,只能使用密文方式,可以给用户设置密码,还可以给用户修改密码。

6.12 script模块

  script模块可以帮助我们在远程主机上执行我们编写的管理主机的脚本,就是脚本就在你管理主机的本地,无需手动拷贝到远程主机。

free_from  #必要的参数,默认会使用
chdir      #指定一个目录,在执行命令前首先会切换指定的目录中去
creates    #当指定的文件存在时,就不指定对应的命令,起到判断的作用
removes    #与creates参数相反,当指定的文件不存在的时候,就不执行对应的命令

6.13 find模块

  find命令用来查找指定目录下的文件,任何位于参数之前的字符串都将会被视为欲查找的目录名,如果使用该命令时,不设置任何的参数,那么find命令将在当前的目录下查找子目录和文件,并将查到的子目录和文件全部显示出来,find模块就像find命令一样可以帮助我们在被管理机器中查找符合条件的文件。

paths         #指定在哪个目录中查找文件,可以指定多个路径用逗号隔开
recurse       #是否为递归子目录查找文件
hidden        #是否查找隐藏文件
file_type     #指定查找的文件类型,可以是any、directory、file、link四种
patterns      #指定需要查找文件的名称,如果想要使用python正则表达式去匹配文件需要使用use_regex=yes
use_regex     #是否启用python正则来查找文件
contains      #根据文章内容查找文件,这个参数是一个正则表达式
age           #指定文件间隔的时间,可以使用的单位有秒、分、时、天、星期
age_stamp     #根据时间范围查找文件,文件时间属性有三个,atime、ctime、mtime
size          #根据文件的大小来进行查找,可以使用的单位有t、g、m、k、b
get_checksum  #当有符合查找文件被找到的时候,会同时返回对应文件的sha1校验码

6.14 unarchive模块

  unarchive模块的功能是解压缩,这个模块有两种用法:

  1. 将ansible主机上的压缩包在本地解压缩之后传到远程主机上这种情况下copy=yes
  2. 将远程主机上的某个解压包压缩到指定的路径下,这种情况下copy=no
copy        #在解压文件之前,是否先将文件复制到远程主机上,默认是yes
creates     #指定一个文件名,当该文件存在的时候,解压命令不执行
src         #如果copy是yes需要指定压缩文件的源路径
dest        #远程主机上的一个路径,即文件解压的路径
list_files  #列出压缩包里面的文件,yes/no
mode        #解压文件的权限设置
group       #解压后的目录文件的属组
owner       #解压文件或目录的属主

6.15 replace模块

  replace模块可以根据我们指定的正则表达式替换文件中的字符串,文件中所有被匹配的字符串都会被替换,也就是说它是一种全局替换工具。

path      #必须的参数,指定要执行的操作文件名称
regexp    #必须参数,指定一个正则表达式
replace   #指定最后要替换成的文本
backup    #在修改文件之前对文件进行备份,yes/no

6.16 lineinfile模块

  lineinfile模块相当重要,在自动化运维中起到了相当重要的目的,他可以通过正则表达式替换指定文本,例如开启一些配置选项等,还可以新加一行文本,或者是删除指定的行。

path           #必须参数,指定要操作的文件路径
line           #必须参数,指定要替换的文本内容
regexp         #匹配正则语句和要过滤的关键字
state          #参数是absent意思是删除,present意思是默认
backrefs       #表示是否开启后向引用,默认是no,yes/no
create         #当文件不存在的时候,是否创建对应的文件
backup         #是否在修改文件之前对文件进行备份
insertafter    #借助insertafter参数可以将文本插入到"指定行"之后
insertbefore   #借助insertafter参数可以将文本插入到"指定行"之前

6.17 setup模块

  setup模块用于收集远程主机的一些基本信息,其可以收集几乎主机上的任何数据,方便我们后期进行分析工作。

ansible_all_ipv4_addresses            #仅显示ipv4的信息
ansible_devices                       #仅显示磁盘设备信息
ansible_distribution                  #显示是什么系统,例:centos,suse等
ansible_distribution_major_version    #显示是系统主版本
ansible_distribution_version          #仅显示系统版本
ansible_machine                       #显示系统类型,例:32位还是64位
ansible_eth0                          #仅显示eth0的信息
ansible_hostname                      #仅显示主机名
ansible_kernel                        #仅显示内核版本
ansible_lvm                           #显示lvm相关信息
ansible_memtotal_mb                   #显示系统总内存
ansible_memfree_mb                    #显示可用系统内存
ansible_memory_mb                     #详细显示内存情况
ansible_swaptotal_mb                  #显示总的swap内存
ansible_swapfree_mb                   #显示swap内存的可用内存
ansible_mounts                        #显示系统磁盘挂载情况
ansible_processor                     #显示cpu个数(具体显示每个cpu的型号)
ansible_processor_vcpus               #显示cpu个数(只显示总的个数)

ansible all -m setup
ansible all -m setup -a "filter=ansible_all_ipv4_addresses"

6.18 get_url模块

  get_url模块用于下载指定文件到本地。

dest   #文件下载到远程的那个目录下
force  #是否强制覆盖yes/no
url    #指定一个url地址

6.19 archive模块

  对指定的内容进行打包。

path  #源路径,准备打包的文件
dest  #打包成什么格式的包,放到什么位置
mode  #权限

 

上一篇:OLTP, OLAP, 即席查询(ad hoc query)区别与联系


下一篇:c-如何将向量传递给execvp