2016-09-09 1 views
1

J'essaie de gérer mon fichier hosts sur une machine Windows en utilisant Puppet et Hiera. Mon problème est que je n'ai jamais vraiment utilisé Hiera et j'ai du mal à analyser le contenu des données dans un format approprié.gérer le fichier hosts sous Windows en utilisant Puppet

La section pertinente hieradata/hiera.yaml ressemble à ceci:

myhosts : [ 
'host1 1.2.3.4', 
'host2 2.3.4.5', 
'host3 3.4.5.6'] 

J'ai le code qui utilise un module hôte, mais il dépend aussi d'une classe que je n'ai pas, si naturellement il ne fonctionne pas .

class hosts::module (
    $myhosts = hiera('myhosts'), 
) 
{ 
    define update_hosts { 

    $value = split($name,' ') 

    host { 
     "${value[0]}" : ip => "${value[1]}", 
    } 
    } 
    update_hosts { $myhosts :; } 
} 

J'ai essayé d'utiliser la ressource file au lieu de la ressource host, et aussi essayé de le faire sans classe, mais pour une raison quelconque, je reçois cette erreur

Error: Could not retrieve catalog from remote server: Error 500 on SERVER: 
Server Error: Evaluation Error: Error while evaluating a Resource Statement, 
Evaluation Error: Error while evaluating a Resource Statement, Duplicate 
declaration: File[C:\Temp\tmp.txt] is already declared in file 
/etc/puppetlabs/code/environments/production/manifests/site.pp:4; cannot redeclare 
at /etc/puppetlabs/code/environments/production/manifests/site.pp:4 
at /etc/puppetlabs/code/environments/production/manifests/site.pp:4:1 
at /etc/puppetlabs/code/environments/production/manifests/site.pp:10 on node puppet-agent 

Comme vous pouvez le voir, il prétend que j'ai une déclaration en double, mais la chose étrange est qu'il dit qu'il a un problème avec la même ligne. Il pense qu'il déclare deux fois la même chose pour une raison quelconque.

Ceci est le code que j'ai maintenant (je sais que ce ne fonctionne pas, mais l'erreur ne semble pas vraiment lié)

define hosts_update($content) { 
    file { 'C:\Temp\tmp.txt' : 
    ensure => file, 
    content => $content, 
    } 
} 

hosts_update{ hiera('myhosts'): 
content => split($name," "), 
} 

Toute idée de comment faire de ce droit?

+0

Les grandes choses qui sautent d'abord sur moi sont que vos données YAML et les deux marionnettes les extraits ont des erreurs de syntaxe. En outre, le message d'erreur concerne votre manifeste de site et n'est pas lié à ce code que vous affichez. Veuillez donc nous indiquer ce code à la place. –

+0

Ceci est le code. – Ori

+0

Vous mettez une définition à l'intérieur d'une classe dans votre 'site.pp'? –

Répondre

0

l'a corrigé.

site.pp

include update_hosts 

init.pp

class update_hosts::host 
(
    $hosts = hiera('hosts_list'), 
) 
{ 
     update_host { $hosts :; } 
} 

host.pp

define update_host { 
​ 
    $value = split($name,' ') 
​ 
    host { 
       "${value[0]}" : ip => "${value[1]}", 
       target => "C:/Windows/System32/drivers/etc/hosts" 
     } 
}