van*_*ooh 22 python service salt-stack
至于我在Salt文档中看到的(例如这里),支持的模块有两种主要类型:状态模块和执行模块(我知道还有渲染器,返回器等).大多数SLS文件示例包含仅与状态模块相关的语句(在salt.state命名空间下),而对于执行模块,仅显示命令行示例.例如,我们有两个名为"service"的模块:salt.states.service和salt.modules.service.现在我在SLS文件中使用执行模块时遇到问题,似乎它们根本不可用,或者我错过了让它们可用的东西.我的问题是:是否可以在SLS文件中使用执行模块,以及如何使用salt.modules.service.restart函数在Ubuntu机器上重新启动服务?此外,我没有明确区分这些模块类型.
我的服务名称是selenium-node,我尝试了几种组合,但都失败了:
# First attempt:
selenium-node:
service.restart
# Another one:
service:
- restart
- name: selenium-node
# Or even:
selenium-node:
service:
- restart
Run Code Online (Sandbox Code Playgroud)
在使用git状态和执行模块时,我遇到了同样的问题.但是,当我在minion上运行以下命令时(如文档中所示),它成功:
$ sudo salt-call service.restart selenium-node
Run Code Online (Sandbox Code Playgroud)
Uta*_*ave 45
您是正确的,执行模块和状态模块之间存在显着差异.不幸的是,术语模块有点过载.
的执行模块将被立即执行发送到盐爪牙的命令.例如"install apache"或"restart memcached".
一个状态模块告诉盐爪牙最终结果,或"国家"应该是什么.示例是"确保安装了apache"或"确保文件系统上存在此特定配置文件".重要的区别在于状态模块将在执行任何操作之前检查系统以查看机器是否符合所需状态.因此,在"确保安装apache"的情况下,Salt Minion将检查Apache是否已安装,如果安装了Apache则不执行任何操作.如果不是很明显,Salt将根据需要安装Apache.
现在要像你在问题中提到的那样重新启动selenium-node,你会希望让你的服务看到一些东西; 通常是包更改和/或配置更改.这样Selenium只会在需要时重新启动.这是一个粗略的例子.我不熟悉selenium-node的安装,所以请考虑以下sls文件示例.我假设selenium-node可以从你的系统的软件包repo中安装.
cat /srv/salt/selenium-node.sls
selenium-node:
pkg:
- installed
service:
- running
- watch:
- pkg: selenium-node
- file: /etc/selenium-node.conf
file:
- managed
- name: /etc/selenium-node.conf
- source: salt://selenium/selenium-node.conf # assuming config located at /srv/salt/selenium/selenium-node.conf on the Salt Master
Run Code Online (Sandbox Code Playgroud)
在这里,我们在"selenium-node"ID声明下有3个州.我们正在管理系统包,服务和配置文件.您会注意到该服务正在监视selenium-node包和配置文件.当服务正在观看某些内容时,服务将重新启动,默认情况下,当"观看"的内容报告更改时.
这通常是您在使用Salt States时要如何处理导致服务重新启动的方法.这样,服务只会在需要时重新启动.这有助于您的Salt States具有幂等性,并且只在实际需要时才会导致系统发生变化.
现在,回答你问题的第二部分.是的,可以在state或sls文件中运行执行模块.您可以通过"module.run"状态来完成此操作.文档在这里:http://docs.saltstack.com/ref/states/all/salt.states.module.html#module-salt.states.module
以下是每次运行此状态或sls文件时如何重新启动服务:
cat /srv/salt/selenium/selenium-restart.sls
restart_selenium:
module.run:
- name: service.restart
- m_name: selenium-node # m_name gets passed to the execution module as "name"
Run Code Online (Sandbox Code Playgroud)