带有Test-Kitchen,Vagrant和Chef-Zero供应商的厨师保险柜

时间:2016-09-23 18:14:16

标签: ruby test-kitchen chef-zero chef-vault

我有一个使用Test-Kitchen v1.5.0,Vagrant v1.8.1的环境设置。我有一个配方,使用厨师保险库来解密我们的data_bags_path / passwords / pilot.json文件中的加密密码。

我正在使用 daxgames 提供的解决方案https://github.com/chef/chef-vault/issues/58到页面末尾。

我的 .kitchen.yml

---
driver:
  name: vagrant

provisioner:
  name: chef_zero
  require_chef_omnibus: 12.14.77
  roles_path: ../../roles
  environments_path: ../../environments
  data_bags_path: ../../data_bags
  client_rb:
    environment: lgrid2-dev
    node_name: "ltylapp400a"
    client_key: "/etc/chef/ltylapp400a.pem"

platforms:
  - name: centos-6.8
    driver:
    synced_folders:
      - ["/Users/212466756/.chef", "/etc/chef", "disabled:false"]

 suites:
   - name: ltylapp400a
     run_list:
       - role[lgrid-db]
     attributes:
       chef_client:

我的食谱中涉及chef-vault的片段:

case node["customer_conf"]["status"]
when 'pilot'
  passwords = ChefVault::Item.load('passwords', 'pilot')
when 'production'
  passwords = ChefVault::Item.load('passwords', node[:hostname][1..3])
end

我的相关data_bags的目录结构:

data_bags
  --passwords
     --pilot.json
     --pilot_keys.json

我得到的错误是我的client.pem,vagrant在/etc/chef/ltylapp400a.pem生成无法解密该数据条的内容。厨师建议我运行刀库刷新,我没有连接到我的本地机器上的厨师服务器,所以如果我运行它会发出错误,没有连接厨师服务器。我的问题是如何将我生成的新密钥添加到pilot_keys.json中,以便它能够解密该data_bag?

更详细的答案更好我对厨师,测试厨房等有点新鲜......

2 个答案:

答案 0 :(得分:0)

我能够实现这一目标,下面是我的结果和结论。正如我上面所述,我的问题是我无法删除data_bag,因为我无法将vagrant创建的新密钥添加到pilot_key.json文件中,因为我没有连接到厨师服务器并且无法运行刀库刷新/更新。我必须做的是从已经有权访问pilot.json data_bag的服务器获取client.pem密钥。我使用了我们的实用程序服务器密钥,因为它不会在不久的将来被销毁。

因此,在我的本地PC上,我的主目录下有一个 .chef / 目录,我从实用程序服务器复制了client.pem密钥,并将其与 /同步tmp / kitchen / ,作为测试厨房环境中的 / etc / chef 目录。

---
driver:
  name: vagrant

provisioner:
  name: chef_zero
  require_chef_omnibus: 12.14.77
  roles_path: ../../roles
  environments_path: ../../environments
  data_bags_path: ../../data_bags
  client_rb:
    node_name: "utilityServer"
    client_key: "/tmp/kitchen/client.pem"       #The Chef::Vault needs a client.pem file to authenticate back to the data_bag to decrypt it, this needs to be stored at /tmp/kitchen/client.pem
    environment: dev
    no_proxy: 10.0.2.2

platforms:
  - name: centos-6.8
    driver:
    synced_folders:
    - ["~/.chef","/tmp/kitchen/","disabled:false"] # Allows the vagrant box to have  access to your .chef directory in your home directory. This is where you will store the client.pem for authentication.

suites:
  - name: lzzzdbx400a
    run_list:
      - role[lgrid-db]
attributes:

data_bags / passwords / pilot_key.json 如下所示:

{
 "id": "pilot_keys",
 "admins": [
   "utilityServer"
 ],
 "clients": [
   "webserver",
   "database"
 ],
 "search_query":"*:*"
 "utilityServer":"key",
 "webserver":"key",
 "database": "key"
 }

由于utilityServer密钥已经能够解密密码/ pilot data_bag,所以在下次我运行厨房融合时,它运行正常。

答案 1 :(得分:0)

在以前与Kitchen和chef-vault的斗争中,我使用synced_folders方法来访问密钥。重新审视这个主题我找到了另一个解决方案。

  

厨房支持   为了在厨房做这个工作,只需放一个明文   您的厨房运行引用的data_bags文件夹中的数据包   (可能在test / integration / data_bags中)。然后保险库命令下降   当你使用chef_vault_item时,回到使用那个虚拟数据   检索它。

参考:http://hedge-ops.com/chef-vault-tutorial/