idcfcloud 0.1.4 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. checksums.yaml +4 -4
  2. data/.codeclimate.yml +1 -0
  3. data/.gitignore +5 -3
  4. data/.rubocop.yml +16 -1
  5. data/README.md +61 -6
  6. data/exe/idcfcloud +9 -1
  7. data/idcfcloud.gemspec +9 -7
  8. data/lib/idcf/cli/conf/conf.yml +39 -5
  9. data/lib/idcf/cli/conf/const.rb +42 -17
  10. data/lib/idcf/cli/controller/base.rb +130 -60
  11. data/lib/idcf/cli/controller/extend/command.rb +18 -16
  12. data/lib/idcf/cli/controller/extend/init.rb +2 -0
  13. data/lib/idcf/cli/controller/extend/override.rb +1 -8
  14. data/lib/idcf/cli/controller/extend/search_module.rb +14 -0
  15. data/lib/idcf/cli/controller/ilb.rb +5 -34
  16. data/lib/idcf/cli/controller/include/command.rb +7 -80
  17. data/lib/idcf/cli/controller/include/init.rb +2 -4
  18. data/lib/idcf/cli/controller/include/util.rb +20 -63
  19. data/lib/idcf/cli/controller/include/validate.rb +7 -1
  20. data/lib/idcf/cli/controller/your.rb +0 -33
  21. data/lib/idcf/cli/error/cli_error.rb +7 -5
  22. data/lib/idcf/cli/extend/configure.rb +38 -33
  23. data/lib/idcf/cli/extend/update.rb +139 -54
  24. data/lib/idcf/cli/extend/update_file.rb +113 -18
  25. data/lib/idcf/cli/gem_ext/thor/init_util.rb +20 -7
  26. data/lib/idcf/cli/index.rb +21 -11
  27. data/lib/idcf/cli/lib/convert/formatter/base.rb +1 -1
  28. data/lib/idcf/cli/lib/convert/formatter/xml_format.rb +1 -1
  29. data/lib/idcf/cli/lib/convert/helper.rb +43 -7
  30. data/lib/idcf/cli/lib/util/ini_conf.rb +30 -8
  31. data/lib/idcf/cli/lib/util/yml_conf.rb +13 -2
  32. data/lib/idcf/cli/service/base.rb +121 -21
  33. data/lib/idcf/cli/service/ilb/add_server_for_protocol.rb +8 -3
  34. data/lib/idcf/cli/service/ilb/base_server_for_protocol.rb +21 -35
  35. data/lib/idcf/cli/service/ilb/delete_server_for_protocol.rb +9 -4
  36. data/lib/idcf/cli/validate/define/base.rb +3 -1
  37. data/lib/idcf/cli/validate/define/ilb/base.rb +0 -5
  38. data/lib/idcf/cli/version.rb +1 -1
  39. metadata +62 -23
  40. data/lib/idcf/cli/conf/service/.gitkeep +0 -0
  41. data/lib/idcf/cli/controller/include/override.rb +0 -30
  42. data/lib/idcf/cli/controller/include/sdk.rb +0 -94
@@ -6,7 +6,7 @@ module Idcf
6
6
  module Util
7
7
  # ini conf
8
8
  class IniConf
9
- attr_reader :load_data, :tmp_data
9
+ attr_reader :load_data, :tmp_data, :read_only
10
10
 
11
11
  # initialize
12
12
  #
@@ -14,6 +14,7 @@ module Idcf
14
14
  def initialize(*path)
15
15
  @tmp_data = {}
16
16
  @load_data = IniFile.load(path[0])
17
+ @read_only = false
17
18
  end
18
19
 
19
20
  def load_error?
@@ -44,22 +45,43 @@ module Idcf
44
45
  end
45
46
  rescue
46
47
  msg = "Error: could not read #{profile}:#{name}"
47
- raise Idcf::Cli::CliError, msg
48
+ raise Idcf::Cli::Error::CliError, msg
48
49
  end
49
50
 
51
+ # write
52
+ #
53
+ # @param path [String]
50
54
  def write(path)
