nifty-cloud-sdk 1.7

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 (83) hide show
  1. data/CHANGELOG +112 -0
  2. data/Gemfile +4 -0
  3. data/INSTALL +30 -0
  4. data/LICENSE.txt +58 -0
  5. data/README.rdoc +375 -0
  6. data/Rakefile +61 -0
  7. data/lib/NIFTY.rb +405 -0
  8. data/lib/NIFTY/Cloud.rb +24 -0
  9. data/lib/NIFTY/Cloud/availability_zones.rb +23 -0
  10. data/lib/NIFTY/Cloud/certificates.rb +283 -0
  11. data/lib/NIFTY/Cloud/images.rb +134 -0
  12. data/lib/NIFTY/Cloud/instances.rb +372 -0
  13. data/lib/NIFTY/Cloud/keypairs.rb +76 -0
  14. data/lib/NIFTY/Cloud/load_balancers.rb +433 -0
  15. data/lib/NIFTY/Cloud/security_groups.rb +357 -0
  16. data/lib/NIFTY/Cloud/volumes.rb +140 -0
  17. data/lib/NIFTY/config.rb +41 -0
  18. data/lib/NIFTY/exceptions.rb +32 -0
  19. data/lib/NIFTY/responses.rb +19 -0
  20. data/lib/NIFTY/version.rb +3 -0
  21. data/nifty-cloud-sdk.gemspec +28 -0
  22. data/sample/availability_zones/describe-availability-zones.rb +37 -0
  23. data/sample/certificate/create-ssl-certificate.rb +41 -0
  24. data/sample/certificate/delete-ssl-certificate.rb +28 -0
  25. data/sample/certificate/describe-ssl-certificate-attribute.rb +58 -0
  26. data/sample/certificate/describe-ssl-certificates.rb +49 -0
  27. data/sample/certificate/download-ssl-certificate.rb +31 -0
  28. data/sample/certificate/modify-ssl-certificate-attribute.rb +29 -0
  29. data/sample/certificate/register-corporate-info-for-certificate.rb +57 -0
  30. data/sample/certificate/upload-ssl-certificate.rb +32 -0
  31. data/sample/images/create-image.rb +33 -0
  32. data/sample/images/delete-image.rb +26 -0
  33. data/sample/images/describe-images.rb +70 -0
  34. data/sample/images/modify-image-attribute.rb +33 -0
  35. data/sample/instances/cancel_copy_instances.rb +26 -0
  36. data/sample/instances/copy-instances.rb +41 -0
  37. data/sample/instances/describe-instance-attribute.rb +78 -0
  38. data/sample/instances/describe-instances.rb +100 -0
  39. data/sample/instances/modify-instance-attribute.rb +30 -0
  40. data/sample/instances/reboot-instances.rb +29 -0
  41. data/sample/instances/run-instances.rb +104 -0
  42. data/sample/instances/start-instances.rb +36 -0
  43. data/sample/instances/stop-instances.rb +35 -0
  44. data/sample/instances/terminate-instances.rb +34 -0
  45. data/sample/keypairs/create-key-pair.rb +31 -0
  46. data/sample/keypairs/delete-key-pair.rb +28 -0
  47. data/sample/keypairs/describe-key-pairs.rb +31 -0
  48. data/sample/load_balancers/configure-health-check.rb +41 -0
  49. data/sample/load_balancers/create-load-balancer.rb +35 -0
  50. data/sample/load_balancers/delete-load-balancer.rb +28 -0
  51. data/sample/load_balancers/deregister-instances-from-load-balancer.rb +35 -0
  52. data/sample/load_balancers/describe-instance-health.rb +36 -0
  53. data/sample/load_balancers/describe-load-balancers.rb +89 -0
  54. data/sample/load_balancers/register-instances-with-load-balancer.rb +33 -0
  55. data/sample/load_balancers/register-port-with-load-balancer.rb +37 -0
  56. data/sample/load_balancers/set-filter-for-load-balancer.rb +38 -0
  57. data/sample/load_balancers/update-load-balancer.rb +33 -0
  58. data/sample/security_groups/authorize-security-group-ingress.rb +36 -0
  59. data/sample/security_groups/create-security-group.rb +29 -0
  60. data/sample/security_groups/delete-security-group.rb +28 -0
  61. data/sample/security_groups/deregister-instances-from-security-group.rb +31 -0
  62. data/sample/security_groups/describe-security-activities.rb +33 -0
  63. data/sample/security_groups/describe-security-groups.rb +59 -0
  64. data/sample/security_groups/register-instances-with-security-group.rb +31 -0
  65. data/sample/security_groups/revoke-security-group-ingress.rb +36 -0
  66. data/sample/security_groups/update-security-group.rb +30 -0
  67. data/sample/volumes/attach-volumes.rb +34 -0
  68. data/sample/volumes/create-volume.rb +38 -0
  69. data/sample/volumes/delete-volume.rb +28 -0
  70. data/sample/volumes/describe-volumes.rb +44 -0
  71. data/sample/volumes/detach-volume.rb +35 -0
  72. data/test/test_Cloud.rb +186 -0
  73. data/test/test_Cloud_availability_zones.rb +50 -0
  74. data/test/test_Cloud_certificates.rb +627 -0
  75. data/test/test_Cloud_images.rb +284 -0
  76. data/test/test_Cloud_instances.rb +941 -0
  77. data/test/test_Cloud_keypairs.rb +177 -0
  78. data/test/test_Cloud_load_balancers.rb +1183 -0
  79. data/test/test_Cloud_responses.rb +43 -0
  80. data/test/test_Cloud_security_groups.rb +699 -0
  81. data/test/test_Cloud_volumes.rb +325 -0
  82. data/test/test_helper.rb +23 -0
  83. metadata +275 -0
