几周以来,我们使用 SaltStack 进行配置管理。
如何处理分布的具体位置systemctl?
/bin/systemctl/usr/bin/systemctl目前我在 sudoers 文件中添加了两行:
etc_sudoers:
file.blockreplace:
- name: /etc/sudoers
- marker_start: "# START managed etc_sudoers -DO-NOT-EDIT-"
- marker_end: "# END managed zone etc_sudoers --"
- content: |
some_user ALL = NOPASSWD: /bin/systemctl restart apache2
some_user ALL = NOPASSWD: /usr/bin/systemctl restart apache2
{% endfor %}
- append_if_not_found: True
- backup: '.bak'
- show_changes: True
Run Code Online (Sandbox Code Playgroud)
....有没有更简单的解决方案?
小智 5
不幸的是,没有更简单或自动的方法。但是有一个更好的方法遵循Salt Best Practices,使用 map.jinja 文件。
Salt Formulas 中的一个强约定是将特定于平台的数据(例如包名称和文件系统路径)放入名为 map.jinja 的文件中,该文件与状态文件放在一起。
使用它将确保您的状态的模块化,使它们能够运行,而不管 minion 的操作系统如何。
下面是一个示例,说明您的 map.jinja 文件在您提供的场景中的情况。它将按 OS 系列过滤 minion 并根据它设置变量:
{% set systemctl = salt['grains.filter_by']({
'Debian': {
'location': '/bin/systemctl'
},
'Suse': {
'location': '/usr/bin/systemctl'
}
} %}
Run Code Online (Sandbox Code Playgroud)
现在您需要将它导入您的状态文件并使用之前定义的变量:
{% from "systemctl/map.jinja" import systemctl with context %}
etc_sudoers:
file.blockreplace:
- name: /etc/sudoers
- marker_start: "# START managed etc_sudoers -DO-NOT-EDIT-"
- marker_end: "# END managed zone etc_sudoers --"
- content: some_user ALL = NOPASSWD: {{ systemctl.location }} restart apache2
- append_if_not_found: True
- backup: '.bak'
- show_changes: True
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
470 次 |
| 最近记录: |