How to specify cookbook path in .kitchen.yml file for chef_solo provisioner?

淺唱寂寞╮ 提交于 2019-12-07 17:13:36

问题


I want to specify cookbook paths using chef_solo as a provisioner in Test Kitchen. We are not using Berkshelf or chef_zero at this time.

I set cookbooks_path in my .kitchen.yml file, but it seems like the chef_solo provisioner ignores that flag. See stack trace, below.

.kitchen.yml

---
driver:
  name: vagrant

provisioner:
  name: chef_solo
  require_chef_omnibus: 11.8.0
  roles_path: '../../roles'
  data_bags_path: '../../data_bags'
  environments_path: '../../environments'
  cookbooks_path: '../cookbooks, ../../site-cookbooks'

Stack trace:

$ kitchen converge analytics-centos-65
-----> Starting Kitchen (v1.2.1)
-----> Converging <analytics-centos-65>...
       Preparing files for transfer
       Resolving cookbook dependencies with Berkshelf 3.2.1...
       Removing non-cookbook files before transfer
       Preparing data bags
       Preparing environments
       Preparing roles
       Transfering files to <analytics-centos-65>
       [2015-01-07T18:07:06+00:00] INFO: Forking chef instance to converge...
       Starting Chef Client, version 11.8.0
       [2015-01-07T18:07:06+00:00] INFO: *** Chef 11.8.0 ***
       [2015-01-07T18:07:06+00:00] INFO: Chef-client pid: 4294
       [2015-01-07T18:07:06+00:00] INFO: Setting the run_list to ["role[default]", "role[test]", "role[development]", "role[etl]", "role[ets]", "role[log_consolidator]"] from JSON
       [2015-01-07T18:07:06+00:00] INFO: Run List is [role[default], role[test], role[development], role[etl], role[ets], role[log_consolidator]]
       [2015-01-07T18:07:06+00:00] INFO: Run List expands to [sysctl::attribute_driver, yum::epel, ad-summos::timezone, ad-summos::ntpd, ad-summos::users, ad-summos::pgpass, ad-summos::fix_adsummos_dir_permissions, ad-summos::ec2-keys, ad-summos::sudo, ad-summos::aws, ad-summos::git, ad-summos::bashrc, ad-summos::setup-additional-adsummos-directories, ad-summos::aws-adsummos-user, ad-summos::denyhosts, ad-summos::p7zip, ad-summos::set_firewall_rules, ad-summos::system-tools, ad-summos::deploy_analytics_code, vsftpd, users::development, ad-summos::setup_hostname, etl::configure_etl, ad-summos::mysql-client, ad-summos::postgresql-devel, etl::pdi-tools-42, etl::create_etl_folders, etl::system-wide-rvm-permissions, etl::user_agent_utils, etl::pgpass-adsummos-user, ets::ets-install, ets::varnish-install, ets::sftp-user, ad-summos::sinatra, log_consolidator::configure_log_consolidator, log_consolidator::log_cron_crontab, log_consolidator::install_consolidator_packages]
       [2015-01-07T18:07:06+00:00] INFO: Starting Chef Run for analytics-centos-65
       [2015-01-07T18:07:06+00:00] INFO: Running start handlers
       [2015-01-07T18:07:06+00:00] INFO: Start handlers complete.
       Compiling Cookbooks...
       [2015-01-07T18:07:06+00:00] ERROR: Running exception handlers
       [2015-01-07T18:07:06+00:00] ERROR: Exception handlers complete
       [2015-01-07T18:07:06+00:00] FATAL: Stacktrace dumped to /tmp/kitchen/cache/chef-stacktrace.out
       Chef Client failed. 0 resources updated
       [2015-01-07T18:07:06+00:00] ERROR: Cookbook sysctl not found. If you're loading sysctl from another cookbook, make sure you configure the dependency in your metadata
       [2015-01-07T18:07:06+00:00] FATAL: Chef::Exceptions::ChildConvergeError: Chef run process exited unsuccessfully (exit code 1)
>>>>>> Converge failed on instance <analytics-centos-65>.
>>>>>> Please see .kitchen/logs/analytics-centos-65.log for more details
>>>>>> ------Exception-------
>>>>>> Class: Kitchen::ActionFailed
>>>>>> Message: SSH exited (1) for command: [sudo -E chef-solo --config /tmp/kitchen/solo.rb --json-attributes /tmp/kitchen/dna.json  --log_level info]
>>>>>> ----------------------

Related to: How to specify cookbook path in .kitchen.yml file?

I see sethvargo's answer for provisioning with chef_zero, but we're blocked on Chef Zero because a solid number of our environments and roles are configured in Ruby, not JSON. https://github.com/opscode/chef-zero/issues/107. Likewise, Berkshelf is an iteration or two ahead of where we are in our code migration atm.

Is there a way to specify local cookbook paths with the chef_solo provisioner?


回答1:


I can't speak for it's place in the yaml. However I was able to get it working using a line in the knife.rb

Sounds right to me, but remember that config.rb takes precedence now, since Chef Client 12.0.

The docs do well to describe this, but keep in mind the attributes that the others have described:

Default config.rb Location:

~/.chef/config.rb

cookbook path syntax:

cookbook_path ["/full/path/to/repo/cookbooks"]

And reload Chef to test.




回答2:


It should be an array in Yaml:

provisioner:
  name: chef_solo
  require_chef_omnibus: 11.8.0
  roles_path: '../../roles'
  data_bags_path: '../../data_bags'
  environments_path: '../../environments'
  cookbooks_path:
    - ../cookbooks
    - ../../site-cookbooks



回答3:


I can't speak for it's place in the yaml. However I was able to get it working using a line in the knife.rb

cookbook_path ["/full/path/to/repo/cookbooks"]

using this in the knife.rb of the repo where I was running kitchen allowed it to work.



来源:https://stackoverflow.com/questions/27826223/how-to-specify-cookbook-path-in-kitchen-yml-file-for-chef-solo-provisioner

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!