- From: Daniel DeLeo <
>
- To:
- Subject: [chef] Re: Calling chefdk chef command from a bundle
- Date: Wed, 1 Jul 2015 07:52:46 -0700
On Tuesday, June 30, 2015 at 3:40 PM, Yoshi Spendiff wrote:
>
Hi,
>
>
I'm writing a couple of thor jobs to configure a workstation for Chef
>
development. One of the things I want to do is to install a few gems into
>
the chefdk installed on the system if they don't exist. I thought it would
>
be simple enough to just shell out and run the chef command to install
>
these gems (i.e. `chef gem install kitchen-ec2` but calling the chef
>
command, or indeed the ChefDK ruby from within my bundle results in an
>
error stating that a gem can't be found.
>
>
So if I run bin/thor myorg:check (where bin/thor is a binstub in my bundle)
>
and in the thor jobs there's any command that calls the chef executable,
>
e.g.
>
`chef -v` then I get the following:
I’ve noticed recently that when running any gem commands inside of a
bundler’d ruby process, you need to wrap everything in
Bundler.with_clean_env do; your_gem_related_code; end;
This used to work fine without the clean env thing, so I think there is a
recent change to either bundler or rubygems that caused this.
>
>
/Library/Ruby/Gems/2.0.0/gems/bundler-1.10.3/lib/bundler/spec_set.rb:92:in
>
`block in materialize': Could not find rake-10.4.2 in any of the sources
>
(Bundler::GemNotFound)
>
from
>
/Library/Ruby/Gems/2.0.0/gems/bundler-1.10.3/lib/bundler/spec_set.rb:85:in
>
`map!'
>
from
>
/Library/Ruby/Gems/2.0.0/gems/bundler-1.10.3/lib/bundler/spec_set.rb:85:in
>
`materialize'
>
from
>
/Library/Ruby/Gems/2.0.0/gems/bundler-1.10.3/lib/bundler/definition.rb:139:in
>
`specs'
>
from
>
/Library/Ruby/Gems/2.0.0/gems/bundler-1.10.3/lib/bundler/definition.rb:184:in
>
`specs_for'
>
from
>
/Library/Ruby/Gems/2.0.0/gems/bundler-1.10.3/lib/bundler/definition.rb:173:in
>
`requested_specs'
>
from
>
/Library/Ruby/Gems/2.0.0/gems/bundler-1.10.3/lib/bundler/environment.rb:18:in
>
`requested_specs'
>
from
>
/Library/Ruby/Gems/2.0.0/gems/bundler-1.10.3/lib/bundler/runtime.rb:13:in
>
`setup'
>
from /Library/Ruby/Gems/2.0.0/gems/bundler-1.10.3/lib/bundler.rb:127:in
>
`setup'
>
from
>
/Library/Ruby/Gems/2.0.0/gems/bundler-1.10.3/lib/bundler/setup.rb:18:in
>
`<top (required)>'
>
from
>
/opt/chefdk/embedded/lib/ruby/site_ruby/2.1.0/rubygems/core_ext/kernel_require.rb:54:in
>
`require'
>
from
>
/opt/chefdk/embedded/lib/ruby/site_ruby/2.1.0/rubygems/core_ext/kernel_require.rb:54:in
>
`require'
You’re definitely crossing the streams here. Bundler is installed to the
system ruby, and you seem to have your environment variables set in a way
that makes ruby load stuff from there. As Brandon mentions, `chef shell-init`
should fix this.
>
>
or system('chef -v') then I get the following error:
>
Could not find rake-10.4.2 in any of the sources
>
Run `bundle install` to install missing gems.
>
>
My bundle has that rake gem but for ruby v2.0.x instead of v2.1.x which the
>
chefdk uses. I'm guessing that running from within a bundle is messing up
>
the bundle environment that the chef executable uses, but I've not the
>
knowlege of how this works to get it working.
>
Is there any way around this (other than use thor from the system ruby,
>
which would be the fallback, but not ideal)? Will dropping certain
>
environment variables related to bundler when shelling out fix the problem?
Aside from the above suggestions, run `env` and look for any GEM_* variables.
rvm in particular works by setting these, if you’re an rvm user, there is a
plugin for it to use ChefDK (but I can’t recall the specifics, sorry).
>
>
--
>
Yoshi Spendiff
>
Ops Engineer
>
Indochino
>
Mobile: +1 778 952 2025
>
Email:
>
>
>
(mailto:
)
--
Daniel DeLeo
- [chef] Re: Calling chefdk chef command from a bundle, Daniel DeLeo, 07/01/2015
Archive powered by MHonArc 2.6.16.