class Sfn::Command::Import

Import command

Public Instance Methods

bucket_prefix() click to toggle source

Generate bucket prefix

@return [String, NilClass]

# File lib/sfn/command/import.rb, line 76
def bucket_prefix
  if prefix = config[:bucket_prefix]
    if prefix.respond_to?(:call)
      prefix.call
    else
      prefix.to_s
    end
  end
end
execute!() click to toggle source

Run the import action

# File lib/sfn/command/import.rb, line 14
def execute!
  raise NotImplementedError.new "Implementation updates required"
  stack_name, json_file = name_args
  ui.info "#{ui.color("Stack Import:", :bold)} #{stack_name}"
  unless json_file
    entries = [].tap do |_entries|
      _entries.push("s3") if config[:bucket]
      _entries.push("fs") if config[:path]
    end
    if entries.size > 1
      valid = false
      until valid
        if config[:interactive_parameters]
          answer = ui.ask_question(
            "Import via file system (fs) or remote bucket (remote)?",
            :default => "remote",
          )
        else
          answer = "remote"
        end
        valid = true if %w(remote fs).include?(answer)
        entries = [answer]
      end
    elsif entries.size < 1
      ui.fatal "No path or bucket set. Unable to perform dynamic lookup!"
      exit 1
    end
    case entries.first
    when "remote"
      json_file = remote_discovery
    else
      json_file = local_discovery
    end
  end
  if File.exists?(json_file) || json_file.is_a?(IO)
    content = json_file.is_a?(IO) ? json_file.read : File.read(json_file)
    export = Mash.new(_from_json(content))
    begin
      creator = namespace.const_val(:Create).new(
        Smash.new(
          :template => _from_json(export[:stack][:template]),
          :options => _from_json(export[:stack][:options]),
        ),
        [stack_name]
      )
      ui.info "  - Starting creation of import"
      creator.execute!
      ui.info "#{ui.color("Stack Import", :bold)} (#{json_file}): #{ui.color("complete", :green)}"
    rescue => e
      ui.fatal "Failed to import stack: #{e}"
      debug "#{e.class}: #{e}\n#{e.backtrace.join("\n")}"
      raise
    end
  else
    ui.fatal "Failed to locate JSON export file (#{json_file})"
    raise
  end
end
local_discovery() click to toggle source

Discover remote file

@return [IO] stack export IO

# File lib/sfn/command/import.rb, line 107
def local_discovery
  _, bucket = config[:path].split("/", 2)
  storage = provider.service_for(:storage,
                                 :provider => :local,
                                 :local_root => "/")
  directory = storage.directories.get(bucket)
  prompt_for_file(
    directory,
    :directories_name => "Collections",
    :files_names => "Exports",
  )
end
remote_discovery() click to toggle source

Discover remote file

@return [IO] stack export IO

# File lib/sfn/command/import.rb, line 89
def remote_discovery
  storage = provider.service_for(:storage)
  directory = storage.directories.get(config[:bucket])
  file = prompt_for_file(
    directory,
    :directories_name => "Collections",
    :files_names => "Exports",
    :filter_prefix => bucket_prefix,
  )
  if file
    remote_file = storage.files.get(file)
    StringIO.new(remote_file.body)
  end
end