我有一个Web服务器,基本上接受刀ec2 create server命令的输入.
在我的刀具命令中,我传入
-j '{"branch":"clone"}'
Run Code Online (Sandbox Code Playgroud)
从文档中我认为我可以在我正在加载的食谱中执行此操作:
@@branch = node['branch']
...
git clone git@github.com/blah -b #{@@branch}
Run Code Online (Sandbox Code Playgroud)
但是,git克隆失败,因为@@branch没有返回.或至少厨师日志说开始输出结果:
git clone git@github.com/blah -b
~Git error showing options and appropriate input~
Run Code Online (Sandbox Code Playgroud)
如何加载我传递的JSON属性?什么是正确的方法?
编辑:
我手动输入了knife命令,并且JSON属性似乎使用Ruby哈希而不是JSON加载
JSON Attributes: {"branch"=>"Air"}
最后编辑:
我的命令:
sudo knife ec2 server create -x ubuntu -i ~/.ssh/key.pem -I ami-0eca6e67 -d ubuntu-12.04 -j '{ "branch" : "clone" }' -Z us-east-1a -s subnet-6827ec00 -f c1.medium -g sg-bc9d86d0 -r 'role[role]'
答案如下.
我想知道是否将在不同配方内的节点上运行特定配方.我可以使用node.recipe?(recipe_name)方法,但是我的一些收件人是由角色和配方管理的?似乎没有查看角色运行列表.
有没有一种简单的方法可以找出我的recipie [redis]是否会在当前节点上运行?
我正在尝试使用knife ssh以下方式在多个节点上运行 shell 命令:
knife ssh -V "role:web" --ssh-gateway ec2-user@aws_ssh_gateway \
--ssh-user ubuntu \
"sudo chef-client"
Run Code Online (Sandbox Code Playgroud)
当我所有角色为“web”的实例都启动时,它工作正常,但是当我只删除一个实例时,此命令会挂起此消息:
WARNING: Failed to connect to -- Net::SSH::Disconnect: connection closed by remote host
Run Code Online (Sandbox Code Playgroud)
有没有办法告诉刀跳过无法访问的节点并继续那些已启动的节点?
更新:默认情况下,Knife 应该跳过无法访问的节点,但这不会发生。可能的原因是 SSH 网关。调查。
我在运行模式下有几个节点,我必须将主机名设置为这些节点.
有没有Cookbook,因为我们可以设置属性host_name并在各自的节点上运行该配方?
我使用刀具独奏使用.chef/knife.rb定义的自定义模板创建一个新文件夹和一个带有默认配方的食谱.我的问题是我使用什么命令刀来创建使用该模板而不是使用cp的新配方?
就像是 knife cookbook addrecipe somerecipe
好的,所以这开始是因为我试图让自动缩放的节点自己注册Chef.我的client.rb文件中有以下内容:
node_name "some_prefix-#{`hostname`}"
Run Code Online (Sandbox Code Playgroud)
我们的想法是每个节点都有相同的前缀,但基于主机名的后缀.可悲的是,hostname返回一个带有a的字符串\n.厨师高兴地让我创建这个客户端,但它无法以任何方式实际访问它.
knife client show some_prefix-myHostname
knife client show "some_prefix-myHostname\n"
knife client show "some_prefix-myHostname%0A"
Run Code Online (Sandbox Code Playgroud)
这三个结果都是404
knife client list
Run Code Online (Sandbox Code Playgroud)
会显示客户端,并在其后显示空白换行符.
我修复了我的client.rb模板,但我无法摆脱我用名字中的换行创建的节点.我尝试过使用knife,webui,甚至手动使用irb中的Chef :: REST库,但是所有内容都会产生404.
有任何想法吗?
编辑:我也试过,knife client bulk delete但也失败了.在尝试发送请求之前,REST库似乎清理了url并删除了换行符.
当我尝试运行knife upload roles或knife upload /roles出现以下错误时
cd ~/my-chef-repo
knife upload roles -n -V
INFO: Using configuration from /Users/sowen/.chef/knife.rb
ERROR: Attempt to use relative path 'roles' when current directory is outside the repository path
Run Code Online (Sandbox Code Playgroud)
我的小刀.rb文件
cookbook_path "/Users/me/my-chef-repo"
Run Code Online (Sandbox Code Playgroud) 我有一个配方,将secret_key复制到我的节点.实际上文件内容已登录到我的shell中.我想为这个单一食谱关闭它,因为我不希望将文件内容保存到我的shell历史记录中.我知道可以使用client.rb中的verbose_logging设置完全停用日志记录.
verbose_logging:设置日志级别.选项:true,nil和false.当此设置为false时,将禁止有关正在处理的各个资源的通知(并在以下位置输出:info logging level).当chef-client作为守护进程运行时,将此设置为false会很有用.默认值:nil.
但是,是否可以仅为单个配方停用日志记录?
ERROR: You authenticated successfully to https:<chef_server_url> as <user> but you are not authorized for this action
Response: missing create permission
我正在为Windows AWS实例运行一个非常基本的bootstrap命令
knife bootstrap windows winrm ....
目前正在现场运行Chef服务器,此时尚未托管.使用knife尝试创建新组时,我也会得到同样的错误.我通过SSH连接到Chef服务器并在运行时验证了我的用户是否已列出
sudo chef-server-ctl list-server-admins
所以看来我已被授予服务器管理员权限.尝试通过Web UI查看和创建内容时,我也看到了相同的错误.我几乎整天都在试图解决这个问题而没有运气
knife search node '*:*' -a recipes
Run Code Online (Sandbox Code Playgroud)
给我所有的节点和他们的食谱。
knife node show NODE_ID -a recipes
Run Code Online (Sandbox Code Playgroud)
给我一个特定节点使用的食谱NODE_ID。
我需要获取这些命令获取的配方的内容。即使是在厨师服务器上查看特定食谱的命令也足够了。