常用模块详解
模块说明及示例:
1.ping模块ping模块
主要用于判断远程客户端是否在线,用于ping本身服务器,返回值是changed、ping
示例 ansible clu -m ping
2.Ansible command模块是Ansible默认模块
主要用于执行Linux基础命令,可以执行远程服务器命令执行、任务执行等操作。
但command模块不支持变量、重定向、管道符等,这些操作需要用shell模块执行
command模块使用详解:
chdir:执行命令前,切换到目录
creates:当该文件存在时,不执行该步骤
executable:切换shell来执行命令,需要使用命令的绝对路径
free_from:需要执行的脚本,一般使用Ansible的-a参数代替。
removes:当该文件不存在时,不执行该步骤
warn:如果在ansible.cfg中存在告警,如果设定了false,不会告警该行
示例ansible ansible-demo3 -m command -a "ls"
(command执行linux命令有局限性,最好使用shell替代 )
3.Ansible copy模块
主要用于文件或者目录复制,支持文件、目录、权限、用户组功能
copy模块使用详解:
src:Ansible端源文件或者目录,空目录不复制
content:用来替代src,用于将指定文件的内容复制到远程文件内
dest:客户端目标目录或者文件,需要绝对路径
backup:复制之前,先备份远程节点上的原始文件
directory_mode:用于复制目录,新建的文件会被复制,而旧的不会被复制
follow:支持link文件复制
force:覆盖远程主机不一致的内容
group:设定远程主机目录的组名
mode:设定远程主机文件及目录的权限
owner:设定远程主机目录的用户名
示例
ansible clu -m copy -a “src=/root/1.txt dest=/soft/2.txt group=root owner=root mode=755”
4.Ansible yum模块
主要用于软件的安装、升级、卸载,支持rpm软件包的管理
yum模块使用详解:
conf_file:设置远程yum执行时所依赖的yum配置文件
disable_gpg_check:安装软件包之前是否检查gpg key
name:需要安装的软件名称,支持软件组安装
update_cache:安装软件之前更新缓存
enablerepo:指定repo源名称
skip_broken:跳过异常软件节点
state:软件包状态,包括installed、present、latest、absent、removed
present, installed是指安裝套件,而latest指安裝最新的套件,也就是使用 yum mirror 上最新的版本。
absent, removed 没有什么区别
示例ansible clu -m yum -a “name=http state=latest”
5.Ansible user模块
主要用于操作系统用户、组、权限、密码等操作
user模块使用详解:
system:默认创建为普通用户,为yes则创建系统用户
append:添加一个新的组
comment:添加描述信息
createhome:给用户创建家目录
force:强制删除用户
group:创建用户主组
groups:将用户加入组或者附属组添加
home:指定用户的家目录
name:表示状态,是否create、remove、modify
password:指定用户的密码,为加密密码
remove:删除用户
shell:设置用户的shell登录环境
uid:设置用户ID
update_password:修改用户密码
state:用户状态,默认为present,表示新建用户
示例:ansible hadoop -m user -a "name=dba groups=admins,dbagroup append=yes home=/home/dba shell=/bash/shell state=present"
6. setup模块
主要用于获取主机信息,在playbooks里经常会用到的一个参数gather_facts就与该模块相关。setup模块下经常使用的一个参数是filter参数,具体使用示例如下
ansible_all_ipv4_addresses
# ipv4的所有地址
ansible_all_ipv6_addresses
# ipv6的所有地址
ansible_date_time
# 获取到控制节点时间
ansible_default_ipv4
# 默认的ipv4地址
ansible_distribution
# 系统
ansible_distribution_major_version
# 系统的大版本
ansible_distribution_version
# 系统的版本号
ansible_domain
#系统所在的域
ansible_env
#系统的环境变量
ansible_hostname
#系统的主机名
ansible_fqdn
#系统的全名
ansible_machine
#系统的架构
ansible_memory_mb
#系统的内存信息
ansible_os_family
# 系统的家族
ansible_pkg_mgr
# 系统的包管理工具
ansible_processor_cores
#系统的cpu的核数(每颗)
ansible_processor_count
#系统cpu的颗数
ansible_processor_vcpus
#系统cpu的总个数=cpu的颗数*CPU的核数
ansible_python
# 系统上的python
ansible cache
-
m setup
-
a
'filter=*processor*'
# 用来搜索
示例:
ansible 10.212.52.252 -m setup -a 'filter=ansible_*_mb' ansible host1 -m setup -a "filter=ansible_all_ipv4_addresses"
(由于ansible执行剧本执行会去获取主机参数,对执行速度会有影响,可以使用gather_faces去进行预先缓存)
7.file模块
主要用于远程主机上的文件操作,file模块包含如下选项:
force:需要在两种情况下强制创建软链接,一种是源文件不存在但之后会建立的情况下;另一种是目标软链接已存在,需要先取消之前的软链,然后创建新的软链,有两个选项:yes|no
group:定义文件/目录的属组
mode:定义文件/目录的权限
owner:定义文件/目录的属主
path:必选项,定义文件/目录的路径
recurse:递归的设置文件的属性,只对目录有效
src:要被链接的源文件的路径,只应用于state=link的情况
dest:被链接到的路径,只应用于state=link的情况
state: :如果目录不存在,创建目录
file:即使文件不存在,也不会被创建
link:创建软链接
hard:创建硬链接
touch:如果文件不存在,则会创建一个新的文件,如果文件或目录已存在,则更新其最后修改时间
absent:删除目录、文件或者取消链接文件
使用示例:
ansible test -m file -a "path=/root/1.txt state=file/directory”
8.cron模块(计划任务)
用于定时执行任务
相关参数:minute分、hour时、day日、month月、weekday周 (计划时间默认为*)
name:必须 任务描述
job:任务。要加引号(statepresent - 创建 adsent - 删除)
示例: ansible all -m cron -a 'minute=* weekday=1,3,5 job="/usr/bin/wall warning" name=test'
9.service模块
用于管理服务
name:服务名称
state:服务执行操作(started、stopped、restarted)
enable:自启动(yes)
runlevel:运行级别
示例:ansible host1 -m service -a "name=nginx state=started enabled=yes"
10.group(管理用户组)
用于创建修改用户组
name:组名称
gid:指定组gid
state:absent不存在 present当前
system:yes/no
示例:ansible host1 -m group -a "name=test_grp state=present"
11.fetch:(文件拉取模块)
用于目标主机上的文件拉取,不能拉取文件夹
dest= # 本地存储拉取文件的目录。例如dest=/data,src=/var/log/messages
fail_on_missing=[yes|no] # 当设置为yes时,如果拉取的源文件不存在,则此任务失败。在2.4以前是默认为no。2.4中默认为yes
flat=[yes|no] # 允许您重写将主机名/路径/文件/文件附加到目的地的默认行为。如果dest以“/”结尾,则将使用源文件的基名称,类似于复制模块。很明显这很方便,如果文件名是唯一的。
src= # 远程主机上的源文件。只能是文件,不支持目录。在未来的版本中可能会支持目录递归拉取
validate_checksum # 获取文件后验证源和目标校验和是否匹配
示例:ansible all -m fetch -a "src=/root/checkport.py dest=/data"
12.mount(挂载服务)
用于批量挂载服
path: /mnt/dvd #挂载的目录(nfs客户端)
src: /dev/sr0 #远端被挂载的目录 (nfs服务端)
fstype: nfs #挂载类型
opts: ro,noauto #自动挂载的参数
state: present (写入自动挂载,但实际没有挂咋,需要重启服务器unmounted #取消临时挂载,但是没有清理自动挂载mounted #写入自动挂载,并且直接挂载了(常用)absent #取消临时挂载,并且清理自动挂载
示例:ansible web01 -m mount -a 'src=172.16.1.31:/data path=/code/wordpress fstype=nfs state=mounted'
13.user:(管理用户模块)
name参数:必须参数,用于指定要操作的用户名称,可以使用别名 user。
group参数:此参数用于指定用户所在的基本组。
gourps参数:此参数用于指定用户所在的附加组。注意,如果说用户已经存在并且已经拥有多个附加组,那么如果想要继续添加新的附加组,需要结合 append 参数使用,否则在默认情况下,当再次使用 groups 参数设置附加组时,用户原来的附加组会被覆盖。
append参数:如果用户原本就存在多个附加组,那么当使用 groups 参数设置附加组时,当前设置会覆盖原来的附加组设置,如果不想覆盖原来的附加组设置,需要结合 append 参数,将 append 设置为 yes,表示追加附加组到现有的附加组设置,append 默认值为 no。
shell参数:此参数用于指定用户的默认 shell。
uid参数:此参数用于指定用户的 uid 号。
expires参数:此参数用于指定用户的过期时间,相当于设置 /etc/shadow
文件中的的第8列,比如,你想要设置用户的过期日期为2018年12月31日,那么你首先要获取到2018年12月31日的 unix 时间戳,使用命令 “date -d 2018-12-31 +%s
” 获取到的时间戳为1546185600,所以,当设置 expires=1546185600 时,表示用户的过期时间为2018年12月31日0点0分,设置成功后,查看远程主机的 /etc/shadow
文件,对应用户的第8八列的值将变成17895(表示1970年1月1日到2018年12月31日的天数,unix 时间戳的值会自动转换为天数,我们不用手动的进行换算),目前此参数只支持在 Linux 和 FreeBSD 系统中使用。
comment参数:此参数用于指定用户的注释信息。
state参数:此参数用于指定用户是否存在于远程主机中,可选值有 present、absent,默认值为 present,表示用户需要存在,当设置为 absent 时表示删除用户。
remove参数:当 state 的值设置为 absent 时,表示要删除远程主机中的用户。但是在删除用户时,不会删除用户的家目录等信息,这是因为 remove 参数的默认值为 no,如果设置为yes,在删除用户的同时,会删除用户的家目录。当 state=absent 并且 remove=yes 时,相当于执行 “userdel --remove
” 命令。
password参数:此参数用于指定用户的密码。但是这个密码不能是明文的密码,而是一个对明文密码”加密后”的字符串,相当于 /etc/shadow
文件中的密码字段,是一个对明文密码进行哈希后的字符串,你可以在 python 的命令提示符下输入如下命令,生成明文密码对应的加密字符串。
示例:ansible host1 -m user -a "name=test2 state=present groups=test2,test_grp shell=/bin/bash append=yes"
14.repoace(替换模块)
可以根据我们指定的正则表达式替换文件中的字符串,文件中所有被匹配到的字符串都会被替换。
path参数 :必须参数,指定要操作的文件,2.3版本之前,只能使用 dest, destfile, name指定要操作的文件,2.4版本中,仍然可以使用这些参数名,这些参数名作为 path 参数的别名使用。
regexp参数 : 必须参数,指定一个 python 正则表达式,文件中与正则匹配的字符串将会被替换。
replace参数 : 指定最终要替换成的字符串。
backup参数 :是否在修改文件之前对文件进行备份,最好设置为yes。
示例:ansible ansible-demo3 -m replace -a 'path=/testdir/test regexp="ABC" replace=abc’
15.lineinfile
我们可以借助 lineinfile 模块,确保”某一行文本”存在于指定的文件中,或者确保从文件中删除指定的”文本”(即确保指定的文本不存在于文件中),还可以根据正则表达式,替换”某一行文本”
path参数 :必须参数,指定要操作的文件。
line参数 : 使用此参数指定文本内容。
regexp参数 :使用正则表达式匹配对应的行,当替换文本时,如果有多行文本都能被匹配,则只有最后面被匹配到的那行文本才会被替换,当删除文本时,如果有多行文本都能被匹配,这么这些行都会被删除。
state参数:当想要删除对应的文本时,需要将state参数的值设置为absent,absent为缺席之意,表示删除,state的默认值为present。
backrefs参数:默认情况下,当根据正则替换文本时,即使regexp参数中的正则存在分组,在line参数中也不能对正则中的分组进行引用,除非将backrefs参数的值设置为yes。backrefs=yes表示开启后向引用,这样,line参数中就能对regexp参数中的分组进行后向引用了,这样说不太容易明白,可以参考后面的示例命令理解。backrefs=yes除了能够开启后向引用功能,还有另一个作用,默认情况下,当使用正则表达式替换对应行时,如果正则没有匹配到任何的行,那么line对应的内容会被插入到文本的末尾,不过,如果使用了backrefs=yes,情况就不一样了,当使用正则表达式替换对应行时,同时设置了backrefs=yes,那么当正则没有匹配到任何的行时,则不会对文件进行任何操作,相当于保持原文件不变。
insertafter参数:借助insertafter参数可以将文本插入到“指定的行”之后,insertafter参数的值可以设置为EOF或者正则表达式,EOF为End Of File之意,表示插入到文档的末尾,默认情况下insertafter的值为EOF,如果将insertafter的值设置为正则表达式,表示将文本插入到匹配到正则的行之后,如果正则没有匹配到任何行,则插入到文件末尾,当使用backrefs参数时,此参数会被忽略。
insertbefore参数:借助insertbefore参数可以将文本插入到“指定的行”之前,insertbefore参数的值可以设置为BOF或者正则表达式,BOF为Begin Of File之意,表示插入到文档的开头,如果将insertbefore的值设置为正则表达式,表示将文本插入到匹配到正则的行之前,如果正则没有匹配到任何行,则插入到文件末尾,当使用backrefs参数时,此参数会被忽略。
backup参数:是否在修改文件之前对文件进行备份。
create参数 :当要操作的文件并不存在时,是否创建对应的文件。
示例:ansible ansible-demo3 -m lineinfile -a 'path=/testdir/test regexp="^line123" line="test lineinfile" '
16.
批量部署压缩包,并解压
src: /tmp/foo.zip #要解压的包
dest: /usr/local/bin #解压到目标位置
remote_src: (yes #要解压的包在受控 no #要解压的包在控制端)
示例:ansible web03 -m unarchive -a 'src=/package/php.tar.gz dest=/tmp/ remote_src=yes'
17.
path: /path/to/foo #要压缩的文件或目录
dest: /path/to/foo.tgz #压缩后的文件
format:bz2, gz, tar, xz, zip #指定打包的类型
示例:ansible web01 -m archive -a 'path=/code dest=/tmp/code.tar.gz'
18.script模块
远程执行目标主机上脚本
脚本路径,必须参数
chdir:在执行脚本之前,先进入到指定目录
creates:当远程主机上的该文件存在时,不执行脚本;反之执行
removes:当远程主机上的该文件不存在时,不执行脚本;反之执行
示例:ansible all -m script -a 'chdir=/opt /opt/test.sh'