是否可以选择性地将食谱与 knife bootstrap 同步?

Is it possible to selectively sync cookbooks with knife bootstrap?

我正在尝试启动服务器并通过 knife bootstrap 通过此命令 运行ning:

knife bootstrap "<ip-address>" 
-x ec2-user 
-r recipe[connector],recipe[all-servers] 
-N "serv-name" 
-E staging 
-i "~/.chef/mycert.pem" 
--sudo 
--no-host-key-verify

全服务器配方包括 windows 的依赖项,这些依赖项在 chef 13+ 中被破坏:

(TLDRS,完整堆栈跟踪在底部)

13: undefined method “kernel” (outdated 7-zip cookbook dependency 3.0 instead of 2.0)

14: cannot load such file -- chef/mixin/language (windows cookbook dependency, 3.0 + for windows cookbook would fix this)

15: manual license acceptance required and cannot load such file -- chef/mixin/language error (windows cookbook dependency, 3.0 + for windows cookbook would fix this)

最大的问题是一堆维护不足的服务使用旧版本,升级其中任何一个都可能导致整个 Chef 组织出现大量问题,所以我只想让这个服务器使用更新版本windows 或 7-zip 食谱。

我试图解决这个问题的方法是创建一个新的说明书 "all-servers-dev" 并在依赖树中创建所有说明书的开发版本一直到 "windows" 我下载更新了 windows 食谱并将其替换在依赖树的底部。然而,这没有用,因为厨师一直试图同步所有食谱,甚至是 windows 一本,即使它没有包含在我能找到的依赖树中的任何地方。

我什至尝试删除所有服务器配方,只安装连接器配方,其唯一依赖项是 yum-epel,其唯一依赖项是 "compat_resource",它没有任何依赖项。

13.12.14

================================================================================
Recipe Compile Error in /var/chef/cache/cookbooks/seven_zip/attributes/default.rb
================================================================================

NoMethodError
-------------
undefined method `kernel' for #<Chef::Node::Attribute:xxxxxxxxxxxxxxxxx>

Cookbook Trace:
---------------
  /var/chef/cache/cookbooks/seven_zip/attributes/default.rb:21:in `from_file'

Relevant File Content:
----------------------
/var/chef/cache/cookbooks/seven_zip/attributes/default.rb:

 14:  # Unless required by applicable law or agreed to in writing, software
 15:  # distributed under the License is distributed on an "AS IS" BASIS,
 16:  # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 17:  # See the License for the specific language governing permissions and
 18:  # limitations under the License.
 19:  #
 20:  
 21>> if kernel['machine'] =~ /x86_64/
 22:    default['seven_zip']['url']          = 'http://www.7-zip.org/a/7z1514-x64.msi'
 23:    default['seven_zip']['checksum']     = 'xxxxxxxxxx'
 24:    default['seven_zip']['package_name'] = '7-Zip 15.14 (x64 edition)'
 25:  else
 26:    default['seven_zip']['url']          = 'http://www.7-zip.org/a/7z1514.msi'
 27:    default['seven_zip']['checksum']     = 'xxxxxxxxxx'
 28:    default['seven_zip']['package_name'] = '7-Zip 15.14'
 29:  end
 30:  

System Info:
------------
chef_version=13.12.14
platform=amazon
platform_version=2017.03
ruby=ruby 2.4.5p335 (2018-10-18 revision 65137) [x86_64-linux]
program_name=chef-client worker: ppid=3493;start=17:29:14;
executable=/opt/chef/bin/chef-client


Running handlers:
[2019-12-04T17:29:32+00:00] ERROR: Running exception handlers
Running handlers complete
[2019-12-04T17:29:32+00:00] ERROR: Exception handlers complete
Chef Client failed. 0 resources updated in 17 seconds
[2019-12-04T17:29:32+00:00] FATAL: Stacktrace dumped to /var/chef/cache/chef-stacktrace.out
[2019-12-04T17:29:32+00:00] FATAL: Please provide the contents of the stacktrace.out file if you file a bug report
[2019-12-04T17:29:32+00:00] ERROR: undefined method `kernel' for #<Chef::Node::Attribute:xxxxxxxxxx>
[2019-12-04T17:29:32+00:00] FATAL: Chef::Exceptions::ChildConvergeError: Chef run process exited unsuccessfully (exit code 1)

14.14.29

================================================================================
Recipe Compile Error in /var/chef/cache/cookbooks/windows/libraries/windows_package.rb
================================================================================

LoadError
---------
cannot load such file -- chef/mixin/language

Cookbook Trace:
---------------
  /var/chef/cache/cookbooks/windows/libraries/windows_package.rb:7:in `<top (required)>'

