Chef infra 如何计划在配方运行结束时重新启动Windows计算机,而不是在chef客户端运行时重新启动?

Chef infra 如何计划在配方运行结束时重新启动Windows计算机,而不是在chef客户端运行时重新启动?,chef-infra,chef-recipe,Chef Infra,Chef Recipe,我目前正在使用,以在chef客户端运行结束时(即运行所有配方后)重新启动计算机 有没有办法在每次配方运行结束时而不是在chef客户端运行时安排机器重启 即使我尝试在windows\u reboot功能上使用timeout 0,重新启动也发生在chef客户端运行结束时。好主意与否,下面是一种方法: 让chef客户端在名为“firstrun”的环境中启动。 为您的角色向“firstrun”环境添加配方,该配方可执行以下操作: 做你的安装 将chef客户端配置更改为在生产环境中运行 重新启动windo

我目前正在使用,以在chef客户端运行结束时(即运行所有配方后)重新启动计算机

有没有办法在每次配方运行结束时而不是在chef客户端运行时安排机器重启


即使我尝试在
windows\u reboot
功能上使用timeout 0,重新启动也发生在chef客户端运行结束时。

好主意与否,下面是一种方法:

让chef客户端在名为“firstrun”的环境中启动。 为您的角色向“firstrun”环境添加配方,该配方可执行以下操作:

  • 做你的安装
  • 将chef客户端配置更改为在生产环境中运行
  • 重新启动windows

  • 然后Windows将启动并在“生产”环境中运行chef,在该环境中,您可以运行所有其他食谱。

    我将添加此作为答案,因为我自己偶然发现了这个问题

    根据重启是否挂起,您可以包括配方,如下所示:

    include_recipe 'mycookbook::second_recipe' unless reboot_pending?
    
    windows_reboot 30
        timeout 30
        reason 'scheduled reboot'
        action :nothing
    end
    
    some_task 'stuff' do
        ...
        notifies :request, 'windows_reboot[30]', :delayed
    end
    
    这个想法是建立一个食谱的依赖链,这样厨师运行结束时,第一个食谱将请求重启


    Alex Vinyar有一个用于此模式和其他模式的存储库,用于在Chef中处理重新启动。

    @Draco我想在安装应用程序之前安装一些Windows软件包。例如,我想安装.NET framework,重新启动计算机,然后安装我的应用程序。不,这可能是个坏主意。你想安排一个约会吗reboot@sethvargo是的,我正在使用
    windows\u reboot
    功能计划重新启动。但是,在执行run_列表中的所有配方之后,重新启动了。我的要求是在一个配方操作完成后停止chef客户端运行,并重新启动机器。重启后,继续剩下的菜谱。我解释说这是个坏主意,也不是个好主意。你应该考虑用不同的方式来解决这个问题。“SethValGo”有什么替代的厨师来处理这些类型的需求。