51
- unless File.exist?(path)
52
- dir_path = File.dirname(path)
53
- FileUtils.mkdir_p(dir_path) unless Dir.exist?(dir_path)
54
- File.open(path, 'w').close
55
- @load_data = IniFile.load(path)
56
- end
55
+ raise Idcf::Cli::Error::CliError, 'read only object' if @read_only
56
+ @load_data = load_create_file(path) unless File.exist?(path)
57
57
 
58
58
  @tmp_data.each do |k, v|
59
59
  @load_data[k] = v
60
60
  end
61
61
  @load_data.write(filename: path)
62
62
  end
63
+
64
+ # inifile object merge
65
+ #
66
+ # @param value [Idcf::Cli::Lib::Util::IniConf]
67
+ # @return self
68
+ def merge!(value)
69
+ raise Idcf::Cli::Error::CliError, 'merge error' unless value.class == self.class
70
+ v_data = value.load_data
71
+ return self if v_data.nil?
72
+ @load_data.merge!(v_data)
73
+ @read_only = true
74
+ self
75
+ end
76
+
77
+ protected
78
+
79
+ def load_create_file(path)
80
+ dir_path = File.dirname(path)
81
+ FileUtils.mkdir_p(dir_path) unless Dir.exist?(dir_path)
82
+ File.open(path, 'w').close
83
+ IniFile.load(path)
84
+ end
63
85
  end
64
86
  end
65
87
  end
@@ -5,7 +5,17 @@ module Idcf
5
5
  module Util
6
6
  # yml conf
7
7
  class YmlConf
8
- @load_data = nil
8
+ attr_reader :load_data
9
+
10
+ class << self
11
+ attr_reader :data
12
+ def load(path)
13
+ @data ||= {}
14
+ return @data[path] unless @data[path].nil?
15
+ @data[path] = name.constantize.new(path)
16
+ @data[path]
17
+ end
18
+ end
9
19
 
10
20
  # initialize
11
21
  #
@@ -17,6 +27,7 @@ module Idcf
17
27
  # get config value
18
28
  #
19
29
  # @param path [String]
30
+ # @param section [String]
20
31
  # @return String or Hash
21
32
  # @raise
22
33
  def find(path)
@@ -28,7 +39,7 @@ module Idcf
28
39
 
29
40
  result
30
41
  rescue
31
- raise Idcf::Cli::CliError, "Error: could not read '#{path}'"
42
+ raise Idcf::Cli::Error::CliError, "Error: could not read '#{path}'"
32
43
  end
33
44
  end
34
45
  end
@@ -1,14 +1,29 @@
1
+ require 'idcf/cli/lib/include/recurring_calling'
1
2
  module Idcf
2
3
  module Cli
3
4
  module Service
4
5
  # model base
5
6
  class Base
6
- ARG_TYPE_REQ = :req
7
- ARG_TYPE_OPT = :opt
8
- ARG_TYPE_REST = :rest
9
- ARG_TYPE_BLOCK = :block
7
+ ARG_TYPE_REQ = :req
8
+ ARG_TYPE_OPT = :opt
9
+ ARG_TYPE_REST = :rest
10
+ HELP_FORMAT = {
11
+ ARG_TYPE_REQ => '<%s>',
12
+ ARG_TYPE_OPT => '[%s]',
13
+ ARG_TYPE_REST => '[%s ...]'
14
+ }.freeze
15
+ attr_reader :last_command, :last_command_args
16
+ include Idcf::Cli::Lib::Include::RecurringCalling
17
+
10
18
  class << self
11
- attr_reader :options, :params
19
+ attr_reader :options
20
+
21
+ # reset
22
+ # setting reset
23
+ def reset
24
+ @options = {}
25
+ end
26
+
12
27
  # option
13
28
  #
14
29
  # @param name [String]
@@ -16,39 +31,124 @@ module Idcf
16
31
  # @option attr [String] :type
17
32
  # @option attr [Boolean] :required
18
33
  # @option attr [String] :desc
19
- def option(name, *attr)
34
+ def option(name, attr)
20
35
  @options ||= {}
21
36
  @options[name] = attr
22
37
  end
23
38
 
24
- # params
39
+ # descritpion
25
40
  #
