saklient 0.0.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.
Files changed (218) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +21 -0
  3. data/Gemfile +4 -0
  4. data/LICENSE.txt +22 -0
  5. data/README.md +43 -0
  6. data/Rakefile +1 -0
  7. data/config.sh.sample +5 -0
  8. data/example.rb +83 -0
  9. data/example.sh +6 -0
  10. data/lib/saklient/cloud/api.rb +382 -0
  11. data/lib/saklient/cloud/client.rb +111 -0
  12. data/lib/saklient/cloud/enums/eappliance_class.rb +39 -0
  13. data/lib/saklient/cloud/enums/eavailability.rb +79 -0
  14. data/lib/saklient/cloud/enums/edisk_connection.rb +39 -0
  15. data/lib/saklient/cloud/enums/escope.rb +39 -0
  16. data/lib/saklient/cloud/enums/escript_class.rb +39 -0
  17. data/lib/saklient/cloud/enums/eserver_instance_status.rb +44 -0
  18. data/lib/saklient/cloud/enums/estorage_class.rb +34 -0
  19. data/lib/saklient/cloud/errors/access_api_key_disabled_exception.rb +23 -0
  20. data/lib/saklient/cloud/errors/access_sakura_exception.rb +23 -0
  21. data/lib/saklient/cloud/errors/access_staff_exception.rb +23 -0
  22. data/lib/saklient/cloud/errors/access_token_exception.rb +23 -0
  23. data/lib/saklient/cloud/errors/access_xhr_or_api_key_exception.rb +23 -0
  24. data/lib/saklient/cloud/errors/account_not_found_exception.rb +23 -0
  25. data/lib/saklient/cloud/errors/account_not_specified_exception.rb +23 -0
  26. data/lib/saklient/cloud/errors/ambiguous_identifier_exception.rb +23 -0
  27. data/lib/saklient/cloud/errors/ambiguous_zone_exception.rb +23 -0
  28. data/lib/saklient/cloud/errors/api_proxy_timeout_exception.rb +23 -0
  29. data/lib/saklient/cloud/errors/api_proxy_timeout_non_get_exception.rb +23 -0
  30. data/lib/saklient/cloud/errors/archive_is_incomplete_exception.rb +23 -0
  31. data/lib/saklient/cloud/errors/boot_failure_by_lock_exception.rb +23 -0
  32. data/lib/saklient/cloud/errors/boot_failure_in_group_exception.rb +23 -0
  33. data/lib/saklient/cloud/errors/busy_exception.rb +23 -0
  34. data/lib/saklient/cloud/errors/cant_resize_smaller_exception.rb +23 -0
  35. data/lib/saklient/cloud/errors/cdrom_device_locked_exception.rb +23 -0
  36. data/lib/saklient/cloud/errors/cdrom_disabled_exception.rb +23 -0
  37. data/lib/saklient/cloud/errors/cdrom_in_use_exception.rb +23 -0
  38. data/lib/saklient/cloud/errors/cdrom_is_incomplete_exception.rb +23 -0
  39. data/lib/saklient/cloud/errors/connect_to_same_switch_exception.rb +23 -0
  40. data/lib/saklient/cloud/errors/contract_creation_exception.rb +23 -0
  41. data/lib/saklient/cloud/errors/copy_to_itself_exception.rb +23 -0
  42. data/lib/saklient/cloud/errors/delete_disk_b4_template_exception.rb +23 -0
  43. data/lib/saklient/cloud/errors/delete_ip_v6_nets_first_exception.rb +23 -0
  44. data/lib/saklient/cloud/errors/delete_res_b4_account_exception.rb +23 -0
  45. data/lib/saklient/cloud/errors/delete_router_b4_switch_exception.rb +23 -0
  46. data/lib/saklient/cloud/errors/delete_static_route_first_exception.rb +23 -0
  47. data/lib/saklient/cloud/errors/disabled_in_sandbox_exception.rb +23 -0
  48. data/lib/saklient/cloud/errors/disconnect_b4_delete_exception.rb +23 -0
  49. data/lib/saklient/cloud/errors/disconnect_b4_update_exception.rb +23 -0
  50. data/lib/saklient/cloud/errors/disk_connection_limit_exception.rb +23 -0
  51. data/lib/saklient/cloud/errors/disk_is_copying_exception.rb +23 -0
  52. data/lib/saklient/cloud/errors/disk_is_not_available_exception.rb +23 -0
  53. data/lib/saklient/cloud/errors/disk_license_mismatch_exception.rb +23 -0
  54. data/lib/saklient/cloud/errors/disk_or_ss_in_migration_exception.rb +23 -0
  55. data/lib/saklient/cloud/errors/disk_stock_run_out_exception.rb +23 -0
  56. data/lib/saklient/cloud/errors/dns_aaaa_record_not_found_exception.rb +23 -0
  57. data/lib/saklient/cloud/errors/dns_arecord_not_found_exception.rb +23 -0
  58. data/lib/saklient/cloud/errors/dns_ptr_update_failure_exception.rb +23 -0
  59. data/lib/saklient/cloud/errors/dont_create_in_sandbox_exception.rb +23 -0
  60. data/lib/saklient/cloud/errors/duplicate_account_code_exception.rb +23 -0
  61. data/lib/saklient/cloud/errors/duplicate_entry_exception.rb +23 -0
  62. data/lib/saklient/cloud/errors/duplicate_user_code_exception.rb +23 -0
  63. data/lib/saklient/cloud/errors/file_not_uploaded_exception.rb +23 -0
  64. data/lib/saklient/cloud/errors/filter_array_comparison_exception.rb +23 -0
  65. data/lib/saklient/cloud/errors/filter_bad_operator_exception.rb +23 -0
  66. data/lib/saklient/cloud/errors/filter_null_comparison_exception.rb +23 -0
  67. data/lib/saklient/cloud/errors/filter_unknown_operator_exception.rb +23 -0
  68. data/lib/saklient/cloud/errors/ftp_cannot_close_exception.rb +23 -0
  69. data/lib/saklient/cloud/errors/ftp_is_already_close_exception.rb +23 -0
  70. data/lib/saklient/cloud/errors/ftp_is_already_open_exception.rb +23 -0
  71. data/lib/saklient/cloud/errors/ftp_must_be_closed_exception.rb +23 -0
  72. data/lib/saklient/cloud/errors/host_operation_failure_exception.rb +23 -0
  73. data/lib/saklient/cloud/errors/illegal_das_usage_exception.rb +23 -0
  74. data/lib/saklient/cloud/errors/in_migration_exception.rb +23 -0
  75. data/lib/saklient/cloud/errors/invalid_format_exception.rb +23 -0
  76. data/lib/saklient/cloud/errors/invalid_param_comb_exception.rb +23 -0
  77. data/lib/saklient/cloud/errors/invalid_range_exception.rb +23 -0
  78. data/lib/saklient/cloud/errors/invalid_uri_argument_exception.rb +23 -0
  79. data/lib/saklient/cloud/errors/ip_v6_net_already_attached_exception.rb +23 -0
  80. data/lib/saklient/cloud/errors/limit_count_in_account_exception.rb +23 -0
  81. data/lib/saklient/cloud/errors/limit_count_in_member_exception.rb +23 -0
  82. data/lib/saklient/cloud/errors/limit_count_in_network_exception.rb +23 -0
  83. data/lib/saklient/cloud/errors/limit_count_in_router_exception.rb +23 -0
  84. data/lib/saklient/cloud/errors/limit_count_in_zone_exception.rb +23 -0
  85. data/lib/saklient/cloud/errors/limit_memory_in_account_exception.rb +23 -0
  86. data/lib/saklient/cloud/errors/limit_size_in_account_exception.rb +23 -0
  87. data/lib/saklient/cloud/errors/missing_iso_image_exception.rb +23 -0
  88. data/lib/saklient/cloud/errors/missing_param_exception.rb +23 -0
  89. data/lib/saklient/cloud/errors/must_be_of_same_zone_exception.rb +23 -0
  90. data/lib/saklient/cloud/errors/no_display_response_exception.rb +23 -0
  91. data/lib/saklient/cloud/errors/not_for_router_exception.rb +23 -0
  92. data/lib/saklient/cloud/errors/not_replicating_exception.rb +23 -0
  93. data/lib/saklient/cloud/errors/not_with_hybridconn_exception.rb +23 -0
  94. data/lib/saklient/cloud/errors/old_storage_plan_exception.rb +23 -0
  95. data/lib/saklient/cloud/errors/operation_failure_exception.rb +23 -0
  96. data/lib/saklient/cloud/errors/operation_timeout_exception.rb +23 -0
  97. data/lib/saklient/cloud/errors/original_hash_mismatch_exception.rb +23 -0
  98. data/lib/saklient/cloud/errors/packet_filter_applying_exception.rb +23 -0
  99. data/lib/saklient/cloud/errors/packet_filter_version_mismatch_exception.rb +23 -0
  100. data/lib/saklient/cloud/errors/param_ip_not_found_exception.rb +23 -0
  101. data/lib/saklient/cloud/errors/param_res_not_found_exception.rb +23 -0
  102. data/lib/saklient/cloud/errors/payment_credit_card_exception.rb +23 -0
  103. data/lib/saklient/cloud/errors/payment_payment_exception.rb +23 -0
  104. data/lib/saklient/cloud/errors/payment_registration_exception.rb +23 -0
  105. data/lib/saklient/cloud/errors/payment_tel_certification_exception.rb +23 -0
  106. data/lib/saklient/cloud/errors/payment_unpayable_exception.rb +23 -0
  107. data/lib/saklient/cloud/errors/penalty_operation_exception.rb +23 -0
  108. data/lib/saklient/cloud/errors/replica_already_exists_exception.rb +23 -0
  109. data/lib/saklient/cloud/errors/replica_not_found_exception.rb +23 -0
  110. data/lib/saklient/cloud/errors/res_already_connected_exception.rb +23 -0
  111. data/lib/saklient/cloud/errors/res_already_disconnected_exception.rb +23 -0
  112. data/lib/saklient/cloud/errors/res_already_exists_exception.rb +23 -0
  113. data/lib/saklient/cloud/errors/res_used_in_zone_exception.rb +23 -0
  114. data/lib/saklient/cloud/errors/resource_path_not_found_exception.rb +23 -0
  115. data/lib/saklient/cloud/errors/run_out_of_ip_address_exception.rb +23 -0
  116. data/lib/saklient/cloud/errors/same_license_required_exception.rb +23 -0
  117. data/lib/saklient/cloud/errors/server_could_not_stop_exception.rb +23 -0
  118. data/lib/saklient/cloud/errors/server_is_cleaning_exception.rb +23 -0
  119. data/lib/saklient/cloud/errors/server_operation_failure_exception.rb +23 -0
  120. data/lib/saklient/cloud/errors/server_power_must_be_down_exception.rb +23 -0
  121. data/lib/saklient/cloud/errors/server_power_must_be_up_exception.rb +23 -0
  122. data/lib/saklient/cloud/errors/service_temporarily_unavailable_exception.rb +23 -0
  123. data/lib/saklient/cloud/errors/size_mismatch_exception.rb +23 -0
  124. data/lib/saklient/cloud/errors/snapshot_in_migration_exception.rb +23 -0
  125. data/lib/saklient/cloud/errors/still_creating_exception.rb +23 -0
  126. data/lib/saklient/cloud/errors/storage_abnormal_exception.rb +23 -0
  127. data/lib/saklient/cloud/errors/storage_operation_failure_exception.rb +23 -0
  128. data/lib/saklient/cloud/errors/switch_hybrid_connected_exception.rb +23 -0
  129. data/lib/saklient/cloud/errors/template_ftp_is_open_exception.rb +23 -0
  130. data/lib/saklient/cloud/errors/template_is_incomplete_exception.rb +23 -0
  131. data/lib/saklient/cloud/errors/too_many_request_exception.rb +23 -0
  132. data/lib/saklient/cloud/errors/unknown_exception.rb +23 -0
  133. data/lib/saklient/cloud/errors/unknown_os_type_exception.rb +23 -0
  134. data/lib/saklient/cloud/errors/unsupported_res_class_exception.rb +23 -0
  135. data/lib/saklient/cloud/errors/user_not_specified_exception.rb +23 -0
  136. data/lib/saklient/cloud/errors/vnc_proxy_request_failure_exception.rb +23 -0
  137. data/lib/saklient/cloud/models/model.rb +348 -0
  138. data/lib/saklient/cloud/models/model_appliance.rb +161 -0
  139. data/lib/saklient/cloud/models/model_archive.rb +207 -0
  140. data/lib/saklient/cloud/models/model_disk.rb +200 -0
  141. data/lib/saklient/cloud/models/model_disk_plan.rb +156 -0
  142. data/lib/saklient/cloud/models/model_icon.rb +178 -0
  143. data/lib/saklient/cloud/models/model_iface.rb +115 -0
  144. data/lib/saklient/cloud/models/model_ipv6_net.rb +106 -0
  145. data/lib/saklient/cloud/models/model_iso_image.rb +207 -0
  146. data/lib/saklient/cloud/models/model_router.rb +148 -0
  147. data/lib/saklient/cloud/models/model_router_plan.rb +106 -0
  148. data/lib/saklient/cloud/models/model_script.rb +178 -0
  149. data/lib/saklient/cloud/models/model_server.rb +237 -0
  150. data/lib/saklient/cloud/models/model_server_plan.rb +119 -0
  151. data/lib/saklient/cloud/models/model_swytch.rb +138 -0
  152. data/lib/saklient/cloud/models/query_params.rb +44 -0
  153. data/lib/saklient/cloud/product.rb +95 -0
  154. data/lib/saklient/cloud/resources/appliance.rb +551 -0
  155. data/lib/saklient/cloud/resources/archive.rb +861 -0
  156. data/lib/saklient/cloud/resources/disk.rb +802 -0
  157. data/lib/saklient/cloud/resources/disk_config.rb +353 -0
  158. data/lib/saklient/cloud/resources/disk_plan.rb +194 -0
  159. data/lib/saklient/cloud/resources/ftp_info.rb +93 -0
  160. data/lib/saklient/cloud/resources/icon.rb +268 -0
  161. data/lib/saklient/cloud/resources/iface.rb +329 -0
  162. data/lib/saklient/cloud/resources/ipv4_net.rb +275 -0
  163. data/lib/saklient/cloud/resources/ipv6_net.rb +238 -0
  164. data/lib/saklient/cloud/resources/iso_image.rb +666 -0
  165. data/lib/saklient/cloud/resources/resource.rb +287 -0
  166. data/lib/saklient/cloud/resources/router.rb +508 -0
  167. data/lib/saklient/cloud/resources/router_plan.rb +230 -0
  168. data/lib/saklient/cloud/resources/script.rb +554 -0
  169. data/lib/saklient/cloud/resources/server.rb +730 -0
  170. data/lib/saklient/cloud/resources/server_instance.rb +217 -0
  171. data/lib/saklient/cloud/resources/server_plan.rb +285 -0
  172. data/lib/saklient/cloud/resources/swytch.rb +521 -0
  173. data/lib/saklient/errors/exception_factory.rb +532 -0
  174. data/lib/saklient/errors/http_bad_gateway_exception.rb +21 -0
  175. data/lib/saklient/errors/http_bad_request_exception.rb +21 -0
  176. data/lib/saklient/errors/http_conflict_exception.rb +21 -0
  177. data/lib/saklient/errors/http_exception.rb +27 -0
  178. data/lib/saklient/errors/http_expectation_failed_exception.rb +21 -0
  179. data/lib/saklient/errors/http_failed_dependency_exception.rb +21 -0
  180. data/lib/saklient/errors/http_forbidden_exception.rb +21 -0
  181. data/lib/saklient/errors/http_gateway_timeout_exception.rb +21 -0
  182. data/lib/saklient/errors/http_gone_exception.rb +21 -0
  183. data/lib/saklient/errors/http_http_version_not_supported_exception.rb +21 -0
  184. data/lib/saklient/errors/http_insufficient_storage_exception.rb +21 -0
  185. data/lib/saklient/errors/http_internal_server_error_exception.rb +21 -0
  186. data/lib/saklient/errors/http_length_required_exception.rb +21 -0
  187. data/lib/saklient/errors/http_locked_exception.rb +21 -0
  188. data/lib/saklient/errors/http_method_not_allowed_exception.rb +21 -0
  189. data/lib/saklient/errors/http_not_acceptable_exception.rb +21 -0
  190. data/lib/saklient/errors/http_not_extended_exception.rb +21 -0
  191. data/lib/saklient/errors/http_not_found_exception.rb +21 -0
  192. data/lib/saklient/errors/http_not_implemented_exception.rb +21 -0
  193. data/lib/saklient/errors/http_payment_required_exception.rb +21 -0
  194. data/lib/saklient/errors/http_precondition_failed_exception.rb +21 -0
  195. data/lib/saklient/errors/http_proxy_authentication_required_exception.rb +21 -0
  196. data/lib/saklient/errors/http_request_entity_too_large_exception.rb +21 -0
  197. data/lib/saklient/errors/http_request_timeout_exception.rb +21 -0
  198. data/lib/saklient/errors/http_request_uri_too_long_exception.rb +21 -0
  199. data/lib/saklient/errors/http_requested_range_not_satisfiable_exception.rb +21 -0
  200. data/lib/saklient/errors/http_service_unavailable_exception.rb +21 -0
  201. data/lib/saklient/errors/http_unauthorized_exception.rb +21 -0
  202. data/lib/saklient/errors/http_unprocessable_entity_exception.rb +21 -0
  203. data/lib/saklient/errors/http_unsupported_media_type_exception.rb +21 -0
  204. data/lib/saklient/errors/http_upgrade_required_exception.rb +21 -0
  205. data/lib/saklient/errors/http_variant_also_negotiates_exception.rb +21 -0
  206. data/lib/saklient/errors/saklient_exception.rb +22 -0
  207. data/lib/saklient/util.rb +121 -0
  208. data/lib/saklient/version.rb +5 -0
  209. data/saklient.gemspec +24 -0
  210. data/spec/archive_spec.rb +141 -0
  211. data/spec/enum_spec.rb +24 -0
  212. data/spec/exception_spec.rb +25 -0
  213. data/spec/iso_image_spec.rb +172 -0
  214. data/spec/router_spec.rb +124 -0
  215. data/spec/server_spec.rb +261 -0
  216. data/spec/util_spec.rb +72 -0
  217. data/test-sshkey.txt +27 -0
  218. metadata +281 -0
