可以选择性地将菜谱与刀具引导程序同步吗?

时间:2019-12-09 23:13:02

标签: amazon-web-services amazon-ec2 chef knife cookbook

我正在尝试通过以下命令通过小刀引导程序来启动并运行服务器:

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

所有服务器的配方均包含厨师13+中损坏的Windows的依赖关系:

(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)

最大的问题是,一堆维护不足的服务使用的是较旧的版本,升级其中的任何一个很可能会在整个厨师组织中引起许多问题,因此我想让该服务器使用其中任一版本的较新版本Windows或7拉链食谱。

我试图解决的方法是创建一个新的食谱“ all-servers-dev”,并在依赖关系树中创建所有食谱的开发版本,一直到“ 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出现了一个新的提示,该提示无法通过刀具引导程序处理:

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

您无法从引导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

1 个答案:

答案 0 :(得分:0)

  

15.5.17 Chef出现了一个新提示,该提示没有通过刀具引导程序处理:

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

您不能从引导CLI接受这些内容,因此必须通过SSH来   服务器并手动运行Chef

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


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

  

可以在每个环境中固定菜谱版本,这使您可以在将新菜谱版本发布到生产环境之前,通过连续的测试环境来控制新菜谱版本的发布。请参阅下面的环境格式示例,了解烹饪手册固定语法。

因此只需记住将节点与特定的Chef环境相关联,这样每个环境都有自己的Cookbook集合。