2016-07-06 11 views
0

Ich habe eine benutzerdefinierte Ressource (in einem meinem Kochbuch/Ressourcen-Ordner in einer Datei namens dsc_class.rb). Grundsätzlich ist dies eine Möglichkeit, eine DSC-Klassenressource einfach aufzurufen, ohne sie zu installieren und die vollständige DSC-Engine zu verwenden.Chef Custom Resource Guards

resource_name :dsc_class 

default_action :create 

property :file_name, kind_of: String, required: true, name_property: true 

action :create do 
    powershell_script file_name do 
    cwd ::File.dirname(file_name) 
    code <<-EOH 
    gc "#{file_name}" -Raw | iex 
    $o = New-Object #{file_name.split('/').last.split('.').first} 
    $o.Set() 
    EOH 
    not_if <<-EOH 
    gc "#{file_name}" -Raw | iex 
    $o = New-Object #{file_name.split('/').last.split('.').first} 
    o.Test() 
    EOH 
    end 
end 

Funktioniert prima - aber immer Aktion „führt“, so Ereignis, wenn der Ressourcenschutz und der Powershell-Skript nicht ausführen, ich „x Ressourcen aktualisiert“ im Protokoll/Ausgabe an den Lauf Koch-Client erhalten.

Wie kann ich in meiner benutzerdefinierten Ressource angemessen schützen?

UPDATE: Rezept enthält

dsc_class "/install/dsc/MyDscResource.ps1" 
+0

Wie lautet Ihr Rezeptcode? Guards sollten auf custom_resource wie jede andere Ressource angewendet werden. – Tensibai

+0

Aber um Sie wirklich zu beantworten, sollten Sie eine 'load_current_resource' implementieren und die' converge_if_changed' verwenden, wie hier [hier] (https://docs.chef.io/custom_resources.html#converge - wenn geändert - und entferne den Wächter in deiner Powershell-Ressource. Das Zitieren der Dokumentation in einer Antwort klingt unproduktiv. – Tensibai

+0

Wenn ich das tue, wie rufe ich den Powershell-Skriptblock ohne die Powershell_script-Ressource auf? – Jeff

Antwort

1

powershell_script wie alle anderen execute -Stil Ressourcen ist, läuft es immer den Befehl/script/was auch immer und auf der äußeren Ebene setzt not_if oder only_if Klauseln. In diesem Fall würden Sie diese auf die Ressourceninstanz dsc_class in Ihrem Rezeptcode setzen.

+0

Ist das nicht der Grund für den "not_if" -Wächter auf diesen Ressourcen? Sie werden nicht ausgeführt und daher nicht als aktualisiert gekennzeichnet, wenn der Befehl guard den Wert true (oder 0, wenn es sich um eine Zeichenfolge handelt) zurückgegeben wird. Ich verstehe es nicht dort. – Tensibai

+0

Sie haben Recht, aber es sagt immer noch x Ressourcen zusammenlaufen. Irgendeine Idee warum? – Jeff

+0

Beim Erstellen eines Rezepts werden alle Ressourcen zur Sammlung hinzugefügt. Der Wächter verhindert, dass die Aktion ausgeführt wird, aber sie ist immer noch für die Zwecke der Gesamtanzahl vorhanden. – coderanger