动机:节点将尝试从数据包中获取密钥,如果密钥不存在,则会生成一个密钥。当您扩展群集并且必须为其共享密码时,这很方便。
请注意,不会并行创建任何节点,因此将避免竞争条件。
厨师文档中有一部分与食谱中的create and edit数据包项目相关,但没有任何内容与创建新的加密数据包项目相关。
任何人都可以说明如何做到这一点吗?
答案 0 :(得分:1)
预先为随后的女性道歉。你能解释一下你想做什么吗?也许有更好的方法来实现它。加密数据包远非完整的安全解决方案。他们的弱点在于缺乏关键管理。
所以答案是Ruby源代码完全由它的宝石记录。加密数据包项目如下所述:
可是......
来自您提供的documentation link:
创建和编辑数据包或数据包项目的内容 从食谱不推荐。推荐的更新方法 数据包或数据包项目是使用刀和刀数据包 子命令。
如果必须从食谱中执行此操作,请注意 以下内容:
- 如果两个操作同时尝试更新数据包的内容,则最后写入的尝试将是更新数据包的操作 数据包的内容。这种情况可能会导致数据丢失 组织应采取措施确保只有一名厨师 - 客户 一次更新数据包。
- 使用开源Chef服务器时,从节点更改数据包需要为节点的API客户端授予管理员权限。 在大多数情况下,这是不可取的。
Chef服务器的更新不是事务性的,因此从厨师客户端更新某些东西是一个非常糟糕的主意,其中可能有多个节点执行相同的操作。
第二个警告是关于特权......再次建议您以最少的超能力操作厨师客户。为厨师管理员或在Chef工作站上运行的脚本保留这些。
答案 1 :(得分:0)
试试这个:
secret = Chef::EncryptedDataBagItem.load_secret(Chef::Config[:encrypted_data_bag_secret])
data = { "id" => "mysecret", "secret" => "stuff" }
encrypted_data_hash = Chef::EncryptedDataBagItem.encrypt_data_bag_item(data, secret)
databag_item = Chef::DataBagItem.new
databag_item.data_bag("secrets")
databag_item.raw_data = encrypted_data_hash
databag_item.save