公式提供属性默认值的最佳方式是什么?

2024-03-29

Chef 有一个非常详尽(也许太多)的食谱方案来提供属性的默认值。我认为 Puppet 对类参数做了类似的事情,默认值通常进入params.pp。有了盐,我就看到了:

  1. 在字典/支柱查找中指定默认值。
  2. the grains.filter_by将默认属性值与用户提供的支柱数据合并(例如,地图.神社 https://github.com/saltstack-formulas/apache-formula/blob/master/apache/map.jinja in apache 公式 https://github.com/saltstack-formulas/apache-formula)
  3. 在打电话给file.managed状态,指定默认属性值作为defaults参数和用户指定的支柱数据为context.

选项 1 似乎是最常见的,但缺点是模板文件变得很难阅读。每当查找完成时,它还需要重复默认值,这使得很容易出错。

选项 2 感觉在精神上最接近 Chef 的方法,但似乎期望根据某些过滤属性(例如,grains 中记录的操作系统类型)将默认值分解为案例字典。

选项 3 还不错,但将属性默认值放入状态文件中,而不是像选项 2 那样将它们分离到自己的文件中。

盐堆的最佳实践文档 http://docs.saltstack.com/en/latest/topics/best_practices.html支持选项 2,但它没有解决如何将默认值与用户指定的值合并而无需使用grains.filter_by。有什么办法解决吗?


注意:defaults.get 的行为在版本 2015.8 中发生了更改,因此此处描述的方法不再有效。我将这个答案留给旧版本的用户,并将为当前版本发布类似的方法。

defaults.get加上一个defaults.yaml文件应该做你想做的事。假设您的公式树如下所示:

my-formula/
    files/
        template.jinja
    init.sls
    defaults.yaml

# my-formula/init.sls
my-formula-conf-file:
  file.managed:
    - name: {{ salt['defaults.get']('conf_location') }}
    - source: {{ salt['defaults.get']('conf_source') }}
    ... and so on.

# defaults.yaml
conf_location: /etc/my-formula.conf
conf_source: salt://my-formula/files/template.jinja

# pillar/my-formula.sls
my-formula:
  conf_location: /etc/my-formula/something.conf

这将以配置文件位于/etc/my-formula/something.conf(支柱价值)使用salt://my-formula/files/template.jinja作为源(默认值,未提供支柱覆盖)。

请注意支柱和默认文件的不直观结构;defaults.get期望defaults.yaml将其值放在文件的根目录中,但期望支柱覆盖位于以公式命名的字典中,因为一致性是针对弱者的。

The 文档 http://docs.saltstack.com/en/latest/ref/modules/all/salt.modules.defaults.html对于 defaults.get 给出了使用的示例defaults.json代替defaults.yaml。这可行,但我发现 yaml 更具可读性。并且可写。

有一个bug https://github.com/saltstack/salt/issues/19856从托管模板内部而不是在状态文件中使用defaults.get,据我所知它仍然处于打开状态。它仍然可以工作;解决方法在链接后面。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

公式提供属性默认值的最佳方式是什么? 的相关文章

  • 【0723】自动化运维——saltstack

    24 1 自动化运维介绍 认识自动化运维 xff1a 传统运维效率低 xff0c 大多工作人为完成传统运维工作繁琐 xff0c 容易出错传统运维每日重复做相同的事情传统运维没有标准化流程传统运维的脚本繁多 xff0c 不能方便管理自动化运维
  • SaltStack之salt-ssh

    salt ssh介绍 salt ssh可以让我们不需要在受控机上安装salt minion客户端也能够实现管理操作 salt ssh特点 1 远程系统需要Python支持 xff0c 除非使用 r选项发送原始ssh命令 2 salt ssh
  • saltstack部署OpenStack rocky版

    通过saltstack工具 xff0c 来自动部署OpenStack 基本的yaml 源码放在github上了 有兴趣可以查看 自行测试三台虚拟机安装没有问题 需要注意的是安装cinder slave xff08 从节点 xff09 的时候
  • SaltStack部署

    目录 一 SaltStack简介 1 基本简介 2 通信方式 3 功能简介 二 资源获取 1 官网地址 2 阿里云地址 三 部署 1 配置环境说明 2 资源配置 一 SaltStack简介 1 基本简介 SaltStack是一种新型的基础设
  • SaltStack 企业级自动化运维实战

    一 SaltStack 概述 1 SaltStack 简介 SaltStack是一个服务器基础架构集中化管理平台 具备配置管理 远程执行 监控等功能 一般可以理解为简化版的puppet和加强版的func SaltStack基于Python语
  • SaltStack实现etcd自动扩容

    一 ETCD 概述 1 ETCD 简介 ETCD是用于共享配置和服务发现的分布式 一致性的KV存储系统 该项目目前最新稳定版本为2 3 0 ETCD是CoreOS公司发起的一个开源项目 授权协议为Apache 提供配置共享和服务发现的系统比
  • SaltStack 自动化运维详解

    一 自动化运维工具对比 使用所需软件配置单个服务器是一项相当简单的任务 但是 如果许多服务器需要安装相同或相似的软件和配置 则该过程将需要大量的工时才能完成 这会耗尽您本已紧张的资源 如果没有某种形式的自动化 这项任务几乎无法完成 考虑到这
  • saltstack部署MySQL主从

    saltstack部署MySQL主从 1 目录结构 2 编写状态文件 2 1 main sls文件内容 2 2 master sls的文件内容 2 3 slave sls文件内容 2 4 grant mysql sls文件内容 2 5 ma
  • saltstack架构拓展syndic

    架构 server1 master 写好httpd nginx 等salt server2 3 minion server4 top master server1 salt key d server4 server4 vim etc sal
  • SaltStack:条件包括:如果为空则出错

    我有一个条件包含 如下所示 include if CONDITION A foo bar endif if CONDITION B blu bla endif 这在大多数情况下都有效 但如果 CONDITION A 和 CONDITION
  • 将公式与 saltstack 一起使用

    我是 saltstack 的新手 我想使用 saltstack 公式安装 postgres 或 apache 或其他任何东西 我从 git 下载了 repo git clone https github com saltstack form
  • 防火墙上需要哪些开放端口才能允许 salt-stack 远程执行?

    saltstack 上的文档似乎不清楚 salt master gt salt minion 需要哪些端口 显然不需要 它建议只需要从 salt minion gt salt master 打开端口 看 http docs saltstac
  • 跟踪 Salt Minion 上的命令失败

    我过去一个月一直在用盐 每当我运行命令时说sudo salt test ping 然后 master ping 所有 minion 响应是所有已启动并运行的 minion 的列表 输出看起来像这样 minion 1 true minion
  • 如何与盐师沟通

    我正在尝试从 salt minion 访问 salt master 但是 我无法获得 salt master 的密钥 在我的虚拟机上 我安装了salt master在我的 Windows 上 我安装了salt minion 我已经在我的mi
  • saltstack jinja 中的“json”和“tojson”过滤器有什么区别吗?

    根据 saltstack 文档 它是 json https docs saltstack com en latest ref renderers all salt renderers jinja html https docs saltst
  • 如何使用 Salt Stack 执行多个命令?

    我尝试添加 mypack pkg installed pkgs mercurial git cmd run name mkdir p opt mypack cmd run hg pull u R opt mypack hg clone R
  • 检查文件是否存在并创建符号链接

    我想做这样的事情 如果文件 A 存在或者没有符号链接 B 我想创建一个符号链接 B gt A 现在我有 B file symlink target A exists name A 但这很糟糕 它检查不到我想要的东西 我怎样才能用盐实现这个简
  • 期望脚本在单独调用时有效,但不能作为盐状态

    我正在尝试通过expect 进行scp 和ssh 操作 如果我直接从终端调用下面的脚本 则它可以工作 usr bin expect myexpect sh但是当我使用 salt 运行它时 第一个 scp 命令在第二个 ssh 失败的地方起作
  • salt-stack highstate - 查找慢状态

    运行初始安装大约需要 20 分钟 运行salt call state highstate大约需要6分钟 这并非不合理 但我想加快速度 但我不知道如何找到最慢的状态 除了用秒表观看屏幕 6 分钟之外 还有什么方法可以找到每个状态运行需要多长时
  • Salt 和 Python 的 YAML 语法

    这之间有什么区别 dic1 subdict1 1 value11 1 subdict1 2 value1 2 cubdict1 3 value1 3 和这个 dict2 subdict2 1 value2 2 subdict2 1 valu

随机推荐

  • 如何使用 Python/Tkinter 制作菜单栏剪切/复制/粘贴

    我想制作可以剪切 复制 粘贴所选文本的菜单项 在菜单栏中 而不是在右键单击弹出窗口中 等效的键盘命令已经可以工作 而无需我做任何事情来启用它们 例如 我可以在输入框中输入文本 使用 Control X 剪切它 然后使用 Control C
  • 方法executeScript(selenium web driver)无法定义全局变量以供以后使用?

    我正在使用该方法executeScript在 selenium web 驱动程序中 我发现一个问题 js executeScript var b 1 js executeScript alert b 运行上面的代码后 我想得到一个警报窗口
  • 从 JSON 中的不同嵌套级别提取对象名称

    我一直在尝试从之前的问题中找到解决方案来运行here https stackoverflow com questions 18830955 get the elements from nested json with python usin
  • Android Gradle 构建中出现意外的节点 Android 打包

    我正在尝试让我的项目使用gradle 问题是 每次我尝试构建时 都会收到以下错误 Error Internal error java lang AssertionError Unexpected node Android Packaging
  • 有了websockets,AJAX还有用武之地吗?

    我目前正在使用 Node js 构建一个实时应用程序 我使用 socket io 来支持实时交互 但已加载 jQuery 因此我可以使用 AJAX 我最初使用 socket io 进行服务器和客户端之间的所有通信 我开始认为 AJAX 可能
  • 如何更改 Azure AD 上的用户主体名称

    我正在尝试使用在 Microsoft 文档中找到的 PowerShell 命令 Set MsolUserPrincipalName 更改 Azure AD 用户的用户主体名称here https learn microsoft com en
  • 如何编写将行号输出为列的查询?

    如何编写将行号输出为列的查询 这是 iSeries 上的 DB2 SQL 例如 如果我有 表披头士乐队 John Paul George Ringo 我想写一个声明 如果可能的话 不写过程或视图 这给了我 1 John 2 Paul 3 G
  • 如何从代码隐藏在新窗口或选项卡中打开页面

    所以我有一个 Web 应用程序 我可以从下拉列表中选择一个值 当选择此值时 我想在新窗口中加载另一个页面 我试过这个 ScriptManager RegisterStartupScript Page typeof Page OpenWind
  • 当我访问数组的元素时,硬件级别会发生什么?

    int arr 69 1 12 10 20 113 当我这样做时会发生什么 int x a 3 我一直有这样的印象a 3 意思是这样的 从内存地址开始arr 向前走 3 个内存地址 获取该内存地址表示的整数 但后来我对哈希表的工作原理感到困
  • 从视图模型将焦点设置在 WPF 中的 TextBox 上

    我有一个TextBox and a Button在我看来 现在 我正在检查按钮单击时的条件 如果条件结果为假 则向用户显示消息 然后我必须将光标设置到TextBox控制 if companyref null var cs new Lippe
  • 如何使用 Spring Boot 加载外部配置?

    我目前正在学习如何使用 Spring Boot 到目前为止我从未使用过像Spring这样的框架 而是直接使用文件 FileInputStream等 情况如下 我有一些动态配置值 例如 OAuth 令牌 我想在我的应用程序中使用它们 但我不知
  • Android 中如何使用 MVP 模式控制 ListView

    我目前正在使用 MVP 模式开发 Android 应用程序 当我尝试开发 Activity 时 我应该使用 ListView 所以我对 ListView 使用适配器 但我听说 Adapter 与 MVP 模式上的 Presenter 类似
  • 我们可以用jquery调用智能手机原生的分享功能吗?

    我们可以使用手机 android Iphone 本机共享功能来共享应用程序中的不同内容 是否也可以在所有智能手机中使用 JavaScript 通过浏览器调用此共享功能 这样 在浏览器中的某些事件中 我们可以加载共享小部件 Thanks 是的
  • 使用 shell 删除最旧的文件

    我有一个文件夹 var backup 其中 cronjob 保存数据库 文件系统的备份 它包含一个latest gz zip和许多旧的转储 它们的名称是timestamp gz zip 该文件夹变得越来越大 我想创建一个执行以下操作的 ba
  • Imagecreatefromjpeg 调整大小后返回黑色图像

    我有一个脚本来调整上传图像的大小 但是当我使用它时 它只返回一个黑色方块 所有的错误信息都指向这个函数 function resizeImage image width height scale newImageWidth ceil wid
  • 在 C++ 中检索 std::map 的随机关键元素

    如何在 C 中获取 std map 的随机密钥 使用迭代器 我不想维护额外的数据结构 std map迭代器是双向的 这意味着选择一个随机密钥将是O n 在不使用其他数据结构的情况下 基本上你唯一的选择就是使用std advance随机增量b
  • 无法在 OS X 上安装 netCDF4 python 包

    我正在尝试在 OS X 上安装 netCDF4pip install netCDF4我收到以下错误 usr local bin pip run on Wed Aug 7 23 02 37 2013 Downloading unpacking
  • .Net Core 3 和 EF Core 3 包含问题 (JsonException)

    我正在尝试使用 NET Core 3 和 EF Core 开发应用程序 我遇到了一个错误 但找不到解决方案 我无法在 Net Core 3 上做一个可以用 PHP eloquent 简单创建的结构 Model public NDEntity
  • 输入 if AND else 语句?

    所以我得到了这段代码 更新了解决方案 Override public View getView int position View convertView ViewGroup parent final Direction d directi
  • 公式提供属性默认值的最佳方式是什么?

    Chef 有一个非常详尽 也许太多 的食谱方案来提供属性的默认值 我认为 Puppet 对类参数做了类似的事情 默认值通常进入params pp 有了盐 我就看到了 在字典 支柱查找中指定默认值 the grains filter by将默