Relevant File Content:
----------------------
/var/chef/cache/cookbooks/windows/libraries/windows_package.rb:

  1:  require 'chef/resource/lwrp_base'
  2:  require 'chef/provider/lwrp_base'
  3:  
  4:  require 'win32/registry' if RUBY_PLATFORM =~ /mswin|mingw32|windows/
  5:  
  6:  require 'chef/mixin/shell_out'
  7>> require 'chef/mixin/language'
  8:  class Chef
  9:    class Provider
 10:      class WindowsCookbookPackage < Chef::Provider::LWRPBase
 11:        include Chef::Mixin::ShellOut
 12:        include Windows::Helper
 13:  
 14:        # the logic in all action methods mirror that of
 15:        # the Chef::Provider::Package which will make
 16:        # refactoring into core chef easy

System Info:
------------
chef_version=14.14.29
platform=amazon
platform_version=2017.03
ruby=ruby 2.5.7p206 (2019-10-01 revision 67816) [x86_64-linux]
program_name=/usr/bin/chef-client
executable=/opt/chef/bin/chef-client


Running handlers:
[2019-12-04T18:06:28+00:00] ERROR: Running exception handlers
Running handlers complete
[2019-12-04T18:06:28+00:00] ERROR: Exception handlers complete
Chef Client failed. 0 resources updated in 35 seconds
[2019-12-04T18:06:28+00:00] FATAL: Stacktrace dumped to /var/chef/cache/chef-stacktrace.out
[2019-12-04T18:06:28+00:00] FATAL: Please provide the contents of the stacktrace.out file if you file a bug report
[2019-12-04T18:06:28+00:00] FATAL: LoadError: cannot load such file -- chef/mixin/language

15.5.17 Chef 有一个未被 knife 处理的新提示 bootstrap:

Do you accept the 2 product licenses (yes/no)?

您不能从 bootstrap CLI 接受这些,因此您必须手动 ssh 到服务器和 运行 chef,这会导致与 14 相同的错误:

================================================================================
Recipe Compile Error in /var/chef/cache/cookbooks/windows/libraries/windows_package.rb
================================================================================

LoadError
---------
cannot load such file -- chef/mixin/language

Cookbook Trace:
---------------
  /var/chef/cache/cookbooks/windows/libraries/windows_package.rb:7:in `<top (required)>'

Relevant File Content:
----------------------
/var/chef/cache/cookbooks/windows/libraries/windows_package.rb:

  1:  require 'chef/resource/lwrp_base'
  2:  require 'chef/provider/lwrp_base'
  3:  
  4:  require 'win32/registry' if RUBY_PLATFORM =~ /mswin|mingw32|windows/
  5:  
  6:  require 'chef/mixin/shell_out'
  7>> require 'chef/mixin/language'
  8:  class Chef
  9:    class Provider
 10:      class WindowsCookbookPackage < Chef::Provider::LWRPBase
 11:        include Chef::Mixin::ShellOut
 12:        include Windows::Helper
 13:  
 14:        # the logic in all action methods mirror that of
 15:        # the Chef::Provider::Package which will make
 16:        # refactoring into core chef easy

System Info:
------------
chef_version=15.5.17
platform=amazon
platform_version=2017.03
ruby=ruby 2.6.5p114 (2019-10-01 revision 67812) [x86_64-linux]
program_name=/usr/bin/chef-client
executable=/opt/chef/bin/chef-client


Running handlers:
[2019-12-04T18:14:03+00:00] ERROR: Running exception handlers
Running handlers complete
[2019-12-04T18:14:03+00:00] ERROR: Exception handlers complete
Chef Infra Client failed. 0 resources updated in 18 seconds
[2019-12-04T18:14:03+00:00] FATAL: Stacktrace dumped to /var/chef/cache/chef-stacktrace.out
[2019-12-04T18:14:03+00:00] FATAL: Please provide the contents of the stacktrace.out file if you file a bug report
[2019-12-04T18:14:03+00:00] FATAL: LoadError: cannot load such file -- chef/mixin/language

15.5.17 Chef has a new prompt that’s unhandled by knife bootstrap:

Do you accept the 2 product licenses (yes/no)?

You can’t accept these from the bootstrap CLI, so you have to ssh to the server and run chef manually

这是不正确的,您可以在bootstrap节点接受厨师许可时使用--chef-license accept


如果我理解你的权利,你希望固定同一食谱集的不同版本。如果是这种情况,您可以使用 environment:

来实现

Cookbook versions can be pinned in each environment, which allows you to control the rollout of new cookbook releases through successive testing environments before releasing new cookbook versions into production environments. See the environment format examples below for the cookbook pinning syntax.

所以请记住将您的节点与特定的厨师环境相关联,这样每个环境都有自己的食谱集。