salt stack if then else 服务

salt stack if then else for service

我有一个 windows 服务,我从 salt 堆栈部署了它。状态是这样的

create_executable:
   module.run:
     -  name:  service.create
     -  m_name:  SVC1
     -  bin_path:  d:\svc1.exe
     -  start_type:  auto

现在,当我重新部署服务时,它显示 "Exception: Service Already Exists: SVC1"。有没有办法测试服务是否 运行?如果 服务是 运行,我想停止它、禁用它、删除它然后重新创建它。

使用 unless 功能的 module.wait together with a cmd.run 在这种情况下可能会有所帮助。

您需要一个很好的方法来检查服务 是否未安装 并在 unless 测试中使用它。命令本身可能类似于 echo - 这并不重要。您现在可以使用 watchwatch_in 使 module.wait 依赖于 cmd.run.

未经测试的草稿(注意我根本不知道windows cli):

check_if_service_installed:
  cmd.run:
    name: echo 'not installed'
    unless: 'if exists c:\svc1.exe'

create_executable:
  module.wait:
    - name:  service.create
    - m_name:  SVC1
    - bin_path:  d:\svc1.exe
    - start_type:  auto
    - watch:
      - cmd: check_if_service_installed

写完之后,我认为这对于您要实现的目标来说看起来有点复杂。也许负责能够再次执行的小批量或 powershell 脚本更直接。但这是 IMO 的品味问题。