Chef 节点在首次启动期间未始终在服务器上保存 运行 列表 - Azure 规模集 VM

Chef node not consistently saving run list on server during first boot - Azure Scale set VM

我目前正在托管一个 Azure 规模集 运行ning Windows Server 2012 R2,它使用 Chef 扩展 (Chef.Bootstrap.WindowsAzure.ChefClient) 进行设置。供应 VM 时,扩展通过 Azure 门户报告它已成功,但是 Chef 服务器上的注册节点未更新以保留提供的 运行 列表,并且第一个 运行 未完全完全的。这会导致后续的 chef-client 运行s 使用空 运行 列表执行。当我观察 Chef 服务器上的报告时,我看到 运行 状态为中止且没有错误。

查看 WindowsAzure Plugins chef-client.log 文件后,我发现它试图执行 运行 列表,但似乎被以下 FATAL

FATAL: Errno::EINVAL: Invalid argument @ io_writev - <STDOUT>

也没有创建 chef-stacktrace.out 文件。 ARM 扩展定义如下:

{
    "type": "extensions",
    "name": "ChefClient",
    "properties": {
        "publisher": "Chef.Bootstrap.WindowsAzure",
        "type": "ChefClient",
        "typeHandlerVersion": "1210.12",
        "autoUpgradeMinorVersion": true,
        "settings": {
            "client_rb": "ssl_verify_mode :verify_none\nnode_name ENV[\"COMPUTERNAME\"]",
            "runlist": "recipe[example]",
            "autoUpdateClient": "false",
            "deleteChefConfig": "false",

            "bootstrap_options": {
                "chef_server_url": "https://mychefserver.com/organizations/myorg",
                "validation_client_name": "myorg-validator",
                "environment": "dev"
            }
        },
        "protectedSettings": {
            "validation_key": "-----BEGIN RSA PRIVATE KEY----- ... -----END RSA PRIVATE KEY----"
        }
    }
}

为了排除故障,我尝试将我的 example 说明书缩减为安装 IIS 的单个 DSC 脚本。即使是这一步,我也以多种方式执行了它,例如使用 windows_feature、powershell_script 和 dsc_script。所有结果都以相同的错误结束。这是当前脚本

powershell_script 'Install IIS' do
  code 'Add-WindowsFeature Web-Server'
  guard_interpreter :powershell_script
  not_if "(Get-WindowsFeature -Name Web-Server).Installed"
end

如果我覆盖 运行 列表并手动调用 chef-client,一切都会成功。我无法确定这是 Azure Chef Extension、Chef 客户端还是 cookbook。

据我所知,与 Chef 服务器的通信看起来不错,因为交换了必要的 pem 文件,安装了 chef-client,并从服务器下载并缓存了 cookbook。缓存在随后的 运行 中被删除,但是 运行 列表为空。下面是first-boot.json:

的内容

{"run_list":["recipe[example]"]}

以下是正在播放的版本:

知道会发生什么吗?

事实证明我对导致问题的资源的分析不正确。使用 dsc_script 作为安装 Web 服务器的资源时,第一次启动 运行 似乎失败了。使用以下 powershell_script 资源时,它成功了,并且附加了 运行 列表供将来 运行 使用。

powershell_script 'Install IIS' do code 'Add-WindowsFeature Web-Server' guard_interpreter :powershell_script not_if "(Get-WindowsFeature -Name Web-Server).Installed" end