Ansible常用模块,常用的Ansible


Ansible 模块

1、什么是Ansible模块?

bash无论在命令行上执行,还是bash脚本中,都需要调用cd、ls、copy、yum等命令;模块就是Ansible的“命令”,模块是ansible命令行和脚本中都需要调用的。常用的Ansible模块有yum、copy、template等。

2、Ansible命令及参数

# 语法格式:
ansible <pattern_goes_here> -m <module_name> -a <arguments>
# 也就是:
ansible  匹配模式   -m  模块  -a  '需要执行的内容'

# 解释说明:
匹配模式:即哪些机器生效 (可以是某一台, 或某一组, 或all) , 默认模块为command , 执行常规的shell命令.

# 参数:
-v,--verbose:输出更详细的执行过程信息,-vvv可得到执行过程所有信息。
 
-i,PATH,--inventory(清单)=PATH:指定inventory(清单)信息,默认/etc/ansible/hosts
 
-f NUM,--forks=NUM:并发线程数,默认5个线程。
 
--private-key=PRIVATE_KEY_FILE:指定密钥文件。
 
-m NMAE,--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:列出符合条件的主机列表,不执行任何命令。
  

# 执行的状态返回信息:
		--绿色:执行成功并且不需要做改变的动作
		--黄色:执行成功并且对目标主机做变更
		--红色:执行失败

3、Ansible模块

  • 文件模块:
    • copy:将本地文件复制到受控主机
    • file:创建或者和删除远程主机上的文件或者目录
    • lineinfile:替换文件中的内容,添加内容到指定文件位置
    • synchronize:使用rsync同步内容
  • 软件包模块
    • package:使用操作系统本机的自动检测软件包管理器管理软件包
    • yum:使用yum软件包管理器管理软件包
    • apt:使用apt软件包管理器管理软件包
    • dnf:使用dnf软件包管理器管理软件包
    • pip:从PyPI管理Python软件包
  • 系统模块
    • firewalld:使用firewalld管理任意端口和服务
    • reboot:重新启动计算机
    • service:管理服务
    • user:添加、删除和管理用户账户
  • Net Tools模块
    • get_url:通过http、https或者ftp下载文件
    • nmcli:管理网络
    • uri:与WEB服务交互

3、Ansible 常用模块

1 user模块

参数解释
name要创建、修改、移除的用户名
password设置用户密码。此处只能使用加密密码作为值
system设置为yes表示创建一个系统用户,只能用于创建不能用于修改已有用户为系统用户
state创建用户(present)还是删除用户(absent)。 默认为present
createhome创建家目录,或者已有的用户但家目录不存在也会创建。设置为no则不创建家目录
home指定要创建的家目录路径
move_home如果设置为yes,则"home="则表示将家目录移动到此选项指定的路径下
uid设置用户的uid
group设置用户的primary group
groups将用户加入到辅助组列表中。如果设置"groups=", 则会将此用户从所有辅助组中移除
shell设置用户的shell
force配合’state=absent’时,等价于’userdel --force’, 即强制删除用户、家目录和邮件列表
remove配合’state=absent’时, 等价于’userdel --remove’, 即删除家目录和邮件列表
update_passworduser是幂 等模块,"always"将总是修改密码。"on_.create"将只在创建用户时设置密码

示例:

# 临时命令使用user模块来确保newbie用户存在于node1上,并且其UID为4000
[student@ansible ~/ansible]$ansible node1 -m user -a 'name=newbie uid=4000 state=present'
[root@node1 ~]#id newbie
uid=4000(newbie) gid=4000(newbie) 组=4000(newbie)

# 设置newbie用户密码
[student@ansible ~/ansible]$ansible node1 -m user -a 'name=newbie password=$1$x5dsadpB$PqzHJZD//CqCaxOZoZcj71'

# 创建无家目录,不能登录的用户
[student@ansible ~/ansible]$ansible node1 -m user -a 'name=zhao create_home=no shell=/sbin/nologin state=present'

2 shell模块

在远程主机上执行复杂的命令

# 语法:
ansible 主机清单 -m  shell -a  '执行命令'

# 示例:
--临时命令使用shell模块来删除node1.example.com节点中的用户newbie
[student@ansible ~/ansible]$ansible node1 -m shell -a 'userdel -r newbie'
node1 | CHANGED | rc=0 >>

3 copy模块

