Sha256: 569f116f76ff9a72fffca913edbdcfe6920c64904ac372a2ef04e985c37fb585

Contents?: true

Size: 1.71 KB

Versions: 31

Compression:

Stored size: 1.71 KB

Contents

require 'r10k/util/subprocess'
require 'json'
require 'yaml'

class R10K::Source::Exec < R10K::Source::Hash
  R10K::Source.register(:exec, self)

  def initialize(name, basedir, options = {})
    unless @command = options[:command]
      raise ConfigError, _('Environment source %{name} missing required parameter: command') % {name: name}
    end

    # We haven't set the environments option yet. We will do that by
    # overloading the #environments method.
    super(name, basedir, options)
  end

  def environments_hash
    @environments_hash ||= set_environments_hash(run_environments_command)
  end

  private

  def run_environments_command
    subproc = R10K::Util::Subprocess.new([@command])
    subproc.raise_on_fail = true
    subproc.logger = self.logger
    procresult = subproc.execute

    begin
      environments = JSON.parse(procresult.stdout)
    rescue JSON::ParserError => json_err
      begin
        environments = YAML.safe_load(procresult.stdout)
      rescue Psych::SyntaxError => yaml_err
        raise R10K::Error, _("Error parsing command output for exec source %{name}:\n" \
                             "Not valid JSON: %{j_msg}\n" \
                             "Not valid YAML: %{y_msg}\n" \
                             "Stdout:\n%{out}") % {name: name, j_msg: json_err.message, y_msg: yaml_err.message, out: procresult.stdout}
      end
    end

    unless R10K::Source::Hash.valid_environments_hash?(environments)
      raise R10K::Error, _("Environment source %{name} command %{cmd} did not return valid environment data.\n" \
                           'Returned: %{data}') % {name: name, cmd: @command, data: environments}
    end

    # Return the resulting environments hash
    environments
  end
end

Version data entries

31 entries across 31 versions & 2 rubygems

Version Path
r10k-5.0.0 lib/r10k/source/exec.rb
r10k-4.1.0 lib/r10k/source/exec.rb
r10k-4.0.2 lib/r10k/source/exec.rb
r10k-4.0.1 lib/r10k/source/exec.rb
r10k-4.0.0 lib/r10k/source/exec.rb
r10k-4.0.0.pre lib/r10k/source/exec.rb
r10k-3.16.0 lib/r10k/source/exec.rb
r10k-3.15.4 lib/r10k/source/exec.rb
r10k-3.15.3 lib/r10k/source/exec.rb
r10k-3.15.2 lib/r10k/source/exec.rb
r10k-3.15.1 lib/r10k/source/exec.rb
r10k-3.15.0 lib/r10k/source/exec.rb
akerl-r10k-3.14.2.1 lib/r10k/source/exec.rb
r10k-3.14.2 lib/r10k/source/exec.rb
r10k-3.14.1 lib/r10k/source/exec.rb
r10k-3.14.0 lib/r10k/source/exec.rb
r10k-3.13.0 lib/r10k/source/exec.rb
r10k-3.12.1 lib/r10k/source/exec.rb
r10k-3.12.0 lib/r10k/source/exec.rb
r10k-3.11.0 lib/r10k/source/exec.rb