26
- # @param values [String]
27
- # @param arg_type [String]
28
- def param(name, arg_type = ARG_TYPE_REQ)
29
- @params ||= []
30
- s = @params.select do |v|
31
- v[:name] == name
41
+ # @return String
42
+ def description
43
+ ''
44
+ end
45
+
46
+ # make param string
47
+ #
48
+ # @return String
49
+ def make_param_s
50
+ cp = []
51
+ valid_params.each do |param|
52
+ f = HELP_FORMAT[param[0]]
53
+ next if f.nil?
54
+ cp << format(f, param[1])
55
+ end
56
+ cp.join(' ')
57
+ end
58
+
59
+ def valid_params
60
+ [].tap do |result|
61
+ new.method(:do).parameters.each do |param|
62
+ result << param if target_param?(param[1])
63
+ end
32
64
  end
65
+ end
33
66
 
34
- param = {
35
- name: name,
36
- arg_type: arg_type
37
- }
67
+ protected
38
68
 
39
- @params << param if s.size.zero?
69
+ # target param?
70
+ #
71
+ # @param name [String]
72
+ # @return Boolean
73
+ def target_param?(name)
74
+ val = name.to_s
75
+ exclusion_list = %w(api o)
76
+ return false if exclusion_list.include?(val)
77
+ return false if val[0] == '_'
78
+ true
40
79
  end
41
80
  end
42
81
 
82
+ def initialize
83
+ @last_command = ''
84
+ @last_command_args = []
85
+ end
86
+
43
87
  # do
44
88
  #
45
89
  # @param _client [Mixed]
46
- # @param *_args [Array]
47
90
  # @param _o [Hash] options
91
+ # @param *_args [Array]
48
92
  # @return Hash
49
93
  # @raise
50
- def do(_client, *_args, _o)
51
- raise Idcf::Cli::CliError, 'Require override'
94
+ def do(_client, _o, *_args)
95
+ cli_error 'Require override'
96
+ end
97
+
98
+ # between params
99
+ #
100
+ # @param params [Array]
101
+ # @param arg_size [int]
102
+ # @raise
103
+ def between_param?(arg_size)
104
+ param = self.class.valid_params
105
+ p_cnt = param.size
106
+ return true if method_rest?(param)
107
+ opt_cnt = method_option_cnt(param)
108
+
109
+ min = p_cnt - opt_cnt
110
+ msg = format('Argument: %s', self.class.make_param_s)
111
+ cli_error msg unless arg_size.between?(min, p_cnt)
112
+ true
113
+ end
114
+
115
+ # is rest
116
+ #
117
+ # @param params [Array]
118
+ # @return Boolean
119
+ def method_rest?(params)
120
+ return false if params.nil?
121
+ params.each do |param|
122
+ case param[0]
123
+ when ARG_TYPE_REST
124
+ return true
125
+ end
126
+ end
127
+ false
128
+ end
129
+
130
+ # option count
131
+ #
132
+ # @param params [Array]
133
+ # @return int
134
+ def method_option_cnt(params)
135
+ result = 0
136
+ return result if params.nil?
137
+ params.each do |param|
138
+ case param[0]
139
+ when ARG_TYPE_OPT
140
+ result += 1
141
+ end
142
+ end
143
+ result
144
+ end
145
+
146
+ # cli error
147
+ #
148
+ # @param msg [String]
149
+ # @raise
150
+ def cli_error(msg)
151
+ raise Idcf::Cli::Error::CliError, msg
52
152
  end
53
153
  end
54
154
  end
@@ -6,12 +6,17 @@ module Idcf
6
6
  module Ilb
7
7
  # add server
8
8
  class AddServerForProtocol < BaseServerForProtocol
9
- init
9
+ class << self
10
+ def description
11
+ "Add a loadbalancer config's server."
12
+ end
13
+ end
10
14
 
11
15
  protected
12
16
 
13
- def do_command(lb_id, config, target)
14
- client.add_server(lb_id, config['id'], target)
17
+ def set_last_command(lb_id, config, target)
18
+ @last_command = :add_server
19
+ @last_command_args = [lb_id, config['id'], target]
15
20
  end
16
21
  end
17
22
  end
@@ -6,58 +6,43 @@ module Idcf
6
6
  module Ilb
7
7
  # [add/delete] server for protocol
