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"
Wie lautet Ihr Rezeptcode? Guards sollten auf custom_resource wie jede andere Ressource angewendet werden. – Tensibai
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
Wenn ich das tue, wie rufe ich den Powershell-Skriptblock ohne die Powershell_script-Ressource auf? – Jeff