idcfcloud 0.1.4 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
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
@@ -5,14 +5,7 @@ module Idcf
5
5
  # override methods
6
6
  module Override
7
7
  def description
8
- raise Idcf::Cli::CliError, 'Require override'
9
- end
10
-
11
- # blank client
12
- #
13
- # @return Mixed
14
- def make_blank_client
15
- # blank client
8
+ raise Idcf::Cli::Error::CliError, 'Require override'
16
9
  end
17
10
  end
18
11
  end
@@ -22,6 +22,8 @@ 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
  make_service_paths.each do |fn, path|
26
28
  require path
27
29
  result[fn] = path.classify.constantize
@@ -30,6 +32,18 @@ module Idcf
30
32
  @m_classes = result
31
33
  end
32
34
 
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
+ # make service paths
45
+ #
46
+ # @return Hash
33
47
  def make_service_paths
34
48
  s_name = make_model_name
35
49
  base_path = Idcf::Cli::Conf::Const::BASE_PATH
@@ -1,5 +1,4 @@
1
1
  require_relative './base'
2
- require 'idcf/ilb'
3
2
 
4
3
  module Idcf
5
4
  module Cli
@@ -12,49 +11,21 @@ module Idcf
12
11
  type: :string,
13
12
  aliases: '-r',
14
13
  require: true,
15
- desc: "region: #{Idcf::Cli::Conf::Const::REGIONS.join('/')}"
14
+ desc: 'region: jp-east/jp-east-2/jp-west'
16
15
 
17
16
  class << self
18
17
  def description
19
18
  'ILB Service'
20
19
  end
21
-
22
- def make_blank_client
23
- Idcf::Ilb::Client.new(
24
- api_key: '',
25
- secret_key: ''
26
- )
27
- end
28
20
  end
29
21
 
30
22
  protected
31
23
 
32
- def resource_classes
33
- [
34
- Idcf::Ilb::Response,
35
- Idcf::Ilb::Resources::Base
36
- ]
37
- end
38
-
39
- def responce_classes
40
- [
41
- Idcf::Ilb::Response
42
- ]
43
- end
44
-
45
- # Create a new client
46
- # @param o [Hash] other options
47
- # @return [Response] Idcf::Ilb::Client
48
- def make_client(o)
49
- region = get_region(o)
50
- option = {
51
- host: get_code_conf("ilb.v1.host.#{region}", o),
52
- ssl: o.key?(:no_ssl) ? false : true,
53
- verify_ssl: o.key?(:no_vssl) ? false : true
54
- }
55
- option.merge!(base_options(o))
24
+ def do_async(_api, api_result, o, _executed_link)
25
+ job_id = api_result['job_id']
26
+ return nil unless do_command('check_job', job_id, o)
56
27
 
57
- Idcf::Ilb::Client.new(option)
28
+ do_command('get_job', job_id, o)
58
29
  end
59
30
  end
60
31
  end
@@ -1,4 +1,5 @@
1
1
  require 'idcf/cli/conf/const'
2
+ require 'uri'
2
3
  module Idcf
3
4
  module Cli
4
5
  module Controller
@@ -9,96 +10,22 @@ module Idcf
9
10
 
10
11
  protected
11
12
 
13
+ # convert arg json
14
+ # json string to Hash
15
+ #
16
+ # @param args [Array]
17
+ # @return Array
12
18
  def convert_arg_json(*args)
13
19
  result = []
14
20
  args.each do |v|
15
21
  begin
16
- result << JSON.parse(v, symbolize_names: true)
22
+ result << JSON.parse(v, symbolize_names: false)
17
23
  rescue
18
24
  result << v
19
25
  end
20
26
  end
21
27
  result
22
28
  end