8
8
  class BaseServerForProtocol < Idcf::Cli::Service::Base
9
- class << self
10
- def init
11
- param :lb_id
12
- param :protocol
13
- param :protocol_port
14
- param :data, Base::ARG_TYPE_REQ
15
- end
16
- end
17
-
18
- attr_reader :client
9
+ attr_reader :api, :options
19
10
 
20
11
  # do
21
12
  #
22
- # @param client [Idcf::Ilb::Client]
23
- # @param args [Array]
24
- # @option args [String] lb id
25
- # @option args [Stirng] configure protocol
26
- # @option args [int] configure port
27
- # @option args [Hash] server info {ipaddress: '0.0.0.0', port: 80}
13
+ # @param api [Idcf::Ilb::Lib::Api]
28
14
  # @param o [Hash] options
29
- def do(client, *args, o)
30
- @client = client
31
- lb_id = args[0]
32
- lb = search_lb(lbs, lb_id)
33
- config = search_config(lb, args[1], args[2])
15
+ # @option lb_id [String]
16
+ # @option protocol [Stirng] http
17
+ # @option protocol_port [int] 80
18
+ # @option params [Hash] {ipaddress: '0.0.0.0', port: 80}
19
+ def do(api, o, lb_id, protocol, protocol_port, params)
20
+ @api = api
21
+ @options = o
22
+ lb = search_lb(lbs, lb_id)
23
+ config = search_config(lb, protocol, protocol_port)
34
24
 
35
25
  if config.nil?
36
26
  not_param = o[:protocol].nil? ? 'conf_id' : 'protocol'
37
- raise Idcf::Cli::CliError, "Target not found (#{not_param})"
27
+ cli_error "A target isn't found(#{not_param})"
38
28
  end
39
29
 
40
- do_command(lb_id, config, args[3])
41
- client.list_servers(lb_id, config['id'])
30
+ set_last_command(lb_id, config, params)
31
+ config['servers']
42
32
  end
43
33
 
44
34
  protected
45
35
 
46
- def do_command(_lb_id, _config, _target)
47
- raise Idcf::Cli::CliError, 'override required'
36
+ def set_last_command(_lb_id, _config, _target)
37
+ cli_error 'override required'
48
38
  end
49
39
 
50
- # get lb list [Idcf::Ilb::Client]
40
+ # get lb list
51
41
  #
52
- # @param client
53
42
  # @return Array in Hash
54
43
  # @raise
55
44
  def lbs
56
- lb = client.get(:loadbalancers)
57
- msg = "Status: #{lb.status}"
58
- raise Idcf::Cli::CliError, msg if !lb.success? || lb.status != 200
59
-
60
- lb.body
45
+ @api.do(:list_loadbalancers)
61
46
  end
62
47
 
63
48
  # search lb target
@@ -72,7 +57,7 @@ module Idcf
72
57
  end
73
58
 
74
59
  msg = "Target lb_id not found ( #{id} )"
75
- raise Idcf::Cli::CliError, msg if lbs.empty?
60
+ cli_error msg if lbs.empty?
76
61
 
77
62
  lbs[0]
78
63
  end
@@ -88,10 +73,11 @@ module Idcf
88
73
  next unless target_config?(v, protocol, p_port)
89
74
  unless v['state'].casecmp('running').zero?
90
75
  msg = 'The operation is impossible because the target is currently being processed'
91
- raise Idcf::Cli::CliError, msg
76
+ cli_error msg
92
77
  end
93
78
  return v
94
79
  end
80
+ nil
95
81
  end
96
82
 
97
83
  # is target config
@@ -6,13 +6,18 @@ module Idcf
6
6
  module Ilb
7
7
  # delete server
8
8
  class DeleteServerForProtocol < BaseServerForProtocol
9
- init
9
+ class << self
10
+ def description
11
+ "Delete a [loadbalancer's config server]"
12
+ end
13
+ end
10
14
 
11
15
  protected
12
16
 
13
- def do_command(lb_id, config, target)
14
- server_id = search_server_id(config['servers'], target)
15
- client.delete_server(lb_id, config['id'], server_id)
17
+ def set_last_command(lb_id, config, target)
18
+ server_id = search_server_id(config['servers'], target)
19
+ @last_command = :delete_server
20
+ @last_command_args = [lb_id, config['id'], server_id]
16
21
  end
