Salt:基于 systemd 是否可用的条件
Salt: Condition based on systemd being available or not
我想通过 salt-stack 安装这个文件。
# /etc/logrotate.d/foo
/home/foo/log/foo.log {
compress
# ...
postrotate
systemctl restart foo.service
endscript
}
不幸的是,有些旧机器还没有 systemd。
对于那些机器,我需要这个后旋转脚本:
/etc/init.d/foo restart
如何在盐中完成这项工作?
我想我需要这样的东西:
postrotate
{% if ??? %}
/etc/init.d/foo restart
{% else %}
systemctl restart foo.service
{% endif %}
endscript
但是如何实现???
?
我们可以利用 service
模块发现这一点,该模块是一个虚拟模块,最终由适合机器的特定模块实现。
从命令行我们可以发现与 test.provider
一起使用的特定模块。这是一个例子:
$ sudo salt 'some.*' test.provider service
some.debian.8.machine:
systemd
some.debian.7.machine:
debian_service
some.redhat.5.machine:
rh_service
要在模板中发现这一点,我们可以使用:
{{ salt["test.provider"]("service") }}
所以,您可以使用类似的东西:
postrotate
{% if salt["test.provider"]("service") != "systemd" %}
/etc/init.d/foo restart
{% else %}
systemctl restart foo.service
{% endif %}
endscript
注意:
test.provider
的可能 return 值因平台而异。从来源来看,这些似乎是当前可用的提供程序:
$ cd salt/modules && grep -l "__virtualname__ = 'service'" *.py
debian_service.py
freebsdservice.py
gentoo_service.py
launchctl.py
netbsdservice.py
openbsdrcctl.py
openbsdservice.py
rest_service.py
rh_service.py
smf.py
systemd.py
upstart.py
win_service.py
我只是直接调用 Salt 的 service
模块,它将根据 OS.
做正确的事情
postrotate
salt-call service.restart foo
endscript
更 "salty" 的方法是这样的:
my_file:
file.managed:
- source: salt://logrotate.d/foo
- name: /etc/logrotate.d/foo
- watch_in:
- service: my_foo_service
my_foo_service:
service.running:
- name: foo
这将为您放置文件,然后在进行任何更改后重新启动 foo
服务。
我想通过 salt-stack 安装这个文件。
# /etc/logrotate.d/foo
/home/foo/log/foo.log {
compress
# ...
postrotate
systemctl restart foo.service
endscript
}
不幸的是,有些旧机器还没有 systemd。
对于那些机器,我需要这个后旋转脚本:
/etc/init.d/foo restart
如何在盐中完成这项工作?
我想我需要这样的东西:
postrotate
{% if ??? %}
/etc/init.d/foo restart
{% else %}
systemctl restart foo.service
{% endif %}
endscript
但是如何实现???
?
我们可以利用 service
模块发现这一点,该模块是一个虚拟模块,最终由适合机器的特定模块实现。
从命令行我们可以发现与 test.provider
一起使用的特定模块。这是一个例子:
$ sudo salt 'some.*' test.provider service
some.debian.8.machine:
systemd
some.debian.7.machine:
debian_service
some.redhat.5.machine:
rh_service
要在模板中发现这一点,我们可以使用:
{{ salt["test.provider"]("service") }}
所以,您可以使用类似的东西:
postrotate
{% if salt["test.provider"]("service") != "systemd" %}
/etc/init.d/foo restart
{% else %}
systemctl restart foo.service
{% endif %}
endscript
注意:
test.provider
的可能 return 值因平台而异。从来源来看,这些似乎是当前可用的提供程序:
$ cd salt/modules && grep -l "__virtualname__ = 'service'" *.py
debian_service.py
freebsdservice.py
gentoo_service.py
launchctl.py
netbsdservice.py
openbsdrcctl.py
openbsdservice.py
rest_service.py
rh_service.py
smf.py
systemd.py
upstart.py
win_service.py
我只是直接调用 Salt 的 service
模块,它将根据 OS.
postrotate
salt-call service.restart foo
endscript
更 "salty" 的方法是这样的:
my_file:
file.managed:
- source: salt://logrotate.d/foo
- name: /etc/logrotate.d/foo
- watch_in:
- service: my_foo_service
my_foo_service:
service.running:
- name: foo
这将为您放置文件,然后在进行任何更改后重新启动 foo
服务。