2017-10-06 15 views
0

Comment passer la sortie du script getAgentList.sh à une variable list_of_agents sous la forme d'un tableau dans Puppet? Le script inclus dans exec peut produire la sortie répertoriée ci-dessous et peut également écrire dans un fichier.marionnette - valeur d'une ressource d'un script ou d'un fichier

exec { 'get agent list': 
    path => '/usr/bin:/bin:/tmp:/usr/sbin', 
    command => 'bash /opt/getAgentList.sh' 
} 

Sortie de getAgentList.sh:

devagent1: devagent1.example.com 
devagent2: devagent2.example.com 
testagent3: testagent3.example.com 

je peux passer à une ressource en utilisant Hiera. Cependant, je voudrais obtenir ces valeurs générées pendant l'exécution et l'utiliser dans la variable pour attacher les agents.

$list_of_agents.each |String $index, String $value| { 
    agent { "${index} Agent": 
    home => "/opt/agent", 
    trans => "http://${value}:80", 
    } 
} 

Répondre

0

QU'AVEC un fait externe pour cela: https://docs.puppet.com/facter/3.9/custom_facts.html#external-facts

Malheureusement, la sortie de votre fait externe exécutable est limitée à des types de données simples comme String. Vous essayez de construire un Hash, que vous ne pouvez pas le faire parce que le stdout du script doit être au format:

key1=value1 
key2=value2 
key3=value3 

Si vous vouliez un hachage, alors vous devez utiliser un fichier pour le fait externe. Un exemple de YAML serait:

list_of_agents: 
    devagent1: devagent1.example.com 
    devagent2: devagent2.example.com 
    testagent3: testagent3.example.com 

JSON:

{ 
    "list_of_agents": { 
    "devagent1": "devagent1.example.com" 
    "devagent2": "devagent2.example.com" 
    "testagent3": "testagent3.example.com" 
    } 
} 

Ces fichiers, et votre script exécutable, serait placé dans le répertoire facts.d de votre module.

Une note de côté est votre:

$list_of_agents.each |String $index, String $value| 

et début de la question implique que vous attendez un tableau. Vous pouvez manipuler votre structure de données pour qu'elle soit un tableau si vous le souhaitez et que le code fonctionne encore correctement, mais il s'agit actuellement d'un hachage tel que vous l'avez formaté. Une autre remarque est que c'est vraiment un travail pour un classificateur de nœud ou CMDB: https://docs.puppet.com/puppet/5.3/nodes_external.html. Ceux-ci stockeraient dynamiquement et facilement les données que vous cherchez à utiliser dans cette question.