[英]Creating multiple users in chef using Chef Vault
我的廚師庫中有以下用戶憑據
$ 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]致命:Stacktrace轉儲至/var/chef/cache/chef-stacktrace.out
[2016-08-22T19:24:58-04:00]致命:如果您提交錯誤報告,請提供stacktrace.out文件的內容
[2016-08-22T19:24:58-04:00]錯誤:DataBag的名稱必須與/^[.-[:alnum:]_]+$/匹配,您輸入了“”
[2016-08-22T19:24:58-04:00]致命:Chef :: Exceptions :: ChildConvergeError:Chef運行進程未成功退出(退出代碼1)`
您尚未提供無法正常工作的詳細信息。 我懷疑Priya是正確的,您的問題是您應該使用Vault API進行讀取,而不是通過數據包進行循環。
我還注意到您還沒有考慮過如何刪除用戶...
您是否考慮過使用基於SSH的密鑰身份驗證,而不是使用密碼? 我認為這將是一種更好的管理用戶的方式,因為它避免了與系統管理員共享密碼的需要。 SSH公共密鑰被設計為可以與僅用戶知道的私有密鑰共享。
我之所以這樣說是因為社區用戶食譜旨在通過將每個用戶記錄存儲在數據袋中來實現您所需的工作流程。 此處提供了其用法示例:
恕我直言,在Vault上執行簡單的databag調用也會列出加密密鑰,這可能會導致失敗。 例如,
我的保管庫只有一個名為“ root”的項目,
$knife vault show mrigesh
root
並且,在配方中訪問Vault將返回一個數組,其中Vault及其鍵作為單獨的元素:
users = data_bag("mrigesh")
puts users
root
root_keys
因此,對該結果進行迭代將嘗試搜索名為“ root_keys”的文件庫,該文件庫不會導致失敗。
要解決此問題,您可以執行以下操作:
node.default['testcookbook']['testusers'] = "testusers"
users = data_bag(node['testcookbook']['testusers']).delete_if {|x| x.include? "_keys" }
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.