状态文件中的函数和 saltstack 命令行中的函数有什么区别?

what's the differences between functions in state file and functions in command line in saltstack?

当我使用 saltstack 来管理我的服务器时。我发现一个有趣的事情: 当我 运行 salt '*' pkg.installed httpd 时,我收到以下消息:pkg.installed is not available。但是我可以在我的 .sls 文件中使用 pkg.installed 函数,而且效果很好。所以,我对此感到困惑。我认为这是因为 saltstack.

谁能帮帮我?

这里有两个相关但不同的概念。

  1. Salt 执行模块
  2. 盐态模块。

执行模块是大部分工作实际发生的地方,通常也是您在命令行上 运行 的地方。例如:

salt '*' pkg.install vim

这将直接调用您的 OS 的包管理器,例如 yum 或 apt,并安装 vim。

状态模块是有状态的命令,它们位于 "above" 执行模块中。状态模块将检查所需的结果是否已经存在,并进行任何必要的更改以获得所需的状态。它们与执行模块的结合方式不同。例如在这个盐状态文件(sls 文件)中:

cat /srv/salt/vim.sls

install_vim_please:
  pkg.installed:
    - name: vim

然后你可以运行 state.sls 执行模块来应用这个具有 pkg.installed 状态的 sls 文件。

salt '*' state.sls vim

因为我们正在使用 pkg.installed 状态 Salt 将检查您的 OS 的包管理器并查看 vim 是否已经安装。如果包管理器说 vim 还没有安装,Salt 只会尝试安装 vim。

将您的 Salt States 保存在 sls 文件中可以轻松地将它们保存在 git 或您用来跟踪它们的任何 vcs 中。

您可以像这样从命令行有状态地跳过 sls 文件和 运行 命令:

salt '*' state.single pkg.installed name=vim