23
-
24
- # check params
25
- #
26
- # @param mcs [Array] module classes
27
- # @option mcs [Object] not namespace class name => model class object
28
- # @param command [String]
29
- # @param *args [Array]
30
- # @raise
31
- def check_params(mcs, command, *args)
32
- m_class = nil
33
- mcs.each do |k, v|
34
- m_class = v if k == command.to_s
35
- end
36
- if m_class.nil?
37
- settings = load_command_setting(command)
38
- between_param?(settings[:params], args.size)
39
- else
40
- between_param?(m_class.params, args.size)
41
- end
42
- end
43
-
44
- def load_command_setting(command)
45
- fn = self.class.to_s.underscore.split('/').pop
46
- cm = command.to_sym
47
- dir = Idcf::Cli::Conf::Const::CMD_FILE_DIR
48
- ext = Idcf::Cli::Conf::Const::CMD_FILE_EXT
49
- path = "#{dir}/#{fn}.#{ext}"
50
- Idcf::Cli::Lib::Util::YmlConf.new(path).find(cm)
51
- end
52
-
53
- # between params
54
- #
55
- # @param params [Array]
56
- # @param arg_size [int]
57
- # @raise
58
- def between_param?(params, arg_size)
59
- p_cnt = params.nil? ? 0 : params.size
60
- return true if method_rest?(params)
61
- opt_cnt = method_option_cnt(params)
62
-
63
- min = p_cnt - opt_cnt
64
- msg = format('Argument: %s', self.class.make_param_s(params))
65
-
66
- return if arg_size.between?(min, p_cnt)
67
- raise Idcf::Cli::CliError, msg
68
- end
69
-
70
- # is rest
71
- #
72
- # @param params [Array]
73
- # @return Boolean
74
- def method_rest?(params)
75
- unless params.nil?
76
- params.each do |param|
77
- case param[:arg_type]
78
- when 'rest'
79
- return true
80
- end
81
- end
82
- end
83
- false
84
- end
85
-
86
- # option count
87
- #
88
- # @param params [Array]
89
- # @return int
90
- def method_option_cnt(params)
91
- result = 0
92
- unless params.nil?
93
- params.each do |param|
94
- case param[:arg_type]
95
- when 'opt'
96
- result += 1
97
- end
98
- end
99
- end
100
- result
101
- end
102
29
  end
103
30
  end
104
31
  end
@@ -1,19 +1,17 @@
1
- require_relative './override'
2
1
  require_relative './validate'
3
2
  require_relative './command'
4
3
  require_relative './util'
5
- require_relative './sdk'
4
+ require_relative './client'
6
5
  module Idcf
7
6
  module Cli
8
7
  module Controller
9
8
  module Include
10
9
  # init load
11
10
  module Init
12
- include Override
13
11
  include Validate
14
12
  include Command
15
13
  include Util
16
- include Sdk
14
+ include Client
17
15
  end
18
16
  end
19
17
  end
@@ -6,68 +6,6 @@ module Idcf
6
6
  module Util
7
7
  protected
8
8
 
9
- # get user config value
10
- #
11
- # @param name [String]
12
- # @param profile [String]
13
- # @return String or Hash
14
- # @raise
15
- def get_user_conf(name, profile = 'default')
16
- return @config.find(name, profile) if @config
17
- @config = make_user_conf
18
- msg = 'Run the command `configure`'
19
- raise Idcf::Cli::CliError, msg unless @config
20
-
21
- @config.find(name, profile)
22
- end
23
-
24
- def make_user_conf
25
- [
26
- Idcf::Cli::Conf::Const::USER_CONF_PATH,
27
- Idcf::Cli::Conf::Const::USER_CONF_GLOBAL
28
- ].each do |v|
29
- result = Idcf::Cli::Lib::Util::IniConf.new(v)
30
- return result unless result.load_error?
31
- end
32
- nil
33
- end
34
-
35
- # get code setting value
36
- #
37
- # @param path [String]
38
- # @return String or Hash
39
- # @raise
40
- def get_code_conf(path, o)
41
- profile = get_profile(o)
42
-
43
- return get_user_conf(path, profile)
44
- rescue
45
- return @code_conf.find(path) if @code_conf
46
- f_path = Idcf::Cli::Conf::Const::CODE_CONF_PATH
47
- @code_conf = Idcf::Cli::Lib::Util::YmlConf.new(f_path)
48
- @code_conf.find(path)
49
- end
50
-
51
- # get profile
52
- #
53
- # @param o [Hash] options
54
- # @return String
55
- def get_profile(o)
56
- o[:profile] || 'default'
57
- end
58
-
59
- # get region
60
- #
61
- # @param o [Hash] options
62
- # @return String
63
- def get_region(o)
64
- return o[:region] if o[:region]
65
- region = get_user_conf('region')
66
- region.empty? ? 'default' : region
67
- rescue
68
- 'default'
69
- end
70
-
71
9
  # make result string
