Salt:安装多个已在文件中列出的包*

时间:2017-07-22 02:48:19

标签: salt-stack apt-get

想象一下,如果你有一个像标准Python requirements.txt这样的文件,但它没有列出Python包,而是列出了apt-get能够使用的Ubuntu软件包。在最简单的形式中,它只是一个带有换行符分隔符的包名称列表:

# apt-requirements.txt
git
python3.5
python3.5-dev
libssl-dev

现在,如果您想通过在运行时查看文件来安装具有salt状态的这些包,该怎么办?这是我能想象到的一种方式:

apt-requirements.txt_installed:
  pkg.installed:
    - pkgs:
{% for line in salt['cmd.run']('cat ' + my_file).splitlines() %}
      - {{ line.strip() }}
{% endfor %}
但是,这似乎很可怕。除了丑陋之外,文件必须在渲染时出现,这是一个严重的麻烦。

有没有人有更好的食谱?

1 个答案:

答案 0 :(得分:0)

您可以使用cp.get_file_str来实现目标。

正如您在下面的示例中所看到的,我尝试安装两个保存在位于minion上的文件的包

# yum-requirements.txt
mlocate
screen

状态文件如下:

# packages.sls
{% set packages_to_be_installed = salt.cp.get_file_str('/home/yum-requirements.txt').splitlines() %}

install_packages:
  pkg.latest:
    - pkgs: {{ packages_to_be_installed }}

结果:

minion01:
----------
          ID: install_packages
    Function: pkg.latest
      Result: True
     Comment: All packages are up-to-date (mlocate, screen).
     Started: 02:09:27.490644
    Duration: 4036.966 ms
     Changes:   

Summary for minion01
------------
Succeeded: 1
Failed:    0
------------
Total states run:     1
Total run time:   4.037 s

注意:我假设您的需求文件没有任何注释行。