减少自定义 Saltstack 状态之间的重复

问题描述 投票:0回答:1

我正在为作为 podman 容器运行的应用程序编写自定义 Saltstack 状态,我发现这些状态之间有很多重复,因为它们都需要:

  • 客户用户/组
  • 数据目录
  • 配置目录
  • 备份目录
  • podman generate systemd
    生成的 systemd 单元
    • 当服务文件更改时触发重新加载 systemd
  • systemd
    单元的 env 文件
  • 用于备份的 systemd 单元和计时器

以前这些主要由 RPM 包处理,但使用 Saltstack 就由我来处理,而且相当冗长。

我知道参数化状态+支柱,但我不喜欢那样,因为我会得到通用的

podman
状态加上大量的if/else,这会使其难以阅读。我认为 SaltStack 公式是相同的技术解决方案,但预先设计为可重用。

我不是 Python 程序员,所以我没有走定制模块的路。

还有其他选项来创建可重用的 Saltstack 自定义状态吗?

salt-stack opensuse podman
1个回答
0
投票

你不需要很多 if/else。您只需使用地图即可。

然后传递要使用的地图的最简单方法是通过 Jinja2

include
sls*
变量

# salt/app1/init.sls

{% include common/states.sls %}

more specific state:
  foo.whatever: []

# salt/app1/defaults.yaml

name: &NAME app1
user: *NAME 
group: *NAME
data_dir: *NAME
conf_dir: *NAME
env:
  FOO: 1

# ...
# salt/common/states.sls

{% from common/map.jinja import data with context %}

{{ data["name"] }} group:
  group.present:
    - name: {{ data["group"] }}

{{ data["name"] }} user:
  user.present:
    - name: {{ data["user"] }}
    - groups: [ {{ data["group"] }} ]
    - require:
      - {{ data["name"] }} group

{{ data["name"] }} data directory:
  file.directory:
    - name: /var/lib/{{ data["datadir"] }}
    - user: {{ data["user"] }}
    - group: {{ data["group"] }}
    - mode: '0750'
    - require:
      - {{ data["name"] }} user
      - {{ data["name"] }} group

# ...

# salt/common/map.jinja

{% import_yaml slspath ~ "/defaults.yaml" as defaults %}
{% set overrides = salt["config.get"](slscolonpath) %}
{% set data = salt["slsutil.update"](defaults, overrides) %}
# pillar/minion-6.sls
app1:
  group: shared-apps
  env:
    FOO: 0
    BAR: 1
© www.soinside.com 2019 - 2024. All rights reserved.