class PoiseBoiler::Helpers::Kitchen::PolicyProvisioner

Public Class Methods

name() click to toggle source

Override the default value from the base class. default_config :policyfile, '.kitchen/poise_policy.rb' expand_path_for :policyfile

# File lib/poise_boiler/helpers/kitchen/policy_provisioner.rb, line 42
def self.name
  'PoisePolicyfileZero'
end

Public Instance Methods

cleanup_sandbox() click to toggle source
Calls superclass method
# File lib/poise_boiler/helpers/kitchen/policy_provisioner.rb, line 68
def cleanup_sandbox
  super if @sandbox_path
end
create_sandbox() click to toggle source

Run our policy generation first.

Calls superclass method
# File lib/poise_boiler/helpers/kitchen/policy_provisioner.rb, line 47
def create_sandbox
  policy_base = File.join(config[:kitchen_root], '.kitchen', 'poise_policy')
  # Copy all my halite-y stuff to a folder. This should probably use a
  # temp dir instead.
  FileUtils.rm_rf(policy_base)
  convert_halite_cookbooks(policy_base) unless poise_helper_instance.options['no_gem']
  copy_test_cookbook(policy_base)
  copy_test_cookbooks(policy_base)
  # Generate a modified policy to use the cookbooks we just made.
  policy_path = generate_poise_policy(policy_base)
  # Compile that policy because the base provider doesn't do that.
  compile_poise_policy(policy_path)
  # Tell the base provider code to use our new policy instead.
  if $use_policyfile_zero
    config[:policyfile] = "#{config[:kitchen_root]}/#{policy_path}"
  else
    config[:policyfile_path] = policy_path
  end
  super
end

Private Instance Methods

compile_poise_policy(policy_path) click to toggle source
# File lib/poise_boiler/helpers/kitchen/policy_provisioner.rb, line 83
def compile_poise_policy(policy_path)
  compile_mode = if File.exist?(policy_path.gsub(/\.rb/, '.lock.json'))
    'update'
  else
    'install'
  end
  info("Compiling policy (#{compile_mode})")
  compile_cmd = Mixlib::ShellOut.new(['chef', compile_mode, policy_path])
  compile_cmd.run_command
  compile_cmd.error!
end
generate_poise_policy(base) click to toggle source
# File lib/poise_boiler/helpers/kitchen/policy_provisioner.rb, line 74
def generate_poise_policy(base)
  info("Preparing modified policy")
  original_policy = IO.read(config[:policyfile])
  new_policy = "default_source :chef_repo, #{base.inspect}\n#{original_policy}"
  policy_path = ".kitchen/poise_policy_#{instance.name}.rb"
  IO.write("#{config[:kitchen_root]}/#{policy_path}", new_policy)
  policy_path
end