module Kitchen::Salt::Pillars

Private Instance Methods

copy_pillar(key, srcfile) click to toggle source
# File lib/kitchen-salt/pillars.rb, line 78
def copy_pillar(key, srcfile)
  debug("Copying external pillar: #{key}, #{srcfile}")
  # generate the filename
  sandbox_pillar_path = File.join(sandbox_path, config[:salt_pillar_root], key)
  # create the directory where the pillar file will go
  FileUtils.mkdir_p(File.dirname(sandbox_pillar_path))
  # copy the file across
  FileUtils.copy srcfile, sandbox_pillar_path
end
prepare_pillar_files(pillars) click to toggle source
# File lib/kitchen-salt/pillars.rb, line 62
def prepare_pillar_files(pillars)
  pillars.each do |key, contents|
    # convert the hash to yaml
    pillar = contents.to_yaml

    # .to_yaml will produce ! '*' for a key, Salt doesn't like this either
    pillar.gsub!(/(!\s'\*')/, "'*'")

    # generate the filename
    sandbox_pillar_path = File.join(sandbox_path, config[:salt_pillar_root], key)

    debug("Rendered pillar yaml for #{key}:\n #{pillar}")
    write_raw_file(sandbox_pillar_path, pillar)
  end
end
prepare_pillars() click to toggle source
# File lib/kitchen-salt/pillars.rb, line 6
def prepare_pillars
  info("Preparing pillars into #{config[:salt_pillar_root]}")

  pillars = config[:pillars]
  if config.key?(:'pillars-from-files')
    info("pillars-from-files is deprecated in favor of pillars_from_files")
    pillars_from_files = config[:'pillars-from-files']
  else
    pillars_from_files = config[:'pillars_from_files']
  end
  pillars_from_directories = config[:pillars_from_directories]

  debug("Pillars Directories: #{pillars_from_directories}")

  if pillars_from_directories.any?
    pillars_from_directories.each do |dir|
      if dir.is_a?(Hash)
        local_pillar_path = File.expand_path(dir[:source])
        sandbox_pillar_path = File.join(sandbox_path, dir[:dest])
        info("Copying pillars from #{dir[:source]} to #{dir[:dest]}")
      else
        local_pillar_path = File.expand_path(dir)
        sandbox_pillar_path = File.join(sandbox_path, '/srv/pillar')
        info("Copying pillars from #{dir} to /srv/pillar")
      end
      cp_r_with_filter(local_pillar_path, sandbox_pillar_path, config[:salt_copy_filter])
    end
  end

  debug("Pillars Hash: #{pillars}")

  if pillars.nil? && pillars_from_files.nil?
    if not config[:local_salt_root].nil?
      pillars_location = File.join(config[:local_salt_root], 'pillar')
      sandbox_pillar_path = File.join(sandbox_path, config[:salt_pillar_root])
      cp_r_with_filter(pillars_location, sandbox_pillar_path, config[:salt_copy_filter])
      return
    end
    return
  end

  # we get a hash with all the keys converted to symbols, salt doesn't like this
  # to convert all the keys back to strings again
  pillars = unsymbolize(pillars)
  debug("unsymbolized pillars hash: #{pillars}")

  # write out each pillar (we get key/contents pairs)
  prepare_pillar_files(pillars)

  # copy the pillars from files straight across, as YAML.load/to_yaml and
  # munge multiline strings
  unless pillars_from_files.nil?
    prepare_pillars_from_files(pillars_from_files)
  end
end
prepare_pillars_from_files(pillars) click to toggle source
# File lib/kitchen-salt/pillars.rb, line 88
def prepare_pillars_from_files(pillars)
  external_pillars = unsymbolize(pillars)
  debug("external_pillars (unsymbolize): #{external_pillars}")
  external_pillars.each do |key, srcfile|
    copy_pillar(key, srcfile)
  end
end