gpt4 book ai didi

salt-stack - 如何在 salt 状态中重新启动?

转载 作者:行者123 更新时间:2023-12-02 11:29:49 24 4
gpt4 key购买 nike

(这是我在 salt 用户组 FWIW 上提出的问题的副本)

我需要编写一个状态来安装一些Windows服务器功能,重新启动minion,然后安装更多软件。似乎所有的部分都在那里(cmd.wait、system.reboot),但我在连接这些点时遇到了困难。

例如,我有一个“webserver”状态,应该在计算机上安装 IIS。它需要启用某些服务器功能,重新启动(因为 Windows),然后继续。我们使用一个名为“网站”的自定义模块来完成此操作,该模块允许我安装一个网站,以及另一个用于安装应用程序池的模块。我们的状态文件看起来像这样:

my_website:
website.installed:
- name: example.com
- version: alpha-1.0.0
- type: Website
- bindings:
- hostheader: localhost
- port: 1234
- installdir: c:\\wwwroot\\example.com
- apppool: static
- require:
- sls: serverstate.webserver
- sls: apppool.static

上面的方法效果很好,除了我们需要在“serverstate.webserver”和“apppool.static”要求之间重新启动之外。就目前情况而言,状态失败,我们手动重新启动,然后重新运行状态,它就可以工作了。当然,我们希望省略手动重启步骤。

是否有解决此类问题的通用模式?

最佳答案

我以前也遇到过这种情况。为了获得所需的行为,我所做的就是使用 jinja 在运行时决定是否需要运行 sls 文件的一部分。我通过让每个需要重新启动的部分在成功后设置自定义粒度来实现此目的。然后在接下来的运行中它将跳过已经完成的部分。

这是一个 sls 文件示例。

{% if grains.get('myapp_done') != 'completed' %}

myapp:
pkg.installed:
- source: salt:/windows/myapp.exe

myapp_done:
module.run:
- name: grains.setval
- key: myapp
- val: complete

system.reboot:
module.run:
- watch:
- pkg: myapp

{% endif %}

{% if grains.get('myotherapp_done') != 'completed' %}

myotherapp:
pkg.installed:
- source: salt:/windows/myotherapp.exe

myotherapp_done:
module.run:
- name: grains.setval
- key: myotherapp
- val: complete


system.reboot:
module.run:
- watch:
- pkg: myotherapp

{% endif %}

然后多次运行 highstate 或在您的 minion 的配置中设置以下内容以在启动时运行 highstate。

startup_states: highstate

关于salt-stack - 如何在 salt 状态中重新启动?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23660645/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com