Salt:安装包和 运行 服务(名称与包不同)

Salt: install package and run service (name different than package)

目前正在努力思考 Salt。

本质上我想安装一个包 (rpm) 并启用和 运行 服务(如果包安装成功)。

惊奇:服务的调用方式与程序包不同。

假设

这行不通

my_state_id:
  pkg.installed:
    - pkgs:
      - x
  service.running:
    - name: y
    - enable: true
    - require:
      - pkg: x

结果:

Comment: The following requisites were not found:
                             require:
                                 pkg: x

看来我必须这样写并引用状态而不是包:

my_state_id:
  pkg.installed:
    - pkgs:
      - x
  service.running:
    - name: y
    - enable: true
    - require:
      - pkg: my_state_id

但是:require: pkg: my_state_id 是什么意思? =D“如果到目前为止的状态没有失败,那么运行当前模块”?

引自 requisites 文档:

The generalized form of a requisite target is <state name>: <ID or name>.

如果我们拆散你的my_state_id ID:

  1. my_state_id是ID
  2. pkgservice是州名
  3. pkg state 没有 name 参数,但是 service state 有,而且是 y

由于pkg状态没有name参数,我们需要使用它的ID来指定它是必需的:

  • 在左侧我们将有 pkg
  • 右边是ID my_state_id
  - require:
      - pkg: my_state_id

另一种写法是:

# give the package name in 'name' parameter

my_state_id:
  pkg.installed:
    - name: x
  service.running:
    - name: y
    - enable: true
    - require:
        - pkg: x

所以这是一种告诉 Saltstack 有条件地采取行动 的方法。在这种情况下,如果包安装失败,则不应尝试启动服务(并且失败)。