2014-09-04 57 views
0

我有一個基於Vagrant和EC2上的分期/生產的開發環境。 供應由廚師完成。 我正在考慮爲不同環境組織我的憑證的最佳方式。處理不同食譜和環境的憑證

例如,我有一本食譜數據庫應用程序。 我已經獲得了屬性,我可以輕鬆地將其放入我的環境* .json文件中,因爲它們適用於所有食譜。例如,git_server。 但後來我得到了redis_host這些不同於食譜的食譜。 我的示例應用程序應該使用app.redis.intern和數據庫的機器應該使用db.redis.intern

我能知道創建像redis_host_appredis_host_db屬性,讓他們依然在環境或我可以將它們設置在特定食譜中的屬性文件中。但之後我必須檢查哪個環境當前處於活動狀態,以決定放置哪些值。因此,每個屬性文件都會有一個switch/if塊。

我也可以去每個環境中的數據包,但是這也將結束在命名的包包像redis_host_app

這是對付這種推薦的方式?

回答

1

證書需要保護,所以我會反對使用節點屬性。相反,我會提供兩個選擇之一:

  1. Encrypted data bag
  2. Chef vault

您可以使用該節點的環境,以確定查找其databag:

bag_item[node.chef_environment]["some_other_key"] 
+1

如果你用的廚師-vault,查看http://techblog.shinymayhem.com/2014/09/bootstrapping-and-secrets-management.html查看在pr期間能夠使用chef-vault項目的一種方法ovisioning – rwilson04 2014-09-12 16:30:26

0

我覺得還有的人可能會收到儘可能多的答案,但這裏是我的:有型動物

1 ENV菜譜屬性的文件

  • common.rb的屬性,它是所有environements常見(可以說默認SMTP服務器)
  • envA.rb與頂部像return if node.chef_environment != 'envA'
  • envB.rb與後衛太
  • 保護

envA和envB a redis_host_appredis_host_db屬性。

像這樣,你可以在每個env中鎖定這本食譜的正確版本(並且很容易回滾)。

的缺點是,你必須設置在每個節點運行列表頂部這個食譜(但它可以在系統啓動時完成),或者讓你的食譜取決於它

在你的應用程序的食譜屬性default['my_app']['redis_host'] = node['redis_host_app']

和DB食譜和屬性default['my_db']['redis_host'] = 'node['redis_host_db']

這樣,你可能比你的應用程序的食譜包裝食譜至極覆蓋redis_host屬性,而不必重寫的ENV屬性。