@@ -0,0 +1,121 @@
1
+ # -*- encoding: UTF-8 -*-
2
+
3
+ require_relative 'errors/saklient_exception'
4
+ require 'uri'
5
+
6
+ module Saklient
7
+
8
+ # @private
9
+ class Util
10
+
11
+ # @param [any] obj
12
+ # @param [String] path
13
+ # @return [any]
14
+ def self.exists_path(obj, path)
15
+ aPath = path.split('.')
16
+ for seg in aPath
17
+ return false if (obj).nil?
18
+ return false if !obj.is_a?(Hash)
19
+ next if seg == ''
20
+ return false if !(!obj.nil? && obj.key?(seg.to_sym))
21
+ obj = obj[seg.to_sym]
22
+ end
23
+ return true
24
+ end
25
+
26
+ # @param [any] obj
27
+ # @param [String] path
28
+ # @return [any]
29
+ def self.get_by_path(obj, path)
30
+ aPath = path.split('.')
31
+ for seg in aPath
32
+ return nil if (obj).nil?
33
+ return nil if !obj.is_a?(Hash)
34
+ next if seg == ''
35
+ return nil if !(!obj.nil? && obj.key?(seg.to_sym))
36
+ obj = obj[seg.to_sym]
37
+ end
38
+ return obj
39
+ end
40
+
41
+ # @todo array support
42
+ # @todo overwriting
43
+ # @todo writing into children of non-object
44
+ # @param [any] obj
45
+ # @param [any] value
46
+ # @param [String] path
47
+ # @return [void]
48
+ def self.set_by_path(obj, path, value)
49
+ aPath = path.split('.')
50
+ key = aPath.pop
51
+ for seg in aPath
52
+ next if seg == ''
53
+ obj[seg.to_sym] = {} if !(!obj.nil? && obj.key?(seg.to_sym))
54
+ obj = obj[seg.to_sym]
55
+ end
56
+ obj[key.to_sym] = value
57
+ end
58
+
59
+ # @param [String] classPath
60
+ # @param [Array] args
61
+ # @return [any]
62
+ def self.create_class_instance(classPath, args)
63
+ ret = nil
64
+ if !(classPath).nil?
65
+ apath = classPath.split('.')
66
+ ret = apath.inject(Object) { |obj, name| obj.const_get(name[0].upcase + name[1..-1]) }.new(*args)
67
+ end
68
+ raise Exception.new('Could not create class instance of ' + classPath) if (ret).nil?
69
+ return ret
70
+ end
71
+
72
+ # @param [String] s
73
+ # @return [NativeDate]
74
+ def self.str2date(s)
75
+ return nil if (s).nil?
76
+ return DateTime.parse(s)
77
+ end
78
+
79
+ # @param [NativeDate] d
80
+ # @return [String]
81
+ def self.date2str(d)
82
+ return nil if (d).nil?
83
+ return d.to_s
84
+ end
85
+
86
+ # @param [String] s
87
+ # @return [String]
88
+ def self.url_encode(s)
89
+ return URI.encode(s)
90
+ end
91
+
92
+ # @param [Integer] sec
93
+ # @return [void]
94
+ def self.sleep(sec)
95
+ super self
96
+ end
97
+
98
+ # @param [any] value
99
+ # @param [String] typeName
100
+ # @return [void]
101
+ def self.validate_type(value, typeName, force=false)
102
+ isOk = false
103
+ if !force then
104
+ return if typeName=="any" || typeName=="void" || value.nil?
105
+ clazz = value.class.to_s
106
+ if typeName=="bool"
107
+ isOk = clazz=="TrueClass" || clazz=="FalseClass"
108
+ elsif typeName=="Float"
109
+ isOk = clazz=="Fixnum" || clazz=="Float"
110
+ elsif typeName=="String"
111
+ isOk = clazz=="Fixnum" || clazz=="Float" || clazz=="String"
112
+ else
113
+ isOk = value.is_a?(Object.const_get(typeName))
114
+ end
115
+ end
116
+ raise Saklient::Errors::SaklientException.new('argument_type_mismatch', 'Argument type mismatch (expected '+typeName+' but got '+clazz+')') unless isOk
117
+ end
118
+
119
+ end
120
+
121
+ end
@@ -0,0 +1,5 @@
1
+ # -*- encoding: UTF-8 -*-
2
+
3
+ module Saklient
4
+ VERSION = "0.0.1"
5
+ end
data/saklient.gemspec ADDED
@@ -0,0 +1,24 @@
1
+ # -*- encoding: utf-8 -*-
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'saklient/version'
5
+
6
+ Gem::Specification.new do |gem|
7
+
8
+ gem.name = 'saklient'
9
+ gem.version = Saklient::VERSION
10
+ gem.licenses = ['MIT']
11
+ gem.authors = ['townewgokgok']
12
+ gem.email = ['dev-support-ml@sakura.ad.jp']
13
+ gem.description = %q{An easy interface to control your resources on SAKURA Cloud.}
14
+ gem.summary = %q{SAKURA Internet API Client Library for Ruby}
15
+ gem.homepage = 'http://sakura-internet.github.io/saklient.doc/'
16
+
17
+ gem.files = `git ls-files`.split($/)
18
+ gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
19
+ gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
20
+ gem.require_paths = ['lib']
21
+
22
+ gem.add_development_dependency 'rspec'
23
+
24
+ end
@@ -0,0 +1,141 @@
1
+ $: << File.dirname(__dir__) + '/lib'
2
+ require 'saklient/cloud/api'
3
+ require 'date'
4
+ require 'SecureRandom'
5
+ require 'tempfile'
6
+
7
+ describe 'Archive' do
8
+
9
+
10
+
11
+ before do
12
+
13
+ # load config file
14
+ root = File.dirname(__dir__)
15
+ test_ok_file = root + '/testok'
16
+ expect(File).to exist(test_ok_file)
17
+ config_file = root + '/config.sh'
18
+ expect(File).to exist(config_file)
19
+ @config = {}
20
+ fh = open(config_file)
21
+ fh.each {|line|
22
+ if /^\s*export\s+(\w+)\s*=\s*(.+?)\s*$/.match(line) then
23
+ key = $1
24
+ value = $2
25
+ @config[key.to_sym] = value.gsub(/'([^']*)'|"([^"]*)"|\\(.)|(.)/) {|m|
26
+ $1 || $2 || $3 || $4
27
+ }
28
+ end
29
+ }
30
+ fh.close
31
+ expect(@config[:SACLOUD_TOKEN]).not_to be_empty #'SACLOUD_TOKEN must be defined in config.sh'
32
+ expect(@config[:SACLOUD_SECRET]).not_to be_empty #'SACLOUD_SECRET must be defined in config.sh'
33
+ #expect(@config[:SACLOUD_ZONE]).not_to be_empty #'SACLOUD_ZONE must be defined in config.sh'
34
+
35
+ # authorize
36
+ @api = Saklient::Cloud::API::authorize(@config[:SACLOUD_TOKEN], @config[:SACLOUD_SECRET])
37
+ @api = @api.in_zone(@config[:SACLOUD_ZONE]) if @config[:SACLOUD_ZONE]
38
+ expect(@api).to be_an_instance_of Saklient::Cloud::API
39
+
40
+ end
41
+
42
+
43
+
44
+ it 'should be CRUDed' do
45
+ name = '!ruby_rspec-' + DateTime.now.strftime('%Y%m%d_%H%M%S') + '-' + SecureRandom.uuid[0, 8]
46
+ description = 'This instance was created by saklient.ruby rspec'
47
+ tag = 'saklient-test'
48
+
49
+ archive = @api.archive.create
50
+ expect(archive).to be_an_instance_of Saklient::Cloud::Resources::Archive
51
+ archive.name = name
52
+ archive.description = description
53
+ archive.tags = [tag]
54
+ archive.size_gib = 20
55
+ archive.save
56
+
57
+ #
58
+ ftp = archive.ftp_info
59
+ expect(ftp).to be_an_instance_of Saklient::Cloud::Resources::FtpInfo
60
+ expect(ftp.host_name).not_to be_nil
61
+ expect(ftp.user).not_to be_nil
62
+ expect(ftp.password).not_to be_nil
63
+ ftp2 = archive.open_ftp(true).ftp_info
64
+ expect(ftp2).to be_an_instance_of Saklient::Cloud::Resources::FtpInfo
65
+ expect(ftp2.host_name).not_to be_nil
66
+ expect(ftp2.user).not_to be_nil
67
+ expect(ftp2.password).not_to be_nil
68
+ expect(ftp2.password).not_to eq ftp.password
69
+
70
+ #
71
+ temp = Tempfile.new('saklient-')
72
+ path = temp.path
73
+ temp.close!
74
+ cmd = "dd if=/dev/urandom bs=4096 count=64 > #{path}; ls -l #{path}"
75
+ puts cmd
76
+ puts `( #{cmd} ) 2>&1`
77
+ cmd = "set ftp:ssl-allow true;"
78
+ cmd += "set ftp:ssl-force true;"
79
+ cmd += "set ftp:ssl-protect-data true;"
80
+ cmd += "set ftp:ssl-protect-list true;"
81
+ cmd += "put #{path};"
82
+ cmd += "exit"
83
+ cmd = "lftp -u #{ftp2.user},#{ftp2.password} -p 21 -e '#{cmd}' #{ftp2.host_name}"
84
+ puts cmd
85
+ puts `( #{cmd} ) 2>&1`
86
+ cmd = "rm -f #{path}"
87
+ puts cmd
88
+ puts `( #{cmd} ) 2>&1`
89
+
90
+ archive.close_ftp
91
+
92
+ #
93
+ archive.destroy
94
+
95
+ end
96
+
97
+
98
+
99
+ it 'should be copied' do
100
+ name = '!ruby_rspec-' + DateTime.now.strftime('%Y%m%d_%H%M%S') + '-' + SecureRandom.uuid[0, 8]
101
+ description = 'This instance was created by saklient.ruby rspec'
102
+ tag = 'saklient-test'
103
+
104
+ disk = @api.disk.create
105
+ disk.name = name
106
+ disk.description = description
107
+ disk.tags = [tag]
108
+ disk.size_gib = 20
109
+ disk.save
110
+
111
+ archive = @api.archive.create
112
+ archive.name = name
113
+ archive.description = description
114
+ archive.tags = [tag]
115
+ archive.source = disk
116
+ archive.save
117
+
118
+ fail 'ディスクからアーカイブへのコピーがタイムアウトまたは失敗しました' unless archive.sleep_while_copying
119
+
120
+ disk.destroy
121
+
122
+ ftp = archive.open_ftp.ftp_info
123
+ expect(ftp).to be_an_instance_of Saklient::Cloud::Resources::FtpInfo
124
+ expect(ftp.host_name).not_to be_nil
125
+ expect(ftp.user).not_to be_nil
126
+ expect(ftp.password).not_to be_nil
127
+
128
+ archive.close_ftp
129
+ archive.destroy
130
+ end
131
+
132
+
133
+
134
+ after do
135
+ @config = nil
136
+ @api = nil
137
+ end
138
+
139
+
140
+
141
+ end
data/spec/enum_spec.rb ADDED
@@ -0,0 +1,24 @@
1
+ $: << File.dirname(__dir__) + '/lib'
2
+ require 'saklient/cloud/enums/eserver_instance_status'
3
+
4
+ EServerInstanceStatus = Saklient::Cloud::Enums::EServerInstanceStatus
5
+
6
+ describe 'Enum' do
7
+
8
+ it 'should be defined' do
9
+ expect(EServerInstanceStatus::up).to eq 'up'
10
+ expect(EServerInstanceStatus::down).to eq 'down'
11
+ end
12
+
13
+ it 'should be compared' do
14
+ expect(EServerInstanceStatus::compare('up', 'up')).to eq 0
15
+ expect(EServerInstanceStatus::compare('up', 'down')).to eq 1
16
+ expect(EServerInstanceStatus::compare('down', 'up')).to eq -1
17
+ expect(EServerInstanceStatus::compare('UNDEFINED-SYMBOL', 'up')).to be_nil
18
+ expect(EServerInstanceStatus::compare('up', 'UNDEFINED-SYMBOL')).to be_nil
19
+ expect(EServerInstanceStatus::compare(nil, 'up')).to be_nil
20
+ expect(EServerInstanceStatus::compare('up', nil)).to be_nil
21
+ expect(EServerInstanceStatus::compare(nil, nil)).to be_nil
22
+ end
23
+
24
+ end
@@ -0,0 +1,25 @@
1
+ $: << File.dirname(__dir__) + '/lib'
2
+ require 'saklient/cloud/errors/exception_factory'
3
+
4
+ ExceptionFactory = Saklient::Errors::ExceptionFactory
5
+ HttpException = Saklient::Errors::HttpException
6
+ HttpNotFoundException = Saklient::Errors::HttpNotFoundException
7
+ ServerPowerMustBeUpException = Saklient::Cloud::Errors::ServerPowerMustBeUpException
8
+
9
+ describe 'Exception' do
10
+
11
+ it 'should be created' do
12
+
13
+ x = ExceptionFactory.create(404)
14
+ expect(x).to be_an_instance_of HttpNotFoundException
15
+
16
+ x = ExceptionFactory.create(409, 'server_power_must_be_up')
17
+ expect(x).to be_an_instance_of ServerPowerMustBeUpException
18
+
19
+ x = ExceptionFactory.create(666, 'nameless_http_error', 'Ia! Cthulhu Fthagn!')
20
+ expect(x).to be_an_instance_of HttpException
21
+ expect(x.message).to eq 'Ia! Cthulhu Fthagn!'
22
+
23
+ end
24
+
25
+ end
@@ -0,0 +1,172 @@
1
+ $: << File.dirname(__dir__) + '/lib'
2
+ require 'saklient/cloud/api'
3
+ require 'date'
4
+ require 'SecureRandom'
5
+ require 'tempfile'
6
+
7
+ describe 'IsoImage' do
8
+
9
+
10
+
11
+ before do
12
+
13
+ # load config file
14
+ root = File.dirname(__dir__)
15
+ test_ok_file = root + '/testok'
16
+ expect(File).to exist(test_ok_file)
17
+ config_file = root + '/config.sh'
18
+ expect(File).to exist(config_file)
19
+ @config = {}
20
+ fh = open(config_file)
21
+ fh.each {|line|
22
+ if /^\s*export\s+(\w+)\s*=\s*(.+?)\s*$/.match(line) then
23
+ key = $1
24
+ value = $2
25
+ @config[key.to_sym] = value.gsub(/'([^']*)'|"([^"]*)"|\\(.)|(.)/) {|m|
26
+ $1 || $2 || $3 || $4
27
+ }
28
+ end
29
+ }
30
+ fh.close
31
+ expect(@config[:SACLOUD_TOKEN]).not_to be_empty #'SACLOUD_TOKEN must be defined in config.sh'
32
+ expect(@config[:SACLOUD_SECRET]).not_to be_empty #'SACLOUD_SECRET must be defined in config.sh'
33
+ #expect(@config[:SACLOUD_ZONE]).not_to be_empty #'SACLOUD_ZONE must be defined in config.sh'
34
+
35
+ # authorize
36
+ @api = Saklient::Cloud::API::authorize(@config[:SACLOUD_TOKEN], @config[:SACLOUD_SECRET])
37
+ @api = @api.in_zone(@config[:SACLOUD_ZONE]) if @config[:SACLOUD_ZONE]
38
+ expect(@api).to be_an_instance_of Saklient::Cloud::API
39
+
40
+ end
41
+
42
+
43
+
44
+ it 'should be CRUDed' do
45
+ name = '!ruby_rspec-' + DateTime.now.strftime('%Y%m%d_%H%M%S') + '-' + SecureRandom.uuid[0, 8]
46
+ description = 'This instance was created by saklient.ruby rspec'
47
+ tag = 'saklient-test'
48
+
49
+ iso = @api.iso_image.create
50
+ expect(iso).to be_an_instance_of Saklient::Cloud::Resources::IsoImage
51
+ iso.name = name
52
+ iso.description = description
53
+ iso.tags = [tag]
54
+ iso.size_mib = 5120
55
+ iso.save
56
+
57
+ #
58
+ ftp = iso.ftp_info
59
+ expect(ftp).to be_an_instance_of Saklient::Cloud::Resources::FtpInfo
60
+ expect(ftp.host_name).not_to be_nil
61
+ expect(ftp.user).not_to be_nil
62
+ expect(ftp.password).not_to be_nil
63
+ ftp2 = iso.open_ftp(true).ftp_info
64
+ expect(ftp2).to be_an_instance_of Saklient::Cloud::Resources::FtpInfo
65
+ expect(ftp2.host_name).not_to be_nil
66
+ expect(ftp2.user).not_to be_nil
67
+ expect(ftp2.password).not_to be_nil
68
+ expect(ftp2.password).not_to eq ftp.password
69
+
70
+ #
71
+ temp = Tempfile.new('saklient-')
72
+ path = temp.path
73
+ temp.close!
74
+ cmd = "dd if=/dev/urandom bs=4096 count=64 > #{path}; ls -l #{path}"
75
+ puts cmd
76
+ puts `( #{cmd} ) 2>&1`
77
+ cmd = "set ftp:ssl-allow true;"
78
+ cmd += "set ftp:ssl-force true;"
79
+ cmd += "set ftp:ssl-protect-data true;"
80
+ cmd += "set ftp:ssl-protect-list true;"
81
+ cmd += "put #{path};"
82
+ cmd += "exit"
83
+ cmd = "lftp -u #{ftp2.user},#{ftp2.password} -p 21 -e '#{cmd}' #{ftp2.host_name}"
84
+ puts cmd
85
+ puts `( #{cmd} ) 2>&1`
86
+ cmd = "rm -f #{path}"
87
+ puts cmd
88
+ puts `( #{cmd} ) 2>&1`
89
+
90
+ iso.close_ftp
91
+
92
+ #
93
+ iso.destroy
94
+
95
+ end
96
+
97
+
98
+
99
+ it 'should be inserted and ejected' do
100
+ name = '!ruby_rspec-' + DateTime.now.strftime('%Y%m%d_%H%M%S') + '-' + SecureRandom.uuid[0, 8]
101
+ description = 'This instance was created by saklient.ruby rspec'
102
+ tag = 'saklient-test'
103
+
104
+ # search iso images
105
+ puts 'searching iso images...'
106
+ isos = @api.iso_image.
107
+ with_name_like('CentOS 6.5 64bit').
108
+ with_shared_scope.
109
+ limit(1).
110
+ find
111
+ expect(isos.length).to be > 0
112
+ iso = isos[0]
113
+
114
+ # create a server
115
+ puts 'creating a server...'
116
+ server = @api.server.create
117
+ expect(server).to be_an_instance_of Saklient::Cloud::Resources::Server
118
+ server.name = name
119
+ server.description = description
120
+ server.tags = [tag]
121
+ server.plan = @api.product.server.get_by_spec(1, 1)
122
+ server.save
123
+
124
+ # insert iso image while the server is down
125
+ puts 'inserting an ISO image to the server...'
126
+ server.insert_iso_image(iso)
127
+ expect(server.instance.iso_image).to be_an_instance_of Saklient::Cloud::Resources::IsoImage
128
+ expect(server.instance.iso_image.id).to eq iso.id
129
+
130
+ # eject iso image while the server is down
131
+ puts 'ejecting the ISO image from the server...'
132
+ server.eject_iso_image
133
+ expect(server.instance.iso_image).to be_nil
134
+
135
+ # boot
136
+ puts 'booting the server...'
137
+ server.boot
138
+ sleep 3
139
+
140
+ # insert iso image while the server is up
141
+ puts 'inserting an ISO image to the server...'
142
+ server.insert_iso_image(iso)
143
+ expect(server.instance.iso_image).to be_an_instance_of Saklient::Cloud::Resources::IsoImage
144
+ expect(server.instance.iso_image.id).to eq iso.id
145
+
146
+ # eject iso image while the server is up
147
+ puts 'ejecting the ISO image from the server...'
148
+ server.eject_iso_image
149
+ expect(server.instance.iso_image).to be_nil
150
+
151
+ # stop
152
+ sleep 1
153
+ puts 'stopping the server...'
154
+ server.stop
155
+ fail 'サーバが正常に停止しません' unless server.sleep_until_down
156
+
157
+ # delete the server
158
+ puts 'deleting the server...'
159
+ server.destroy
160
+
161
+ end
162
+
163
+
164
+
165
+ after do
166
+ @config = nil
167
+ @api = nil
168
+ end
169
+
170
+
171
+
172
+ end
@@ -0,0 +1,124 @@
1
+ $: << File.dirname(__dir__) + '/lib'
2
+ require 'saklient/cloud/api'
3
+ require 'date'
4
+ require 'SecureRandom'
5
+ require 'ipaddr'
6
+
7
+ describe 'Router' do
8
+
9
+
10
+
11
+ before do
12
+
13
+ # load config file
14
+ root = File.dirname(__dir__)
15
+ test_ok_file = root + '/testok'
16
+ expect(File).to exist(test_ok_file)
17
+ config_file = root + '/config.sh'
18
+ expect(File).to exist(config_file)
19
+ @config = {}
20
+ fh = open(config_file)
21
+ fh.each {|line|
22
+ if /^\s*export\s+(\w+)\s*=\s*(.+?)\s*$/.match(line) then
23
+ key = $1
24
+ value = $2
25
+ @config[key.to_sym] = value.gsub(/'([^']*)'|"([^"]*)"|\\(.)|(.)/) {|m|
26
+ $1 || $2 || $3 || $4
27
+ }
28
+ end
29
+ }
30
+ fh.close
31
+ expect(@config[:SACLOUD_TOKEN]).not_to be_empty #'SACLOUD_TOKEN must be defined in config.sh'
32
+ expect(@config[:SACLOUD_SECRET]).not_to be_empty #'SACLOUD_SECRET must be defined in config.sh'
33
+ #expect(@config[:SACLOUD_ZONE]).not_to be_empty #'SACLOUD_ZONE must be defined in config.sh'
34
+
35
+ # authorize
36
+ @api = Saklient::Cloud::API::authorize(@config[:SACLOUD_TOKEN], @config[:SACLOUD_SECRET])
37
+ @api = @api.in_zone(@config[:SACLOUD_ZONE]) if @config[:SACLOUD_ZONE]
38
+ expect(@api).to be_an_instance_of Saklient::Cloud::API
39
+
40
+ end
41
+
42
+
43
+
44
+ it 'should be CRUDed' do
45
+ name = '!ruby_rspec-' + DateTime.now.strftime('%Y%m%d_%H%M%S') + '-' + SecureRandom.uuid[0, 8]
46
+ description = 'This instance was created by saklient.ruby rspec'
47
+ mask_len = 28
48
+
49
+ #
50
+ swytch = nil
51
+ if false then
52
+ puts 'ルータ+スイッチの帯域プランを検索しています...'
53
+ plans = @api.product.router.find
54
+ min_mbps = 0x7FFFFFFF
55
+ for plan in plans do
56
+ expect(plan).to be_an_instance_of Saklient::Cloud::Resources::RouterPlan
57
+ expect(plan.band_width_mbps).to be > 0
58
+ min_mbps = [plan.band_width_mbps, min_mbps].min
59
+ end
60
+
61
+ puts 'ルータ+スイッチを作成しています...'
62
+ router = @api.router.create
63
+ router.name = name
64
+ router.description = description
65
+ router.band_width_mbps = min_mbps
66
+ router.network_mask_len = mask_len
67
+ router.save
68
+
69
+ puts 'ルータ+スイッチの作成完了を待機しています...'
70
+ fail 'ルータが正常に作成されません' unless router.sleep_while_creating
71
+ swytch = router.get_swytch
72
+ else
73
+ puts '既存のルータ+スイッチを取得しています...'
74
+ swytches = @api.swytch.with_name_like('saklient-static-1').limit(1).find
75
+ expect(swytches.length).to eq 1
76
+ swytch = swytches[0]
77
+ end
78
+
79
+ expect(swytch).to be_an_instance_of Saklient::Cloud::Resources::Swytch
80
+ expect(swytch.ipv4_nets.length).to be > 0
81
+ expect(swytch.ipv4_nets[0]).to be_an_instance_of Saklient::Cloud::Resources::Ipv4Net
82
+
83
+ #
84
+ puts 'ルータ+スイッチの帯域プランを変更しています...'
85
+ router_id_before = swytch.router.id
86
+ swytch.change_plan(swytch.router.band_width_mbps==100 ? 500 : 100)
87
+ expect(swytch.router.id).not_to eq router_id_before
88
+
89
+ #
90
+ if 0 < swytch.ipv6_nets.length then
91
+ puts 'ルータ+スイッチからIPv6ネットワークの割当を解除しています...'
92
+ swytch.remove_ipv6_net
93
+ end
94
+ puts 'ルータ+スイッチにIPv6ネットワークを割り当てています...'
95
+ v6net = swytch.add_ipv6_net
96
+ expect(v6net).to be_an_instance_of Saklient::Cloud::Resources::Ipv6Net
97
+ expect(swytch.ipv6_nets.length).to eq 1
98
+
99
+ #
100
+ (swytch.ipv4_nets.length - 1).downto(1) do |i|
101
+ puts 'ルータ+スイッチからスタティックルートの割当を解除しています...'
102
+ net = swytch.ipv4_nets[i]
103
+ swytch.remove_static_route(net)
104
+ end
105
+
106
+ puts 'ルータ+スイッチにスタティックルートを割り当てています...'
107
+ net0 = swytch.ipv4_nets[0]
108
+ next_hop = IPAddr.new(IPAddr.new(net0.address).to_i + 4, Socket::AF_INET).to_s
109
+ sroute = swytch.add_static_route(28, next_hop)
110
+ expect(sroute).to be_an_instance_of Saklient::Cloud::Resources::Ipv4Net
111
+ expect(swytch.ipv4_nets.length).to eq 2
112
+
113
+ end
114
+
115
+
116
+
117
+ after do
118
+ @config = nil
119
+ @api = nil
120
+ end
121
+
122
+
123
+
124
+ end