[chef] Re: Re: Calling chefdk chef command from a bundle


Chronological Thread 
  • From: Yoshi Spendiff < >
  • To: chef < >
  • Subject: [chef] Re: Re: Calling chefdk chef command from a bundle
  • Date: Thu, 2 Jul 2015 16:26:47 -0700

Hi,

This worked for me:

Bundler.with_clean_environment do
  `chef -v`
end

It was definitely environment variables breaking chef here. Running env inside and outside the block showed the following variables removed:
BUNDLE_GEMFILE
GEM_PATH
GEM_HOME
BUNDLE_BIN
RUBYOPT
RUBYLIB

and a different PATH.

I didn't know the Bundler class has useful methods like that!

Cheers for the help

Regards,
Yoshi

On Wed, Jul 1, 2015 at 7:52 AM, Daniel DeLeo < " target="_blank"> > wrote:
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





--
Yoshi Spendiff
Ops Engineer
Indochino
Mobile: +1 778 952 2025



Archive powered by MHonArc 2.6.16.

§