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模块的功能是解压缩,这个模块有两种用法:
- 将ansible主机上的压缩包在本地解压缩之后传到远程主机上这种情况下copy=yes
- 将远程主机上的某个解压包压缩到指定的路径下,这种情况下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 #权限