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]"]}
以下是正在播放的版本:
- 主厨客户端版本:14.1.12
- Azure Chef 扩展版本:1210.12.110.1001
- 服务器版本:WindowsServer 2012 R2
知道会发生什么吗?
事实证明我对导致问题的资源的分析不正确。使用 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
我目前正在托管一个 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]"]}
以下是正在播放的版本:
- 主厨客户端版本:14.1.12
- Azure Chef 扩展版本:1210.12.110.1001
- 服务器版本:WindowsServer 2012 R2
知道会发生什么吗?
事实证明我对导致问题的资源的分析不正确。使用 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