gpt4 book ai didi

python - salt 栈 : Properties (computed values) for data from SLS files?

转载 作者:太空狗 更新时间:2023-10-29 21:54:45 25 4
gpt4 key购买 nike

我们在 salt 管理的 minions 上运行多个 Python 虚拟环境。

系统的名称是按此架构构建的:

project_customer_stage

例子:

supercms_favoritcustomer_p

支柱数据:

systems:
- customer: favoritcustomer
project: supercms
stage: p
- customer: favoritcustomer
project: supercms
stage: q

对于每个 virtualenv,我们都有一个 linux 用户。到目前为止,我们像这样计算像“home”这样的值:

{% for system in pillar.systems %}
{% set system_name = system.project + '_' + system.customer + '_' + system.stage %}
{% set system_home = '/home/' + system_name %}
...

但这是多余的。

我们如何避免复制粘贴 {% set system_home = ...%}

我喜欢面向对象编程的工作方式:

  • 您可以为主目录定义一个属性
  • 如果在特殊情况下需要不同的主目录,则可以子类化基类并覆盖基类的工作方式。

在 Salt 中,你有 YAML 和模板……都是好东西。但在我的情况下,OOP 会很好。

最佳答案

您还可以动态生成支柱数据。考虑以下支柱文件示例:

{% import_yaml "systems.yml" as systems %}

systems:
{% for system in systems %}
{% set name = system['name'] | default(system.project + '_' + system.customer + '_' + system.stage) %}
{% set home = system['home'] | default('/home/' + name) %}
- name: {{ name }}
customer: {{ system['customer'] }}
project: {{ system['project'] }}
stage: {{ system['stage'] }}
home: {{ home }}
{% endfor %}

此支柱定义从 systems.yml 文件加载 YAML 数据,Salt 将在您的 pillar_root 目录中查找该文件。该文件可能如下所示(与您的初始示例非常相似):

- customer: smith
project: cms
stage: p
- customer: jones
project: shop
stage: p
name: jones_webshop_p # <-- alternate name here!

请注意,此示例动态计算项目名称和用户主目录等属性,除非它们在您的数据文件中明确定义。为此,Jinja default() filter用于支柱定义。

使用这个支柱定义,您可以直接从支柱数据中简单地在您的状态定义中使用 namehome:

{% for system in salt['pillar.get']('systems') %}
{{ system.home }}:
file.directory
{% endfor %}

此外,因为在我看来这些 Jinja-heavy SLS 文件有点难以阅读,您可以考虑切换到 Python renderer对于你的支柱文件:

#!py

import yaml

def run():
systems = []
with open('systems.yml', 'r') as f:
data = yaml.safe_load(f)

for system in data:
if not 'name' in system:
system['name'] = "%s_%s_%s" % (system['project'], system['customer'], system['stage'])

if not 'home' in system:
system['home'] = "/home/%s" % name

systems.append(system)

return {"systems": systems}

关于python - salt 栈 : Properties (computed values) for data from SLS files?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34395249/

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