【发布时间】:2016-12-28 08:08:23
【问题描述】:
我的厨师保险库中有以下用户凭据
$ knife vault show testusers
user1
user2
user3
每个用户的内容如下所示:
knife vault show testusers user1
comment: user one
id: user1
password: secretp@ss
shell: /bin/bash
我正在尝试编写一个将循环通过我的 testuser 保管库并根据每个保管库项目的 ID 创建用户的配方。这样我就可以轻松地用新用户更新testuser 保险库并重新运行配方以便将来添加用户。
这是我迄今为止创建的食谱的副本,但它不起作用
chef_gem 'chef-vault' do
compile_time true if respond_to?(:compile_time)
end
require 'chef-vault'
if node['testcookbook']['testusers'] == true then
users = data_bag(node['testcookbook']['testusers'])
users.each do |id|
user = ChefVault::Item.load(node["testcookbook","testusers"], id)
testusers user['id'] do
comment user['comment']
shell user['shell']
password user['password']
end
end
有人可以告诉我我在这里做错了什么吗?从我所做的大量研究来看,一切似乎都很好。
编辑
我尝试了您的解决方案和以下错误消息。
Chef::Exceptions::InvalidDataBagName
------------------------------------
DataBags must have a name matching /^[\.\-[:alnum:]_]+$/, you gave ""
chef_gem 'chef-vault' do
compile_time true if respond_to?(:compile_time)
end
require 'chef-vault'
17>> users = data_bag(node['testcookbook']['testusers']).delete_if {|x| x.include? "_keys" }
users.each do |id|
user = ChefVault::Item.load(node["testcookbook","testusers"], id)
testcookbook testusers['id'] do
comment testusers['comment']
uid testusers['uid']
shell testusers['shell']
password testusers['password']
end
[2016-08-22T19:24:58-04:00] 致命:堆栈跟踪转储到 /var/chef/cache/chef-stacktrace.out
[2016-08-22T19:24:58-04:00] 致命:如果您提交错误报告,请提供 stacktrace.out 文件的内容
[2016-08-22T19:24:58-04:00] 错误:DataBags 必须有一个匹配 /^[.-[:alnum:]_]+$/ 的名称,你给了“”
[2016-08-22T19:24:58-04:00] 致命:Chef::Exceptions::ChildConvergeError:Chef 运行进程未成功退出(退出代码 1)`
【问题讨论】:
标签: ruby chef-infra chef-recipe cookbook