1、命令模块
1、command模块
- 不支持特殊字符,< > | &等
[devops@controller ansible]$ ansible node -m command -a "touch /opt/file2.txt"
#不支持特殊字符
[devops@controller ansible]$ ansible node -m command -a "echo qqq > /opt/file2.txt"
node1 | CHANGED | rc=0 >>
qqq > /opt/file2.txt
node2 | CHANGED | rc=0 >>
qqq > /opt/file2.txt
2、shell模块
-
万能的模块
-
chdir 指定工作目录
[devops@controller ansible]$ ansible node -m shell -a "chidr=/opt touch 11.txt"
node2 | CHANGED | rc=0 >>
node1 | CHANGED | rc=0 >>
3、raw模块
[devops@controller ansible]$ ansible node -m raw -a "touch /opt/file1.txt"
node1 | CHANGED | rc=0 >>
Shared connection to node1 closed.
node2 | CHANGED | rc=0 >>
Shared connection to node2 closed.
4、script模块
- 将内容写入到脚本中,不需要可执行权限,就可以直接的使用
[devops@controller ansible]$ ansible node -m script -a "./1.sh"
node2 | CHANGED => {
"changed": true,
"rc": 0,
"stderr": "Shared connection to node2 closed.\r\n",
"stderr_lines": [
"Shared connection to node2 closed."
],
"stdout": "",
"stdout_lines": []
}
node1 | CHANGED => {
"changed": true,
"rc": 0,
"stderr": "Shared connection to node1 closed.\r\n",
"stderr_lines": [
"Shared connection to node1 closed."
],
"stdout": "",
"stdout_lines": []
}
2、常用模块
1、file模块
对于远程主机的文件进行操作的模块
1、file常见的选项
-
path 远程主机的路径,必选项
-
stat 对文件的动作
-
touch 创建文件,不存在,更新时间戳
-
dirctory 创建目录
-
file 查看文件状态,不存在会报错
-
absent 删除目录,文件,取消软连接
-
link 创建软连接
-
hard 创建硬链接
-
-
src 被链接的源文件路径,state=link,注意是被控节点上面的路径
-
dest 链接的目的路径,state=link
2、创建一个文件,做一个软连接,创建一个目录
[devops@controller ansible]$ ansible all -m file -a "path=/opt/file1.txt state=touch"
[devops@controller ansible]$ ansible all -m file -a "src=/opt/file1.txt dest=/mnt/file1.txt state=link"
[devops@controller ansible]$ ansible all -m file -a "path=/opt/d1 state=directory"
3、删除软连接文件和目录
[devops@controller ansible]$ ansible all -m file -a "path=/opt/file1.txt state=absent"
[devops@controller ansible]$ ansible all -m file -a "path=/opt/d1 state=absent"
2、copy模块
拷贝文件到远程目录的
1、常见的选项
-
src 本地文件的路径
- 如果目标是一个目录,会递归复制。路径以/结尾,会复制目录下所有的文件。不是以/结尾的话,会将本地目录原样的复制过去
-
dest 将源文件复制到被控节点路径
-
force 如果目标主机存在此文件,但内容不同的话,设置为yes,则强制覆盖,如果为no的话,则目标主机路径不存在该文件时,复制,默认为yes
-
backup 在覆盖之前做一个备份
-
content 替代src,直接指定文件内容
-
remote_src 将源文件改为被控节点上面的文件了,只是改变了src
2、copy使用
#将本地文件file1.txt拷贝到/opt下面
[devops@controller ansible]$ ansible all -m copy -a "src=/mnt/file1.txt dest=/opt/"
#源路径是一个目录,会递归的复制,目录不是一个这个/结尾的话,会将目录复制过去,以/结尾的话将目录下面的内容给拷贝过去
[devops@controller ansible]$ ansible all -m copy -a "src=/mnt dest=/opt"
#将被控节点的文件进行拷贝
[devops@controller ansible]$ ansible all -m copy -a "remote_src=yes src=/mnt/file1.txt dest=/opt/ "
3、yum_repository模块
1、yum_repository常用的选项
-
file 配置文件的名字,不用包含repo,写完会有的
-
name yum仓库的名字
-
description 仓库的描述信息
-
baseurl yum仓库的地址
-
enabled 是否开启这个yum仓库
-
gpgcheck 是否开启gpg检查
2、操作
[devops@controller ansible]$ ansible all -m yum_repository -a "file=local description=baseos name=baseos baseurl=file:///media/BaseOS gpgcheck=0 enabled=1"
[devops@controller ansible]$ ansible all -m yum_repository -a "file=local description=appstream name=appstream baseurl=file:///media/AppStream gpgcheck=0 enabled=1"
4、yum模块
1、yum常用的选项
-
name 指定要安装的软件包的名字
-
state 指定动作
-
present 安装
-
latest 最新版本
-
absent 删除
-
[devops@controller ansible]$ ansible all -m yum -a "name=httpd state=present"
[devops@controller ansible]$ ansible all -m yum -a "name=httpd state=absent"
5、service模块
1、service常用的选项
-
name 服务的名称
-
state 对服务执行的操作
-
enabled 是否开机自启
[devops@controller ansible]$ ansible node -m service -a "name=httpd state=started enabled=yes"
6、systemd模块
1、常用的选项
-
name 指定服务的名称
-
state 管理服务的状态
- started,restarted,stopped,reloaded
-
daemon_reload 是否对服务的配置文件重载
-
enabled 是否开机自启
[devops@controller ansible]$ ansible node -m systemd -a "name=httpd state=stopped enabled=yes"
7、user模块
1、user常用的选项
-
name 用户名
-
state 创建还是删除
-
uid 用户的uid
-
group 指定用户组
-
groups 指定用户的附加组
-
comment 用户描述信息
-
create_home 是否给他创建home目录
-
home 指定home路径,需要配合create_home一起使用
-
shell 指定用户的环境
-
password 指定用户的密码,这里必须是加密后的密码,明文没有用
-
remove 删除用户时是否删除home目录
#生成一个加密的密码
openssl password -6
[devops@controller ansible]$ ansible node -m user -a "name=qq state=present shell=/bin/bash"
[devops@controller ansible]$ ansible node -m user -a "name=qq state=absent remove=yes"
8、group模块
1、group常用的选项
-
gid 指定用户的gid
-
name 指定组名
-
state 组的动作,创建还是删除,present,absent
[devops@controller ansible]$ ansible node -m group -a "name=test gid=2024 state=present"
9、fetch模块
1、fetch常用的选项
将远程文件收集到本地,与copu相反
-
src 远程文件路径,只能是文件,不能是目录
-
dest 文件收集到本地的路径
-
flat 默认为no ,以被控节点的主机名显示目录结构,yes的话不以目标主机名来显示,直接以文件名来显示
#默认为no,以被控节点主机名来显示
[devops@controller ansible]$ ansible node -m fetch -a "src=/mnt/test dest=./"
node1 | CHANGED => {
"changed": true,
"checksum": "da39a3ee5e6b4b0d3255bfef95601890afd80709",
"dest": "/home/devops/ansible/node1/mnt/test",
"md5sum": "d41d8cd98f00b204e9800998ecf8427e",
"remote_checksum": "da39a3ee5e6b4b0d3255bfef95601890afd80709",
"remote_md5sum": null
}
node2 | CHANGED => {
"changed": true,
"checksum": "da39a3ee5e6b4b0d3255bfef95601890afd80709",
"dest": "/home/devops/ansible/node2/mnt/test",
"md5sum": "d41d8cd98f00b204e9800998ecf8427e",
"remote_checksum": "da39a3ee5e6b4b0d3255bfef95601890afd80709",
"remote_md5sum": null
}
[devops@controller ansible]$ ls
ansible.cfg hosts node1 node2 roles
[devops@controller ansible]$ ansible node -m fetch -a "src=/mnt/test dest=./ flat=yes"
[devops@controller ansible]$ ls
ansible.cfg hosts node1 node2 roles test
10、get_url模块
从网上下载文件
1、get_url常见的选项
-
url 下载的url
-
url_password/url_username 主要用于用户名和密码验证的情况
-
dest 保存到本地的哪个地方
-
mode 给定权限
-
owner 拥有人
-
group 拥有组
#下载网络源地址
[devops@controller ansible]$ ansible node -m get_url -a "url=https://mirrors.aliyun.com/repo/Centos-vault-8.5.2111.repo dest=/tmp"
11、setup模块
收集被控节点的信息,用于写剧本非常的方便
[devops@controller ansible]$ ansible all -m setup > host.info.yaml
12、cron模块
用于设置定时任务的
1、cron常用的选项
-
name 计划任务的描述信息
-
minute = 每分钟 /1
-
job 计划任务,命令
-
user 计划任务的拥有人
-
cron_file 添加到配置文件中,/etc/crontab
[devops@controller ansible]$ ansible node -m cron -a 'name="nihao" hour='*\1' job="echo nihao" '
node2 | CHANGED => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": true,
"envs": [],
"jobs": [
"nihao"
]
}
node1 | CHANGED => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": true,
"envs": [],
"jobs": [
"nihao"
]
}
13、unarchive模块
-
将本地的文件拷贝到被控节点上面去
-
remote_src=yes,就是在被控节点上面进行解压的操作,将被控节点上面的文件进行解压缩
-
src源文件
-
dest 被解压的路径
[devops@controller ansible]$ tar -czvf ./ansible/ansible.tar.gz ansible
[devops@controller ansible]$ ansible node -m unarchive -a "src=./ansible.tar.gz dest=/tmp"
14、synchronize模块
-
同步的模块,将主控节点传送到被控节点上面去
-
带了/的话就是将这个目录下面的内容都拷贝过去
-
没有/这个的话,就是将这个目录拷贝到过去
-
mode 如果是pull的话,就是被控同步到主控上面
-
push的话就是主控到被控上面去
# 目录直接拷贝过去了
[devops@controller ansible]$ ansible node -m synchronize -a "src=/opt dest=/opt"
# pull 将被控同步到主控上面
[devops@controller ansible]$ ansible node -m synchronize -a "src=/opt dest=/tmp/ mode=pull"
15、mount模块
-
src和path
-
state的选项
-
present 写入自动挂载,实际上没有挂载,需要重启才能实现挂载
-
mounted 写入自动挂载,直接挂载了
-
umounted 取消临时挂载,但是没有清理自动挂载
-
absent 取消临时挂载,并且清理自动挂载
-
-
fstype 挂载的类型
- nfs,cifs,iso9660等
[devops@controller ansible]$ ansible node -m mount -a "src=/dev/cdrom path=/mnt/ state=mounted fstype=iso9660"
# 取消挂载
[devops@controller ansible]$ ansible node -m mount -a "src=/dev/cdrom path=/mnt state=absent fstype=iso9660"
16、firewalld模块
-
service 服务的名称
-
permanent 是否永久添加,yes,no
-
immediate 是否立即生效
-
state
-
enabled 策略生效
-
disable 禁用策略
-
absent删除策略
-
# 永久放行http
[devops@controller ansible]$ ansible node -m firewalld -a "service=http state=enabled permanent=yes immediate=yes"
# 禁用http
[devops@controller ansible]$ ansible node -m firewalld -a "service=http state=disabled immediate=yes permanent=yes"
17、debug模块
- 输出变量的模块
[devops@controller ansible]$ ansible all -m debug -a "msg=inventory_hostname"
node1 | SUCCESS => {
"msg": "inventory_hostname"
}
node2 | SUCCESS => {
"msg": "inventory_hostname"
}
18、分区相关的模块
1、parted模块
-
常见的选项
-
device 指定硬盘设备路径
-
label 指定分区表的类型,gpt,mbr类型的
-
part_start,分区起始的位置
-
part_end,分区结束位置
-
state 操作方式,present创建,absent删除
-
flage 指定粪污类型,lvm
-
2、lvg模块
-
常见选项
-
vg 卷组的名称
-
state 动作的状态,present,absent
-
force 在删除的时候,yes表示允许删除带逻辑卷的卷组,默认为false
-
pvs 指定物理卷
-
pesize 设定pe大小,默认为4
-
3、lvol模块
-
常见的选项
-
lv 定义逻辑卷名称
-
vg 逻辑卷的空间来自哪个vg
-
state present创建,absent
-
size 定义逻辑卷大小 默认mb
-
force 删除和压缩逻辑卷大小,默认为no,需要时开启,避免磁盘损失
-
4、filsystem模块
-
常见的选项
-
dev 要格式化的分区,主要不能带上/会报错的
-
fstype 文件系统类型
-
force 强制格式化
-
19、lineinfile模块
对一行的内容进行修改
-
常见的选项
-
path 修改的配置文件
-
regexp 过滤行,可以支持通配符,如果没有匹配到行的话,则在末尾添加行的内容
-
line 对匹配的行的内容进行修改,替换,如果匹配到的行都是一样的话,则修改最后一行的内容
-
insertbefore 在匹配行的前面进行插入
-
insertafter 在匹配行的后面进行插入
-
backrefs 默认是no,如果没有匹配到行的,则在末尾添加内容,如果是yes的话,匹配不到也不追加
-
state absent,会将匹配到的内容删除掉
-
create 默认是no,如果是ye,文件不存在则生成文件
-
backup 在修改前进行备份操作,yes备份
-
[devops@controller ansible]$ cat linefile/linefile.yaml
- hosts: node
tasks:
- name: linefile
lineinfile:
path: /test.txt
line: "qwert"
regexp: "uuuuu"
backup: yes
20、blockinfile模块
对多行的内容进行修改,也可以指定一个位置插入
-
常见的选项
-
跟上面的一样
-
block 要插入的文本内容 | 为标记
-
marker 指定块的标记,不指定的话,默认生成
-
根据标记的内容进行匹配然后修改
-
# 没有marker标记
[devops@controller ansible]$ cat linefile/blockfile.yaml
- hosts: node
tasks:
- name: blockfile
blockinfile:
path: /test.txt
block: |
aaa
bbb
# 会自动的创建一个marker标记
[root@node1 /]# cat test.txt
qwert
asdfg
zxcvb
# BEGIN ANSIBLE MANAGED BLOCK
aaa
bbb
# END ANSIBLE MANAGED BLOCK
# 有marker标记
[devops@controller ansible]$ cat linefile/blockfile.yaml
- hosts: node
tasks:
- name: blockfile
blockinfile:
path: /test.txt
block: |
ccc
ddd
marker: "# RHCE {mark} ansible"
# 自定义这个标记
[root@node1 /]# cat test.txt
qwert
asdfg
zxcvb
# BEGIN ANSIBLE MANAGED BLOCK
aaa
bbb
# END ANSIBLE MANAGED BLOCK
# RHCE BEGIN ansible
ccc
ddd
# RHCE END ansible
# 删除这个标记里面的内容
[devops@controller ansible]$ cat linefile/blockfile.yaml
- hosts: node
tasks:
- name: blockfile
blockinfile:
path: /test.txt
marker: "# RHCE {mark} ansible"
state: absent
[root@node1 /]# cat test.txt
qwert
asdfg
zxcvb
# BEGIN ANSIBLE MANAGED BLOCK
aaa
bbb
# END ANSIBLE MANAGED BLOCK
21、get_url模块
将url的文件下载到被控节点上面去
[devops@controller ansible]$ ansible node -m get_url -a "url=http://www.baidu.com/index.html dest=/tmp"