72
10
  #
73
11
  # @param data [Hash]
@@ -86,7 +24,7 @@ module Idcf
86
24
  # @param message [Hash] Validate Hash
87
25
  # @return String
88
26
  def output_format(o, message)
89
- default_output = get_code_conf('output', o)
27
+ default_output = Idcf::Cli::Lib::Configure.get_code_conf('output', o)
90
28
  if message.class == Hash && !message[:output].nil?
91
29
  return default_output
92
30
  end
@@ -94,6 +32,25 @@ module Idcf
94
32
  f = o[:output]
95
33
  f.nil? ? default_output : f
96
34
  end
35
+
36
+ # cli error
37
+ #
38
+ # @param msg [Strring]
39
+ # @raise
40
+ def cli_error(msg)
41
+ raise Idcf::Cli::Error::CliError, msg
42
+ end
43
+
44
+ # make response base data
45
+ #
46
+ # @return Hash
47
+ def make_base_response
48
+ {
49
+ status: 200,
50
+ message: '',
51
+ data: []
52
+ }
53
+ end
97
54
  end
98
55
  end
99
56
  end
@@ -45,6 +45,12 @@ module Idcf
45
45
  load_validate(paths, o)
46
46
  end
47
47
 
48
+ # load validate
49
+ #
50
+ # @param paths [Array]
51
+ # @param o [Hash] Validator
52
+ # @return class
53
+ # @raise
48
54
  def load_validate(paths, o)
49
55
  paths.each do |path|
50
56
  begin
@@ -54,7 +60,7 @@ module Idcf
54
60
  next
55
61
  end
56
62
  end
57
- raise Idcf::Cli::CliError, 'Validate load error'
63
+ cli_error 'Validate load error'
58
64
  end
59
65
 
60
66
  # make validation error
@@ -1,5 +1,4 @@
1
1
  require_relative './base'
2
- require 'idcf/your'
3
2
 
4
3
  module Idcf
5
4
  module Cli
@@ -12,13 +11,6 @@ module Idcf
12
11
  def description
13
12
  'Your Service'
14
13
  end
15
-
16
- def make_blank_client
17
- Idcf::Your::Client.new(
18
- api_key: '',
19
- secret_key: ''
20
- )
21
- end
22
14
  end
23
15
 
24
16
  protected
@@ -26,31 +18,6 @@ module Idcf
26
18
  def make_table_data(data)
27
19
  data['data']
28
20
  end
29
-
30
- def resource_classes
31
- [
32
- Idcf::Your::Response
33
- ]
34
- end
35
-
36
- def responce_classes
37
- [
38
- Idcf::Your::Response
39
- ]
40
- end
41
-
42
- # Create a new client
43
- # @param o [Hash] other options
44
- # @return [Response] Idcf::Ilb::Client
45
- def make_client(o)
46
- option = {
47
- host: get_code_conf('your.v1.host', o),
48
- verify_ssl: o.key?(:no_vssl) ? false : true
49
- }
50
- option.merge!(base_options(o))
51
-
52
- Idcf::Your::Client.new(option)
53
- end
54
21
  end
55
22
  end
56
23
  end
@@ -1,10 +1,12 @@
1
1
  module Idcf
2
2
  module Cli
3
- # cli custom error
4
- class CliError < StandardError
5
- def message
6
- msg = super
7
- "#{Idcf::Cli::Conf::Const::LOCAL_ERROR_PREFIX}#{msg}"
3
+ module Error
4
+ # cli custom error
5
+ class CliError < StandardError
6
+ def message
7
+ msg = super
8
+ "#{Idcf::Cli::Conf::Const::LOCAL_ERROR_PREFIX}#{msg}"
9
+ end
8
10
  end
9
11
  end
10
12
  end
@@ -8,22 +8,28 @@ module Idcf
8
8
  module Configure
9
9
  protected
10
10
 
11
- def do_configure(o)
11
+ # configure settings
12
+ #
13
+ # @param o [Hash]
14
+ # @param init_f [Boolean]
15
+ def do_configure(o, init_f = false)
12
16
  path = configure_path(o)
13
17
  config = Idcf::Cli::Lib::Util::IniConf.new(path)
14
- profiles = []
15
- if o[:profile] != 'default' && !check_profile?(config, 'default')
16
- profiles << 'default'
17
- end
18
- profiles << o[:profile]
19
- config = configure_input(config, profiles)
20
- config.write(path)
18
+ profiles = make_profiles(config, o)
19
+ cls = Idcf::Cli::Conf::Const
20
+ prefix = o[:global] ? 'global' : 'local'
21
+ configure_input(config, profiles, cls::USER_CONF_ITEMS, prefix).write(path)
22
+
23
+ global_setting if init_f
21
24
  end
22
25
 
23
- def configure_path(o)
24
- cls = Idcf::Cli::Conf::Const
25
- result = o[:global] ? cls::USER_CONF_GLOBAL : cls::USER_CONF_PATH
26
- File.expand_path(result)
26
+ def make_profiles(config, o)
27
+ [].tap do |result|
28
+ if o[:profile] != 'default' && !check_profile?(config, 'default')
29
+ result << 'default'
30
+ end
31
+ result << o[:profile]
32
+ end
27
33
  end
28
34
 
29
35
  def check_profile?(config, name)
@@ -32,38 +38,37 @@ module Idcf
32
38
  Idcf::Cli::Conf::Const::USER_CONF_ITEMS.each do |k, _v|
33
39
  return false if conf[k.to_s].strip.empty?
34
40
  end
35
-
36
41
  true
37
42
  end
38
43
 
39
- def configure_input(config, profiles)
44
+ def global_setting
45
+ cls = Idcf::Cli::Conf::Const
46
+ path = cls::USER_CONF_GLOBAL
47
+ config = Idcf::Cli::Lib::Util::IniConf.new(File.expand_path(path))
48
+ configure_input(config, ['default'], cls::GLOBAL_CONF_ITEMS).write(path)
49
+ end
50
+
51
+ def configure_path(o)
52
+ cls = Idcf::Cli::Conf::Const
53
+ result = o[:global] ? cls::USER_CONF_GLOBAL : cls::USER_CONF_PATH
54
+ File.expand_path(result)
55
+ end
56
+
57
+ def configure_input(config, profiles, items, prefix = 'global')
40
58
  profiles.each do |profile|
41
59
  dt = config[profile] || {}
42
- Idcf::Cli::Conf::Const::USER_CONF_ITEMS.each do |k, v|
43
- nd = dt[k.to_s].nil? ? '' : dt[k.to_s]
44
- msg = "#{profile}:#{k}[#{nd.empty? ? 'NONE' : nd}] : "
45
- dt[k.to_s] = configure_qa_dialog(msg, nd, v)
60
+ items.each do |k, v|
61
+ key_s = k.to_s
62
+ nd = dt[key_s].nil? ? setting_extraction(v, :default).to_s : dt[key_s]
63
+ dt[key_s] = Idcf::Cli::Lib::Util::Input.qa("#{prefix}[#{profile}]:#{k}", v, nd)
46
64
  end
47
65
  config[profile] = dt
48
66
  end
49
67
  config
50
68
  end
51
69
 
52
- def configure_qa_dialog(msg, nd, setting)
53
- loop do
54
- puts msg
55
- res = STDIN.gets.strip
56
- next unless !res.empty? || !nd.empty?
57
- result = res.empty? ? nd : res
58
- return result if confirmation_at_qa_preference?(result, setting)
59
- puts "from this [#{setting.join('/')}]"
60
- end
61
- end
62
-
63
- def confirmation_at_qa_preference?(val, setting)
64
- return true if setting.nil?
65
- return true if Regexp.new("\\A(#{setting.join('|')})\\Z") =~ val
66
- false
70
+ def setting_extraction(setting, key)
71
+ setting.class == Hash ? setting[key] : nil
67
72
  end
68
73
  end
69
74
  end