首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用厨师库在厨师中创建多个用户

使用厨师库在厨师中创建多个用户
EN

Stack Overflow用户
提问于 2016-08-21 19:46:41
回答 2查看 681关注 0票数 0

我的厨师金库中有以下用户凭证

代码语言:javascript
复制
$ knife vault show testusers
user1
user2
user3

每个用户的内容如下所示:

代码语言:javascript
复制
knife vault show testusers user1
comment:  user one
id:       user1
password: secretp@ss
shell:    /bin/bash

我正在尝试编写一个食谱,它将遍历我的testuser库,并根据每个保险库项目的ID创建用户。这样,我就可以方便地用新用户更新testuser库,并重新运行该菜谱,以便将来添加用户。

这是我到目前为止制作的食谱的一个副本,但是它不起作用。

代码语言:javascript
复制
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

有人能告诉我我在这里做错了什么吗?从我做过的大量研究来看,一切似乎都很好。

编辑

我尝试了您的解决方案和下面的错误消息。

代码语言:javascript
复制
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/厨师/缓存/厨师-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致命:厨师::例外:儿童汇合错误:厨师运行进程未成功退出(退出代码1)

EN

回答 2

Stack Overflow用户

发布于 2016-08-22 21:24:44

你还没有给出什么不起作用的细节。我怀疑Priya是正确的,您的问题是,您应该使用保险库API,而不是循环通过数据包。

我还注意到你还没有考虑如何删除用户.

您是否考虑过使用基于SSH的密钥身份验证,而不是使用密码?在我看来,这将是管理用户的一种更好的方法,因为它避免了与系统管理员共享密码的需要。SSH公钥设计为可与仅为用户所知的私钥共享。

我之所以提到这一点,是因为社区用户食谱的设计目的是通过存储在一个数据包中的每个用户记录来实现您想要的工作流。这里给出了一个使用它的例子:

票数 1
EN

Stack Overflow用户

发布于 2016-08-22 02:05:55

IMHO在金库上进行简单的数据库调用,也会列出可能导致失败的加密密钥。例如,

我的金库只有一个叫做“根”的东西,

代码语言:javascript
复制
$knife vault show mrigesh
root

并且,访问菜谱中的保险库将返回一个数组,其保险库及其键作为单独的元素:

代码语言:javascript
复制
users = data_bag("mrigesh")
puts users
root
root_keys

因此,迭代这个结果将尝试搜索名为"root_keys“的保险库,因为它不会导致失败。

要解决这个问题,您可以这样做:

代码语言:javascript
复制
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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39068254

复制
相关文章

相似问题

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