17
22
 
18
23
  def search_server_id(servers, target)
@@ -14,7 +14,9 @@ module Idcf
14
14
  :api_key,
15
15
  :secret_key,
16
16
  :no_ssl,
17
- :no_vssl
17
+ :no_vssl,
18
+ :json_path,
19
+ :fields
18
20
 
19
21
  validates :output,
20
22
  allow_blank: true,
@@ -1,5 +1,3 @@
1
- require 'active_model'
2
- require 'active_model/model'
3
1
  require_relative '../base'
4
2
  module Idcf
5
3
  module Cli
@@ -8,9 +6,6 @@ module Idcf
8
6
  module Ilb
9
7
  # Base Validate
10
8
  class Base < Idcf::Cli::Validate::Define::Base
11
- include ActiveModel::Model
12
- include Idcf::Cli::Validate::Custom
13
-
14
9
  attr_accessor :region
15
10
 
16
11
  validates :region,
@@ -1,5 +1,5 @@
1
1
  module Idcf
2
2
  module Cli
3
- VERSION = '0.1.4'.freeze
3
+ VERSION = '0.2.0'.freeze
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: idcfcloud
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.4
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - IDC Frontier Inc.
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-09-15 00:00:00.000000000 Z
11
+ date: 2017-12-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -48,7 +48,7 @@ dependencies:
48
48
  - - ">="
49
49
  - !ruby/object:Gem::Version
50
50
  version: 3.2.5
51
- type: :runtime
51
+ type: :development
52
52
  prerelease: false
53
53
  version_requirements: !ruby/object:Gem::Requirement
54
54
  requirements:
@@ -68,7 +68,7 @@ dependencies:
68
68
  - - ">="
69
69
  - !ruby/object:Gem::Version
70
70
  version: 1.0.4
71
- type: :runtime
71
+ type: :development
72
72
  prerelease: false
73
73
  version_requirements: !ruby/object:Gem::Requirement
74
74
  requirements:
@@ -79,7 +79,7 @@ dependencies:
79
79
  - !ruby/object:Gem::Version
80
80
  version: 1.0.4
81
81
  - !ruby/object:Gem::Dependency
82
- name: activerecord
82
+ name: activemodel
83
83
  requirement: !ruby/object:Gem::Requirement
84
84
  requirements:
85
85
  - - "~>"
@@ -187,47 +187,89 @@ dependencies:
187
187
  - !ruby/object:Gem::Version
188
188
  version: 1.0.0
189
189
  - !ruby/object:Gem::Dependency
190
- name: idcf-your
190
+ name: open_uri_redirections
191
191
  requirement: !ruby/object:Gem::Requirement
192
192
  requirements:
193
- - - ">="
193
+ - - "~>"
194
194
  - !ruby/object:Gem::Version
195
- version: '0'
195
+ version: 0.2.1
196
196
  type: :runtime
197
197
  prerelease: false
198
198
  version_requirements: !ruby/object:Gem::Requirement
199
199
  requirements:
200
- - - ">="
200
+ - - "~>"
201
201
  - !ruby/object:Gem::Version
202
- version: '0'
202
+ version: 0.2.1
203
+ - !ruby/object:Gem::Dependency
204
+ name: idcf-json_hyper_schema
205
+ requirement: !ruby/object:Gem::Requirement
206
+ requirements:
207
+ - - "~>"
208
+ - !ruby/object:Gem::Version
209
+ version: 0.1.0
210
+ type: :runtime
211
+ prerelease: false
212
+ version_requirements: !ruby/object:Gem::Requirement
213
+ requirements:
214
+ - - "~>"
215
+ - !ruby/object:Gem::Version
216
+ version: 0.1.0
203
217
  - !ruby/object:Gem::Dependency
204
218
  name: idcf-faraday_middleware
205
219
  requirement: !ruby/object:Gem::Requirement
206
220
  requirements:
207
- - - ">="
221
+ - - "~>"
208
222
  - !ruby/object:Gem::Version
209
- version: '0'
223
+ version: 0.0.2
210
224
  type: :runtime
211
225
  prerelease: false
