想象一下,如果你有一个像标准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 %}
但是,这似乎很可怕。除了丑陋之外,文件必须在渲染时出现,这是一个严重的麻烦。
有没有人有更好的食谱?
答案 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
注意:我假设您的需求文件没有任何注释行。