@@ -0,0 +1,24 @@
1
+ module NIFTY
2
+ module Cloud
3
+ class Base < NIFTY::Base
4
+ # この値が真のときNIFTY Cloud API側で無視されるパラメータは送信されない
5
+ @@ignore_amz_params = false
6
+
7
+ def initialize( options={} )
8
+ @default_access_key = ACCESS_KEY
9
+ @default_secret_key = SECRET_KEY
10
+ @default_endpoint = ENDPOINT_URL
11
+ @default_proxy_server = PROXY_SERVER
12
+ @default_user_agent = USER_AGENT
13
+ @default_max_retry = MAX_RETRY
14
+ @default_connection_timeout = CONNECTION_TIMEOUT
15
+ @default_socket_timeout = SOCKET_TIMEOUT
16
+ @default_signature_method = SIGNATURE_METHOD
17
+ @default_signature_version = SIGNATURE_VERSION
18
+
19
+ super(options)
20
+ end
21
+ end
22
+ end
23
+ end
24
+
@@ -0,0 +1,23 @@
1
+ module NIFTY
2
+ module Cloud
3
+ class Base < NIFTY::Base
4
+ ZONES_IGNORED_PARAMS = Regexp.new(/ZoneName\.\d+/)
5
+
6
+ # API「DescribeAvailabilityZones」を実行し、利用可能なゾーンの情報を取得します。常に、ゾーン「ap-japan-1a」の情報が返されます。
7
+ #
8
+ # @return [Hash] レスポンスXML解析結果
9
+ #
10
+ # @example
11
+ # describe_availability_zones(:zone_name => 'ap-japan-1a')
12
+ #
13
+ def describe_availability_zones( options={} )
14
+ params = {'Action' => 'DescribeAvailabilityZones'}
15
+ params.merge!(pathlist('ZoneName', options[:zone_name]))
16
+
17
+ params.reject! {|k, v| ZONES_IGNORED_PARAMS =~ k } if @@ignore_amz_params
18
+
19
+ return response_generator(params)
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,283 @@
1
+ module NIFTY
2
+ module Cloud
3
+ class Base < NIFTY::Base
4
+ VALIDITY_TERM = ['6', '12', '24']
5
+ KEY_LENGTH = ['1024', '2048']
6
+ CERTIFICATE_DESCRIBE_ATTRIBUTE = ['count', 'certState', 'period', 'keyLength', 'uploadState', 'description', 'certInfo']
7
+ FILE_TYPE = ['1', '2', '3']
8
+
9
+ # API「CreateSslCertificate」を実行し、SSL 証明書の新規作成または更新を行います。
10
+ # 申請法人情報が未登録の場合は、エラーが返されます。
11
+ # パラメーター「fqdnId」を指定した場合、指定したSSL 証明書を更新します。指定したSSL 証明書の有効期間が更新可能ではない、
12
+ # アップロードした証明書を指定した、存在しないSSL 証明書を指定した場合など、無効なSSL 証明書を指定した場合は、エラーが返されます。
13
+ # パラメーター「fqdnId」を指定しない場合、SSL 証明書を新規作成します。作成可能なSSL 証明書の上限数を超える場合は、エラーが返されます。
14
+ # また申請法人情報を登録するには、API「RegisterCorporateInfoForCertificate」を実行します。
15
+ #
16
+ # @option options [String] :fqdn_id SSL証明書の識別子(必須)
17
+ # @option options [String] :fqdn FQDN(必須)
18
+ # @option options [Integer] :count SSL証明書の数量(必須)
19
+ # 許可値: 1 - 30
20
+ # @option options [Integer] :validity_term SSL証明書の有効月数(必須)
21
+ # 許可値: 6 (半年) | 12 (1年) | 24 (2年)
22
+ # @option options [Integer] :key_length SSL証明書の鍵長(必須)
23
+ # 許可値: 1024 (1024bit) | 2048 (2048bit)
24
+ # @option options [String] :organization_name 申請組織名(必須)
25
+ # @option options [String] :organization_unit_name 申請部署名(必須)
26
+ # @option options [String] :state_name 事業所住所の都道府県名(必須)
27
+ # @option options [String] :location_name 事業所住所の市区町村名(必須)
28
+ # @return [Hash] レスポンスXML解析結果
29
+ #
30
+ # @example
31
+ # create_ssl_certificate(:fqdn => 'aaa.aaa.aaa', :count => 2, :validity_term => 24, :key_length => 1024, :organization_name => 'NIFTY',
32
+ # :organization_unit_name => 'Center Department', :state_name => 'Tokyo', :location_name => 'Shinagawa-ku')
33
+ #
34
+ def create_ssl_certificate( options={} )
35
+ raise ArgumentError, ":fqdn_id or :fqdn must be provided." if blank?(options[:fqdn_id]) && blank?(options[:fqdn])
36
+ unless blank?(options[:fqdn])
37
+ raise ArgumentError, "No :count provided." if blank?(options[:count])
38
+ raise ArgumentError, "No :validity_term provided." if blank?(options[:validity_term])
39
+ raise ArgumentError, "No :key_length provided." if blank?(options[:key_length])
40
+ raise ArgumentError, "No :organization_name provided." if blank?(options[:organization_name])
41
+ raise ArgumentError, "No :organization_unit_name provided." if blank?(options[:organization_unit_name])
42
+ raise ArgumentError, "No :state_name provided." if blank?(options[:state_name])
43
+ raise ArgumentError, "No :location_name provided." if blank?(options[:location_name])
44
+ end
45
+ raise ArgumentError, "Invalid :count provided." unless blank?(options[:count]) || ('1'..'30').to_a.include?(options[:count].to_s)
46
+ raise ArgumentError, "Invalid :validity_term provided." unless blank?(options[:validity_term]) ||
47
+ VALIDITY_TERM.include?(options[:validity_term].to_s)
48
+ raise ArgumentError, "Invalid :key_length provided." unless blank?(options[:key_length]) || KEY_LENGTH.include?(options[:key_length].to_s)
49
+
50
+ params = {'Action' => 'CreateSslCertificate'}
51
+ params.merge!(opts_to_prms(options, [:fqdn_id, :fqdn, :count, :validity_term, :key_length]))
52
+ params.merge!(opts_to_prms(options, [:organization_name, :organization_unit_name, :country_name,
53
+ :state_name, :location_name, :email_address], 'CertInfo'))
54
+
55
+ return response_generator(params)
56
+ end
57
+
58
+
59
+ # API「DeleteSslCertificate」を実行し、指定したSSL 証明書を削除します。
60
+ # 指定したSSL 証明書のステータスが「期限切れ」「失効」「発行エラー」以外の場合は、エラーが返されます。
61
+ # またアップロードしたSSL証明書は、ステータスに関わらず削除できます。
62
+ # SSL 証明書を指定するためには、SSL 証明書の発行識別子(fqdnId)が必要です。削除済みのSSL 証明書を指定した、
63
+ # 管理外のSSL 証明書を指定したなど、無効なSSL 証明書を指定した場合は、エラーが返されます。
64
+ #
65
+ # @option options [String] :fqdn_id SSL証明書の識別子(必須)
66
+ # @return [Hash] レスポンスXML解析結果
67
+ #
68
+ # @example
69
+ # delete_ssl_certificate(:fqdn_id => 111)
70
+ #
71
+ def delete_ssl_certificate( options={} )
72
+ raise ArgumentError, "No :fqdn_id provided." if blank?(options[:fqdn_id])
73
+
74
+ params = {
75
+ 'Action' => 'DeleteSslCertificate',
76
+ 'FqdnId' => options[:fqdn_id].to_s
77
+ }
78
+
79
+ return response_generator(params)
80
+ end
81
+
82
+
83
+ # API「DescribeSslCertificates」を実行し、指定したSSL 証明書の情報を取得します。
84
+ # SSL証明書を指定するためには、SSL 証明書の発行識別子(fqdnId)またはFQDN が必要です。
85
+ # 指定しない場合は、取得可能なすべてのSSL証明書の情報を取得します。
86
+ #
87
+ # @option options [Array<String>] :fqdn_id SSL証明書の識別子
88
+ # @option options [Array<String>] :fqdn FQDN
89
+ # @return [Hash] レスポンスXML解析結果
90
+ #
91
+ # @example
92
+ # describe_ssl_certificates(:fqdn_id => 111, :fqdn => 'aaa.aaa.aaa.')
93
+ #
94
+ def describe_ssl_certificates( options={} )
95
+ params = {'Action' => 'DescribeSslCertificates'}
96
+ params.merge!(pathlist('Fqdn', options[:fqdn]))
97
+ params.merge!(pathlist('FqdnId', options[:fqdn_id]))
98
+
99
+ return response_generator(params)
100
+ end
101
+
102
+
103
+ # API「DescribeSslCertificateAttribute」を実行し、指定したSSL証明書の詳細情報を取得します。
104
+ # 1回のリクエストで、指定したSSL証明書のどれか1つの詳細情報を取得できます。
105
+ # SSL証明書を指定するためには、SSL 証明書の発行識別子(fqdnId)が必要です。削除済みのSSL証明書を指定した、
106
+ # 管理外のSSL証明書を指定したなど、無効なSSL 証明書を指定した場合は、エラーが返されます。
107
+ #
108
+ # @option options [String] :fqdn_id SSL証明書の識別子(必須)
109
+ # @option options [String] :attribute 取得する情報の項目名
110
+ # 許可値: count(SSL証明書の数量を取得) | certState(SSL証明書の発行ステータスを取得) | period(SSL証明書の有効期間を取得) |
111
+ # keyLength(SSL証明書の鍵長を取得) | uploadState(SSL証明書の種別を取得) | description(SSL証明書のメモ情報を取得) |
112
+ # certInfo(SSL証明書の発行申請情報を取得)
113
+ #
114
+ # @return [Hash] レスポンスXML解析結果
115
+ #
116
+ # @example
117
+ # describe_ssl_certificate_attribute(:fqdn_id => 111, :attribute => 'certInfo')
118
+ #
119
+ def describe_ssl_certificate_attribute( options={} )
120
+ raise ArgumentError, "No :fqdn_id provided." if blank?(options[:fqdn_id])
121
+ raise ArgumentError, "Invalid :attribute provided." unless blank?(options[:attribute]) ||
122
+ CERTIFICATE_DESCRIBE_ATTRIBUTE.include?(options[:attribute].to_s)
123
+
124
+ params = {'Action' => 'DescribeSslCertificateAttribute'}
125
+ params.merge!(opts_to_prms(options, [:fqdn_id, :attribute]))
126
+
127
+ return response_generator(params)
128
+ end
129
+
130
+
131
+ # API「DownloadSslCertificate」を実行し、指定したSSL証明書をダウンロードします。
132
+ # 1回のリクエストで、SSL証明書のキー・CA・証明書のいずれかを取得できます。
133
+ # SSL証明書を指定するためには、SSL 証明書の発行識別子(fqdnId)が必要です。削除済みのSSL証明書を指定した、
134
+ # 管理外のSSL証明書を指定したなど、無効なSSL証明書を指定した場合は、エラーが返されます。
135
+ # またSSL証明書の発行状況により、指定したファイルがダウンロードできない場合があります。
136
+ #
137
+ # @option options [String] :fqdn_id SSL証明書の識別子(必須)
138
+ # @option options [String] :file_type ダウンロードするファイル種別(必須)
139
+ # 許可値: 1 (キー) | 2 (CA) | 3 (証明書)
140
+ # @return [Hash] レスポンスXML解析結果
141
+ #
142
+ # @example
143
+ # download_ssl_certificate(:fqdn_id => 111, :file_type => 1)
144
+ #
145
+ def download_ssl_certificate( options={} )
146
+ raise ArgumentError, "No :fqdn_id provided." if blank?(options[:fqdn_id])
147
+ raise ArgumentError, "No :file_type provided." if blank?(options[:file_type])
148
+ raise ArgumentError, "Invalid :file_type provided." unless FILE_TYPE.include?(options[:file_type].to_s)
149
+
150
+ params = {'Action' => 'DownloadSslCertificate'}
151
+ params.merge!(opts_to_prms(options, [:fqdn_id, :file_type]))
152
+
153
+ return response_generator(params)
154
+ end
155
+
156
+
157
+ # API「ModifySslCertificateAttribute」を実行し、指定したSSL 証明書の詳細情報を更新します。1 回のリクエストで、1 つのSSL 証明書の1 つの詳細情報を更新できます。
158
+ # SSL証明書を指定するためには、SSL 証明書の発行識別子(fqdnId)が必要です。削除済みのSSL証明書を指定した、管理外のSSL
159
+ # 証明書を指定したなど、無効なSSL 証明書を指定した場合は、エラーが返されます。
160
+ #
161
+ # @option options [String] :fqdn_id SSL証明書の識別子(必須)
162
+ # @option options [String] :description SSL 証明書のメモ情報の更新値
163
+ # @return [Hash] レスポンスXML解析結果
164
+ #
165
+ # @example
166
+ # modify_ssl_certificate_attribute(:fqdn_id => 111, :description => 'For service A')
167
+ #
168
+ def modify_ssl_certificate_attribute( options={} )
169
+ raise ArgumentError, "No :fqdn_id provided." if blank?(options[:fqdn_id])
170
+
171
+ params = {
172
+ 'Action' => 'ModifySslCertificateAttribute',
173
+ 'FqdnId' => options[:fqdn_id].to_s,
174
+ 'Description.Value' => options[:description].to_s
175
+ }
176
+
177
+ return response_generator(params)
178
+ end
179
+
180
+
181
+ # API「RegisterCorporateInfoForCertificate」を実行し、SSL証明書を管理する申請法人情報を登録または更新します。
182
+ # 利用規約(http://cp.cloud.nifty.com/ssl/trust.txt)をご確認の上、パラメーター「agreement」を指定します。
183
+ #
184
+ # @option options [Boolean] :agreement 利用規約に同意(必須)
185
+ # 許可値: true (同意する) | false (同意しない)
186
+ # @option options [String] :tdb_code 帝国データバンクコード
187
+ # @option options [String] :corp_name 法人名(必須)
188
+ # 使用可能文字: 全角
189
+ # @option options [String] :corp_grade 法人格(必須)
190
+ # 使用可能文字: 全角
191
+ # 許可値: 株式会社 | 有限会社 | 社団法人 | 財団法人 | 学校法人 | 医療法人 | 医療法人社団 | 特定非営利活動法人 |
192
+ # 有限責任中間法人 | 中央省庁 | 地方公共団体 | 国立大学法人 | 独立行政法人 | 国家資格取得 | 協同組合 | 協同組合連合会 |
193
+ # 商工連合会 | 協議会 | 公団 | 公共団体 | その他法人 | その他組合 | その他団体 | その他公共機関
194
+ # @option options [String] :president_name1 代表者氏名(姓)(必須)
195
+ # 使用可能文字: 全角
196
+ # @option options [String] :president_name2 代表者氏名(名)(必須)
197
+ # 使用可能文字: 全角
198
+ # @option options [String] :zip1 郵便番号(上3桁)(必須)
199
+ # 使用可能文字: 半角
200
+ # @option options [String] :zip2 郵便番号(下4桁)(必須)
201
+ # 使用可能文字: 半角
202
+ # @option options [String] :pref 都道府県名(必須)
203
+ # 使用可能文字: 全角
204
+ # 許可値: 北海道 | 青森県 | 岩手県 | 宮城県 | 秋田県 | 山形県 | 福島県 | 茨城県 | 栃木県 | 群馬県 | 埼玉県 | 千葉県 |
205
+ # 東京都 | 神奈川県 | 新潟県 | 富山県 | 石川県 | 福井県 | 山梨県 | 長野県 | 岐阜県 | 静岡県 | 愛知県 | 三重県 |
206
+ # 滋賀県 | 京都府 | 大阪府| 兵庫県 | 奈良県 | 和歌山県 | 鳥取県 | 島根県 |岡山県 | 広島県 | 山口県 | 徳島県 |
207
+ # 香川県 | 愛媛県 | 高知県 | 福岡県 | 佐賀県 | 長崎県 | 熊本県 | 大分県 | 宮崎県 | 鹿児島県 | 沖縄県
208
+ # @option options [String] :city 市町村名
209
+ # 使用可能文字: 全角
210
+ # @option options [String] :name1 責任者氏名(姓)(必須)
211
+ # 使用可能文字: 全角
212
+ # @option options [String] :name2 責任者氏名(名)(必須)
213
+ # 使用可能文字: 全角
214
+ # @option options [String] :kana_name1 責任者氏名かな(姓)(必須)
215
+ # 使用可能文字: 全角
216
+ # @option options [String] :kana_name2 責任者氏名かな(名)(必須)
217
+ # 使用可能文字: 全角
218
+ # @option options [String] :post_name 役職名(必須)
219
+ # 使用可能文字: 全角
220
+ # @option options [String] :division_name 部署名(必須)
221
+ # 使用可能文字: 全角
222
+ # @return [Hash] レスポンスXML解析結果
223
+ #
224
+ # @example
225
+ # register_corporate_info_for_certificate(:agreement => true, :corp_name => 'ニフティ', :corp_grade => '株式会社', :president_name1 => 'ニフティ',
226
+ # :president_name2 => '太郎', :zip1 => 140, :zip2 => 8544, :pref => '東京都', :city => '品川区',
227
+ # :name1 => '山田', :name2 => '花子', :kana_name1 => 'やまだ', :kana_name2 => 'はなこ', :post_name => '部長',
228
+ # :division_name => '技術部')
229
+ #
230
+ def register_corporate_info_for_certificate( options={} )
231
+ raise ArgumentError, "No :agreement provided." if blank?(options[:agreement])
232
+ raise ArgumentError, "Invalid :agreement provided." unless blank?(options[:agreement]) || BOOLEAN.include?(options[:agreement].to_s)
233
+ raise ArgumentError, "No :corp_name provided." if blank?(options[:corp_name])
234
+ raise ArgumentError, "No :corp_grade provided." if blank?(options[:corp_grade])
235
+ raise ArgumentError, "No :president_name1 provided." if blank?(options[:president_name1])
236
+ raise ArgumentError, "No :president_name2 provided." if blank?(options[:president_name2])
237
+ raise ArgumentError, "No :zip1 provided." if blank?(options[:zip1])
238
+ raise ArgumentError, "Invalid :zip1 provided." unless /^\d{3}$/ =~ options[:zip1].to_s
239
+ raise ArgumentError, "No :zip2 provided." if blank?(options[:zip2])
240
+ raise ArgumentError, "Invalid :zip2 provided." unless /^\d{4}$/ =~ options[:zip2].to_s
241
+ raise ArgumentError, "No :pref provided." if blank?(options[:pref])
242
+ raise ArgumentError, "No :city provided." if blank?(options[:city])
243
+ raise ArgumentError, "No :name1 provided." if blank?(options[:name1])
244
+ raise ArgumentError, "No :name2 provided." if blank?(options[:name2])
245
+ raise ArgumentError, "No :kana_name1 provided." if blank?(options[:kana_name1])
246
+ raise ArgumentError, "No :kana_name2 provided." if blank?(options[:kana_name2])
247
+ raise ArgumentError, "No :post_name provided." if blank?(options[:post_name])
248
+ raise ArgumentError, "No :division_name provided." if blank?(options[:division_name])
249
+
250
+ params = {'Action' => 'RegisterCorporateInfoForCertificate'}
251
+ params.merge!(opts_to_prms(options,
252
+ [:agreement, :tdb_code, :corp_name, :corp_grade, :president_name1, :president_name2,
253
+ :zip1, :zip2, :pref, :city, :name1, :name2, :kana_name1, :kana_name2, :post_name, :division_name]))
254
+
255
+ return response_generator(params)
256
+ end
257
+
258
+
259
+ # API「UploadSslCertificate」を実行し、指定したSSL証明書をアップロードします。
260
+ # 1回のリクエストで、SSL証明書のキー・CA・証明書の1 セットをアップロードできます。
261
+ # 作成可能なSSL証明書の上限数を超える場合は、エラーが返されます。
262
+ # またアップロードしたファイルの解析に失敗した場合は、エラーが返されます。
263
+ #
264
+ # @option options [String] :certificate 証明書ファイル(必須)
265
+ # @option options [String] :key 秘密鍵ファイル(必須)
266
+ # @option options [String] :ca CA(認証局)ファイル
267
+ # @return [Hash] レスポンスXML解析結果
268
+ #
269
+ # @example
270
+ # upload_ssl_certificate(:certificate => 'xxxxxxxxxxxxxxxxxxxxxx', :key => 'xxxxxxxxxxx')
271
+ #
272
+ def upload_ssl_certificate( options={} )
273
+ raise ArgumentError, "No :certificate provided." if blank?(options[:certificate])
274
+ raise ArgumentError, "No :key provided." if blank?(options[:key])
275
+
276
+ params = {'Action' => 'UploadSslCertificate'}
277
+ params.merge!(opts_to_prms(options, [:certificate, :key, :ca]))
278
+
279
+ return response_generator(params)
280
+ end
281
+ end
282
+ end
283
+ end
@@ -0,0 +1,134 @@
1
+ module NIFTY
2
+ module Cloud
3
+ class Base < NIFTY::Base
4
+ IMAGES_MODIFY_ATTRIBUTE = ['description', 'imageName']
5
+ IMAGES_DESCRIBE_OWNER = ['niftycloud', 'self']
6
+ IMAGES_IGNORED_PARAMS = Regexp.union(/Description/,
7
+ /NoReboot/,
8
+ /ExecutableBy\.\d+/,
9
+ /LaunchPermission\.Add\.\d+\.UserId/,
10
+ /LaunchPermission\.Add\.\d+\.Group/,
11
+ /LaunchPermission\.Remove\.\d+\.UserId/,
12
+ /LaunchPermission\.Remove\.\d+\.Group/,
13
+ /ProductCode\.\d+/)
14
+
15
+ # API「DescribeImages」を実行し、OS イメージの情報を取得します。
16
+ # 特定のOS イメージを指定するためには、OS イメージID またはOS イメージ名が必要です。OS イメージを指定しない場合は、
17
+ # 取得可能なすべてのOS イメージ情報を取得します。無効なOS イメージを指定した場合は、エラーが返されます。
18
+ #
19
+ # @option options [Array<String>] :image_id OSイメージID
20
+ # @option options [Array<String>] :image_name OSイメージ名
21
+ # @option options [Array<String>] :owner OSイメージの種別
22
+ # 許可値: niftycloud | self
23
+ # @return [Hash] レスポンスXML解析結果
24
+ #
25
+ # @example
26
+ # describe_images(:image_id => [12000, 11001], :image_name => ['image01', 'image02'], :owner => ['niftycloud', 'self'])
27
+ #
28
+ def describe_images( options = {} )
29
+ [options[:owner]].flatten.each{|o| raise ArgumentError, "Invalid :owner provided." unless IMAGES_DESCRIBE_OWNER.include?(o) } unless blank?(options[:owner])
30
+ raise ArgumentError, "Invalid :image_id provided." unless blank?(options[:image_id]) || options[:image_id].to_s.to_i > 0
31
+
32
+ params = {'Action' => 'DescribeImages'}
33
+ params.merge!(pathlist("ExecutableBy", options[:executable_by]))
34
+ params.merge!(pathlist("ImageId", options[:image_id]))
35
+ params.merge!(pathlist("ImageName", options[:image_name]))
36
+ params.merge!(pathlist("Owner", options[:owner]))
37
+
38
+ params.reject! {|k, v| IMAGES_IGNORED_PARAMS =~ k } if @@ignore_amz_params
39
+
40
+ return response_generator(params)
41
+ end
42
+
43
+
44
+ # API「CreateImage」を実行し、指定したサーバーをイメージ化し、カスタマイズイメージとして保存します。
45
+ # サーバーをイメージ化するためには、サーバーを停止する必要があります。
46
+ # カスタマイズイメージの作成には、時間がかかることがあります。このAPI のレスポンス「imageState」を確認し「pending」が返ってきた、
47
+ # タイムアウトした場合は、API「DescribeImages」のレスポンス「imageState」でカスタマイズイメージのステータスを確認できます。
48
+ # 処理が失敗した場合、カスタマイズイメージは保存されず、エラーが返されます。
49
+ #
50
+ # @option options [String] :instance_id イメージ化元サーバー(必須)
51
+ # @option options [String] :name イメージ名(必須)
52
+ # @option options [Boolean] :left_instance イメージ化元サーバーを残す
53
+ # 許可値: true(サーバーを残す) | false(サーバーを残さない)
54
+ # @return [Hash] レスポンスXML解析結果
55
+ #
56
+ # @example
57
+ # create_image(:instance_id => 'server01', :name => 'image01', :left_instance => true)
58
+ #
59
+ def create_image( options = {} )
60
+ raise ArgumentError, "No :instance_id provided" if blank?(options[:instance_id])
61
+ raise ArgumentError, "No :name provided" if blank?(options[:name])
62
+ raise ArgumentError, "Invalid :left_instance provided. only 'true' or 'false' allowed." unless blank?(options[:left_instance]) ||
63
+ BOOLEAN.include?(options[:left_instance].to_s)
64
+
65
+ params = { 'Action' => 'CreateImage' }
66
+ params.merge!(opts_to_prms(options, [:instance_id, :name, :description, :no_reboot, :left_instance]))
67
+
68
+ params.reject! {|k, v| IMAGES_IGNORED_PARAMS =~ k } if @@ignore_amz_params
69
+
70
+ return response_generator(params)
71
+ end
72
+
73
+
74
+ # API「DeleteImage」を実行し、指定したカスタマイズイメージを削除します。
75
+ # 削除中のカスタマイズイメージを指定してサーバー作成を行った場合は、サーバー作成からエラーが返されます。
76
+ # カスタマイズイメージを選択して作成されたサーバーのOSイメージ名は、カスタマイズイメージの削除が完了すると、イメージ化した
77
+ # サーバーのOS 名が返されます。
78
+ #
79
+ # @option options [String] :image_id 削除対象のイメージID(必須)
80
+ # 許可値: 10000以降の数値
81
+ # @return [Hash] レスポンスXML解析結果
82
+ #
83
+ # @example
84
+ # delete_image(:image_id => 10430)
85
+ #
86
+ def delete_image( options={} )
87
+ raise ArgumentError, "No :image_id provided." if blank?(options[:image_id])
88
+ raise ArgumentError, "Invalid :image_id provided." unless options[:image_id].to_s.to_i >= 10000
89
+
90
+ params = {
91
+ 'Action' => 'DeleteImage',
92
+ 'ImageId' => options[:image_id].to_s
93
+ }
94
+
95
+ return response_generator(params)
96
+ end
97
+
98
+
99
+ # API「ModifyImageAttribute」を実行し、指定したカスタマイズイメージの詳細情報を更新します。1 回のリクエストで、1 つのカスタマイズイメージの情報を更新できます。
100
+ # カスタマイズイメージを指定するためには、イメージID が必要です。削除済みのイメージID を指定した、管理外のイメージID を指定したなど、
101
+ # 無効なイメージID を指定した場合は、エラーが返されます。
102
+ #
103
+ # @option options [String] :image_id 更新対象のイメージID(必須)
104
+ # 許可値: 10000以降の数値
105
+ # @option options [String] :attribute 更新対象の項目名(必須)
106
+ # 許可値: description | imageName
107
+ # @option options [String] :attribute 更新値
108
+ # @return [Hash] レスポンスXML解析結果
109
+ #
110
+ # @example
111
+ # modify_image_attribute(:image_id => 10000, :attribute => 'description', :value => 'メモ')
112
+ #
113
+ def modify_image_attribute( options={} )
114
+ raise ArgumentError, "No :image_id provided." if blank?(options[:image_id])
115
+ raise ArgumentError, "Invalid :image_id provided." unless options[:image_id].to_s.to_i >= 10000
116
+ raise ArgumentError, "No :attribute provided." if blank?(options[:attribute])
117
+ raise ArgumentError, "Invalid :attribute provided." unless blank?(options[:attribute]) || IMAGES_MODIFY_ATTRIBUTE.include?(options[:attribute])
118
+
119
+ params = {'Action' => 'ModifyImageAttribute'}
120
+ params.merge!(opts_to_prms(options, [:image_id, :attribute, :value]))
121
+ params.merge!(pathhashlist('LaunchPermission.Add', options[:launch_permission_add],
122
+ {:user_id => 'UserId', :group => 'Group'})) unless blank?(options[:launch_permission_add])
123
+ params.merge!(pathhashlist('LaunchPermission.Remove', options[:launch_permission_remove],
124
+ {:user_id => 'UserId', :group => 'Group'})) unless blank?(options[:launch_permission_remove])
125
+ params.merge!(pathlist('ProductCode', options[:product_code]))
126
+
127
+ params.reject! {|k, v| IMAGES_IGNORED_PARAMS =~ k } if @@ignore_amz_params
128
+
129
+ return response_generator(params)
130
+ end
131
+ end
132
+ end
133
+ end
134
+