我已经建立了一个Artifactory实例,并在其上建立了一个远程Chef Supermarket,该超市从另一个Artifactory上的本地存储库复制。我对现有的管道感到满意,因为这意味着可以通过推/拉复制将工件的交付自动化地交付给客户。
在客户端,我们还有一个Chef Server,该Chef Server旨在通过根据其角色/环境设置在各种服务器上运行菜谱来编排部署。
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的文档,但是它们似乎不适合我的用例。
查看了这些各种资源(以及更多资源)后,我不确定是否可以将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超市下载结果,然后定期通过Shell脚本将所有新版本上载到Chef Server (cron工作/詹金斯)。我认为,Chef Server最好临时从超级市场请求菜谱,因为它只会在任何给定的时刻请求它的需求。
我以为这就像Artifactory / Chef Server可以/应该为我做的事,我错了吗?
AFAIK:未连接Chef Supermarket和Chef Infra Server(书架),因此没有自动食谱解析。您将需要一个将食谱从超级市场/人工工厂上载到Chef服务器的过程,或者使用Policyfiles https://docs.chef.io/policyfile.html方法。