idcfcloud 0.2.0 → 0.2.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 +4 -4
- data/lib/idcf/cli/command/morio.rb +118 -0
- data/lib/idcf/cli/controller/cdn.rb +37 -0
- data/lib/idcf/cli/controller/compute.rb +79 -0
- data/lib/idcf/cli/controller/dns.rb +18 -0
- data/lib/idcf/cli/controller/extend/util.rb +34 -0
- data/lib/idcf/cli/controller/include/client.rb +86 -0
- data/lib/idcf/cli/error/api_error.rb +32 -0
- data/lib/idcf/cli/error/init.rb +2 -0
- data/lib/idcf/cli/gem_ext/idcf/json_hyper_schema/expands/link_info_base_extension.rb +129 -0
- data/lib/idcf/cli/lib/api.rb +165 -0
- data/lib/idcf/cli/lib/configure.rb +94 -0
- data/lib/idcf/cli/lib/convert/filter/base.rb +40 -0
- data/lib/idcf/cli/lib/convert/filter/field_filter.rb +73 -0
- data/lib/idcf/cli/lib/convert/filter/json_path_filter.rb +30 -0
- data/lib/idcf/cli/lib/include/recurring_calling.rb +27 -0
- data/lib/idcf/cli/lib/util/cli_file.rb +40 -0
- data/lib/idcf/cli/lib/util/cli_logger.rb +95 -0
- data/lib/idcf/cli/lib/util/input.rb +41 -0
- data/lib/idcf/cli/lib/util/name.rb +19 -0
- data/lib/idcf/cli/service/ilb/check_job.rb +46 -0
- data/lib/idcf/cli/service/ilb/sslalgorithms_ids.rb +34 -0
- data/lib/idcf/cli/validate/define/compute/base.rb +22 -0
- data/lib/idcf/cli/version.rb +1 -1
- metadata +23 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 006c01ce8038f63174fb320bc37e4ad21ad455e0
|
4
|
+
data.tar.gz: 36bacb9aeebc05e83339f76ebc7a5a25f597bba5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bc4302a93e69966e28aceb52c4c657ee8a0a5348f2c5485c7a9dd6f9ed92994b9c463cffc59769a0af2d178a416fa47a7e9d2004b4f43d4d7a64f7870dbdcebc
|
7
|
+
data.tar.gz: e667b317e5cd40612bd101be4679cac8a3a829e54e28b76d9e76c95e4e2f9df5c44f61a92ddcad25580acc8f917db23816c29fbe87d0bcfa1e325125c8916f06
|
@@ -0,0 +1,118 @@
|
|
1
|
+
require 'idcf/cli/conf/const'
|
2
|
+
require 'rbconfig'
|
3
|
+
require 'faraday'
|
4
|
+
require 'etc'
|
5
|
+
require 'objspace'
|
6
|
+
require 'open-uri'
|
7
|
+
require 'json'
|
8
|
+
require 'facter'
|
9
|
+
module Idcf
|
10
|
+
module Cli
|
11
|
+
module Command
|
12
|
+
# morio command
|
13
|
+
class Morio
|
14
|
+
MORIO_TXT = <<-'EOS'.freeze
|
15
|
+
-+sso+-
|
16
|
+
.... -ssssssso`
|
17
|
+
`-/ossssss+/. `ssssssso`
|
18
|
+
`/ssssssssssssso- /sssss+
|
19
|
+
.-:ossssssssssssssss` sssssss`
|
20
|
+
`/sssssssssssssssssssss.+sssssss.
|
21
|
+
`ossssssssssssssssssssss`osssssss`
|
22
|
+
/sssssssssssssssssssssss-ossssss+
|
23
|
+
:sssssssssssssssssssssssssssssso`
|
24
|
+
/ssssssssssssssssssssssssssss+`
|
25
|
+
./osssssssssssssssssssssss+.
|
26
|
+
`-:+oosssssssssssso+:.
|
27
|
+
``````````
|
28
|
+
EOS
|
29
|
+
ATTRIBUTES_OFF = "\e[0m".freeze
|
30
|
+
MORIO_COLOR = "\e[38;5;45m".freeze
|
31
|
+
TITLE_COLOR = "\e[38;5;45m".freeze
|
32
|
+
TEXT_COLOR = "\e[37m".freeze
|
33
|
+
|
34
|
+
attr_reader :client
|
35
|
+
|
36
|
+
def exec
|
37
|
+
morio_list = MORIO_TXT.split("\n")
|
38
|
+
max = max_length(morio_list)
|
39
|
+
contents = make_contents
|
40
|
+
|
41
|
+
morio_list.each_with_index do |line, idx|
|
42
|
+
fill_cnt = max - line.bytesize
|
43
|
+
fill = fill_cnt > 0 ? ''.ljust(fill_cnt, ' ') : ''
|
44
|
+
base_str = "#{MORIO_COLOR}#{line} #{fill}"
|
45
|
+
puts make_out_str(base_str, contents, idx)
|
46
|
+
end
|
47
|
+
puts ATTRIBUTES_OFF
|
48
|
+
end
|
49
|
+
|
50
|
+
private
|
51
|
+
|
52
|
+
def max_length(lists)
|
53
|
+
result = 0
|
54
|
+
lists.each do |line|
|
55
|
+
size = line.bytesize
|
56
|
+
result = size if result < size
|
57
|
+
end
|
58
|
+
result
|
59
|
+
end
|
60
|
+
|
61
|
+
def make_contents
|
62
|
+
result = [
|
63
|
+
['IDCF Cloud', ''],
|
64
|
+
['CLI', Idcf::Cli::Conf::Const::VERSION_STR]
|
65
|
+
]
|
66
|
+
result.concat(find_data_server)
|
67
|
+
result << []
|
68
|
+
result.concat(find_spec_data)
|
69
|
+
end
|
70
|
+
|
71
|
+
def find_data_server
|
72
|
+
[].tap do |result|
|
73
|
+
@client ||= create_client('http://data-server')
|
74
|
+
|
75
|
+
{
|
76
|
+
VMID: 'vm-id',
|
77
|
+
SPEC: 'service-offering',
|
78
|
+
ZONE: 'availability-zone'
|
79
|
+
}.each do |k, v|
|
80
|
+
data = @client.get("latest/meta-data/#{v}")
|
81
|
+
result << [k.to_s, data.body] if data.success?
|
82
|
+
end
|
83
|
+
end
|
84
|
+
rescue
|
85
|
+
[]
|
86
|
+
end
|
87
|
+
|
88
|
+
def find_spec_data
|
89
|
+
data = Etc.uname
|
90
|
+
[
|
91
|
+
['Host', data[:nodename]],
|
92
|
+
['OS', Facter.value(:operatingsystem)],
|
93
|
+
['Kernel', "#{data[:sysname]} #{data[:release]} #{data[:machine]}"],
|
94
|
+
['CPU(s)', Etc.nprocessors],
|
95
|
+
['MEM', Facter.value(:memorysize)]
|
96
|
+
]
|
97
|
+
end
|
98
|
+
|
99
|
+
def create_client(url)
|
100
|
+
Faraday.new(url: url) do |faraday|
|
101
|
+
faraday.adapter Faraday.default_adapter
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
105
|
+
def make_out_str(base_str, contents, idx)
|
106
|
+
add_str = ''
|
107
|
+
content = contents[idx]
|
108
|
+
if content && content.class == Array && content.size == 2
|
109
|
+
title = content[1].present? ? "#{content[0]} : " : content[0]
|
110
|
+
txt = content[1].present? ? content[1] : ''
|
111
|
+
add_str = format(" #{TITLE_COLOR}%s#{TEXT_COLOR}%s", title, txt)
|
112
|
+
end
|
113
|
+
"#{base_str}#{add_str}"
|
114
|
+
end
|
115
|
+
end
|
116
|
+
end
|
117
|
+
end
|
118
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
require_relative './base'
|
2
|
+
require 'idcf/faraday_middleware/cdn_signature'
|
3
|
+
|
4
|
+
module Idcf
|
5
|
+
module Cli
|
6
|
+
module Controller
|
7
|
+
# CDN
|
8
|
+
class Cdn < Base
|
9
|
+
default_command :help
|
10
|
+
|
11
|
+
class << self
|
12
|
+
def description
|
13
|
+
'Contents Cache Service'
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
protected
|
18
|
+
|
19
|
+
# signeture
|
20
|
+
#
|
21
|
+
# @return String
|
22
|
+
def signature
|
23
|
+
Idcf::FaradayMiddleware::CdnSignature
|
24
|
+
end
|
25
|
+
|
26
|
+
# raise api error msg
|
27
|
+
#
|
28
|
+
# @param res [Faraday::Responce]
|
29
|
+
# @return [String]
|
30
|
+
def raise_api_error_msg(res)
|
31
|
+
"HTTP status code: #{res.status}, " \
|
32
|
+
"Error message: #{res.body['messages']}, "
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,79 @@
|
|
1
|
+
require_relative './base'
|
2
|
+
require 'idcf/faraday_middleware/cdn_signature'
|
3
|
+
|
4
|
+
module Idcf
|
5
|
+
module Cli
|
6
|
+
module Controller
|
7
|
+
# compute
|
8
|
+
class Compute < Base
|
9
|
+
default_command :help
|
10
|
+
|
11
|
+
class_option :region,
|
12
|
+
type: :string,
|
13
|
+
aliases: '-r',
|
14
|
+
require: true,
|
15
|
+
desc: 'region: jp-east/jp-east-2/jp-west'
|
16
|
+
|
17
|
+
class << self
|
18
|
+
def description
|
19
|
+
'Computeing Service(beta)'
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
protected
|
24
|
+
|
25
|
+
# signeture
|
26
|
+
#
|
27
|
+
# @return String
|
28
|
+
def signature
|
29
|
+
Idcf::FaradayMiddleware::ComputingSignature
|
30
|
+
end
|
31
|
+
|
32
|
+
def faraday_request
|
33
|
+
:url_encoded
|
34
|
+
end
|
35
|
+
|
36
|
+
def faraday_options(faraday)
|
37
|
+
faraday.options.params_encoder = Faraday::FlatParamsEncoder
|
38
|
+
faraday
|
39
|
+
end
|
40
|
+
|
41
|
+
# raise api error msg
|
42
|
+
#
|
43
|
+
# @param res [Faraday::Responce]
|
44
|
+
# @return [String]
|
45
|
+
def raise_api_error_msg(res)
|
46
|
+
body = api_result(res.body)
|
47
|
+
"HTTP status code: #{res.status}, " \
|
48
|
+
"Error message: #{body['errortext']}"
|
49
|
+
end
|
50
|
+
|
51
|
+
def api_result(val)
|
52
|
+
val[val.keys.first]
|
53
|
+
end
|
54
|
+
|
55
|
+
def async_id(resource)
|
56
|
+
return resource['jobid'] if !resource.nil? && resource.class == Hash
|
57
|
+
nil
|
58
|
+
end
|
59
|
+
|
60
|
+
def do_async(api, api_result, _o, _executed_link)
|
61
|
+
result = recurring_calling(:query_async, [api, async_id(api_result)], 24) do |res|
|
62
|
+
api_result(res)['jobstatus'] != 0
|
63
|
+
end
|
64
|
+
result = api_result(result)
|
65
|
+
result = result['jobresult'] if result.class == Hash
|
66
|
+
return result if result.nil? || result['errorcode'].present?
|
67
|
+
api_result(result)
|
68
|
+
end
|
69
|
+
|
70
|
+
def query_async(api, job_id)
|
71
|
+
params = {
|
72
|
+
'jobid' => job_id
|
73
|
+
}
|
74
|
+
api.do(:queryAsyncJobResult, params)
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
require 'idcf/cli/lib/configure'
|
2
|
+
module Idcf
|
3
|
+
module Cli
|
4
|
+
module Controller
|
5
|
+
module Extend
|
6
|
+
# util
|
7
|
+
module Util
|
8
|
+
# get region
|
9
|
+
#
|
10
|
+
# @param o [Hash] options
|
11
|
+
# @param read_conf [Boolean]
|
12
|
+
# @return String
|
13
|
+
def get_region(o)
|
14
|
+
flg = !class_options[:region].nil?
|
15
|
+
Idcf::Cli::Lib::Configure.get_region(o, flg)
|
16
|
+
end
|
17
|
+
|
18
|
+
# make schema path
|
19
|
+
#
|
20
|
+
# @param o [Hash]
|
21
|
+
# @return String
|
22
|
+
def make_schema_path(o)
|
23
|
+
fn = name.underscore.split('/').pop
|
24
|
+
dir = Idcf::Cli::Conf::Const::CMD_FILE_DIR
|
25
|
+
ext = Idcf::Cli::Conf::Const::CMD_FILE_EXT
|
26
|
+
region = get_region(o)
|
27
|
+
v = service_version(o)
|
28
|
+
"#{dir}/#{fn}_#{v}_#{region}.#{ext}"
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,86 @@
|
|
1
|
+
require 'idcf/faraday_middleware'
|
2
|
+
|
3
|
+
module Idcf
|
4
|
+
module Cli
|
5
|
+
module Controller
|
6
|
+
module Include
|
7
|
+
# client
|
8
|
+
module Client
|
9
|
+
protected
|
10
|
+
|
11
|
+
# Create a new client
|
12
|
+
#
|
13
|
+
# @param o [Hash] other options
|
14
|
+
# @param region [String]
|
15
|
+
# @return [Response] Mixed
|
16
|
+
def make_client(o, region)
|
17
|
+
Faraday::Request.register_middleware(
|
18
|
+
signature: signature
|
19
|
+
)
|
20
|
+
|
21
|
+
Faraday.new(url: make_host(o, region), ssl: make_ssl_option(o)) do |faraday|
|
22
|
+
faraday_setting(faraday, o)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
# signeture
|
27
|
+
#
|
28
|
+
# @return String
|
29
|
+
def signature
|
30
|
+
Idcf::FaradayMiddleware::Signature
|
31
|
+
end
|
32
|
+
|
33
|
+
def make_host(o, region)
|
34
|
+
protocol = o.key?(:no_ssl) ? 'http' : 'https'
|
35
|
+
v = self.class.service_version(o)
|
36
|
+
path = "#{self.class.service_name}.#{v}.region.#{region}.host"
|
37
|
+
host = Idcf::Cli::Lib::Configure.get_code_conf(path, o)
|
38
|
+
"#{protocol}://#{host}"
|
39
|
+
end
|
40
|
+
|
41
|
+
# ssl option
|
42
|
+
#
|
43
|
+
# @param o [Hash] options
|
44
|
+
# @return Hash
|
45
|
+
def make_ssl_option(o)
|
46
|
+
{ verify: o.key?(:no_vssl) ? false : true }
|
47
|
+
end
|
48
|
+
|
49
|
+
# setting
|
50
|
+
#
|
51
|
+
# @param faraday [Faraday]
|
52
|
+
# @param o [Hash] options
|
53
|
+
# @return Faraday
|
54
|
+
def faraday_setting(faraday, o)
|
55
|
+
prof = Idcf::Cli::Lib::Configure.get_profile(o)
|
56
|
+
op = {}
|
57
|
+
[:api_key, :secret_key].each do |v|
|
58
|
+
op[v] = o.key?(v) ? o[v] : Idcf::Cli::Lib::Configure.get_user_conf(v.to_s, prof)
|
59
|
+
end
|
60
|
+
faraday.request(faraday_request)
|
61
|
+
faraday.request(:signature, op)
|
62
|
+
faraday.response(:json)
|
63
|
+
faraday.adapter Faraday.default_adapter
|
64
|
+
faraday_headers(faraday)
|
65
|
+
faraday_options(faraday)
|
66
|
+
end
|
67
|
+
|
68
|
+
def faraday_request
|
69
|
+
:json
|
70
|
+
end
|
71
|
+
|
72
|
+
def faraday_headers(faraday)
|
73
|
+
Idcf::Cli::Conf::Const::HEADERS.each do |k, v|
|
74
|
+
faraday.headers[k] = v
|
75
|
+
end
|
76
|
+
faraday
|
77
|
+
end
|
78
|
+
|
79
|
+
def faraday_options(faraday)
|
80
|
+
faraday
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
module Idcf
|
2
|
+
module Cli
|
3
|
+
module Error
|
4
|
+
# api error
|
5
|
+
class ApiError < StandardError
|
6
|
+
attr_reader :responce
|
7
|
+
|
8
|
+
def initialize(res)
|
9
|
+
@responce = res
|
10
|
+
end
|
11
|
+
|
12
|
+
def status
|
13
|
+
responce.status
|
14
|
+
end
|
15
|
+
|
16
|
+
def message
|
17
|
+
msg = super
|
18
|
+
return msg unless msg.empty?
|
19
|
+
responce.body.to_param
|
20
|
+
end
|
21
|
+
|
22
|
+
def body
|
23
|
+
responce.body
|
24
|
+
end
|
25
|
+
|
26
|
+
def headers
|
27
|
+
responce.headers
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,129 @@
|
|
1
|
+
module Idcf
|
2
|
+
module JsonHyperSchema
|
3
|
+
module Expands
|
4
|
+
# Link Info Base ext
|
5
|
+
module LinkInfoBaseExtension
|
6
|
+
# is async
|
7
|
+
#
|
8
|
+
# @return Boolean
|
9
|
+
def async?
|
10
|
+
!!@data.data['$async']
|
11
|
+
end
|
12
|
+
|
13
|
+
# result api link title
|
14
|
+
#
|
15
|
+
# @return [String]
|
16
|
+
def result_api_title
|
17
|
+
res = @data.data['$result']
|
18
|
+
res && res['title'] ? res['title'] : ''
|
19
|
+
end
|
20
|
+
|
21
|
+
# result api params
|
22
|
+
#
|
23
|
+
# @params args [Array]
|
24
|
+
# @params api_result [Hash]
|
25
|
+
# @params resource_id [String]
|
26
|
+
# @return [Array]
|
27
|
+
def result_api_params(args, api_result, resource_id = nil)
|
28
|
+
return [] if @data.data['$result'].nil?
|
29
|
+
arg = Marshal.load(Marshal.dump(args))
|
30
|
+
target = @data.data['$result']['params']
|
31
|
+
target = target.nil? ? [] : target
|
32
|
+
raise Idcf::Cli::Error::CliError, 'params is not Array' unless target.class == Array
|
33
|
+
result = make_result_api_params(target, arg, api_result, resource_id)
|
34
|
+
result
|
35
|
+
end
|
36
|
+
|
37
|
+
def make_uri_for_cli(args)
|
38
|
+
param_size = url_param_names.size
|
39
|
+
url_params = args.slice(0, param_size)
|
40
|
+
params = args[param_size]
|
41
|
+
make_uri(url_params, params)
|
42
|
+
end
|
43
|
+
|
44
|
+
def make_params_for_cli(args)
|
45
|
+
make_params(args[url_param_names.size])
|
46
|
+
end
|
47
|
+
|
48
|
+
protected
|
49
|
+
|
50
|
+
def make_result_api_params(target, args, api_result, resource_id)
|
51
|
+
case target
|
52
|
+
when Hash
|
53
|
+
result_api_hash(target, args, api_result, resource_id)
|
54
|
+
when Array
|
55
|
+
result_api_array(target, args, api_result, resource_id)
|
56
|
+
when String
|
57
|
+
result_api_str(target, args, api_result, resource_id)
|
58
|
+
else
|
59
|
+
target
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
def result_api_hash(target, args, api_result, resource_id)
|
64
|
+
{}.tap do |result|
|
65
|
+
target.each do |k, v|
|
66
|
+
result[k] = make_result_api_params(v, args, api_result, resource_id)
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
def result_api_array(target, args, api_result, resource_id)
|
72
|
+
[].tap do |result|
|
73
|
+
target.each do |v|
|
74
|
+
result << make_result_api_params(v, args, api_result, resource_id)
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
def result_api_str(target, args, api_result, resource_id)
|
80
|
+
return resource_id if target == '#{resource_id}'
|
81
|
+
result_api_str_regexp(target, args, api_result)
|
82
|
+
rescue => e
|
83
|
+
raise Idcf::Cli::Error::CliError, e.message
|
84
|
+
end
|
85
|
+
|
86
|
+
def result_api_str_regexp(target, args, api_result)
|
87
|
+
result = target
|
88
|
+
case target
|
89
|
+
when Regexp.new('\A#\{(.+)\}\Z')
|
90
|
+
result = args[url_param_names.index(Regexp.last_match(1))]
|
91
|
+
when Regexp.new('\Aresult\[(.*)\]\Z')
|
92
|
+
result = result_api_str_result(api_result, Regexp.last_match(1))
|
93
|
+
end
|
94
|
+
result
|
95
|
+
end
|
96
|
+
|
97
|
+
def result_api_str_result(data, path)
|
98
|
+
result = data.deep_dup
|
99
|
+
path.split('.').each do |k|
|
100
|
+
case result
|
101
|
+
when Array
|
102
|
+
result = result[k.to_i]
|
103
|
+
when Hash
|
104
|
+
raise Idcf::Cli::Error::CliError, 'not found result key' unless result.key?(k)
|
105
|
+
result = result[k]
|
106
|
+
end
|
107
|
+
end
|
108
|
+
result
|
109
|
+
end
|
110
|
+
|
111
|
+
def make_query_params(param)
|
112
|
+
{}.tap do |result|
|
113
|
+
next unless param.class == Hash
|
114
|
+
query_param_names.each do |k|
|
115
|
+
result[k] = param[k] if param.key?(k)
|
116
|
+
reg = Regexp.new("#{k}[\\.\\[].+")
|
117
|
+
param.keys.each do |pk|
|
118
|
+
result[pk] = param[pk] if (reg =~ pk).present?
|
119
|
+
end
|
120
|
+
end
|
121
|
+
end
|
122
|
+
end
|
123
|
+
end
|
124
|
+
end
|
125
|
+
end
|
126
|
+
end
|
127
|
+
|
128
|
+
link_base = Idcf::JsonHyperSchema::Expands::LinkInfoBase
|
129
|
+
link_base.prepend(Idcf::JsonHyperSchema::Expands::LinkInfoBaseExtension)
|