首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >主厨零通过AWS用户数据失败

主厨零通过AWS用户数据失败
EN

Stack Overflow用户
提问于 2014-06-11 12:58:44
回答 2查看 768关注 0票数 0

当通过AWS用户数据运行厨师零时,运行总是失败。但是,如果我将ssh放到机器上并手动执行相同的命令,它就会像预期的那样工作。这是我得到的输出:

代码语言:javascript
复制
Chef: 11.12.8
[2014-06-11T12:40:34+00:00] INFO: Auto-discovered chef repository at /opt/chef-zero
[2014-06-11T12:40:34+00:00] INFO: Starting chef-zero on port 8889 with repository at repository at /opt/chef-zero
  One version per cookbook

[2014-06-11T12:40:34+00:00] INFO: Forking chef instance to converge...
[2014-06-11T12:40:35+00:00] DEBUG: Fork successful. Waiting for new chef pid: 1530
[2014-06-11T12:40:35+00:00] DEBUG: Forked instance now converging
[2014-06-11T12:40:35+00:00] ERROR: undefined method `[]' for nil:NilClass
[2014-06-11T12:40:35+00:00] FATAL: Chef::Exceptions::ChildConvergeError: Chef run process exited unsuccessfully (exit code 1)

我在AWS中启动EC2实例时设置的用户数据包括以下内容:

代码语言:javascript
复制
curl -L https://www.opscode.com/chef/install.sh | bash
mkdir /opt/chef-zero
cd /opt/chef-zero
wget http://myserver/chef-repo.tar.gz
tar zxf chef-repo
INSTANCE_ID=`curl http://169.254.169.254/latest/meta-data/instance-id`
cat <<EOF > /opt/chef-zero/solo.rb
ssl_verify_mode :verify_peer
node_name "$INSTANCE_ID"
EOF
/opt/chef/bin/chef-client -v >chef-zero.log 2>&1
/opt/chef/bin/chef-client -z -l debug -c solo.rb -o 'role[someRole]' -E BUILD >> chef-zero.log 2>&1

我使用的AMI是一个自定义的,最初是使用knife + knife-ec2提供的(引导厨师11.6.0来自一个ubuntu13.04公共ami)。来自userdata (curl ... | bash)的总括安装程序正在将厨师升级到11.12.8。最初的小刀运行在运行中包括了chef-client::service,主机最初配置为与主厨客户机+厨师服务器一起使用(即/etc/client.rb中有"validation.pem“和"client.rb”--不确定这是否有区别)。

我能够登录到机器上,并在机器出现时立即执行chef-client -z -c solo.rb -o 'role[someRole]' -E BUILD (在等待检索文件和用户数据主厨-客户端失败之后),厨师运行正常。

我不知道为什么用户数据主厨-客户端运行失败的undefined method,有什么原因吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-06-12 10:49:04

经过一些进一步的调查,并感谢与#厨师家伙在freenode聊天,问题被缩小到环境。

当使用userdata执行脚本时,没有设置"HOME“变量。主厨gem中的shell.rb到处都是对ENV["HOME"]的引用。

SSH:

代码语言:javascript
复制
# unset HOME
# chef-client -z -o 'role[test]'
ERROR: undefined method `[]' for nil:NilClass
# export HOME=/root
# chef-client -z -o 'role[test]'
Starting Chef Client, version ....
...
Chef Client finished, ...

如果您需要通过用户数据执行厨师-客户端,您应该在执行主厨之前手动导出。

已在https://tickets.opscode.com/browse/CHEF-5365上报告了Bug

编辑

提交了一个拉请求,该请求后来被合并为主请求。https://github.com/opscode/chef/pull/1494

票数 1
EN

Stack Overflow用户

发布于 2014-06-11 19:25:33

这可能与厨师-0无关,但指出了菜谱代码中的问题(无论是厨师-repo.tar.gz中的任何内容,还是由rolesomeRole驱动的)。它表示有人试图访问散列的子元素,例如

代码语言:javascript
复制
node['foo']['bar']

但是当node['foo']nil时(未定义)

检查由厨师客户端运行生成的堆栈跟踪,以缩小范围。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24163585

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档