在CHEF配方

时间:2016-09-07 11:30:28

标签: ruby chef recipe databags

我一直在努力解决这个问题一个多星期。是否有人可以帮我解决这个问题。

我有一个数据库mongo,数据库的内容是:

{ "firstuser": {
"id": "firstuser",
"password": "123",
"db": "mydb",
"role": "readWrite"
},
"seconduser": {
"id": "seconduser",
"password": "123",
"db": "mydb",
"role": "readWrite"
},
"thirduser": {
"id": "thirduser",
"password": "123",
"db": "mydb",
"role": "read"
},
"id": "users"
}

我想遍历数据库,以便在MongoDB中创建用户。这就是我想出的(以及更多没有结果的尝试)

users_databag_item = data_bag_item('mongodb', 'users')
users_databag_item.each_pair do | user, values |
log "db.createUser( { user: '#{values['id']}', pwd: '#{values['password']}', roles: [ { role: '#{values['role']}', db: '#{values['db']}' } ] } )"
end

上面脚本的输出是;

  1. log [打印记录:db.createUser({user:' firstuser',pwd:' 123',role:[{role:' read' ,db:' mydb'}]})]动作写
  2. log [打印记录:db.createUser({user:' seconduser',pwd:' 123',角色:[{role:' read' ,db:' mydb'}]})]动作写
  3. log [打印记录:db.createUser({user:' thirduser',pwd:' 123',role:[{role:' read' ,db:' mydb'}]})]动作写
  4. log [打印记录:db.createUser({user:'',pwd:'',角色:[{role:'' ,db:''}]})]动作写
  5. 看看第4行,它包含一个空记录。似乎循环也使用(" id":"用户")。有没有办法过滤掉这个条目?

    为了证明这一点,我添加了" id":"用户","密码":" 123"这导致了2个额外的空记录。

    所以,我需要过滤掉:(" id":"用户")。我怎样才能做到这一点?

2 个答案:

答案 0 :(得分:0)

可以为值的对象类型添加过滤器: -

users_databag_item = data_bag_item('mongodb', 'users')
users_databag_item.values.each do | values |
    log "db.createUser( { user: '#{values['id']}', pwd: '#{values['password']}', roles: [ { role: '#{values['role']}', db: '#{values['db']}' } ] } )" if !values.is_a? (String)
end

users_databag_item = data_bag_item('mongodb', 'users')
users_databag_item.each_pair do | id, values |
    log "db.createUser( { user: '#{values['id']}', pwd: '#{values['password']}', roles: [ { role: '#{values['role']}', db: '#{values['db']}' } ] } )" if !id.eql? "id"
end

答案 1 :(得分:0)

是的确有效。最后,我设法以另一种方式修复它。