idcfcloud 0.2.2 → 1.1.1
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.
- checksums.yaml +5 -5
- data/.codeclimate.yml +12 -0
- data/.rubocop.yml +12 -2
- data/README.md +30 -12
- data/idcfcloud.gemspec +12 -12
- data/lib/idcf/cli/command/morio.rb +4 -4
- data/lib/idcf/cli/conf/conf.yml +0 -6
- data/lib/idcf/cli/conf/const.rb +32 -29
- data/lib/idcf/cli/controller/base.rb +50 -23
- data/lib/idcf/cli/controller/compute.rb +15 -2
- data/lib/idcf/cli/controller/extend/command.rb +25 -2
- data/lib/idcf/cli/controller/extend/search_module.rb +0 -10
- data/lib/idcf/cli/controller/extend/util.rb +12 -0
- data/lib/idcf/cli/controller/include/client.rb +1 -1
- data/lib/idcf/cli/controller/include/command.rb +1 -1
- data/lib/idcf/cli/controller/include/util.rb +3 -5
- data/lib/idcf/cli/controller/include/validate.rb +1 -1
- data/lib/idcf/cli/extend/configure.rb +2 -4
- data/lib/idcf/cli/extend/update.rb +21 -21
- data/lib/idcf/cli/extend/update_file.rb +21 -10
- data/lib/idcf/cli/gem_ext/idcf/json_hyper_schema/expands/link_info_base_extension.rb +25 -9
- data/lib/idcf/cli/gem_ext/thor/init_util.rb +6 -3
- data/lib/idcf/cli/index.rb +17 -5
- data/lib/idcf/cli/lib/api.rb +5 -4
- data/lib/idcf/cli/lib/configure.rb +2 -2
- data/lib/idcf/cli/lib/convert/filter/field_filter.rb +9 -12
- data/lib/idcf/cli/lib/convert/filter/json_path_filter.rb +1 -1
- data/lib/idcf/cli/lib/convert/formatter/base.rb +1 -2
- data/lib/idcf/cli/lib/convert/formatter/csv_format.rb +15 -32
- data/lib/idcf/cli/lib/convert/formatter/json_format.rb +1 -1
- data/lib/idcf/cli/lib/convert/formatter/table_format.rb +2 -2
- data/lib/idcf/cli/lib/convert/formatter/xml_format.rb +1 -1
- data/lib/idcf/cli/lib/convert/helper.rb +16 -5
- data/lib/idcf/cli/lib/document.rb +45 -0
- data/lib/idcf/cli/lib/util/cli_file.rb +1 -1
- data/lib/idcf/cli/lib/util/cli_logger.rb +3 -3
- data/lib/idcf/cli/lib/util/ini_conf.rb +2 -2
- data/lib/idcf/cli/lib/util/input.rb +40 -5
- data/lib/idcf/cli/lib/util/yml_conf.rb +1 -1
- data/lib/idcf/cli/service/base.rb +6 -6
- data/lib/idcf/cli/service/ilb/base_server_for_protocol.rb +22 -18
- data/lib/idcf/cli/validate/custom/month_check_validator.rb +1 -1
- data/lib/idcf/cli/validate/custom/require_relation_validator.rb +2 -2
- data/lib/idcf/cli/validate/define/base.rb +3 -2
- data/lib/idcf/cli/version.rb +1 -1
- metadata +55 -68
- data/lib/idcf/cli/controller/cdn.rb +0 -37
@@ -1,5 +1,4 @@
|
|
1
1
|
require_relative './base'
|
2
|
-
require 'idcf/faraday_middleware/cdn_signature'
|
3
2
|
|
4
3
|
module Idcf
|
5
4
|
module Cli
|
@@ -16,7 +15,7 @@ module Idcf
|
|
16
15
|
|
17
16
|
class << self
|
18
17
|
def description
|
19
|
-
'Computeing Service
|
18
|
+
'Computeing Service'
|
20
19
|
end
|
21
20
|
end
|
22
21
|
|
@@ -38,6 +37,20 @@ module Idcf
|
|
38
37
|
faraday
|
39
38
|
end
|
40
39
|
|
40
|
+
def make_table_data(data)
|
41
|
+
return data unless data.class == Hash
|
42
|
+
keys = data.keys
|
43
|
+
return data unless keys.count == 2 && keys.include?('count')
|
44
|
+
data.each do |k, v|
|
45
|
+
return v unless k == 'count'
|
46
|
+
end
|
47
|
+
data
|
48
|
+
end
|
49
|
+
|
50
|
+
def make_field_data(data)
|
51
|
+
make_table_data(data)
|
52
|
+
end
|
53
|
+
|
41
54
|
# raise api error msg
|
42
55
|
#
|
43
56
|
# @param res [Faraday::Responce]
|
@@ -1,18 +1,24 @@
|
|
1
1
|
require 'idcf/cli/conf/const'
|
2
2
|
require 'idcf/cli/lib/api'
|
3
|
+
require 'idcf/cli/lib/document'
|
3
4
|
module Idcf
|
4
5
|
module Cli
|
5
6
|
module Controller
|
6
7
|
module Extend
|
7
8
|
# command
|
8
9
|
module Command
|
10
|
+
attr_reader :public_commands
|
11
|
+
|
9
12
|
# register schema method by link
|
10
13
|
#
|
11
14
|
# @param link [Idcf::JsonHyperSchema::Expands::LinkInfoBase]
|
12
15
|
def register_schema_method_by_link!(link)
|
13
|
-
param_str
|
16
|
+
param_str = Idcf::Cli::Lib::Api.command_param_str(link)
|
14
17
|
method_desc = "#{link.title} #{param_str}"
|
15
|
-
|
18
|
+
description = link.description
|
19
|
+
desc method_desc.strip, description
|
20
|
+
description = "#{description}\n\n#{Idcf::Cli::Lib::Document.make_document_desc(link)}"
|
21
|
+
long_desc description
|
16
22
|
define_method link.title.to_sym do |*args|
|
17
23
|
execute(__method__, *args)
|
18
24
|
end
|
@@ -43,6 +49,23 @@ module Idcf
|
|
43
49
|
method_option opn, option
|
44
50
|
end
|
45
51
|
end
|
52
|
+
|
53
|
+
def desc(usage, description, options = {})
|
54
|
+
super(usage, description, options)
|
55
|
+
@public_commands ||= []
|
56
|
+
cmd = usage.split(' ').shift
|
57
|
+
@public_commands << cmd unless @public_commands.include?(cmd)
|
58
|
+
end
|
59
|
+
|
60
|
+
def subcommand_structure
|
61
|
+
result = super
|
62
|
+
list = @public_commands
|
63
|
+
list.concat(superclass.public_commands) if superclass.respond_to?(:public_commands)
|
64
|
+
list.each do |cmd|
|
65
|
+
result[cmd] = nil unless result.key?(cmd)
|
66
|
+
end
|
67
|
+
result
|
68
|
+
end
|
46
69
|
end
|
47
70
|
end
|
48
71
|
end
|
@@ -22,7 +22,6 @@ module Idcf
|
|
22
22
|
def make_module_classes
|
23
23
|
return @m_classes if @m_classes
|
24
24
|
result = {}
|
25
|
-
add_classify_rule
|
26
25
|
|
27
26
|
make_service_paths.each do |fn, path|
|
28
27
|
require path
|
@@ -32,15 +31,6 @@ module Idcf
|
|
32
31
|
@m_classes = result
|
33
32
|
end
|
34
33
|
|
35
|
-
# add classify rule
|
36
|
-
def add_classify_rule
|
37
|
-
Idcf::Cli::Conf::Const::CLASSIFY_RULE.each do |rule|
|
38
|
-
ActiveSupport::Inflector.inflections do |inflect|
|
39
|
-
inflect.irregular(*rule)
|
40
|
-
end
|
41
|
-
end
|
42
|
-
end
|
43
|
-
|
44
34
|
# make service paths
|
45
35
|
#
|
46
36
|
# @return Hash
|
@@ -27,6 +27,18 @@ module Idcf
|
|
27
27
|
v = service_version(o)
|
28
28
|
"#{dir}/#{fn}_#{v}_#{region}.#{ext}"
|
29
29
|
end
|
30
|
+
|
31
|
+
# service version
|
32
|
+
#
|
33
|
+
# @param o [Hash]
|
34
|
+
# @return String
|
35
|
+
def service_version(o)
|
36
|
+
versions = service_versions(get_region(o))
|
37
|
+
result = o[:version].nil? ? versions.last : o[:version]
|
38
|
+
msg = "not found input version[#{o[:version]}]"
|
39
|
+
raise Idcf::Cli::Error::CliError, msg unless versions.include?(result)
|
40
|
+
result
|
41
|
+
end
|
30
42
|
end
|
31
43
|
end
|
32
44
|
end
|
@@ -54,7 +54,7 @@ module Idcf
|
|
54
54
|
def faraday_setting(faraday, o)
|
55
55
|
prof = Idcf::Cli::Lib::Configure.get_profile(o)
|
56
56
|
op = {}
|
57
|
-
[
|
57
|
+
%i[api_key secret_key].each do |v|
|
58
58
|
op[v] = o.key?(v) ? o[v] : Idcf::Cli::Lib::Configure.get_user_conf(v.to_s, prof)
|
59
59
|
end
|
60
60
|
faraday.request(faraday_request)
|
@@ -12,10 +12,10 @@ module Idcf
|
|
12
12
|
# @param err_f [Boolean]
|
13
13
|
# @param o [Hash]
|
14
14
|
# @return Stirng
|
15
|
-
def make_result_str(data,
|
15
|
+
def make_result_str(data, o)
|
16
16
|
message = data.class == Hash ? data[:message] : {}
|
17
17
|
f = output_format(o, message)
|
18
|
-
Idcf::Cli::Lib::Convert::Helper.new.format(data,
|
18
|
+
Idcf::Cli::Lib::Convert::Helper.new.format(data, f)
|
19
19
|
end
|
20
20
|
|
21
21
|
# output format
|
@@ -25,9 +25,7 @@ module Idcf
|
|
25
25
|
# @return String
|
26
26
|
def output_format(o, message)
|
27
27
|
default_output = Idcf::Cli::Lib::Configure.get_code_conf('output', o)
|
28
|
-
if message.class == Hash && !message[:output].nil?
|
29
|
-
return default_output
|
30
|
-
end
|
28
|
+
return default_output if message.class == Hash && !message[:output].nil?
|
31
29
|
|
32
30
|
f = o[:output]
|
33
31
|
f.nil? ? default_output : f
|
@@ -25,9 +25,7 @@ module Idcf
|
|
25
25
|
|
26
26
|
def make_profiles(config, o)
|
27
27
|
[].tap do |result|
|
28
|
-
if o[:profile] != 'default' && !check_profile?(config, 'default')
|
29
|
-
result << 'default'
|
30
|
-
end
|
28
|
+
result << 'default' if o[:profile] != 'default' && !check_profile?(config, 'default')
|
31
29
|
result << o[:profile]
|
32
30
|
end
|
33
31
|
end
|
@@ -35,7 +33,7 @@ module Idcf
|
|
35
33
|
def check_profile?(config, name)
|
36
34
|
conf = config[name]
|
37
35
|
return false if conf.nil?
|
38
|
-
Idcf::Cli::Conf::Const::USER_CONF_ITEMS.
|
36
|
+
Idcf::Cli::Conf::Const::USER_CONF_ITEMS.each_key do |k|
|
39
37
|
return false if conf[k.to_s].strip.empty?
|
40
38
|
end
|
41
39
|
true
|
@@ -37,7 +37,7 @@ module Idcf
|
|
37
37
|
def output_default_schema(service, version, regions)
|
38
38
|
return nil if regions.keys.include?('default')
|
39
39
|
latist = latest_schema(regions.values)
|
40
|
-
path
|
40
|
+
path = make_schema_file_path(service, version, 'default')
|
41
41
|
output_complement_file(JSON.pretty_generate(latist), path)
|
42
42
|
end
|
43
43
|
|
@@ -47,11 +47,11 @@ module Idcf
|
|
47
47
|
# @return Hash or nil
|
48
48
|
def latest_schema(schemas)
|
49
49
|
result = nil
|
50
|
-
v_str
|
50
|
+
v_str = '$version'
|
51
51
|
schemas.each do |data|
|
52
52
|
result ||= data
|
53
|
-
v1
|
54
|
-
v2
|
53
|
+
v1 = Gem::Version.create(data[v_str])
|
54
|
+
v2 = Gem::Version.create(result[v_str])
|
55
55
|
next unless v1 > v2
|
56
56
|
result = data
|
57
57
|
end
|
@@ -62,9 +62,9 @@ module Idcf
|
|
62
62
|
view = Idcf::Cli::Lib::Util::Template.new
|
63
63
|
view.set('variables', make_script_variables)
|
64
64
|
paths = {}
|
65
|
-
Idcf::Cli::Conf::Const::COMP_PATHS.
|
66
|
-
str
|
67
|
-
path
|
65
|
+
Idcf::Cli::Conf::Const::COMP_PATHS.each_key do |k|
|
66
|
+
str = view.fetch("#{k}/#{COMP_N}.erb")
|
67
|
+
path = "#{Idcf::Cli::Conf::Const::OUT_DIR}/#{COMP_N}.#{k}"
|
68
68
|
paths[k] = File.expand_path(path)
|
69
69
|
output_complement_file(str, paths[k])
|
70
70
|
end
|
@@ -82,7 +82,7 @@ module Idcf
|
|
82
82
|
end
|
83
83
|
|
84
84
|
def startup_script_qa(paths, script)
|
85
|
-
list = %w
|
85
|
+
list = %w[y N]
|
86
86
|
puts "Do you want to edit the startup script?(#{list.join('/')})"
|
87
87
|
puts "[#{startup_script_path(script)}]"
|
88
88
|
ans = Idcf::Cli::Lib::Util::Input.qa_answer_input(list)
|
@@ -106,7 +106,7 @@ module Idcf
|
|
106
106
|
# @param paths [Hash]
|
107
107
|
def output_startup_script(script, paths)
|
108
108
|
s_script_path = startup_script_path(script)
|
109
|
-
write_str
|
109
|
+
write_str = "source #{paths[script]}"
|
110
110
|
|
111
111
|
if write_path?(s_script_path, write_str)
|
112
112
|
File.open(s_script_path, 'a') do |f|
|
@@ -154,7 +154,7 @@ module Idcf
|
|
154
154
|
def output_manual_writing(paths)
|
155
155
|
puts 'please write in'
|
156
156
|
Idcf::Cli::Conf::Const::COMP_PATHS.each do |k, v|
|
157
|
-
puts v, paths[k]
|
157
|
+
puts v, "source #{paths[k]}"
|
158
158
|
end
|
159
159
|
end
|
160
160
|
|
@@ -169,20 +169,20 @@ module Idcf
|
|
169
169
|
# @param names [Array]
|
170
170
|
# @return Hash
|
171
171
|
def make_flat_variables(list, names = [])
|
172
|
-
{}
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
end
|
172
|
+
result = {}
|
173
|
+
name = names.empty? ? 'top' : names.join('_')
|
174
|
+
result[name] = list.keys
|
175
|
+
list.each do |k, v|
|
176
|
+
next unless v.class == Hash
|
177
|
+
names << k
|
178
|
+
result.merge!(make_flat_variables(v, names))
|
179
|
+
names.pop
|
181
180
|
end
|
181
|
+
result
|
182
182
|
end
|
183
183
|
|
184
184
|
def extract_commands(thor_class, commands)
|
185
|
-
thor_class.commands.
|
185
|
+
thor_class.commands.each_key do |k_c|
|
186
186
|
commands << k_c if commands.index(k_c).nil?
|
187
187
|
end
|
188
188
|
|
@@ -192,7 +192,7 @@ module Idcf
|
|
192
192
|
def extract_command_infos(t_class, s_name, infos)
|
193
193
|
commands = []
|
194
194
|
return extract_commands(t_class, commands) if infos[s_name].nil?
|
195
|
-
infos[s_name].
|
195
|
+
infos[s_name].each_key do |name|
|
196
196
|
commands << name.to_s
|
197
197
|
end
|
198
198
|
extract_commands(t_class, commands)
|
@@ -7,8 +7,17 @@ module Idcf
|
|
7
7
|
module Extend
|
8
8
|
# update file
|
9
9
|
module UpdateFile
|
10
|
-
BROKEN_UPDATE_FILE =
|
11
|
-
|
10
|
+
BROKEN_UPDATE_FILE = <<-TEXT.strip_heredoc.freeze
|
11
|
+
The update file is damaged.
|
12
|
+
Please consult with the administrator.
|
13
|
+
TEXT
|
14
|
+
BROKEN_JSON_SCHEMA = <<-TEXT.strip_heredoc.freeze
|
15
|
+
Failed to verify the update file.
|
16
|
+
Use the following commands to try updating the gem.
|
17
|
+
|
18
|
+
# gem update idcfcloud
|
19
|
+
# idcfcloud init
|
20
|
+
TEXT
|
12
21
|
|
13
22
|
protected
|
14
23
|
|
@@ -36,7 +45,7 @@ module Idcf
|
|
36
45
|
def download_schema_file(path)
|
37
46
|
d = file_load(path)
|
38
47
|
JSON.parse(d)
|
39
|
-
rescue
|
48
|
+
rescue StandardError => _e
|
40
49
|
Idcf::Cli::Lib::Util::CliLogger.info("json format error:#{path}")
|
41
50
|
raise Idcf::Cli::Error::CliError, BROKEN_UPDATE_FILE
|
42
51
|
end
|
@@ -49,16 +58,16 @@ module Idcf
|
|
49
58
|
def check_json_schema(j)
|
50
59
|
analyst = Idcf::JsonHyperSchema::Analyst.new
|
51
60
|
analyst.schema_links(j)
|
52
|
-
rescue => e
|
61
|
+
rescue StandardError => e
|
53
62
|
Idcf::Cli::Lib::Util::CliLogger.info('json-schema format error')
|
54
|
-
log_msg = "#{
|
63
|
+
log_msg = "#{BROKEN_JSON_SCHEMA}:#{e.message}"
|
55
64
|
Idcf::Cli::Lib::Util::CliLogger.error(log_msg)
|
56
|
-
raise Idcf::Cli::Error::CliError,
|
65
|
+
raise Idcf::Cli::Error::CliError, BROKEN_JSON_SCHEMA
|
57
66
|
end
|
58
67
|
|
59
68
|
def file_load(path)
|
60
|
-
open(path).read
|
61
|
-
rescue
|
69
|
+
URI.open(path).read
|
70
|
+
rescue StandardError => _e
|
62
71
|
nil
|
63
72
|
end
|
64
73
|
|
@@ -66,8 +75,10 @@ module Idcf
|
|
66
75
|
{}.tap do |result|
|
67
76
|
Idcf::Cli::Lib::Configure.get_code_conf(cls.service_name).each do |k, v|
|
68
77
|
regions = {}
|
69
|
-
v['region'].
|
70
|
-
|
78
|
+
v['region'].each_key do |region|
|
79
|
+
target = "#{cls.service_name}.#{k}.region.#{region}.schema"
|
80
|
+
url = Idcf::Cli::Lib::Configure.get_code_conf(target)
|
81
|
+
regions[region] = create_schema_url(url)
|
71
82
|
end
|
72
83
|
|
73
84
|
result[k] = regions
|
@@ -45,6 +45,22 @@ module Idcf
|
|
45
45
|
make_params(args[url_param_names.size])
|
46
46
|
end
|
47
47
|
|
48
|
+
def parent_titles(schema = nil)
|
49
|
+
result = []
|
50
|
+
if schema.present?
|
51
|
+
parent_schema = schema.parent
|
52
|
+
if parent_schema.present?
|
53
|
+
result << parent_schema.title if parent_schema.title.present?
|
54
|
+
result.concat(parent_titles(parent_schema))
|
55
|
+
end
|
56
|
+
else
|
57
|
+
result << title
|
58
|
+
result.concat(parent_titles(@data))
|
59
|
+
result.reverse!
|
60
|
+
end
|
61
|
+
result
|
62
|
+
end
|
63
|
+
|
48
64
|
protected
|
49
65
|
|
50
66
|
def make_result_api_params(target, args, api_result, resource_id)
|
@@ -79,7 +95,7 @@ module Idcf
|
|
79
95
|
def result_api_str(target, args, api_result, resource_id)
|
80
96
|
return resource_id if target == '#{resource_id}'
|
81
97
|
result_api_str_regexp(target, args, api_result)
|
82
|
-
rescue => e
|
98
|
+
rescue Standarderror => e
|
83
99
|
raise Idcf::Cli::Error::CliError, e.message
|
84
100
|
end
|
85
101
|
|
@@ -109,16 +125,16 @@ module Idcf
|
|
109
125
|
end
|
110
126
|
|
111
127
|
def make_query_params(param)
|
112
|
-
{}
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
end
|
128
|
+
result = {}
|
129
|
+
return result unless param.class == Hash
|
130
|
+
query_param_names.each do |k|
|
131
|
+
result[k] = param[k] if param.key?(k)
|
132
|
+
reg = Regexp.new("#{k}[\\.\\[].+")
|
133
|
+
param.each_key do |pk|
|
134
|
+
result[pk] = param[pk] if (reg =~ pk).present?
|
120
135
|
end
|
121
136
|
end
|
137
|
+
result
|
122
138
|
end
|
123
139
|
end
|
124
140
|
end
|
@@ -33,7 +33,8 @@ class Thor
|
|
33
33
|
file_name = File.basename(f, '.*')
|
34
34
|
next if file_name == 'base'
|
35
35
|
|
36
|
-
|
36
|
+
require_path = "#{b_path}/#{under_path}/#{file_name}"
|
37
|
+
command_regist(file_name, require_path, arg)
|
37
38
|
end
|
38
39
|
end
|
39
40
|
|
@@ -46,7 +47,8 @@ class Thor
|
|
46
47
|
require require_path
|
47
48
|
|
48
49
|
class_const = require_path.classify.constantize
|
49
|
-
class_const.init(arg)
|
50
|
+
class_const.init(arg) if arg.include?(command) || map.values.include?(command.to_sym)
|
51
|
+
|
50
52
|
register class_const,
|
51
53
|
command,
|
52
54
|
"#{command_help_string(command)} [OPTION]",
|
@@ -72,7 +74,7 @@ class Thor
|
|
72
74
|
|
73
75
|
def subcommand_structure
|
74
76
|
{}.tap do |result|
|
75
|
-
commands.
|
77
|
+
commands.each_key do |k|
|
76
78
|
result[k.to_s] = nil
|
77
79
|
end
|
78
80
|
result = subcommand_class_structure(result)
|
@@ -95,6 +97,7 @@ class Thor
|
|
95
97
|
|
96
98
|
def subcommand_class_structure(result)
|
97
99
|
subcommand_classes.each do |k, v|
|
100
|
+
v.init({})
|
98
101
|
commands = v.subcommand_structure
|
99
102
|
result[k.to_s] = nil
|
100
103
|
result[k.to_s] = commands unless commands.empty?
|