Module: Aspera::Cli::AscpActions

Included in:
Plugins::Config
Defined in:
lib/aspera/cli/ascp_actions.rb

Overview

Mixin for Config plugin: ASCP / Transferd related actions

Constant Summary collapse

TRANSFERD_APP_NAME =
'sdk'

Instance Method Summary collapse

Instance Method Details

#action_agents_listObject



95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
# File 'lib/aspera/cli/ascp_actions.rb', line 95

def action_agents_list(**)
  rows = Agent::Factory::ALL.map do |sym, names|
    schema_key = AGENT_SCHEMA_KEY[sym]
    param_names =
      if schema_key
        Schema::Registry.instance.reader(schema_key).current['properties']&.keys&.sort&.join(', ') || ''
      else
        ''
      end
    {
      'name'       => sym.to_s,
      'short'      => names[:short].to_s,
      'parameters' => param_names
    }
  end.sort_by{ |r| r['name']}
  Result::ObjectList.new(rows, fields: %w[name short parameters])
end

#action_agents_parameters(agent_name:) ⇒ Object



135
136
137
138
139
140
141
142
143
# File 'lib/aspera/cli/ascp_actions.rb', line 135

def action_agents_parameters(agent_name:, **)
  schema_key = AGENT_SCHEMA_KEY[agent_name]
  return Result::Nothing.new if schema_key.nil?
  properties = Schema::Registry.instance.reader(schema_key).current['properties'] || {}
  rows = properties.map do |pname, pdef|
    {'name' => pname, 'type' => pdef['type'].to_s, 'description' => pdef['description'].to_s}
  end
  Result::ObjectList.new(rows, fields: %w[name type description])
end

#action_agents_show(agent_name:) ⇒ Object



113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
# File 'lib/aspera/cli/ascp_actions.rb', line 113

def action_agents_show(agent_name:, **)
  names = Agent::Factory::ALL[agent_name]
  schema_key = AGENT_SCHEMA_KEY[agent_name]
  agent_info = {
    'name'        => agent_name.to_s,
    'short'       => names[:short].to_s,
    'description' => schema_key ? Schema::Registry.instance.reader(schema_key).current['description'].to_s : '(no configurable parameters)'
  }
  if schema_key
    properties = Schema::Registry.instance.reader(schema_key).current['properties'] || {}
    rows = properties.map do |pname, pdef|
      row = {'parameter' => pname, 'type' => pdef['type'].to_s, 'description' => pdef['description'].to_s}
      row['required'] = (Schema::Registry.instance.reader(schema_key).current['required'] || []).include?(pname) ? 'yes' : 'no'
      row['default']  = pdef.key?('default') ? pdef['default'].inspect : ''
      row['enum']     = pdef.key?('enum')    ? pdef['enum'].join(', ') : ''
      row
    end
    return Result::ObjectList.new(rows, fields: %w[parameter required type default enum description])
  end
  Result::SingleObject.new(agent_info)
end

#action_ascp_errorsObject



83
84
85
86
87
88
89
# File 'lib/aspera/cli/ascp_actions.rb', line 83

def action_ascp_errors(**)
  error_data = []
  Ascp::Management::ERRORS.each_pair do |code, prop|
    error_data.push(code: code, mnemonic: prop[:c], retry: prop[:r], info: prop[:a])
  end
  Result::ObjectList.new(error_data)
end

#action_ascp_infoObject



59
60
61
62
63
64
65
# File 'lib/aspera/cli/ascp_actions.rb', line 59

def action_ascp_info(**)
  data = Ascp::Installation.instance.ascp_info
  data['ts'] = transfer.user_transfer_spec
  DataRepository::ELEMENTS.each_with_object(data){ |i, h| h[i.to_s] = DataRepository.instance.item(i)}
  SecretHider::ADDITIONAL_KEYS_TO_HIDE.concat(DataRepository::ELEMENTS.map(&:to_s))
  Result::SingleObject.new(data)
end

#action_ascp_install(version: nil) ⇒ Object



67
68
69
# File 'lib/aspera/cli/ascp_actions.rb', line 67

