2017-07-22 8 views
1

標準のPython requirements.txtのようなファイルを持っていて、Pythonパッケージのリストではなく、apt-get-able Ubuntuパッケージのファイルがあるとします。最も単純な形式ではそれだけで改行区切り文字付きパッケージ名のリストのようになります。ソルト:*ファイルにリストされている複数のパッケージをインストールする*

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

今、あなたは、実行時にファイルを見て、salt状態でこれらのパッケージをインストールしたい場合はどう?私がそれをやっていると想像できる1つの方法があります:

apt-requirements.txt_installed: 
    pkg.installed: 
    - pkgs: 
{% for line in salt['cmd.run']('cat ' + my_file).splitlines() %} 
     - {{ line.strip() }} 
{% endfor %} 

これはひどいですね。醜いことに加えて、ファイルはレンダリング時に存在しなければならず、これは深刻な迷惑である。

レシピが良い方はいますか?

+0

このファイルは、** salt-minion **または** salt-master **にありますか? – alejdg

+0

@alejdgミニョン – BrianTheLion

+0

Dockerfileと同様の要件があります。ここでは、 'awk -vORS =" "'{print $ 1}' apt-requirements.txt | xargs apt-get install -y' – hoijui

答えて

0

cp.get_file_strを使用すると、目標を達成できます。

# 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 }} 

次の例でわかるように、状態のファイルは、以下のようになります手先

# yum-requirements.txt 
mlocate 
screen 

上にあるファイルに保存された二つのパッケージをインストールしようとしています結果:

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 

注:要件ファイルにはコメントがありませんライン。

+0

あなたの解決策の主な問題は、(質問に記載されているように)ファイル '/ home/yum-requirements.txt'自体をsaltで生成できないことです。実行時に存在する必要があります。 – BrianTheLion

+0

ファイルを作成しようとしましたが、最初にminionにファイルがコピーされていることを確認するためにpkg.installedでrequireを使用しましたか? –

+0

申し訳ありません、私の前のコメントは、「それは*レンダリング時に存在しなければなりません」と言っていたはずです。あなたが提案していることを達成するための唯一の方法は、オーケストレーションランナーによるものです。これは、死んだ単純なユースケースのために非常に多くのオーバーヘッドです。 – BrianTheLion

関連する問題