ansible常见模块
1、user模块
1、ansible-doc 创建
[devops@master ansible]$ ansible node1 -m user -a "name=rhce comment=rhcsa"
node1 | CHANGED => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": true,
"comment": "rhcsa",
"create_home": true,
"group": 1001,
"home": "/home/rhce",
"name": "rhce",
"shell": "/bin/bash",
"state": "present",
"system": false,
"uid": 1001
}
[devops@master ansible]$ ansible node1 -m shell -a "grep rhce /etc/passwd"
node1 | CHANGED | rc=0 >>
rhce:x:1001:1001:rhcsa:/home/rhce:/bin/bash
2、写剧本编写
[devops@master ansible]$ ansible-doc user
二、文件相关模块
1、file模块
-
主要就是用于被控主机文件的操作
-
文件,目录,硬链接,软连接
[root@master ~]# ansible-doc user
1、file模块参数
-
path 文件的路径
-
state 状态,touch,directory,absent,link,hard
-
mode 文件的权限 0644
-
owner 文件的拥有人
-
group 文件的拥有组
-
src 被控节点文件原文件
-
dest 被控节点对于这个原文件做一个软连接或者硬链接,通常配合 state=link或者hard使用
[devops@master ansible]$ ansible node1 -m file -a " src=/etc/hosts dest=/mnt/hosts state=link "
2、copy模块
-
主要就是将主控节点的文件拷贝到被控节点上面去
-
src 主控节点上面的文件
-
dest 将主控节点的文件拷贝到被控节点上
-
backup 如果拷贝的时候有相同的文件的话,可以对其进行一个备份的操作,yes,默认的情况下是不会进行备份的操作
-
content 写的内容直接拷贝到被控节点上面去,类似于重定向的操作
-
remote_src yes, 将被控节点的文件拷贝到被控节点上面去
[devops@master ansible]$ ansible node1 -m copy -a "src=/etc/hosts dest=/tmp/"
# 将被控节点的文件拷贝到被控节点上面去
[devops@master ansible]$ ansible node1 -m copy -a "remote_src=yes src=/tmp/f1.txt dest=/mnt/f1.txt"
# 写的内容直接拷贝到被控节点上面去
[devops@master ansible]$ ansible node1 -m copy -a "content='echo 123' dest=/tmp/f1.txt "
3、fetch模块
-
被控节点的文件传输到主控节点上面
-
拷贝到主控节点上面的表现形式是一个目录,是一个套娃的操作,以被控节点的主机名为目录命名
-
只能拷贝文件,不能拷贝目录
-
flat yes,单纯的拷贝一个文件,不会被套娃的目录出现,dest=后面必须有一个/,才有用,默认为no
# 没有flat的话,就会以目录的形式存在,被控主机名为目录
[devops@master ansible]$ ansible node1 -m fetch -a "src=/etc/hosts dest=/tmp"
# 添加 flat=yes的话,就只需要拷贝文件到主控节点即可
# 然后这个dest后的话,需要添加/这个才行
[devops@master ansible]$ ansible node1 -m fetch -a "src=/etc/hosts dest=/tmp/ flat=yes"
三、软件相关的模块
1、yum_repository
-
配置yum仓库
-
name 仓库名称
-
description 才是描述信息
-
baseurl 仓库地址
-
enabled 开启仓库
-
file 文件名 不需要写.repo,会自动的加上这个后缀,如果要在一个文件中多次的添加yum源的话,就需要file了
-
state present 默认创建,absent删除
# 编写了一个appstream的仓库后
# 再次添加到同一个文件的话,就只需要指定 file=文件名即可
2、yum模块
-
主要就是安装软件包的
-
state present 安装,absent删除,lastet安装最新的版本
-
name 软件名, @包名 就是安装软件包组
四、系统服务相关的模块
1、service模块
-
启动服务等操作
-
name 服务的名字
-
state started,stopped,reloaded
-
enabled yes就是开启自启,no就是开机不自动起来
[devops@master ansible]$ ansible node1 -m service -a "name=vsftpd state=started enabled=yes"
2、systemd模块
- 与上面的模块类似操作
五、用户模块
1、user模块
-
创建用户或者删除用户
-
name 用户名
-
comment 用户描述信息
-
shell 登录shell
-
create_home yes创建家目录,默认是创建在/home下面
-
password 需要进行加密,不能明文输入
-
groups 添加附加组,需要跟append 来配合使用
-
remove yes 然后加上state=absent 完全删除了用户
# 彻底删除一个用户
[devops@master ansible]$ ansible node1 -m user -a "name=rhce state=absent remove=yes"
node1 | CHANGED => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": true,
"force": false,
"name": "rhce",
"remove": true,
"state": "absent"
}
# 将一个用户添加到其他的附属组中
# 如果只是单纯的使用groups这个组的话,只能添加一个用户
# 因此的话需要使用append=yes,这样的话,添加到多个附属组中去了
[devops@master ansible]$ ansible node1 -m user -a "name=rhce groups=apache append=yes
2、group模块
- 创建一个组
六、计划任务模块
1、cron模块
-
name 计划任务的描述信息
-
job 执行的命令
-
minute 每分钟执行
-
user 以哪一个用户执行
-
weekday 每周
-
hour 每小时
-
cron_file 写在哪一个配置文件中 /etc/crontab ,需要加上user这个参数才行
[devops@master ansible]$ ansible node1 -m cron -a "name='echo 123' minute=1,5,10 state=present job='echo 123' cron_file=/etc/crontab user=root"
node1 | CHANGED => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": true,
"cron_file": "/etc/crontab",
"envs": [
"SHELL",
"PATH",
"MAILTO"
],
"jobs": [
"echo 123"
]
}
七、解压缩模块(unarchive模块)
-
将主控节点的tar包拷贝到被控节点上面去
-
remote_src yes的话,将被控节点的tar包拷贝到被控节点上,默认是no
-
list_files 列出解压后的文件即可
-
src 主控节点路径
-
dest 解压到被控节点上面去
# 将主控节点的文件解压到被控节点上面去了
[devops@master ansible]$ ansible node1 -m unarchive -a "src=./tmp.tar dest=/mnt"
# 将被控节点的文件解压到被控节点上面去了
[devops@master ansible]$ ansible node1 -m unarchive -a "src=/root/tmp.tar dest=/opt/ remote_src=yes"
八、同步模块(synchronize模块)
-
同步文件,将主控节点文件同步到被控节点上面
-
也就是将主控节点目录的内容同步到被控节点上面去
-
src 主控节点文件
-
dest 同步到被控节点上
-
mode 2种模式,默认是push,将主控节点上面的文件同步到被控节点上面
- 如果是pull的话,就是将被控节点同步到主控节点上面去
# 添加了/ 就是将/opt下面的所有文件同步到/mnt目录下面
[devops@master ansible]$ ansible node1 -m synchronize -a "src=/opt/ dest=/mnt/"
# 不添加的话,就是将目录同步了过去,在被控节点上创建了目录
# pull模式,就是将被控节点的文件同步到主控节点上面去
[devops@master tmp]$ ansible node1 -m synchronize -a "src=/mnt/ dest=/tmp/ mode=pull"
# 会报错,但是会同步成功,主要就是时间戳的问题
九、get_url模块
-
从网上下载文件,下载到被控节点上面
-
dest 下载到被控节点的路径
-
url 下载的网址
[devops@master tmp]$ ansible node1 -m get_url -a "url=https://www.rpmfind.net/linux/fedora/linux/development/rawhide/Everything/x86_64/os/Packages/v/vsftpd-3.0.5-12.fc43.x86_64.rpm dest=/tmp"
10、firewalld模块
-
service 放行的端口和协议
-
permanent 是否永久修改还是临时修改
-
state 开启还是禁用
-
immediate yes的话,等同于reload, no的话就是不是立即生效,等待下次系统重启或者防火墙重启生效
11、mount模块
-
path 挂载点路径,挂载到哪个地方
-
src 要挂载的设备,磁盘
-
fstype 文件系统类型,ext4,还是xfs
-
state mounted,立即挂载并写入fstab中,present,只写入fstab中,不挂载,umounted,取消挂载,不删除fstab,absent 取消挂载并删除fstab条目
[devops@master ansible]$ ansible master -m mount -a "src=node1:/share/dir path=/nfs-dir state=absent fstype=nfs"
12、parted模块
-
device 指定硬盘设备路径/dev/sdb
-
label 指定分区的类型gpt,mbr,这个只是标记一下而已,并不会真的转换
-
number 指定分区序号
-
part_start 分区的起始位置,不能从0开始分区,因为通常由512个字节是作为分区表等信息的
-
part_end 分区的结束位置
-
state 指定操作方式,present 创建,absent删除,info查看信息系默认
-
flage 指定分区类型 [ lvm ]
[devops@master ansible]$ ansible node1 -m parted -a "device=/dev/nvme0n2 number=1 state=present fs_type=ext4 part_start=1MiB part_end=2GiB"
# 接着上面的最后大小,创建另外一个
[devops@master ansible]$ ansible node1 -m parted -a "device=/dev/nvme0n2 number=2 state=present fs_type=ext4 part_start=2GiB part_end=4GiB"
# 注意看起始和结束的大小位置
Device Boot Start End Sectors Size Id Type
/dev/nvme0n2p1 2048 4194303 4192256 2G 83 Linux
/dev/nvme0n2p2 4194304 8388607 4194304 2G 83 Linux
# 分区后,不能直接进行挂载,因为没有进行磁盘格式化
# 删除磁盘分区
[devops@master ansible]$ ansible node1 -m parted -a "device=/dev/nvme0n2 number=1 state=absent"
13、lvg模块(创建卷组)
-
vg 卷组的名称
-
state present创建,absent 删除
-
force 在删除时使用,yes,表示允许删除带逻辑卷的卷组,默认为false
-
pvs 指定物理卷
-
pesize 设定pe的大写,默认为4
# 创建n1卷组
[devops@master ansible]$ ansible node1 -m lvg -a "pvs=/dev/nvme0n2 state=present vg=n1"
# 删除n1卷组
[devops@master ansible]$ ansible node1 -m lvg -a "vg=n1 state=absent force=yes"
14、lvol模块(创建逻辑卷)
-
lv 定义逻辑卷名称
-
vg 逻辑卷来自哪个vg
-
state persent创建,absent删除
-
size 定义逻辑卷大小,默认为m 1g
-
force 删除和压缩逻辑卷大小,默认为no,需要时开启,避免磁盘的损坏
# 创建一个逻辑卷大小为1g
[devops@master ansible]$ ansible node1 -m lvol -a "vg=n1 lv=n1-lv1 size=1g state=present "
# 缩小逻辑卷大小的话就需要加上force=yes
[devops@master ansible]$ ansible node1 -m lvol -a "vg=n1 lv=n1-lv1 size=500m state=present force=yes"
# 删除逻辑卷,需要带上force,vg即可
[devops@master ansible]$ ansible node1 -m lvol -a "lv=n1-lv1 force=yes state=absent vg=n1"
15、filesystem模块(磁盘格式化)
-
dev 需要格式化的分区
-
fstype 文件系统类型
-
force 强制格式化,如果里面分区有数据的话
[devops@master ansible]$ ansible node1 -m filesystem -a "dev=/dev/mapper/n1-n1--lv1 fstype=ext4 "
# 更改文件系统类型的话,需要带上force=yes参数才可以
[devops@master ansible]$ ansible node1 -m filesystem -a "dev=/dev/mapper/n1-n1--lv1 fstype=xfs force=yes"
16、lineinfile模块(修改单行的内容)
-
可以修改配置的内容
-
以行为目标进行修改
-
path 要修改的文件
-
regexp 正则表达式匹配要修改的行,匹配的是行,相当是grep,如果没有匹配到的话,就会在文件的末尾插入内容
-
line 修改或者插入行的内容,如果匹配到多行相同的内容,则修改最后一个匹配到的内容即可
-
insertbefore 在匹配的行前面插入,匹配的行
-
insertafter 在匹配的行后面插入,匹配的行
-
backup 是否备份文件
-
create 文件不存在则创建文件
-
validate 验证文件的修改的有效性,就是先预模拟一下,检测一下文件的合法性,合法后,再来修改
-
backerfs 匹配到了,就进行替换,没有过滤到就不替换了,默认是关闭的(no),yes匹配不到,就不要替换,要与regexp一起使用才行
-
state present,absent删除,会将匹配到的所有内容删除掉
# 匹配root这一行,然后修改为rhce
[devops@master test]$ cat l1.yml
- hosts: master
tasks:
- lineinfile:
path: /home/devops/ansible/test/passwd
regexp: "^root" # 支持正则表达式
line: rhce # 修改的内容
# 在rhce前面插入一行内容
[devops@master test]$ cat l1.yml
- hosts: master
tasks:
- lineinfile:
path: /home/devops/ansible/test/passwd
insertbefore: "^rhce" # 匹配到rhce这一行在前面进行插入操作
line: "ppppp"
# backup备份文件
[devops@master test]$ cat l1.yml
- hosts: master
tasks:
- lineinfile:
path: /home/devops/ansible/test/passwd
insertbefore: "^ppppp"
line: "qqq"
backup: yes
# 删除所有的rhce
[devops@master test]$ cat l1.yml
- hosts: master
tasks:
- lineinfile:
path: /home/devops/ansible/test/passwd
regexp: "rhce"
state: absent
# 匹配到相同的内容时,修改最后一个匹配到的行
[devops@master test]$ cat passwd
ansible
rhce
rhce
rhce
rhce
rhce
ppp
ansible
[devops@master test]$ cat l1.yml
- hosts: master
tasks:
- lineinfile:
path: /home/devops/ansible/test/passwd
regexp: "rhce"
backrefs: true
line: "ppp"
17、blockinfile模块(修改多行内容)
-
marker 指定块标记,自定义标记,生成一个begin和end,如果有多个marker标记一样的话,删除最后一个marker标记即可,不会删除所有的marker标记
-
block 要插入的文本内容
-
插入的时候会自动生成一个注释,也可以自定义这个注释
# 自动写在最后一行
[devops@master test]$ cat b1.yml
- hosts: master
tasks:
- blockinfile:
path: /home/devops/ansible/test/passwd
create: yes
block: |
name=zhang
age=20
sex=boy
[devops@master test]$ cat passwd
ansible
rhce
ppp
ansible
# BEGIN ANSIBLE MANAGED BLOCK # 生成的注释
name=zhang
age=20
sex=boy
# END ANSIBLE MANAGED BLOCK
# marker 做标记
[devops@master test]$ cat b1.yml
- hosts: master
tasks:
- blockinfile:
path: /home/devops/ansible/test/passwd
create: yes
marker: "# RHCE {mark} ansible blockinfile"
block: |
name=zhang
age=20
sex=boy
[devops@master test]$ cat passwd
ansible
rhce
ppp
ansible
# BEGIN ANSIBLE MANAGED BLOCK
name=zhang
age=20
sex=boy
# END ANSIBLE MANAGED BLOCK
# RHCE BEGIN ansible blockinfile
name=zhang
age=20
sex=boy
# RHCE END ansible blockinfile
# 删除内容
[devops@master test]$ cat b1.yml
- hosts: master
tasks:
- blockinfile:
path: /home/devops/ansible/test/passwd
create: yes
state: absent
block: |
name=zhang
age=20
sex=boy
# 没有指定marker标记的话,默认删除的默认的marker标记
[devops@master test]$ cat passwd
ansible
rhce
ppp
ansible
# RHCE BEGIN ansible blockinfile
name=zhang
age=20
sex=boy
# RHCE END ansible blockinfile
# 删除指定marker标记
[devops@master test]$ cat b1.yml
- hosts: master
tasks:
- blockinfile:
path: /home/devops/ansible/test/passwd
create: yes
state: absent
marker: "# RHCE {mark} ansible blockinfile"
[devops@master test]$ cat passwd
ansible
rhce
ppp
ansible
# 如果要删除指定的行的话,需要借助lineinfile模块,在行前和行后插入标记,然后blockinfile模块删除指定的行

浙公网安备 33010602011771号