在 CHEF 食谱中使用数据包
Using databag in CHEF recipe
为了解决这个问题,我已经苦苦挣扎了一个多星期。有没有人可以帮我解决一下。
我有一个资料袋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
上面脚本的输出是;
- log[打印记录:db.createUser( { user: 'firstuser', pwd: '123', roles: [ { role: 'read', db: 'mydb' } ] } ) ] 动作写入
- log[打印记录:db.createUser( { user: 'seconduser', pwd: '123', roles: [ { role: 'read', db: 'mydb' } ] } ) ] 动作写
- log[打印记录:db.createUser( { user: 'thirduser', pwd: '123', roles: [ { role: 'read', db: 'mydb' } ] } ) ] 动作写入
- log[打印记录:db.createUser( { user: '', pwd: '', roles: [ { role: '', db: '' } ] } ) ] action write
查看第 4 行,它包含一个空记录。循环好像也用了("id":"users")。有没有办法过滤掉这个条目?
为了证明这一点,我添加了 "id": "users", "password": "123" 这导致了 2 个额外的空记录。
所以,我需要过滤掉:("id":"users")。我怎样才能做到这一点?
可以为值的对象类型设置过滤器:-
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
是的,它确实有效。最后我设法用另一种方式修复它。
为了解决这个问题,我已经苦苦挣扎了一个多星期。有没有人可以帮我解决一下。
我有一个资料袋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
上面脚本的输出是;
- log[打印记录:db.createUser( { user: 'firstuser', pwd: '123', roles: [ { role: 'read', db: 'mydb' } ] } ) ] 动作写入
- log[打印记录:db.createUser( { user: 'seconduser', pwd: '123', roles: [ { role: 'read', db: 'mydb' } ] } ) ] 动作写
- log[打印记录:db.createUser( { user: 'thirduser', pwd: '123', roles: [ { role: 'read', db: 'mydb' } ] } ) ] 动作写入
- log[打印记录:db.createUser( { user: '', pwd: '', roles: [ { role: '', db: '' } ] } ) ] action write
查看第 4 行,它包含一个空记录。循环好像也用了("id":"users")。有没有办法过滤掉这个条目?
为了证明这一点,我添加了 "id": "users", "password": "123" 这导致了 2 个额外的空记录。
所以,我需要过滤掉:("id":"users")。我怎样才能做到这一点?
可以为值的对象类型设置过滤器:-
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
是的,它确实有效。最后我设法用另一种方式修复它。