def action_ascp_install(version: nil, **)
  install_transfer_sdk(version: version)
end

#action_ascp_products_listObject



91
92
93
# File 'lib/aspera/cli/ascp_actions.rb', line 91

def action_ascp_products_list(**)
  Result::ObjectList.new(Ascp::Installation.instance.installed_products, fields: %w[name app_root])
end

#action_ascp_schema(agent_name: nil) ⇒ Object



76
77
78
79
80
81
# File 'lib/aspera/cli/ascp_actions.rb', line 76

def action_ascp_schema(agent_name: nil, **)
  schema = Transfer::Spec::SCHEMA.current.merge({'$comment'=>'DO NOT EDIT, this file was generated from the YAML.'})
  schema['properties'] = schema['properties'].select{ |_k, v| CommandLineBuilder.supported_by_agent(agent_name, v)} unless agent_name.nil?
  schema['properties'] = schema['properties'].sort.to_h
  Result::SingleObject.new(schema)
end

#action_ascp_showObject



55
56
57
# File 'lib/aspera/cli/ascp_actions.rb', line 55

def action_ascp_show(**)
  Result::Text.new(Ascp::Installation.instance.path(:ascp))
end

#action_ascp_specObject



71
72
73
74
# File 'lib/aspera/cli/ascp_actions.rb', line 71

def action_ascp_spec(**)
  builder = Schema::Documentation.new(TerminalFormatter, Transfer::Spec::SCHEMA, include_option: true, agent_columns: true).build
  Result::ObjectList.new(builder.rows, fields: builder.columns)
end

#action_transferd_installObject



145
146
147
# File 'lib/aspera/cli/ascp_actions.rb', line 145

def action_transferd_install(**)
  install_transfer_sdk
end

#action_transferd_listObject



149
150
151
152
# File 'lib/aspera/cli/ascp_actions.rb', line 149

def action_transferd_list(**)
  sdk_list = Ascp::Installation.instance.sdk_locations
  Result::ObjectList.new(sdk_list, fields: sdk_list.first.keys - ['url'])
end

#install_transfer_sdk(version: nil) ⇒ Result::Status

Install the transfer SDK (ascp + transferd) from a URL or using the default source. Version defaults to Info::SDK_VERSION; pass LATEST as argument to install the latest available version.

Parameters:

  • version (String, nil) (defaults to: nil)

    version to install; nil means use the default SDK version

Returns:



46
47
48
49
50
51
52
53
# File 'lib/aspera/cli/ascp_actions.rb', line 46

def install_transfer_sdk(version: nil)
  asked_version = version.nil? ? Info::SDK_VERSION : version
  asked_version = nil if asked_version.eql?(SpecialValues::LATEST)
  sdk_url = options.get_option(:sdk_url, mandatory: true)
  sdk_url = nil if sdk_url.eql?(SpecialValues::DEF)
  name, ver, folder = Ascp::Installation.instance.install_sdk(url: sdk_url, version: asked_version)
  return Result::Status.new("Installed #{name} version #{ver} in #{folder}")
end

#set_sdk_dirObject

Set the SDK directory, checking default and former locations



24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# File 'lib/aspera/cli/ascp_actions.rb', line 24

def set_sdk_dir
  sdk_dir = Products::Transferd.sdk_directory rescue nil
  if sdk_dir.nil?
    @sdk_default_location = true
    Log.log.debug('SDK folder is not set, checking default')
    sdk_dir = self.class.default_app_main_folder(app_name: TRANSFERD_APP_NAME)
    Log.log.debug{"Checking: #{sdk_dir}"}
    if !Dir.exist?(sdk_dir)
      Log.log.debug{"No such folder: #{sdk_dir}"}
      former_sdk_folder = File.join(self.class.default_app_main_folder(app_name: Info::CMD_NAME), TRANSFERD_APP_NAME)
      Log.log.debug{"Checking: #{former_sdk_folder}"}
      sdk_dir = former_sdk_folder if Dir.exist?(former_sdk_folder)
    end
    Log.log.debug{"Using: #{sdk_dir}"}
    Products::Transferd.sdk_directory = sdk_dir
  end
end