状态文件中的函数与saltstack中命令行中的函数之间的区别是什么?

tho*_*siv 2 salt-stack

当我saltstack用来管理我的服务器时.我发现了一件有趣的事情:当我跑步时salt '*' pkg.installed httpd,我得到以下信息:pkg.installed is not available.但我可以pkg.installed在我的.sls文件中使用函数,它工作得很好.所以,我对此感到困惑.而且我认为这是因为saltstack.

谁能帮我?

Uta*_*ave 6

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

  1. 盐执行模块
  2. 盐状态模块.

执行模块是大多数工作实际发生的地方,通常是您在命令行上运行的.例如:

salt '*' pkg.install vim
Run Code Online (Sandbox Code Playgroud)

这将直接调用您的操作系统的包管理器,如yum或apt,并安装vim.

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

cat /srv/salt/vim.sls

install_vim_please:
  pkg.installed:
    - name: vim
Run Code Online (Sandbox Code Playgroud)

然后,您可以运行state.sls执行模块以应用此pkg.installed状态的sls文件.

salt '*' state.sls vim
Run Code Online (Sandbox Code Playgroud)

因为我们正在使用pkg.installed状态Salt将检查您的OS的包管理器并查看是否已安装vim.如果包管理器说vim尚未安装,Salt将仅尝试安装vim.

将您的Salt状态保存在sls文件中可以很容易地将它们保存在git或用于跟踪它们的任何vcs中.

您可以跳过sls文件并从命令行有状态地运行命令,如下所示:

salt '*' state.single pkg.installed name=vim
Run Code Online (Sandbox Code Playgroud)