参数模块
backup=[yes|no]拷贝的同时也创建一个包含时间戳信息的备份文件,默认为no
dest目标路径,只能是绝对路径,如果拷贝的文件是目录,则目标路径必须也是目录
content直接以content给定的字符串或变量值作为文件内容保存到远程主机上,它会替代src选项
directory_mode当对目录做递归拷贝时,设置了directory_mode将会使得只拷贝新建文件
follow=[yes|no]是否追踪到链接的源文件
force=[yes|no]设置为yes(默认)时, 将覆盖远程同名文件。设置为no时,忽略同名文件的拷贝
group设置远程文件的所属组
owner设置远程文件的所有者
mode设置远程文件的权限。使用数值表示时不能省略第一位,如0644。
也可以使用’u+rwx’或’u=rw,g=r,0=r’等方式设置
src拷贝本地源文件到远程,可使用绝对路径或相对路径。如果路径是目录,且目录后加了
斜杠"/",则只会拷贝目录中的内容到远程,如果目录后不加斜杠,则拷贝目录本身和
目录内的内容到远程。

示例:

# 将源文件,copy到被控端
[student@ansible ~/ansible]$ansible node1 -m copy -a 'src=/etc/fstab dest=/var/tmp/fstab'

4 template模块

参数解释
backup拷贝的同时也创建一个包含时间戳信息的备份文件,默认为no
dest目标路径
force设置为yes (默认)时,将覆盖远程同名文件。设置为no时,忽略同名文件的拷贝
group设置远程文件的所属组
owner设置远程文件的所有者
mode设置远程文件的权限。使用数值表示时不能省略第一位,如0644。
也可以使用’u+rwx’ or 'u=rw,g=r,0=r’等 方式设置
srcansible控制器上Jinja2格式的模板所在位置,可以是相对或绝对路径
validate在复制到目标主机后但放到目标位置之前,执行此选项指定的命令。
一般用于检查配置文件语法,语法正确则保存到目标位置。
如果要引用目标文件名,则使用%s, 下面的示例 中的s%即表示目标机器上的/etc/nginx/nginx. conf.

示例:

[student@ansible ~/ansible]$ansible node1 -m template -a 'src=/usr/share/doc/httpd/httpd-vhosts.conf dest=/etc/httpd/conf.d/httpd-vhosts.conf group=root owner=root mode=0644'

5 file模块

参数解释
group设置文件的所属组
owner设置文件的所有组
mode修改权限
path指定代操作的文件
recurse递归修改文件属性,要求state=directory
src原文件名
statedirectory:如果目录不存在则递归创建
file:文件不存在时,不会被创建(默认值)
touch:创建新文件
link:修改或创建软链接
hard:修改或创建硬链接
absent:目录和其中的文件会被递归删除,文件或链接将取消链接状态

示例:

# 修改文件的权限属性和context值
[student@ansible ~/ansible]$ansible node1 -m file -a 'path=/var/tmp/fstab mode=g+w mode=o+w group=galaxy owner=galaxy setype=samba_share_t'

# 新建文件
[student@ansible ~/ansible]$ansible node1 -m file -a 'path=/var/tmp/bbb state=touch'

# 新建目录
[student@ansible ~/ansible]$ansible node1 -m file -a 'path=/var/tmp/cc state=directory'

# 删除文件或者目录
[student@ansible ~/ansible]$ansible node1 -m file -a 'path=/var/tmp/cc state=absent'

# 创建软链接
[student@ansible ~/ansible]$ansible node1 -m file -a 'dest=/var/tmp/chenyu src=/var/tmp/bbb state=link'

# 创建硬链接
[student@ansible ~/ansible]$ansible node1 -m file -a 'dest=/var/tmp/chenyu1 src=/var/tmp/aaa state=hard'

6 lineinfile模块

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

示例:

# 通过正则匹配查找/etc/selinux/config 文本中开头是SELINUX=的行,并替换成SELINUX=disabled
[student@ansible ~/ansible]$ansible node1 -m lineinfile -a 'path=/etc/selinux/config regexp="^SELINUX=" line="SELINUX=disabled"'

# 通过正则匹配查找/etc/selinux/config文本,并在文本末尾插入一行www.alone.com
[student@ansible ~/ansible]$ansible node1 -m lineinfile -a 'path=/etc/selinux/config regexp="EOF" line="www.alone.com"'

