Artifactory 托管 Chef Supermarket + Chef Server 集成
Artifactory hosted Chef Supermarket + Chef Server integration
我已经设置了一个 Artifactory 实例并在其上设置了一个远程 Chef Supermarket,它从另一个 Artifactory 上的本地存储库进行复制。我对现有的管道感到满意,因为这意味着通过 push/pull 复制将工件自动交付给客户。
在客户端,我们还有一个 Chef 服务器,旨在通过 运行 根据其 roles/environment 设置在各种服务器上配置说明书来协调部署。
ORG: Artifactory (Local Chef Repo)
-----------------------------------
|
<web>
|
-----------------------------------
CUST: Artifactory (Remote Chef Repo)
Chef Server
我创建了一个空目录。chef/knife.rb,获得了厨师服务器之间的信任并配置了我的超市。
knife[:supermarket_site] = 'http://<user>:<api_key>@customer-artifactory:8081/artifactory/api/chef/org-chef'
当我 运行 knife supermarket list
时,我从人工制品中托管的 Chef Supermarket 获得了所有食谱的列表。但是,我面临的问题是,当我将 Chef Server 加入其中时,它无法解析食谱。
user@workstation:~/chef-ops$ knife ssh 'name:vm01' sudo chef-client -x <user> -P <password>
vm01 knife sudo password:
vm01
vm01 Starting Chef Infra Client, version 15.3.14
vm01 resolving cookbooks for run list: ["repository"]
vm01
vm01 ================================================================================
vm01 Error Resolving Cookbooks for Run List:
vm01 ================================================================================
vm01
vm01 Missing Cookbooks:
vm01 ------------------
vm01 The following cookbooks are required by the client but don't exist on the server:
vm01 * repository
vm01
vm01
vm01 Expanded Run List:
vm01 ------------------
vm01 * repository
vm01
vm01 System Info:
vm01 ------------
vm01 chef_version=15.3.14
vm01 platform=ubuntu
vm01 platform_version=18.04
vm01 ruby=ruby 2.6.4p104 (2019-08-28 revision 67798) [x86_64-linux]
vm01 program_name=/usr/bin/chef-client
vm01 executable=/opt/chef/bin/chef-client
vm01
vm01
vm01 Running handlers:
vm01 [2019-10-11T10:28:05+00:00] ERROR: Running exception handlers
vm01 Running handlers complete
vm01 [2019-10-11T10:28:05+00:00] ERROR: Exception handlers complete
vm01 Chef Infra Client failed. 0 resources updated in 04 seconds
vm01 [2019-10-11T10:28:05+00:00] FATAL: Stacktrace dumped to /var/chef/cache/chef-stacktrace.out
vm01 [2019-10-11T10:28:05+00:00] FATAL: Please provide the contents of the stacktrace.out file if you file a bug report
vm01 [2019-10-11T10:28:05+00:00] FATAL: Net::HTTPServerException: 412 "Precondition Failed"
我意识到这可能是因为 knife.rb 中的设置未传播到 Chef Server,因此我需要配置 Chef Server 以查看 Artifactory。
我查看了以下有关使用私人 Chef Supermarkets 的文档,但它们似乎不适合我的用例。
- https://docs.chef.io/config_rb_server_optional_settings.html#oc-id
- https://www.jfrog.com/confluence/display/RTF/Chef+Cookbook+Repositories
- https://www.jfrog.com/confluence/display/RTF/OAuth+Integration
- https://dzone.com/articles/a-supermarket-of-your-own-running-a-private-superm
- https://blog.chef.io/a-supermarket-of-your-own-running-a-private-supermarket/
查看了这些各种资源(以及更多)后,我不确定是否可以设置 Artifactory 和 Chef Server 来实现自动食谱解析。似乎没有关于此的任何文档。例如,Chef Server 回调 URL 在 Artifactory 下是什么?
oc_id['applications'] = {
'supermarket' => {
'redirect_uri' => 'http://customer-artifactory:8081/artifactory/api/oauth2/???'
}
}
我是否认为 Chef Server 无法直接从 Artifactory 解析食谱,我们需要创建某种管道来将 Chef Server 与 Artifactory chef 存储库同步?
我能看到的唯一选择是创建一个定期执行 knife supermarket list
的过程,然后遍历结果,从 Artifactory Supermarket 下载它们,然后通过 shell 定期执行脚本 (cron job/jenkins)。我认为 Chef Server 最好从超市临时请求食谱,因为它只会在任何给定时刻请求它需要的东西。
我是否认为这感觉像是 Artifactory/Chef 服务器 could/should 为我做的事情?
AFAIK:Chef Supermarket 和 Chef Infra Server(Bookshelf)未连接,因此没有自动食谱解析。您需要一个将食谱从 supermarket/Artifactory 上传到 Chef 服务器的过程,或者使用策略文件 https://docs.chef.io/policyfile.html 方法。
让我试着澄清一下:
- chef supermarket 是一个食谱存储库,其中托管开源食谱。不过,你可以运行私人超市存放你的私人食谱
- cookbook 的
metadata.rb
定义了 cookbook 依赖项,使用 depends
instruction
- 您可以使用 berkshelf 来管理食谱依赖项
- chef 服务器还充当其客户端(节点)的食谱存储库,这意味着节点只能从该节点所属的厨师服务器中提取食谱(see
client.rb
)
因为您正在使用
在实践中,您将:
我已经设置了一个 Artifactory 实例并在其上设置了一个远程 Chef Supermarket,它从另一个 Artifactory 上的本地存储库进行复制。我对现有的管道感到满意,因为这意味着通过 push/pull 复制将工件自动交付给客户。
在客户端,我们还有一个 Chef 服务器,旨在通过 运行 根据其 roles/environment 设置在各种服务器上配置说明书来协调部署。
ORG: Artifactory (Local Chef Repo)
-----------------------------------
|
<web>
|
-----------------------------------
CUST: Artifactory (Remote Chef Repo)
Chef Server
我创建了一个空目录。chef/knife.rb,获得了厨师服务器之间的信任并配置了我的超市。
knife[:supermarket_site] = 'http://<user>:<api_key>@customer-artifactory:8081/artifactory/api/chef/org-chef'
当我 运行 knife supermarket list
时,我从人工制品中托管的 Chef Supermarket 获得了所有食谱的列表。但是,我面临的问题是,当我将 Chef Server 加入其中时,它无法解析食谱。
user@workstation:~/chef-ops$ knife ssh 'name:vm01' sudo chef-client -x <user> -P <password>
vm01 knife sudo password:
vm01
vm01 Starting Chef Infra Client, version 15.3.14
vm01 resolving cookbooks for run list: ["repository"]
vm01
vm01 ================================================================================
vm01 Error Resolving Cookbooks for Run List:
vm01 ================================================================================
vm01
vm01 Missing Cookbooks:
vm01 ------------------
vm01 The following cookbooks are required by the client but don't exist on the server:
vm01 * repository
vm01
vm01
vm01 Expanded Run List:
vm01 ------------------
vm01 * repository
vm01
vm01 System Info:
vm01 ------------
vm01 chef_version=15.3.14
vm01 platform=ubuntu
vm01 platform_version=18.04
vm01 ruby=ruby 2.6.4p104 (2019-08-28 revision 67798) [x86_64-linux]
vm01 program_name=/usr/bin/chef-client
vm01 executable=/opt/chef/bin/chef-client
vm01
vm01
vm01 Running handlers:
vm01 [2019-10-11T10:28:05+00:00] ERROR: Running exception handlers
vm01 Running handlers complete
vm01 [2019-10-11T10:28:05+00:00] ERROR: Exception handlers complete
vm01 Chef Infra Client failed. 0 resources updated in 04 seconds
vm01 [2019-10-11T10:28:05+00:00] FATAL: Stacktrace dumped to /var/chef/cache/chef-stacktrace.out
vm01 [2019-10-11T10:28:05+00:00] FATAL: Please provide the contents of the stacktrace.out file if you file a bug report
vm01 [2019-10-11T10:28:05+00:00] FATAL: Net::HTTPServerException: 412 "Precondition Failed"
我意识到这可能是因为 knife.rb 中的设置未传播到 Chef Server,因此我需要配置 Chef Server 以查看 Artifactory。
我查看了以下有关使用私人 Chef Supermarkets 的文档,但它们似乎不适合我的用例。
- https://docs.chef.io/config_rb_server_optional_settings.html#oc-id
- https://www.jfrog.com/confluence/display/RTF/Chef+Cookbook+Repositories
- https://www.jfrog.com/confluence/display/RTF/OAuth+Integration
- https://dzone.com/articles/a-supermarket-of-your-own-running-a-private-superm
- https://blog.chef.io/a-supermarket-of-your-own-running-a-private-supermarket/
查看了这些各种资源(以及更多)后,我不确定是否可以设置 Artifactory 和 Chef Server 来实现自动食谱解析。似乎没有关于此的任何文档。例如,Chef Server 回调 URL 在 Artifactory 下是什么?
oc_id['applications'] = {
'supermarket' => {
'redirect_uri' => 'http://customer-artifactory:8081/artifactory/api/oauth2/???'
}
}
我是否认为 Chef Server 无法直接从 Artifactory 解析食谱,我们需要创建某种管道来将 Chef Server 与 Artifactory chef 存储库同步?
我能看到的唯一选择是创建一个定期执行 knife supermarket list
的过程,然后遍历结果,从 Artifactory Supermarket 下载它们,然后通过 shell 定期执行脚本 (cron job/jenkins)。我认为 Chef Server 最好从超市临时请求食谱,因为它只会在任何给定时刻请求它需要的东西。
我是否认为这感觉像是 Artifactory/Chef 服务器 could/should 为我做的事情?
AFAIK:Chef Supermarket 和 Chef Infra Server(Bookshelf)未连接,因此没有自动食谱解析。您需要一个将食谱从 supermarket/Artifactory 上传到 Chef 服务器的过程,或者使用策略文件 https://docs.chef.io/policyfile.html 方法。
让我试着澄清一下:
- chef supermarket 是一个食谱存储库,其中托管开源食谱。不过,你可以运行私人超市存放你的私人食谱
- cookbook 的
metadata.rb
定义了 cookbook 依赖项,使用depends
instruction - 您可以使用 berkshelf 来管理食谱依赖项
- chef 服务器还充当其客户端(节点)的食谱存储库,这意味着节点只能从该节点所属的厨师服务器中提取食谱(see
client.rb
)
因为您正在使用
在实践中,您将: