2015-10-09 1 views
1

J'essaie d'utiliser Puppet pour modifier le contenu du fichier, mais si le fichier n'existe pas, je vais passer et ne rien faire. Cependant, j'ai trouvé que la vérification des dépendances fonctionnait à la première itération, mais après cela, elle ne semble pas fonctionner. Voici ma marionnette se manifeste:Marionnette - la vérification des dépendances ne fonctionne pas après la 1ère itération

class tibco::hawk_gc_tuning { 

    $domain_array = split($domain_list, '\n') 
    $hawkgc = hiera('hawk_gc_arg','xxxxxx') 

    $domain_array.each |$tibcodomain| { 

    notify { "Now in : ${tibcodomain} ": } 

    exec {"check_presence_${tibcodomain}": 
     path  => "/usr/bin:/usr/sbin:/bin", 
     command  => 'true', 
     onlyif  => "test -e /home/tibco/tra/domain/${tibcodomain}/hawkagent_${tibcodomain}.tra" 
    } 

    file_line { "change $tibcodomain hawk agent gc arg comment": 
     require  => Exec["check_presence_${tibcodomain}"], 
     path  => "/home/tibco/tra/domain/${tibcodomain}/hawkagent_${tibcodomain}.tra", 
     line  => '# tuning for hawkagent', 
     match  => '^# tuning for hawkagent', 
    }-> 
    file_line { "change $tibcodomain hawk agent gc arg": 
     path  => "/home/tibco/tra/domain/${tibcodomain}/hawkagent_${tibcodomain}.tra", 
     line  => "${hawkgc}", 
     match  => '^java.extended.properties=-XX\\\\:MaxPermSize\\\\=.*', 
    } 
    } 
} 

est inférieure à la sortie de mon code:

Avis: dans: A Avis:/Stage [principal]/Tibco :: Hawk_gc_tuning/notify [dans: A]/message: 'message' défini comme 'Maintenant dans: A' Avis:/Stage [principal]/Tibco :: Hawk_gc_tuning/Exec [check_presence_A]/retourne: exécuté avec succès Avis: Désormais: B Notes et avis :/Stage [principal]/Tibco :: Hawk_gc_tuning/Notify [Maintenant dans: B]/message: défini 'message' comme 'Maintenant dans: B' Erreur:/Stage [principal]/Tibco :: Haw k_gc_tuning/File_line [modifier B hawk agent Commentaire gc arg]: Impossible d'évaluer: Aucun fichier ou répertoire - /home/tibco/tra/domain/B/hawkagent_B.tra Avis:/Stage [principal]/Tibco :: Hawk_gc_tuning/File_line [modifier B hawk agent gc arg]: Dépendance File_line [modifier B hawk agent gc arg comment] a des échecs: vrai Attention:/Stage [principal]/Tibco :: Hawk_gc_tuning/File_line [change B hawk agent gc arg]: Ignorer en raison de dépendances échouées Remarque: Dans maintenant: C Remarque:/Stage [principal]/Tibco :: Hawk_gc_tuning/Notify [Maintenant dans: C]/message: défini 'message' comme 'Maintenant dans: C' Erreur:/Stage [principal]/Tibco :: Hawk_gc_tuning/File_line [modifier C hawk agent gc arg comment]: Impossible d'évaluer: Aucun fichier ou répertoire - /home/tibco/tra/domain/C/hawkagent_C.tra Avis:/Stage [principal]/Tibco :: Hawk_gc_tuning/File_line [changer C hawk agent gc arg]: Dépendance File_line [modifier C hawk agent gc arg comment] a des échecs: vrai Attention:/Stage [principal]/Tibco :: Hawk_gc_tuning/File_line [change C hawk agent gc arg]: saut à cause des dépendances échouées Avis: Le catalogue fini est exécuté en 1,06 secondes

Comme vous pouvez le voir ci-dessus, les deux A, B, C n'existent pas, mais seul le premier, A, donne un résultat correct et ignore les ressources file_line. Quelqu'un pourrait-il me donner quelques indices sur le problème?

Répondre

1

Votre conception est basée sur une idée fausse commune. La marionnette n'est pas un langage de script. N'essayez pas de modéliser des requêtes dans le catalogue en abusant du type de ressource exec. Le manifeste de marionnettes doit modéliser un état cible cohérent, en fonction des informations présentes pendant la compilation. Si votre état cible dépend de la présence d'un certain fichier sur le système d'agent, vous devez transmettre cette information au maître à l'aide d'un custom fact.

En particulier, votre test exec ne peut pas vous aider. Puppet essayera de le synchroniser en appelant la commande true quand le fichier est présent, oui. Cela va réussir. Si le fichier n'est pas présent, cependant, Puppet suppose que le exec n'a besoin d'aucune synchronisation. Les ressources dépendantes peuvent simplement commencer dans ce cas.