我目前正在托管一个运行Windows Server 2012 R2的Azure扩展集,该扩展名为chef.bootstrap.windows azure.chefclient。配置虚拟机后,扩展通过Azure门户报告它成功了,但是Chef服务器上的注册节点没有更新以保留提供的运行列表,并且第一次运行没有完全完成。这将导致随后的Chef客户端运行使用空运行列表执行。当我观察Chef服务器上的报告时,我看到一个状态为“无错误中止”的运行。
通过查看windowsazure插件chef-client.log文件,我可以看到它试图执行运行列表,但似乎被以下致命错误中断
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_功能、PowerShell_脚本和DSC_脚本。所有结果都以相同的错误结束。这是当前的脚本
powershell_script 'Install IIS' do
code 'Add-WindowsFeature Web-Server'
guard_interpreter :powershell_script
not_if "(Get-WindowsFeature -Name Web-Server).Installed"
end
如果我重写运行列表并手动调用Chef客户端,一切都会成功。我不知道这是Azure厨师分机、厨师客户还是食谱。
据我所知,在交换必要的PEM文件、安装Chef客户端以及从服务器下载和缓存食谱时,与Chef服务器的通信看起来很好。但是,在随后的运行中会删除缓存,其中包含空的运行列表。以下是first-boot.json的内容:
{"run_list":["recipe[example]"]}
以下是正在播放的版本:
-
厨师客户版本:14.1.12
-
Azure Chef扩展版本:1210.12.110.1001
-
服务器版本:Windows Server 2012 R2
你知道会发生什么吗?