J'essaie d'utiliser le livre de recettes MySQL du supermarché mais à quelques exceptions près

Ma config est très basique:

Recette:

mysql_service 'foo' do
  port '3306'
  version '5.5'
  initial_root_password 'changeme'
  action [:create, :start]
end

Metadata.rb

depends 'mysql', '~> 6.0'

Berksfile

cookbook 'mysql', '~> 6.0'

J'utilise Kitchen avec vagrant et centos 6 comme plate-forme mais j'obtiens cette exception:

         Recipe: test-mysql::default
         * mysql_service[foo] action create

           ================================================================================
           Error executing action `create` on resource 'mysql_service[foo]'
           ================================================================================

           NoMethodError
           -------------
           undefined method `set' for #<Chef::Node::Attribute:0x00000000037bc818>

           Cookbook Trace: (most recent call first)
           ----------------------------------------
           /tmp/kitchen/cache/cookbooks/mysql/libraries/helpers.rb:265:in `pkginfo'
           /tmp/kitchen/cache/cookbooks/mysql/libraries/helpers.rb:388:in `package_name_for'
           /tmp/kitchen/cache/cookbooks/mysql/libraries/helpers.rb:431:in `server_package'
           /tmp/kitchen/cache/cookbooks/mysql/libraries/helpers.rb:442:in `server_package_name'
           /tmp/kitchen/cache/cookbooks/mysql/libraries/provider_mysql_service_base.rb:31:in `block in <class:MysqlServiceBase>'

           Resource Declaration:
           ---------------------
           # In /tmp/kitchen/cache/cookbooks/test-mysql/recipes/default.rb

             1: mysql_service 'foo' do
             2:   port '3306'
             3:   version '5.5'
             4:   initial_root_password 'changeme'
             5:   action [:create, :start]
             6: end

           Compiled Resource:
           ------------------
           # Declared in /tmp/kitchen/cache/cookbooks/test-mysql/recipes/default.rb:1:in `from_file'

           mysql_service("foo") do
             action [:create, :start]
             default_guard_interpreter :default
             declared_type :mysql_service
             cookbook_name "test-mysql"
             recipe_name "default"
             port "3306"
             version "5.5"
             initial_root_password "changeme"
           end

           System Info:
           ------------
           chef_version=16.4.41
           platform=centos
           platform_version=6.10
           ruby=ruby 2.7.1p83 (2020-03-31 revision a0c7c23c9c) [x86_64-linux]
           program_name=/opt/chef/bin/chef-client
           executable=/opt/chef/bin/chef-client


       Running handlers:
       [2020-08-28T04:30:27+00:00] ERROR: Running exception handlers
       Running handlers complete
       [2020-08-28T04:30:27+00:00] ERROR: Exception handlers complete
       Chef Infra Client failed. 0 resources updated in 01 seconds
       [2020-08-28T04:30:27+00:00] FATAL: Stacktrace dumped to /tmp/kitchen/cache/chef-stacktrace.out
       [2020-08-28T04:30:27+00:00] FATAL: Please provide the contents of the stacktrace.out file if you file a bug report
       [2020-08-28T04:30:27+00:00] FATAL: NoMethodError: mysql_service[foo] (test-mysql::default line 1) had an error: NoMethodError: undefined method `set' for #<Chef::Node::Attribute:0x00000000037bc818>

J'ai également essayé avec une version plus récente du livre de cuisine mais j'ai obtenu la même erreur

-2
proximator 28 août 2020 à 07:37

2 réponses

Meilleure réponse

Trouvé, il semble y avoir un problème de compatibilité entre chef-client et mysql cookbook

En spécifiant dans le Berksfile

cookbook 'mysql', '~> 7.0' 

Et dans kitchen.yml

product_name: chef
product_version: 14.12.9
0
proximator 28 août 2020 à 15:09

Cela ressemble à un problème chef-client. Je pense que vous utilisez le chef 14+.

Cela soulève quelques questions:

  • Quelle est la version chef-client utilisée dans vos projets?
  • si c'est Chef 14+, essayez d'utiliser le dernier livre de cuisine de supermarché
  • Sinon, suivez les instructions ci-dessous.

Dans votre kitchen.yml, essayez de rétrograder le chef-client dans la section provisioner. Reportez-vous à l'extrait ci-dessous:

provisioner:
  name: chef_zero
  # You may wish to disable always updating cookbooks in CI or other testing environments.
  # For example:
  #   always_update_cookbooks: <%= !ENV['CI'] %>
  always_update_cookbooks: true
  product_name: chef
  product_version: 12.21
  chef_omnibus_url: "file:///opt/softwares/chef-12.21.26-1.el6.x86_64.rpm"

Exécutez ensuite vos kitchen destroy et kitchen converge.

1
Abhishek Prusty 28 août 2020 à 10:23