1. file模块
设置权限、所有者、SElinux上下文及常规文件、符号连接、硬链接等
查询方式
ansible-navigator doc file -m stdout
EXAMPLE 1
- name: Change file ownership, group and permissions
ansible.builtin.file: # file模块
path: /etc/foo.conf # 文件路径
owner: foo # 文件所有者
group: foo # 文件所属组
mode: '0644' # 文件权限
state: touch # 操作状态:创建文件
modification_time: now # 设置文件修改时间
access_time: now # 设置文件的访问时间
EXAMPLE 2
- name: Create a symbolic link # 创建一个符号链接
ansible.builtin.file:
src: /file/to/link/to # 源文件
dest: /path/to/symlink # 目的文件
owner: foo # 文件所属者
group: foo # 文件所属组
state: link # 创建或更改符号链接
文件权限的不同设置方式
设置方式 | 说明 |
---|---|
mode: ‘0644’ | 设置权限 |
mode: u+rw,g-wx,o-rwx | 设置权限 |
state列表项的不同属性值
列表项 | 说明 |
---|---|
absent | 目录–>递归删除,符号链接–>取消链接 |
directory | 目录存在–>不做任何操作,目录不存在–>新建目录 |
file | 默认值,文件存在–>被修改,文件不存在–>不会修改 |
hard | 创建或更改硬链接 |
link | 创建或更改符号链接 |
touch | 文件存在–>不做任何操作,文件不存在–>创建文件 |
file模板列表项
列表项 | 说明 |
---|---|
modifycation_time | 设置修改时间【YYYYMMDDHHMM.SS】 |
access_time | 设置文件访问时间【YYYYMMDDHHMM.SS】 |
setype | SELinux安全上下文 |
2. lineinfile模块
主要功能:针对文件中的特定一行。
查询方式
ansible-navigator doc lineinfile -m stdout
EXAMPLE 1
- name: Ensure SELinux is set to enforcing mode
ansible.builtin.lineinfile: # lineinfile模块
path: /etc/selinux/config # 文件路径
regexp: '^SELINUX=' # 匹配项(正则表达式语句)
line: SELINUX=enforcing # 要插入/替换的行
EXAMPLE 2
- name: Ensure the default Apache port is 8080
ansible.builtin.lineinfile:
path: /etc/httpd/conf/httpd.conf # 文件路径
regexp: '^Listen ' # 匹配项(正则表达式语句)
insertafter: '^#Listen ' # 当找不到regexp项,才查找此项
line: Listen 8080 # 要插入/替换的行
EXAMPLE 3
- name: Replace a localhost entry with our own
ansible.builtin.lineinfile:
path: /etc/hosts # 文件路径
regexp: '^127\.0\.0\.1' # 匹配项(正则表达式语句)
line: 127.0.0.1 localhost # 要插入/替换的行
owner: root # 修改文件的所有者
group: root # 修改文件的所属组
mode: '0644' # 修改文件的权限
lineinfile模板列表项
列表项 | 说明 |
---|---|
path | 要修改的文件 |
regexp | 匹配项(可以使用正则表达式语句) |
line | 文件中要插入/替换的行 |
insertafter | 需要和regexp一起使用,当regexp不匹配,则匹配此选项 |
owner | 修改文件的所有者 |
group | 修改文件的所属组 |
mode | 修改文件的权限 |
create | 默认情况下,如果操作文件不存在,会报错。设置create=True,当文件不存在时,会自动创建该文件 |
3. template模块
主要功能:可以获取变量的值和使用循环
查询方式
ansible-navigator doc template -m stdout
EXAMPLE 1
- name: Template a file to /etc/file.conf
ansible.builtin.template:
src: /mytemplates/foo.j2 # 指定jinja2文件
dest: /etc/file.conf # 操作的文件
owner: bin # 修改文件所属者
group: wheel # 修改文件所属组
mode: '0644' # 设置文件权限
EXAMPLE 2
- name: Update sshd configuration safely, avoid locking yourself out
ansible.builtin.template:
src: etc/ssh/sshd_config.j2 # 指定jinja2文件
dest: /etc/ssh/sshd_config # 操作的文件
owner: root # 设置文件所属者
group: root # 设置文件所属组
mode: '0600' # 设置文件权限
validate: /usr/sbin/sshd -t -f %s
backup: yes
template模板列表项
列表项 | 说明 |
---|---|
src | 指定jinja2文件路径 |
dest | 操作的文件 |
owner | 设置文件所属者 |
group | 设置文件所属组 |
mode | 设置文件权限 |
validate | 执行命令前的验证选项 |
backup | 创建一个包含时间戳信息的备份文件,可以将原始文件找回,默认为False |
newline_sequence | 指定用于模板文件的换行符序列,默认为\n |
4. firewalld模块
主要功能:调整防火墙策略、富规则等与防火墙相关的操作
查询方式
ansible-navigator doc firewalld -m stdout
EXAMPLE 1
- name: permit traffic in default zone for https service
ansible.posix.firewalld:
service: https # 放行的服务名
permanent: yes # 永久开启
state: enabled # 添加服务
EXAMPLE 2
- name: do not permit traffic in default zone on port 8081/tcp
ansible.posix.firewalld:
port: 8081/tcp # 删除的端口号
permanent: yes # 永久删除
state: disabled # 删除放行端口
Firewalld模板列表项
列表项 | 说明 |
---|---|
service | 添加/删除要放行的服务 |
port | 添加/删除要放行的端口 |
permanent | 永久生效【no/yes】 |
state | absent删除、disabled关闭、enabled开启 |
rich_rule | 富规则 |
zone | 操作的区域 |
target | 防火墙区域目标 |
icmp_block | 在firewalld的区域中添加/删除的ICMP块 |
immediate | 立刻生效配置 |
5. dnf/yum模块
主要功能:安装、卸载、升级软件包,其中yum模块选项更多,dnf偏少,建议使用yum。
查询方式
ansible-navigator doc dnf -m stdout
EXAMPLE 1
- name: Install the latest version of Apache
ansible.builtin.dnf:
name: httpd # 安装的服务名
state: latest # 升级到最新版本
EXAMPLE 2
- name: Install a modularity appstream with defined stream
ansible.builtin.dnf:
name: '@postgresql:9.6' # 安装的软件包组
state: present
state列表项的不同属性值
列表项 | 说明 | 命令比对 |
---|---|---|
present | 确保安装 | install |
latest | 升级到最新版本 | upgrade |
absent | 删除 | remove |
installed | 安装 | install |
6. package_facts模块
主要功能:将已安装的软件包信息作为事实返回。
查询方式
ansible-navigator doc package_facts -m stdout
EXAMPLE 1
- name: Gather the package facts
ansible.builtin.package_facts:
manager: auto # 选择系统使用的包管理器
manager列表项的不同属性值
列表项 | 说明 |
---|---|
auto | 自动匹配 |
rpm | rpm包管理器 |
apt | apt包管理器 |
portage | portage包管理器 |
pkg | pkg包管理器 |
pacman | pacman包管理器 |
apk | Android应用程序包 |
pkg_info | pkg_info包管理器 |
7. yum_repository模块
主要功能:配置yum仓库文件
查询方式
ansible-navigator doc yum_repository -m stdout
模块名忘记查找方式
ansible-doc -l | grep yum
EXAMPLE 1
- name: Add multiple repositories into the same file (1/2)
ansible.builtin.yum_repository:
name: epel # 仓库名称
description: EPEL YUM repo # 仓库描述
file: external_repos # 仓库文件名
baseurl: xxxx # 仓库路径
gpgcheck: no # 不启用gpgcheck
yum_repository模板列表项
列表项 | 说明 |
---|---|
name | 仓库名称 |
description | 仓库描述信息 |
file | 仓库文件名 |
baseurl | 仓库邻居 |
gpgcheck | 是否对包执行GPG签名检查 |
gpgkey | GPG密钥文件的路径 |
enabled | 是否启用此仓库(默认为true) |
8. rpm_key模块
主要功能:先rpm数据库添加/删除rpm公钥
查询方式
ansible-navigator doc rpm_key -m stdout
EXAMPLE 1
- name: Import a key from a file
ansible.builtin.rpm_key:
state: present # 添加
key: /path/to/key.gpg # 导入的公钥路径
state列表项的不同属性值
列表项 | 说明 |
---|---|
present | 导入 |
absent | 删除 |
9. user模块
主要功能:管理用户帐户和用户属性
查询方式
ansible-navigator doc user -m stdout
EXAMPLE 1
- name: Add the user 'johnd'
ansible.builtin.user:
name: johnd # 用户名
comment: John Doe # 用户描述信息
uid: 1040 # UID
group: admin # 所属组
EXAMPLE 2
- name: Remove the user 'johnd'
ansible.builtin.user:
name: johnd # 用户名
state: absent # 删除
remove: yes # 删除用户
EXAMPLE 3
- name: Add the user 'james'
ansible.builtin.user:
name: james # 用户名
shell: /bin/bash # 指定shell
groups: admins,developers # 附加组
append: yes # 追加到附加组
EXAMPLE 4
- name: Create a 2048-bit SSH key for user jsmith in ~jsmith/.ssh/id_rsa
ansible.builtin.user:
name: jsmith
generate_ssh_key: yes
ssh_key_bits: 2048
ssh_key_file: .ssh/id_rsa
user模块列表项
列表项 | 说明 | 命令比对 |
---|---|---|
name | 用户名 | |
comment | 用户描述信息 | -c |
uid | 设置用户ID | -u |
group | 设置用户所属组 | -g |
shell | 默认shell终端 | -s |
groups | 设置用户的附加组 | -G |
append | yes:将用户添加到groups指定的组中,不会影响原来存在的附加组,相当于追加 no:将用户添加groups中,然后从其它组中移除,相当于替换 |
|
remove | 删除与用户关联的用户,需要和state=absent一起使用 | |
home | 设置用户家目录 | -d |
password | 设置用户密码 | -p |
generate_ssh_key | 生成ssh密码 | |
ssh_key_bits | 密钥的字节 | |
ssh_key_file | 密码的存储路径 | |
expires | 用户过期时间 | -e |
password_expire_max | 更改密码的最大天数 | -f |
password_expire_min | 更改密码的最小天数 |
10. group模块
主要功能:管理组
查询方式
ansible-navigator doc group -m stdout
EXAMPLE 1
- name: Ensure group "somegroup" exists
ansible.builtin.group:
name: somegroup # 指定组名
state: present # 新建组
EXAMPLE 2
- name: Ensure group "docker" exists with correct gid
ansible.builtin.group:
name: docker # 指定组名
state: present # 新建组
gid: 1750 # 指定GID
state列表项的不同属性值
列表项 | 说明 | 命令比对 |
---|---|---|
present | 新建组 | groupadd |
absent | 删除组 | groupdel |
group模块列表项
列表项 | 说明 |
---|---|
name | 指定组名 |
state | 对组的操作 |
gid | 指定组ID |
system | 是否为系统组 |
11. at模块
主要功能:使用此模块可以安排命令或脚本文件在将来运行一次
at命令的特点就是计划任务的一次性特征,一旦设置的计划任务被执行,则该任务就会被从任务列表库中删除,因此常被用于仅需执行一次的工作。
查询方式
ansible-navigator doc at -m stdout
EXAMPLE 1
- name: Schedule a command to execute in 20 minutes as root
ansible.posix.at:
command: ls -d / >/dev/null # 执行的命令
count: 20 # 执行命令或脚本文件的间隔时间
units: minutes # 执行的命令或脚本文件的单位类型
EXAMPLE 2
- name: Match a command to an existing job and delete the job
ansible.posix.at:
command: ls -d / >/dev/null # 执行的命令
state: absent # 删除该任务
EXAMPLE 3
- name: Schedule a command to execute in 20 minutes making sure it is uni>
ansible.posix.at:
command: ls -d / >/dev/null # 执行的命令
count: 20 # 执行命令或脚本文件的单位数
units: minutes # 执行的命令或脚本文件的单位类型
unique: yes # 如果该工作存在则不添加,不存在则添加
state列表项的不同属性值
列表项 | 说明 | 命令比对 |
---|---|---|
present | 添加临时任务 | |
absent | 删除临时任务 | at -r |
utits列表项的不同属性值
列表项 | 说明 |
---|---|
minutes | 分钟 |
hours | 小时 |
days | 日 |
weeks | 周 |
at模块列表项
列表项 | 说明 |
---|---|
command | 要执行的命令 |
count | 间隔时间 |
units | 时间单位 |
unique | yes:该任务存在则不添加;no:该任务不存在则添加 |
script_file | 要执行的脚本路径 |
state | 对一次性任务的操作 |
12. cron模块
主要功能:周期执行计划任务
查询方式
ansible-navigator doc cron -m stdout
EXAMPLE 1
- name: Ensure a job that runs at 2 and 5 exists. Creates an entry like ">
ansible.builtin.cron:
name: "check dirs" # 计划任务名
minute: "0" # 分钟
hour: "5,2" # 小时
job: "ls -alh > /dev/null" # 执行的命令
EXAMPLE 2
- name: Creates a cron file under /etc/cron.d
ansible.builtin.cron:
name: yum autoupdate # 计划任务名
weekday: "2" # 周
minute: "0" # 分钟
hour: "12" # 小时
user: root # 修改crontab的用户
job: "YUMINTERACTIVE=0 /usr/sbin/yum-autoupdate" # 任务
cron_file: ansible_yum-autoupdat # 在指定路径下创建cron作业
state列表项的不同属性值
列表项 | 说明 | 命令比对 |
---|---|---|
present | 添加cron作业 | crontab -r |
absent | 删除cron作业 | crontab -e |
cron模块列表项
列表项 | 说明 |
---|---|
name | Cron作业的标识 |
minute | 执行时间(分钟),不指定则默认为* |
hour | 执行时间(小时),不指定则默认为* |
day | 执行时间(日),不指定则默认为* |
month | 执行时间(月),不指定则默认为* |
weekday | 执行时间(周),不指定则默认为* |
job | 要运行的命令 |
state | 对周期任务的操作 |
env | 管理crontab的环境变量 |
user | 指定cron作业的执行用户 |
insertafter | 在指定环境变量的声明之后插入环境变量,与state=present一起使用 |
cron_file | 指定cron作业的的存储路径 |
13. service模块
主要功能:控制受管主机上的服务
查询方式
ansible-navigator doc service -m stdout
EXAMPLE 1
- name: Start service httpd, if not started
ansible.builtin.service:
name: httpd # 服务名
state: started # 启动服务
EXAMPLE 2
- name: Enable service httpd, and not touch the state
ansible.builtin.service:
name: httpd # 服务名
enabled: yes # 加入到开启自启
EXAMPLE 3
- name: Start service foo, based on running process /usr/bin/foo
ansible.builtin.service:
name: foo # 服务名
pattern: /usr/bin/foo # 指定服务进程
state: started # 启动服务
EXAMPLE 4
- name: Restart network service for interface eth0
ansible.builtin.service:
name: network # 服务名
state: restarted # 重启服务
args: eth0 # 指定网卡对象
state列表项的不同属性值
列表项 | 说明 |
---|---|
reloaded | 重载服务 |
restarted | 重启服务 |
started | 启动服务 |
stopped | 停止服务 |
at模块列表项
列表项 | 说明 |
---|---|
name | 服务名 |
state | 对服务的操作 |
enabled | 是否设置为开机自启 |
pattern | 如果服务不响应状态命令,在ps中查找该选项值,如果找到则代表服务启动 |
args | 携带的其它参数 |
14. parted模块
parted模块默认不存在,需要安装对应的集合。
主要功能:使用’parted’命令行工具配置块设备分区
查询方式
ansible-navigator doc parted -m stdout
EXAMPLE 1
- name: Create a new ext4 primary partition
community.general.parted:
device: /dev/sdb # 操作的磁盘
number: 1 # 分区编号
state: present # 新建分区
fs_type: ext4 # 分区类型
EXAMPLE 2
- name: Create a new primary partition for LVM
community.general.parted:
device: /dev/sdb # 操作的磁盘
number: 2 # 分区编号
flags: [ lvm ] # 在分区上设置的标志的列表
state: present # 新建分区
part_start: 1GiB # 开始分区位置
以事实变量的方式返回分区信息
- name: Read device information (always use unit when probing)
community.general.parted: device=/dev/sdb unit=MiB
register: sdb_info
state列表项的不同属性值
列表项 | 说明 |
---|---|
absent | 新建分区 |
present | 删除分区 |
info | 返回设备信息 |
parted模块列表项
列表项 | 说明 |
---|---|
device | 操作的磁盘 |
number | 分区编号 |
state | 对分区的操作 |
unit | 分区的单位 |
fs_type | 为给定的分区设置文件系统类型 |
part_end | 分区的开始位置 |
part_start | 分区的结束位置 |
15. lvg模块
lvg模块默认不存在,需要安装对应的集合。
主要功能:创建、删除重新定位卷组
查询方式
ansible-navigator doc lvg -m stdout
EXAMPLE 1
- name: Create a volume group on top of /dev/sda1 with physical extent size = 32MB
community.general.lvg:
vg: vg.services # 卷组的名称
pvs: /dev/sda1 # 用作卷组成员设备的硬盘/分区
pesize: 32 # 块大小
EXAMPLE 2
- name: Create a volume group on top of /dev/sdb with physical extent size = 128KiB
community.general.lvg:
vg: vg.services # 卷组的名称
pvs: /dev/sdb # 用作卷组成员设备的硬盘/分区
pesize: 128K
# 块大小。必须是至少1扇区中的2个功率(扇区大小是VG中pesize当前使用的最大扇区大小),或者至少128KiB
lvg模块列表项
列表项 | 说明 |
---|---|
vg | 卷组的名称 |
pvs | 用作卷组成员设备的硬盘/分区 |
state | 对卷组的操作 |
pvresize | 块大小 |
16. lvol模块
主要功能:创建、删除或调整逻辑卷大小
查询方式
ansible-navigator doc lvol -m stdout
EXAMPLE 1
- name: Create a logical volume of 512m
community.general.lvol:
vg: firefly # 指定卷组
lv: test # 逻辑卷名
size: 512 # 逻辑卷大小
EXAMPLE 2
- name: Create cache pool logical volume
community.general.lvol:
vg: firefly # 指定卷组名称
lv: lvcache # 逻辑卷的名称
size: 512m # 逻辑卷的大小
opts: --type cache-pool # 传递的参数
EXAMPLE 3
name: Extend the logical volume to consume all remaining space in the volume group
community.general.lvol:
vg: firefly # 指定卷组的名称
lv: test # 逻辑卷的名称
size: +100%FREE # 逻辑卷的大小为:全部空余时间
lvol模块列表项
列表项 | 说明 |
---|---|
vg | 卷组的名称 |
lv | 逻辑卷的名称 |
size | 逻辑卷的大小 |
pvs | 物理范围的大小 |
opts | 传递给lvcreate命令的选项 |
resizefs | 刷新逻辑卷的大小 |
force | 卷的减小或删除操作需要此开关。确保文件系统永远不会因错误而损坏/销毁。 |
shrink | 如果当前容量小于请求的容量,则缩小请求容量(默认yes) |
snapshot | 快照卷的名称 |
active | 逻辑磁盘是否处于活跃状态,不活跃则主机不可见(默认yes) |
thinpool | 精简卷名 |
17. filesystem模块
主要功能:创建文件系统
查询方式
ansible-navigator doc filesystem -m stdout
EXAMPLE 1
- name: Create a ext4 filesystem on /dev/sdb1 and check disk blocks
community.general.filesystem:
fstype: ext4
dev: /dev/sdb1
opts: -cc
EXAMPLE 2
- name: Blank filesystem signature on /dev/sdb1
community.general.filesystem:
dev: /dev/sdb1
state: absent
EXAMPLE 3
- name: Create a filesystem on top of a regular file
community.general.filesystem:
dev: /path/to/disk.img
fstype: vfat
state列表项的不同属性值
列表项 | 说明 |
---|---|
absent | 新建文件系统 |
present | 删除文件系统 |
filesystem模块列表项
列表项 | 说明 |
---|---|
fstype | 创建的文件系统 |
dev | 块设备的路径 |
opts | 传递给mkfs命令的选项列表 |
state | 对文件系统的操作 |
resizefs | 刷新空间 |
18. mount模块
主要功能:控制/etc/fstab中的配置
查询方式
ansible-navigator doc mount -m stdout
EXAMPLE 1
- name: Mount DVD read-only
ansible.posix.mount:挂载点路径
path: /mnt/dvd # 挂载点路径
src: /dev/sr0 # 挂载的设备
fstype: iso9660 # 文件系统类型(挂载设备的文件系统)
opts: ro,noauto # 挂载选项
state: present # 新增条目
EXAMPLE 2
- name: Mount up device by UUID
ansible.posix.mount:
path: /home # 挂载点
src: UUID=b3e48f45-f933-4c8e-a700-22a159ec9077
fstype: xfs # 文件系统类型(挂载设备的文件系统)
opts: noatime # 挂载选项
state: present # 新增条目
state列表项的不同属性值
列表项 | 说明 |
---|---|
absent | 删除fstab文件中条目,卸载设备并删除挂载点 |
present | 只写入fstab文件中 |
mounted | 设备会被主动挂载并写入fstab文件,如果挂载点不存在,会创建挂载点 |
unmounted | 卸载设备,但不修改fstab文件 |
remounted | 强制刷新设备并重新挂载 |
filesystem模块列表项
列表项 | 说明 |
---|---|
path | 挂载点路径 |
src | 挂载的设备 |
fstype | 文件系统类型(挂载设备的文件系统) |
opts | 挂载选项 |
state | 挂载的相关操作 |
boot | 是否在引导时间挂载(默认True) |