212
226
  version_requirements: !ruby/object:Gem::Requirement
213
227
  requirements:
214
- - - ">="
228
+ - - "~>"
215
229
  - !ruby/object:Gem::Version
216
- version: '0'
230
+ version: 0.0.2
217
231
  - !ruby/object:Gem::Dependency
218
- name: idcf-ilb
232
+ name: jsonpath
219
233
  requirement: !ruby/object:Gem::Requirement
220
234
  requirements:
221
- - - ">="
235
+ - - "~>"
222
236
  - !ruby/object:Gem::Version
223
- version: 0.0.3
237
+ version: 0.8.10
224
238
  type: :runtime
225
239
  prerelease: false
226
240
  version_requirements: !ruby/object:Gem::Requirement
227
241
  requirements:
228
- - - ">="
242
+ - - "~>"
243
+ - !ruby/object:Gem::Version
244
+ version: 0.8.10
245
+ - !ruby/object:Gem::Dependency
246
+ name: facter
247
+ requirement: !ruby/object:Gem::Requirement
248
+ requirements:
249
+ - - "~>"
250
+ - !ruby/object:Gem::Version
251
+ version: 2.5.1
252
+ type: :runtime
253
+ prerelease: false
254
+ version_requirements: !ruby/object:Gem::Requirement
255
+ requirements:
256
+ - - "~>"
257
+ - !ruby/object:Gem::Version
258
+ version: 2.5.1
259
+ - !ruby/object:Gem::Dependency
260
+ name: CFPropertyList
261
+ requirement: !ruby/object:Gem::Requirement
262
+ requirements:
263
+ - - "~>"
264
+ - !ruby/object:Gem::Version
265
+ version: 2.3.5
266
+ type: :runtime
267
+ prerelease: false
268
+ version_requirements: !ruby/object:Gem::Requirement
269
+ requirements:
270
+ - - "~>"
229
271
  - !ruby/object:Gem::Version
230
- version: 0.0.3
272
+ version: 2.3.5
231
273
  description: IDCF Cli
232
274
  email: []
233
275
  executables:
@@ -248,7 +290,6 @@ files:
248
290
  - idcfcloud.gemspec
249
291
  - lib/idcf/cli/conf/conf.yml
250
292
  - lib/idcf/cli/conf/const.rb
251
- - lib/idcf/cli/conf/service/.gitkeep
252
293
  - lib/idcf/cli/controller/base.rb
253
294
  - lib/idcf/cli/controller/extend/command.rb
254
295
  - lib/idcf/cli/controller/extend/init.rb
@@ -257,8 +298,6 @@ files:
257
298
  - lib/idcf/cli/controller/ilb.rb
258
299
  - lib/idcf/cli/controller/include/command.rb
259
300
  - lib/idcf/cli/controller/include/init.rb
260
- - lib/idcf/cli/controller/include/override.rb
261
- - lib/idcf/cli/controller/include/sdk.rb
262
301
  - lib/idcf/cli/controller/include/util.rb
263
302
  - lib/idcf/cli/controller/include/validate.rb
264
303
  - lib/idcf/cli/controller/your.rb
@@ -310,7 +349,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
310
349
  version: '0'
311
350
  requirements: []
312
351
  rubyforge_project:
313
- rubygems_version: 2.6.8
352
+ rubygems_version: 2.6.13
314
353
  signing_key:
315
354
  specification_version: 4
316
355
  summary: IDCF Cli tools
File without changes
@@ -1,30 +0,0 @@
1
- module Idcf
2
- module Cli
3
- module Controller
4
- module Include
5
- # override methods
6
- module Override
7
- protected
8
-
9
- # Create a new client
10
- #
11
- # @param _o [Hash] other options
12
- # @return [Response] Mixed
13
- def make_client(_o)
14
- raise Idcf::Cli::CliError, 'Required override'
15
- end
16
-
17
- # sdk do
18
- #
19
- # @param _command [String]
20
- # @param *_args [Array]
21
- # @param o [Hash] options
22
- # @return String
23
- def do_sdk(_command, *_args, _o)
24
- raise Idcf::Cli::CliError, 'Requre override'
25
- end
26
- end
27
- end
28
- end
29
- end
30
- end