# 通过正则匹配查找/etc/selinux/config文本,并在文本行首插入一行www.alone.com
[student@ansible ~/ansible]$ansible node1 -m lineinfile -a 'path=/etc/selinux/config regexp="BOF" line="www.alone.com"'

# 4.通过正则匹配查找/etc/selinux/config文本,删除所有的www.alone.com字段.
[student@ansible ~/ansible]$ansible node1 -m lineinfile -a 'path=/etc/selinux/config regexp="^www.alone.com" state=absent'

# 5.通过正则匹配查找/etc/selinux/config文本中在开头是SELINUX=disabled行的行后插入一段话www.alone.com
[student@ansible ~/ansible]$ansible node1 -m lineinfile -a 'path=/etc/selinux/config insertafter="^SELINUX=" line="www.alone.com"'

# 6.通过正则匹配查找/etc/selinux/config文本中在开头是SELINUX=disabled行的行前插入一段话www.alone.com
[student@ansible ~/ansible]$ansible node1 -m lineinfile -a 'path=/etc/selinux/config insertbefore="^SELINUX=" line="www.alone.com"'

7 yum_repository模块

参数解释
baseurl地址
mirrorlist设置mirrorlist地址
description描述信息
enabled是否启用该仓库
file保存此仓库的文件,不设置该项的话则默认以name选项中的名称命名
gpgcheck是否要进行gpgcheck
name仓库的名称
reposdir保存.repo文件的目录
staterepo文件的状态,present/absent

示例:

# 配置yum仓库
[student@ansible ~/ansible]$ansible done1 -m yum_repository -a 'file=server name=BaseOS description=BaseOS baseurl=file:///mnt/BaseOS enabled=yes gpgcheck=no'
[student@ansible ~/ansible]$ansible done1 -m yum_repository -a 'file=server name=AppStream description=AppStream baseurl=file:///mnt/AppStream enabled=yes gpgcheck=no'

8 yum模块

参数解释
name用于指定安装包的包名
state用于指定软件包的状态,默认值为present
disable_gpg_check用于禁用对 rpm 包的公钥 gpg 验证,默认值为 no
enablerepo用于指定安装软件包时临时启用的 yum 源
disablerepo用于指定安装软件包时临时禁用的 yum 源
exclude排除哪些包不安装,仅在state=present或latest时生效
list类似于yum list
update_cache强制更新yum的cache

示例:

# 安装软件:通过Yum模块批量的安装httpd服务到指定主机上.
[student@ansible ~/ansible]$ansible node1 -m yum -a "name=httpd state=installed"

# 卸载软件:通过Yum模块批量的卸载httpd服务主机.
[student@ansible ~/ansible]$ansible node1 -m yum -a "name=httpd state=removed" 

9 service模块

参数解释
name此参数用于指定需要操作的服务名称
state此参数用于指定服务的状态,started、stopped、restarted、reloaded
enabled此参数用于指定是否将服务设置为开机 启动项

示例:

# 设置服务开机自启动,设置httpd服务开机自启动.
[student@ansible ~/ansible]$ansible node1 -m service -a "name=httpd state=started enabled=yes"

# 关闭服务开机自启动,关闭httpd服务开机自启动.
[student@ansible ~/ansible]$ansible node1 -m service -a "name=httpd state=stopped enabled=no"

10 fetch模块

参数解释
dest目标绝对路径
src复制的源文件路径,源文件只能是文件
flat改变拉取后的路径存储方式。如果设置为yes, 且当dest以"/"结尾时, 将直接把源文件的basename存储在dest下。显然,应该考虑多个主机拉取时的文件覆盖情况。
fail on missing当设置为yes时,如果拉取的源文件不存在,则此任务失败。默认为no.
validate_checksum远程主机上的源文件。只能是文件,不支持目录。在未来的版本中可能会支持目录递归拉取。

示例:

# 将远程主机的/etc/fstab文件拉取到本地来,存储的名字为/tmp/node1/etc/fstab
[student@ansible ~/ansible]$ansible node1-m fetch -a 'src=/etc/fstab dest=/tmp'

# 将某台远程主机的/etc/fstab文件拉取到本地来,存储的名字为/tmp/fstab
[student@ansible ~/ansible]$ansible node1 -m fetch -a 'src=/etc/fstab dest=/tmp/ flat=yes'

