28.2. 使用 systemd RHEL 系统角色部署 systemd 置入文件
systemd 在设置之上应用置入文件,从其他位置读取这个单元。因此,您可以使用置入文件修改单元设置,而无需更改原始单元文件。通过使用 systemd
RHEL 系统角色,您可以自动部署置入文件。
该角色使用硬编码的文件名 99-override.conf
将置入文件存储在 /etc/systemd/system/ <name> ._<unit_type>/
中。请注意,它会在目标目录中使用此名称覆盖现有文件。
先决条件
- 您已准备好控制节点和受管节点。
- 以可在受管主机上运行 playbook 的用户登录到控制节点。
-
用于连接到受管节点的帐户具有
sudo
权限。
流程
使用 systemd 置入文件内容创建 Jinja2 模板。例如,使用以下内容创建
~/sshd.service.conf.j2
文件:{{ ansible_managed | comment }} [Unit] After= After=network.target sshd-keygen.target network-online.target
此置入文件在
After
设置中指定与原始/usr/lib/systemd/system/sshd.service
文件相同的单元,以及network-online.target
文件。使用这个额外目标,sshd
会在网络接口激活并分配 IP 地址后启动。这样可确保sshd
可以绑定到所有 IP 地址。对文件名使用
<name > . <unit_type > .conf.j2
convention。例如,要为sshd.service
单元添加一个 drop-in,您必须将文件命名为sshd.service.conf.j2
。将文件与 playbook 位于同一个目录中。创建一个包含以下内容的 playbook 文件,如
~/playbook.yml
:--- - name: Managing systemd services hosts: managed-node-01.example.com tasks: - name: Deploy an sshd.service systemd drop-in file ansible.builtin.include_role: name: rhel-system-roles.systemd vars: systemd_dropins: - sshd.service.conf.j2
示例 playbook 中指定的设置包括以下内容:
systemd_dropins: <list_of_files>
- 指定以 YAML 列表格式部署的置入文件的名称。
有关 playbook 中使用的所有变量的详情,请查看控制节点上的
/usr/share/ansible/roles/rhel-system-roles.systemd/README.md
文件。验证 playbook 语法:
$ ansible-playbook --syntax-check ~/playbook.yml
请注意,这个命令只验证语法,不会防止错误但有效的配置。
运行 playbook:
$ ansible-playbook ~/playbook.yml
验证
验证角色是否将 drop-in 文件放在正确的位置:
# ansible managed-node-01.example.com -m command -a 'ls /etc/systemd/system/sshd.service.d/' 99-override.conf
其他资源
-
/usr/share/ansible/roles/rhel-system-roles.systemd/README.md
文件 -
/usr/share/doc/rhel-system-roles/systemd/
目录