Chef infra 禁用chef中平台资源的为什么运行模式

Chef infra 禁用chef中平台资源的为什么运行模式,chef-infra,Chef Infra,从链接中提取 为什么已为平台资源启用运行模式。当平台资源用作轻量级提供程序中操作块的一部分时,仅支持whyrun_?是允许chef客户端在为什么运行模式下运行所必需的。 一旦我将whyrun_supported设置为true,是否可以对特定资源禁用它(例如,将始终运行但与策略无关的资源cookbook_文件,因此,如果cookbook在why run模式下运行,则不应将其作为操作使用) 例如: cookbook_文件“setLastUpdateDate.ps1”do 路径“#{ENV['TMP

从链接中提取

为什么已为平台资源启用运行模式。当平台资源用作轻量级提供程序中操作块的一部分时,仅支持whyrun_?是允许chef客户端在为什么运行模式下运行所必需的。

一旦我将whyrun_supported设置为true,是否可以对特定资源禁用它(例如,将始终运行但与策略无关的资源cookbook_文件,因此,如果cookbook在why run模式下运行,则不应将其作为操作使用)

例如:
cookbook_文件“setLastUpdateDate.ps1”do
路径“#{ENV['TMP']}\\setLastUpdateDate.ps1”
行动:创建
结束

执行“设置签名的最后更新日期”执行
cwd“#{ENV['TMP']}”
命令“powershell.exe-executionpolicy unrestricted-command\”&#{ENV['TMP']}\\setLastUpdateDate.ps1“
操作:运行
结束

如果某个值>其他值,则
converge_by(“这是纠正措施”)做什么
执行“RunSomething to modify signature update interval”执行
cwd“#{ENV['TMP']}”
命令“一些纠正命令”
结束
结束

“为什么运行”模式下的策略应仅在最后一个执行块将运行或不运行时响应(因为它是执行纠正操作和相关操作的块)。前两个块更多地是一个先决条件步骤,以便稍后我可以确定端点是否需要纠正操作。因此,我希望是否有一种方式可以让run忽略前两个资源块

部分分辨率

为什么\u run没有检测到通过shell \u out运行的命令。 e、 g.在您的提供者中,添加

class Provider
class MseCheck < Chef::Provider
  include Chef::Mixin::ShellOut

def whyrun_supported?
    true
  end

  def action_fix

    command1 = "ipconfig ; hostname ; mkdir C:\\tempFolder "
    shell_out!("powershell -executionpolicy unrestricted -command \"#{command1}\"")
end
end
end
类提供程序
类MseCheck

即使策略通过shell\u out对系统进行了更改,为什么\u run不会更新它。

您能提供一个更好的示例吗
cookbook_file
是一个核心资源,并不是每次都运行-只有当目标文件不在那里/是最新的(取决于操作)@Roland编辑了这个问题。为什么要这样做?Chef的内置资源支持为什么运行,那么为什么默认情况下运行是正常的呢?Why run是关于模拟“如果”会发生什么,如果你试图“隐藏”将会发生的事情,你就是在滥用Why模式IMHO。@罗兰根据它的输出,我们将自动决定是否运行烹饪书。因此需要隐藏。那么我想没有办法了?(即使我的意图似乎是辱骂:)厨师的理念是将一切都集中在一起,但每次都要防止重复动作。如果您需要某种“工作流”,可以使用通知/订阅。其目标是,chef不仅要进行一次更改,还要检查每次运行的状态(一种“自我修复”方法)。