# 将远程主机的/etc/fstab文件拉取到本地来,存储的名字为/tmp/fstab-node1
[student@ansible ~/ansible]$ansible node1 -m fetch -a 'src=/etc/fstab dest=/tmp/fstab-{{inventory_hostname}} flat=yes'

11 firewalld模块

参数解释
icmp_block在防火墙中添加或者移除的ICMP块
icmp_bolck_inversion开启/关闭防火墙区域ICMP报文反转功能
immediate如果将此配置设置为永久性,则应立即应用此配置,yes or no,默认no
interface在防火墙中添加或移除interface
masquerade在在防火墙中开启或关闭masquerade功能
offline是否在防火墙离线时运行此模块,yes or no
permanent该配置是否在运行的防火墙配置中,或者在重新启动时仍然存在。注意,如果这是no, immediate被假定为yes。
port在防火墙中添加或移除端口名称或端口范围。端口范围必须为PORT/PROTOCOL或PORT-PORT/PROTOCOL格式
rich_rulerich_rule添加或删除到防火墙
service在防火墙中添加或移除服务名称该服务必须在firewall-cmd --get-services的输出中列出
source在防火墙中添加或移除某个来源的网络
state启用或禁用一项设置。对于端口:该端口是否接受(enabled)或拒绝(disabled)连接。状态的(present)和(absent)只能在区域级别操作中使用(即,当除了zone和state没有设置其他参数时)。
timeout该规则应在非永久性时生效的时间,默认0
zone添加或移除的防火墙区域。注意,可以为每个系统配置默认的区域,可能的值有block, dmz, drop, external, home, internal, public, trusted, work,public

示例:

# 允许http流量的传入
[student@ansible ~/ansible]$ansible node1 -m firewalld -a 'service=http   permanent=yes state=enabled immediate=yes'

# 副规则 允许192.168.111.0/24主机http流量的传入
[student@ansible ~/ansible]$ansible node1 -m firewalld -a ‘zone=public rich_rule="rule family=ipv4 source address=192.168.111.0/24 service name=http accept" permanent=yes state=enabled immediate=yes'

12 replace模块

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

示例:

# 将/tmp/zsl文件中的“abc”替换成“yyy”
[student@ansible ~/ansible]$ansible node1 -m replace -a 'path=/tmp/zsl regexp="abc" replace="yyy"'

# 将/tmp/zsl文件中的“yyy”替换成“iii”,且把替换前的/tmp/zsl文件备份
[student@ansible ~/ansible]$ansible node1 -m replace -a 'path=/tmp/zsl regexp="yyy" replace="iii" backup=yes'

13 parted模块

参数解释
device指定硬盘设备路径 比如 /dev/vdb
label指定分区表类型 gpt mbr
number指定分区序号
part_start分区起始位置
part_end分区结束位置
state指定操作方式 创建(present) 、删除(absent) 、查信息(info)

示例:

# 新建扩展分区
[student@ansible ~/ansible]$ansible node1 -m parted -a 'device=/dev/sda number=4 part_type=extended part_start=46GiB part_end=49.8GiB state=present'

# 新建逻辑分区
[student@ansible ~/ansible]$ansible node1 -m parted -a 'device=/dev/sda number=5 part_type=logical part_start=46.1GiB part_end=48.2GiB state=present'

14 filesystem模块

参数解释
dev要格式化的分区
fstype文件系统类型 比如 ext4 xfs
force强制格式化,如果以前分区中有数据

示例:

# 给/dev/sda5格式化,类型是xfs
[student@ansible ~/ansible]$ansible node1 -m filesystem -a 'fstype=xfs dev=/dev/sda5'

15 mount模块

参数解释
path挂载点
src挂载的文件
fstype挂载的硬盘类型 比如iso9660、ext4、xfs、nfs、
cifs samba的共享文件系统
ntfs windows磁盘文件系统
opts传递给mount命令的参数
statepresent 开机挂载,仅将挂载配置写入/etc/fstab并不会真的挂载
mounted 挂载设备,并将配置写入/etc/fstab
unmounted 卸载设备,不会清除/etc/fstab写入的配置
absent 卸载设备,并清理/etc/fstab写入的配置

示例:

# 新建挂载点/common
[student@ansible ~/ansible]$ansible node1 -m file -a 'path=/common state=directory'

# 查看/dev/sda5的UUID
[student@ansible ~/ansible]$ansible node1 -m shell -a 'blkid /dev/sda5'

