2017-07-22 3 views
1

Imaginez que vous ayez un fichier comme un Python standard requirements.txt mais au lieu de lister les paquets Python, il répertorie les paquets Ubuntu. Dans sa forme la plus simple, il serait juste une liste de noms de paquets avec sauts de ligne délimiteurs:Sel: installez plusieurs paquets qui ont été * répertoriés dans un fichier *

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

Maintenant, si vous vouliez installer ces paquets avec un état salt en regardant le fichier lors de l'exécution? Voici une façon dont je peux imaginer le faire:

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

Cela semble terrible, cependant. En plus d'être moche, le fichier doit être présent au moment du rendu, ce qui est une nuisance sérieuse.

Est-ce que quelqu'un a une meilleure recette?

+0

Ce fichier se trouvera-t-il dans le ** salt-minion ** ou dans le ** salt-master **? – alejdg

+0

@alejdg Le minion – BrianTheLion

+0

J'ai une exigence similaire pour un Dockerfile, où j'utilise 'awk -vORS =" "'{print $ 1}' apt-requirements.txt | xargs apt-get install -y – hoijui

Répondre

0

Vous pouvez atteindre votre objectif en utilisant cp.get_file_str.

Comme vous pouvez le voir dans l'exemple suivant essaie d'installer deux packages enregistrés sur un fichier situé sur le sbire

# yum-requirements.txt 
mlocate 
screen 

Le fichier d'état sera comme suit:

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

Le résultat:

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 

Note: Je suppose que votre dossier de besoins n'a aucun commentaire lignes.

+0

Le principal problème avec votre solution est que (comme indiqué dans la question) le fichier '/ home/yum-requirements.txt' ne peut pas être généré par salt; il doit être présent lors de l'exécution. – BrianTheLion

+0

Avez-vous essayé de créer le fichier et d'utiliser require dans pkg.installed pour vous assurer que votre fichier a été copié sur le minion en premier? –

+0

Désolé, mon commentaire précédent aurait dû dire "il doit être présent au * render * time." AFAICT, la seule façon d'accomplir ce que vous suggérez est avec un coureur d'orchestration, ce qui représente énormément de frais généraux pour un cas d'utilisation simple. – BrianTheLion