salt-stack - 从另一个盐州调用一个盐州
问题描述
这里的盐有点新。我设置了盐并设法使一切正常工作。设置完成后,我决定尝试制作小型状态文件并从另一个状态文件运行它们。主要原因是易于对小文件进行故障排除/更改与对大型状态文件进行故障排除。不幸的是,在顶级文件之外,我还没有成功地从另一个状态调用一个状态。
例如,假设我有 foo.sls 和 bar.sls,而 bar.sls 是正确安装包的状态。我尝试了以下方法。
#foo.sls
packages:
state.apply:
- source: salt://packages/bar.sls
还
#foo.sls
packages/bar.sls:
state.apply
并且
#foo.sls
state.apply:
- source: salt://packages/bar.sls
还有一些我现在不记得的。
不过,我尝试过的大多数时候,都会收到一条错误消息,指出 state.apply 不可用,这让我相信这是不可能的,或者我做错了。
这可以做到吗?如果是这样,怎么做?如果没有,也许我会为此提出功能请求,因为它似乎很有用。
解决方案
背景
听起来问题可能源于您在编写states时混合状态模块和执行模块。
简要回顾一下,“状态”是您编写的声明性文件(foo.sls
,bar.sls
),“状态模块”是您在这些状态中列出的指令(例如pkg.installed
),“执行模块”提供 salt 实际知道如何运行的命令(state.apply
,,test.ping
ETC。)。
state.apply
只是知道如何解释状态的执行模块。请注意,state.apply
文档中的完全限定名称(或者如果您浏览salt source tree)实际上是salt.modules.state.apply
,而pkg.installed
is可能会有所帮助salt.states.pkg.installed
。命名空间中的模块modules
通常不能从states
命名空间访问,反之亦然,但也有例外。当一个执行模块和一个状态模块共享一个虚拟名称时,知道完整的命名空间也是一个必要的区别,例如test
同时存在salt.modules.test
和salt.states.test
。
解决方案
如果我理解正确,您可能希望将您的状态文件包含在彼此中。
例如,假设您具有以下文件夹结构:
$ tree srv
srv
└── salt
├── foo.sls
└── packages
└── bar.sls
并且bar.sls
有以下内容
# bar.sls
packages_bar_install_fun:
pkg.installed:
- pkgs:
- cowsay
- fortune
- sl
要include
bar.sls
进入foo.sls
您只需要使用点符号来引用它,具体取决于您的文件夹结构
# foo.sls
include:
- packages.bar
foo_another_example_state:
test.show_notification:
- text: |
foo.sls can have other states inside of it,
though you may need to use `require` if you want
them interspersed between multiple includes
现在您可以只包含- foo
在您的top.sls
, 或运行中salt '<tgt>' state.apply foo test=True
,您应该会看到它package.bar
也将被应用。
salt 文档还包括一个标题为“超越单个 SLS ”的部分,其中讨论了如何使用include
和extend
将多个状态粘合在一起。
出于组织目的拆分 SLS 也是init.sls
简而言之,有些状态是相反的,允许您从 SLS 中运行执行模块。一些例子是salt.states.module.run
and salt.states.saltmod.state
,尽管它们的用途远比你想要做的更专业。
推荐阅读
- ios - 快速转换日期而不会丢失
- mysql - 如何从 DO Droplet Ubuntu 18.04 连接到 DO Managed MySQL 8?
- spring-mvc - ms 图形 api。时区没有响应变化
- php - 将动态电子邮件地址添加到发布表单
- java - java.sql.SQLException:javaFX 应用程序上的 SQLite JDBC 驱动程序未实现
- r - 为什么我不能再下载 R 3.3.2 中的某些包?
- graph - 无向图中的连通分量示例
- python-3.x - opengv 安装不在 pip3 列表中
- excel - 如何删除所有小数点,但在 Microsoft Excel 中保留值?
- variables - 在 Ansible(查找)中的 var 中使用 var - aws_ssm 插件