2016-07-06 4 views
0

У меня есть пользовательский ресурс (в папке моей куки-книги/ресурсов в файле dsc_class.rb). В принципе, это способ легко использовать ресурс класса DSC без его установки и использования полного механизма DSC.Chef Custom Resource Guard

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 

Работает отлично - но действие всегда «выполняет» так событие, когда охранники ресурсов и PowerShell скрипт не выполняется, я получаю «х ресурсов обновлялась» в журнале/вывода на шеф-клиента перспективе.

Как я могу надлежащим образом защитить свой ресурс?

UPDATE: рецепт содержит

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

Ваш код рецепта? Гвардии должны применяться к custom_resource как к любому другому ресурсу. – Tensibai

+0

Но для того, чтобы действительно ответить вам, вы должны реализовать 'load_current_resource' и использовать' с конверсией_f_changed', как показано [здесь] (https://docs.chef.io/custom_resources.html#converge -if-changed) и избавиться от охранника в вашем ресурсе powershell. Цитирование документации в ответ звучит непродуктивно. – Tensibai

+0

если я это сделаю, как я могу вызвать блок сценариев powershell без ресурса powershell_script? – Jeff

ответ

1

powershell_script, как и все другие execute -Style ресурсов, он всегда запускает команду/скрипт/все, и опирающийся на внешнем уровне not_if или only_if положений. В этом случае вы помещаете их в экземпляр ресурса dsc_class в свой код рецепта.

+0

Разве это не причина защиты «not_if» от этих ресурсов? не выполняя их и, следовательно, не отмечая их как обновленные, когда команда охраны возвращает true (или 0, когда это строка). Я не понимаю. – Tensibai

+0

Вы правы, но по-прежнему говорят, что x ресурсов сходятся. Любая идея почему? – Jeff

+0

Все ресурсы добавляются в коллекцию при компиляции рецепта. Охранник препятствует тому, чтобы действие было запущено, но оно все еще существует для целей общего подсчета. – coderanger