# 将分区/dev/sda5挂载到/common目录
[student@ansible ~/ansible]$ansible node1 -m mount -a 'path=/common src="UUID=d162b8b9-2326-4ee4-a559-80861461c4f0" fstype=xfs state=mounted'

# 卸载
[student@ansible ~/ansible]$ansible node1 -m mount -a 'path=/common src="UUID=d162b8b9-2326-4ee4-a559-80861461c4f0" fstype=xfs state=absent'

16 lvg模块

参数解释
vg卷组名称
statepresent创建(默认) 或者 absent删除
force可以在删除时使用
pvs指定物理卷
pesize设定pe大小

示例:

# 新建卷组vg0
[student@ansible ~/ansible]$ansible node1 -m lvg -a 'vg=vg0 pesize=16M pvs=/dev/sda5

17 lvol模块

参数解释
lv定义逻辑卷名称
size定义逻辑卷大小
vg逻辑卷的空间来自哪个vg
statepresent创建(默认) 或者 absent删除
force强制删除或者调整逻辑卷大小

示例:

# 新建逻辑卷lv0
[student@ansible ~/ansible]$ansible node1 -m lvol -a 'lv=lv0 size=1000M vg=vg0'

# 在线扩容逻辑卷
[student@ansible ~/ansible]$ansible node1 -m lvol -a 'lv=lv0 size=1600M vg=vg0 resizefs=yes'

18 sefcontext模块

参数解释
target指定目标目录
setype设置安全性本文
state模块状态:present代表增加目录的安全性本文;absent代表删除目录的安全性本文

示例:

# 修改context值
[student@ansible ~/ansible]$ansible node1 -m sefcontext -a 'target="/share(/.*)?" setype=samba_share_t state=present'

# 应用新的selinux 文件的context值
[student@ansible ~/ansible]$ansible node1 -m command -a 'restorecon -Rv /share'

19 debug模块

参数解释
msg调试输出的消息
var将某个任务执行的输出作为变量传递给debug模块,debug会直接将其打印输出
verbositydebug的级别(默认是0级,全部显示)

示例:

# 输出Alone
[student@ansible ~/ansible]$ansible node1 -m debug -a 'msg=Alone'

20 cron模块

参数解释
user用于设置当前计划任务属于哪个用户,当不使用此参数时,默认为管理员用户
job指定计划的任务中需要实际执行的命令或者脚本
name用于设置计划任务的名称,计划任务的名称会在注释中显示
state相关状态信息,当删除计划任务时,需要将 state 的值设置为 absent,用于创建present(默认)|用于移除absent
disabled当计划任务有名称时,我们可以根据名称使对应的任务失效
backup此参数的值设置为yes,那么当修改或者删除对应的计划任务时,会对计划任务备份
$time指定具体的执行时间、minute分、hour时、day天、month月、weekday、0-7 代表周

示例:

# 创建计划任务,任务名称为mkdirs test 任务于每天1点5分,执行输出一段话echo hello lyshark
[student@ansible ~/ansible]$ansible node1 -m cron -a "name='mkdirs test' minute=5 hour=1 job='echo hello lyshark'"

# 删除计划任务mkdirs test,删除前做好备份.
[student@ansible ~/ansible]$ansible node1 -m cron -a "name='mkdirs test' state=absent backup=yes"

21 get_url模块

参数解释
dest文件下载到远程的那个目录下
如果dest是一个目录,则使用url的base name作为文件名
如果dest是一个目录,则’force’选项不生效
如果dest是一个目录,则总是会下载目标文件,但只在已存在的文件变化了才会替换旧文件
如果设置为yes, 且dest不是一个目录时,则总是会下载文件,但只在已存在的文件变化了才会替换旧文件
如果设置为no(默认),则只会在目录路径下不存在该文件时才会进行下载
force是否强制覆盖yes/no
url指定一个URL地址
backup下载文件时间时创建一个名称中包含时问戳的备份文件
tmp_dest下载时临时存放目录,在任务执行完成前会删除下载的临时文件
group文件/目录的所属组
owner文件/目录的所有者
timeout请求ur1时的超时时间,默认10秒钟

示例:

# 下载一个指定文件到远程主机
[student@ansible ~/ansible]$ansible node -m get_url -a "url=http://mirrors.aliyun.com/repo/Centos-7.repo dest=/root"

相关内容