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.
- data/CHANGELOG +112 -0
- data/Gemfile +4 -0
- data/INSTALL +30 -0
- data/LICENSE.txt +58 -0
- data/README.rdoc +375 -0
- data/Rakefile +61 -0
- data/lib/NIFTY.rb +405 -0
- data/lib/NIFTY/Cloud.rb +24 -0
- data/lib/NIFTY/Cloud/availability_zones.rb +23 -0
- data/lib/NIFTY/Cloud/certificates.rb +283 -0
- data/lib/NIFTY/Cloud/images.rb +134 -0
- data/lib/NIFTY/Cloud/instances.rb +372 -0
- data/lib/NIFTY/Cloud/keypairs.rb +76 -0
- data/lib/NIFTY/Cloud/load_balancers.rb +433 -0
- data/lib/NIFTY/Cloud/security_groups.rb +357 -0
- data/lib/NIFTY/Cloud/volumes.rb +140 -0
- data/lib/NIFTY/config.rb +41 -0
- data/lib/NIFTY/exceptions.rb +32 -0
- data/lib/NIFTY/responses.rb +19 -0
- data/lib/NIFTY/version.rb +3 -0
- data/nifty-cloud-sdk.gemspec +28 -0
- data/sample/availability_zones/describe-availability-zones.rb +37 -0
- data/sample/certificate/create-ssl-certificate.rb +41 -0
- data/sample/certificate/delete-ssl-certificate.rb +28 -0
- data/sample/certificate/describe-ssl-certificate-attribute.rb +58 -0
- data/sample/certificate/describe-ssl-certificates.rb +49 -0
- data/sample/certificate/download-ssl-certificate.rb +31 -0
- data/sample/certificate/modify-ssl-certificate-attribute.rb +29 -0
- data/sample/certificate/register-corporate-info-for-certificate.rb +57 -0
- data/sample/certificate/upload-ssl-certificate.rb +32 -0
- data/sample/images/create-image.rb +33 -0
- data/sample/images/delete-image.rb +26 -0
- data/sample/images/describe-images.rb +70 -0
- data/sample/images/modify-image-attribute.rb +33 -0
- data/sample/instances/cancel_copy_instances.rb +26 -0
- data/sample/instances/copy-instances.rb +41 -0
- data/sample/instances/describe-instance-attribute.rb +78 -0
- data/sample/instances/describe-instances.rb +100 -0
- data/sample/instances/modify-instance-attribute.rb +30 -0
- data/sample/instances/reboot-instances.rb +29 -0
- data/sample/instances/run-instances.rb +104 -0
- data/sample/instances/start-instances.rb +36 -0
- data/sample/instances/stop-instances.rb +35 -0
- data/sample/instances/terminate-instances.rb +34 -0
- data/sample/keypairs/create-key-pair.rb +31 -0
- data/sample/keypairs/delete-key-pair.rb +28 -0
- data/sample/keypairs/describe-key-pairs.rb +31 -0
- data/sample/load_balancers/configure-health-check.rb +41 -0
- data/sample/load_balancers/create-load-balancer.rb +35 -0
- data/sample/load_balancers/delete-load-balancer.rb +28 -0
- data/sample/load_balancers/deregister-instances-from-load-balancer.rb +35 -0
- data/sample/load_balancers/describe-instance-health.rb +36 -0
- data/sample/load_balancers/describe-load-balancers.rb +89 -0
- data/sample/load_balancers/register-instances-with-load-balancer.rb +33 -0
- data/sample/load_balancers/register-port-with-load-balancer.rb +37 -0
- data/sample/load_balancers/set-filter-for-load-balancer.rb +38 -0
- data/sample/load_balancers/update-load-balancer.rb +33 -0
- data/sample/security_groups/authorize-security-group-ingress.rb +36 -0
- data/sample/security_groups/create-security-group.rb +29 -0
- data/sample/security_groups/delete-security-group.rb +28 -0
- data/sample/security_groups/deregister-instances-from-security-group.rb +31 -0
- data/sample/security_groups/describe-security-activities.rb +33 -0
- data/sample/security_groups/describe-security-groups.rb +59 -0
- data/sample/security_groups/register-instances-with-security-group.rb +31 -0
- data/sample/security_groups/revoke-security-group-ingress.rb +36 -0
- data/sample/security_groups/update-security-group.rb +30 -0
- data/sample/volumes/attach-volumes.rb +34 -0
- data/sample/volumes/create-volume.rb +38 -0
- data/sample/volumes/delete-volume.rb +28 -0
- data/sample/volumes/describe-volumes.rb +44 -0
- data/sample/volumes/detach-volume.rb +35 -0
- data/test/test_Cloud.rb +186 -0
- data/test/test_Cloud_availability_zones.rb +50 -0
- data/test/test_Cloud_certificates.rb +627 -0
- data/test/test_Cloud_images.rb +284 -0
- data/test/test_Cloud_instances.rb +941 -0
- data/test/test_Cloud_keypairs.rb +177 -0
- data/test/test_Cloud_load_balancers.rb +1183 -0
- data/test/test_Cloud_responses.rb +43 -0
- data/test/test_Cloud_security_groups.rb +699 -0
- data/test/test_Cloud_volumes.rb +325 -0
- data/test/test_helper.rb +23 -0
- metadata +275 -0
@@ -0,0 +1,357 @@
|
|
1
|
+
module NIFTY
|
2
|
+
module Cloud
|
3
|
+
class Base < NIFTY::Base
|
4
|
+
FILTER_NAME = ['description', 'group-name']
|
5
|
+
IP_PROTOCOL = ['TCP', 'UDP', 'ICMP', 'SSH', 'HTTP', 'HTTPS', 'SMTP', 'POP3', 'IMAP']
|
6
|
+
IN_OUT = ['IN', 'OUT']
|
7
|
+
DATE_FORMAT = %r!^(\d{8}|\d{4}-\d{2}-\d{2}|\d{4}/\d{2}/\d{2})$!
|
8
|
+
GROUP_NAME = Regexp.union(/^[a-zA-Z0-9]+$/, 'default(Linux)', 'default(Windows)')
|
9
|
+
SECURITY_GROUPS_IGNORED_PARAMS = Regexp.union(/UserId/,
|
10
|
+
/IpPermissions\.\d+\.ToPort/,
|
11
|
+
/IpPermissions\.\d+\.Groups\.\d+\.UserId/)
|
12
|
+
|
13
|
+
# API「AuthorizeSecurityGroupIngress」を実行し、指定したファイアウォールグループへ許可ルールを追加します。
|
14
|
+
# 許可ルールの上限数を超える場合は、エラーが返されます。
|
15
|
+
# ファイアウォールグループを指定するためには、ファイアウォールグループ名が必要です。削除済みのファイアウォールグループを指定した、
|
16
|
+
# 管理外のファイアウォールグループを指定したなど、無効なファイアウォールグループを指定した場合は、エラーが返されます。
|
17
|
+
#
|
18
|
+
# @option options [String] :group_name 対象のファイアウォールグループ名(必須)
|
19
|
+
# @option options [Array<Hash>] :ip_permissions IP許可設定
|
20
|
+
# <Hash> options [String] :protocol - 許可プロトコル名
|
21
|
+
# 許可値: TCP | UDP | ICMP | SSH | HTTP | HTTPS
|
22
|
+
# [Integer] :from_port - 許可ポート(:protocolがTCP、UDPの場合は必須)
|
23
|
+
# [String] :in_out - Incoming/Outgoing 指定
|
24
|
+
# 許可値: IN(Incoming) | OUT(Outgoing)
|
25
|
+
# [Array<String>] :group_name - 許可するファイアウォールグループ名(:cidr_ipとどちらか必須)
|
26
|
+
# [Array<String>] :cidr_ip - 許可するIP アドレス(CIDR指定可) (:group_nameとどちらか必須)
|
27
|
+
# @return [Hash] レスポンスXML解析結果
|
28
|
+
#
|
29
|
+
# @example
|
30
|
+
# authorize_security_group_ingress(:group_name => 'gr1', :ip_permissions => [{:protocol => 'TCP',
|
31
|
+
# :from_port => 80,
|
32
|
+
# :in_out => 'IN',
|
33
|
+
# :group_name => ['gr1', 'gr2'],
|
34
|
+
# :cidr_ip => ['111.171.200.1/22', '111.111.111.112']} ])
|
35
|
+
#
|
36
|
+
def authorize_security_group_ingress( options = {} )
|
37
|
+
raise ArgumentError, "No :group_name provided." if blank?(options[:group_name])
|
38
|
+
raise ArgumentError, "Invalid :group_name provided." unless GROUP_NAME =~ options[:group_name].to_s
|
39
|
+
raise ArgumentError, "No :ip_permissions provided." if blank?(options[:ip_permissions])
|
40
|
+
[options[:ip_permissions]].flatten.each do |opt|
|
41
|
+
raise ArgumentError, "expected each element of arr_of_hashes to be a Hash" unless opt.is_a?(Hash)
|
42
|
+
raise ArgumentError, "Invalid :ip_protocol provided." unless blank?(opt[:ip_protocol]) || IP_PROTOCOL.include?(opt[:ip_protocol].to_s.upcase)
|
43
|
+
raise ArgumentError, "No :from_port provided." if /TCP|UDP/ =~ opt[:ip_protocol] && blank?(opt[:from_port])
|
44
|
+
raise ArgumentError, "Invalid :from_port provided." unless blank?(opt[:from_port]) || valid_port?(opt[:from_port])
|
45
|
+
raise ArgumentError, "Invalid :to_port provided." unless blank?(opt[:to_port]) || valid_port?(opt[:to_port])
|
46
|
+
raise ArgumentError, "Invalid :in_out provided." unless blank?(opt[:in_out]) || IN_OUT.include?(opt[:in_out].to_s.upcase)
|
47
|
+
raise ArgumentError, ":group_name or :cidr_ip must be provided." if blank?(opt[:group_name]) && blank?(opt[:cidr_ip])
|
48
|
+
raise ArgumentError, "Invalid :group_name provided." unless blank?(opt[:group_name]) || GROUP_NAME =~ opt[:group_name].to_s
|
49
|
+
[opt[:cidr_ip]].flatten.each do |ip|
|
50
|
+
begin IPAddr.new(ip.to_s) rescue raise ArgumentError, "Invalid :cidr_ip provided." end
|
51
|
+
end unless blank?(opt[:cidr_ip])
|
52
|
+
|
53
|
+
opt[:user_id] = [opt[:user_id]].flatten unless blank?(opt[:user_id])
|
54
|
+
opt[:group_name] = [opt[:group_name]].flatten unless blank?(opt[:group_name])
|
55
|
+
opt[:cidr_ip] = [opt[:cidr_ip]].flatten unless blank?(opt[:cidr_ip])
|
56
|
+
end unless blank?(options[:ip_permissions])
|
57
|
+
|
58
|
+
params = {'Action' => 'AuthorizeSecurityGroupIngress'}
|
59
|
+
params.merge!(opts_to_prms(options, [:user_id, :group_name]))
|
60
|
+
unless blank?(options[:ip_permissions])
|
61
|
+
params.merge!(pathhashlist('IpPermissions', options[:ip_permissions],
|
62
|
+
{ :ip_protocol => 'IpProtocol',
|
63
|
+
:from_port => 'FromPort',
|
64
|
+
:to_port => 'ToPort',
|
65
|
+
:in_out => 'InOut',
|
66
|
+
:user_id => 'Groups',
|
67
|
+
:group_name => 'Groups',
|
68
|
+
:cidr_ip => 'IpRanges'},
|
69
|
+
{ :user_id => 'UserId',
|
70
|
+
:group_name => 'GroupName',
|
71
|
+
:cidr_ip => 'CidrIp'}))
|
72
|
+
end
|
73
|
+
|
74
|
+
params.reject! {|k, v| SECURITY_GROUPS_IGNORED_PARAMS =~ k } if @@ignore_amz_params
|
75
|
+
|
76
|
+
return response_generator(params)
|
77
|
+
end
|
78
|
+
|
79
|
+
|
80
|
+
# API「CreateSecurityGroup」を実行し、ファイアウォールグループを新規作成します。
|
81
|
+
# ファイアウォールの有償版に申し込んでいない場合は、エラーが返されます。
|
82
|
+
# すでに存在するファイアウォールグループ名を指定した、作成可能なファイアウォールグループの上限数を超える場合は、エラーが返されます。
|
83
|
+
# ファイアウォールの有償版を申し込むには、コントロールパネルで設定する必要があります。
|
84
|
+
#
|
85
|
+
# @option options [String] :group_name ファイアウォールグループ名(必須)
|
86
|
+
# 使用可能文字: 半角英数字
|
87
|
+
# @option options [String] :group_description ファイアウォールグループのメモ
|
88
|
+
# @return [Hash] レスポンスXML解析結果
|
89
|
+
#
|
90
|
+
# @example
|
91
|
+
# create_security_group(:group_name => 'group01', :group_description => 'Security Group memo.')
|
92
|
+
#
|
93
|
+
def create_security_group( options={} )
|
94
|
+
raise ArgumentError, "No :group_name provided." if blank?(options[:group_name])
|
95
|
+
raise ArgumentError, "Invalid :group_name provided." unless ALPHANUMERIC =~ options[:group_name].to_s
|
96
|
+
|
97
|
+
params = {'Action' => 'CreateSecurityGroup'}
|
98
|
+
params.merge!(opts_to_prms(options, [:group_name, :group_description]))
|
99
|
+
|
100
|
+
return response_generator(params)
|
101
|
+
end
|
102
|
+
|
103
|
+
|
104
|
+
# API「DeleteSecurityGroup」を実行し、指定したファイアウォールグループを削除します。
|
105
|
+
# 指定したファイアウォールグループを適用しているサーバーが存在する場合、エラーが返されます。同様に、適用しているオートスケール設定が存在する場合、
|
106
|
+
# エラーが返されます。
|
107
|
+
# ファイアウォールグループを指定するためには、ファイアウォールグループ名が必要です。
|
108
|
+
# 削除済みのファイアウォールグループを指定した、管理外のファイアウォールグループを指定したなど、無効なファイアウォールグループを指定した場合は、
|
109
|
+
# エラーが返されます。
|
110
|
+
#
|
111
|
+
# @option options [String] :group_name 対象のファイアウォールグループ名(必須)
|
112
|
+
# @return [Hash] レスポンスXML解析結果
|
113
|
+
#
|
114
|
+
# @example
|
115
|
+
# delete_security_group(:group_name => 'group01')
|
116
|
+
#
|
117
|
+
def delete_security_group( options={} )
|
118
|
+
raise ArgumentError, "No :group_name provided" if blank?(options[:group_name])
|
119
|
+
raise ArgumentError, "Invalid :group_name provided." unless ALPHANUMERIC =~ options[:group_name].to_s
|
120
|
+
|
121
|
+
params = {
|
122
|
+
'Action' => 'DeleteSecurityGroup',
|
123
|
+
'GroupName' => options[:group_name].to_s
|
124
|
+
}
|
125
|
+
|
126
|
+
return response_generator(params)
|
127
|
+
end
|
128
|
+
|
129
|
+
|
130
|
+
# API「DeregisterInstancesFromSecurityGroup」を実行し、指定したファイアウォールグループから、指定したサーバーをはずします。
|
131
|
+
# ファイアウォールグループを指定するためには、ファイアウォールグループ名が必要です。削除済みのファイアウォールグループを指定した、
|
132
|
+
# 管理外のファイアウォールグループを指定したなど、無効なファイアウォールグループを指定した場合は、エラーが返されます。
|
133
|
+
# またサーバーを指定するためには、サーバー名が必要です。指定したファイアウォールグループに適用されていないサーバーを指定した、
|
134
|
+
# 削除済みのサーバーを指定した、管理外のサーバーを指定したなど、無効なサーバーを指定した場合は、エラーが返されます。
|
135
|
+
#
|
136
|
+
# @option options [String] :group_name ファイアウォールグループ名(必須)
|
137
|
+
# @option options [Array<String>] :instance_id サーバー名(必須)
|
138
|
+
# @return [Hash] レスポンスXML解析結果
|
139
|
+
#
|
140
|
+
# @example
|
141
|
+
# deregister_instances_from_security_group(:group_name => 'group01', :instance_id => ['server01', 'server02'])
|
142
|
+
#
|
143
|
+
def deregister_instances_from_security_group( options={} )
|
144
|
+
raise ArgumentError, "No :group_name provided." if blank?(options[:group_name])
|
145
|
+
raise ArgumentError, "Invalid :group_name provided." unless GROUP_NAME =~ options[:group_name].to_s
|
146
|
+
raise ArgumentError, "No :instance_id provided." if blank?(options[:instance_id])
|
147
|
+
|
148
|
+
params = {
|
149
|
+
'Action' => 'DeregisterInstancesFromSecurityGroup',
|
150
|
+
'GroupName' => options[:group_name].to_s
|
151
|
+
}
|
152
|
+
params.merge!(pathlist('InstanceId', options[:instance_id]))
|
153
|
+
|
154
|
+
return response_generator(params)
|
155
|
+
end
|
156
|
+
|
157
|
+
|
158
|
+
# API「DescribeSecurityActivities」を実行し、指定したファイアウォールグループのログ情報を取得します。
|
159
|
+
# ファイアウォールグループを指定するためには、ファイアウォールグループ名が必要です。削除済みのファイアウォールグループを指定した、
|
160
|
+
# 管理外のファイアウォールグループを指定したなど、無効なファイアウォールグループを指定した場合は、エラーが返されます。
|
161
|
+
#
|
162
|
+
# @option options [String] :group_name ファイアウォールグループ名(必須)
|
163
|
+
# @option options [String] :activity_date 取得するログの絞り込み条件(日)
|
164
|
+
# 形式: yyyymmdd | yyyy-mm-dd | yyyy/mm/dd
|
165
|
+
# @option options [Boolean] :range_all 指定日内のログを全件取得
|
166
|
+
# 許可値: true(全件取得) | false(件数指())
|
167
|
+
# @option options [Integer] :range_start_number 取得開始件数
|
168
|
+
# 許可値: 1 - 取得可能な最大件数
|
169
|
+
# @option options [Integer] :range_end_number 取得終了件数
|
170
|
+
# 許可値: 1 - 取得可能な最大件数
|
171
|
+
# @return [Hash] レスポンスXML解析結果
|
172
|
+
#
|
173
|
+
# @example
|
174
|
+
# describe_security_activities(:group_name => 'group01', :activity_date => '2011-06-08', :range_all => false,
|
175
|
+
# :range_start_number => 1, :range_end_number => 10)
|
176
|
+
#
|
177
|
+
def describe_security_activities( options={} )
|
178
|
+
raise ArgumentError, "No :group_name provided." if blank?(options[:group_name])
|
179
|
+
raise ArgumentError, "Invalid :group_name provided." unless GROUP_NAME =~ options[:group_name].to_s
|
180
|
+
raise ArgumentError, "Invalid :activity_date provided." unless blank?(options[:activity_date]) || DATE_FORMAT =~ options[:activity_date].to_s
|
181
|
+
raise ArgumentError, "Invalid :range_all provided." unless blank?(options[:range_all]) || BOOLEAN.include?(options[:range_all].to_s)
|
182
|
+
raise ArgumentError, "Invalid :range_start_number provided." unless blank?(options[:range_start_number]) || options[:range_start_number].to_s.to_i >= 1
|
183
|
+
raise ArgumentError, "Invalid :range_end_number provided." unless blank?(options[:range_end_number]) || (options[:range_end_number]).to_s.to_i >= 1
|
184
|
+
raise ArgumentError, "Invalid :range_end_number provided." unless blank?(options[:range_start_number]) || blank?(options[:range_end_number]) ||
|
185
|
+
options[:range_start_number] <= options[:range_end_number]
|
186
|
+
|
187
|
+
params = {
|
188
|
+
'Action' => 'DescribeSecurityActivities',
|
189
|
+
'GroupName' => options[:group_name].to_s,
|
190
|
+
'ActivityDate' => options[:activity_date].to_s,
|
191
|
+
'Range.All' => options[:range_all].to_s,
|
192
|
+
'Range.StartNumber' => options[:range_start_number].to_s,
|
193
|
+
'Range.EndNumber' => options[:range_end_number].to_s
|
194
|
+
}
|
195
|
+
|
196
|
+
return response_generator(params)
|
197
|
+
end
|
198
|
+
|
199
|
+
|
200
|
+
# API「DescribeSecurityGroups」を実行し、指定したファイアウォールグループの設定情報を取得します。
|
201
|
+
# ファイアウォールグループを指定するためには、ファイアウォールグループ名が必要です。指定しない場合は、取得可能なすべての
|
202
|
+
# ファイアウォールグループの設定情報を取得します。
|
203
|
+
#
|
204
|
+
# @option options [String] :group_name ファイアウォールグループ名
|
205
|
+
# @option options [Array<Hash>] :filter フィルター設定
|
206
|
+
# <Hash> options [String] 絞り込み条件の項目名
|
207
|
+
# 許可値: description | group-name
|
208
|
+
# [String] 絞り込み条件の値 (前方一致)
|
209
|
+
# @return [Hash] レスポンスXML解析結果
|
210
|
+
#
|
211
|
+
# @example
|
212
|
+
# describe_security_groups(:group_name => 'group01', :filter => [ {'description' => 'filter1'}, {'group-name' => ['filter1', 'filter2']} ])
|
213
|
+
#
|
214
|
+
def describe_security_groups( options={} )
|
215
|
+
[options[:group_name]].flatten.each do |e|
|
216
|
+
raise ArgumentError, "Invalid :group_name provided." unless GROUP_NAME =~ options[:group_name].to_s
|
217
|
+
end unless blank?(options[:group_name])
|
218
|
+
|
219
|
+
params = {'Action' => 'DescribeSecurityGroups'}
|
220
|
+
params.merge!(pathlist("GroupName", options[:group_name]))
|
221
|
+
unless blank?(options[:filter])
|
222
|
+
[options[:filter]].flatten.each do |opt|
|
223
|
+
raise ArgumentError, "expected each element of arr_of_hashes to be a Hash" unless opt.is_a?(Hash)
|
224
|
+
raise ArgumentError, "Invalid :name provided." unless blank?(opt[:name]) || FILTER_NAME.include?(opt[:name].to_s)
|
225
|
+
|
226
|
+
opt[:value] = [opt[:value]].flatten unless blank?(opt[:value])
|
227
|
+
end
|
228
|
+
|
229
|
+
params.merge!(pathhashlist('Filter', options[:filter], {:name => 'Name', :value => 'Value'}))
|
230
|
+
end
|
231
|
+
|
232
|
+
return response_generator(params)
|
233
|
+
end
|
234
|
+
|
235
|
+
|
236
|
+
# API「RegisterInstancesWithSecurityGroup」を実行し、指定したファイアウォールグループを、指定したサーバーへ適用します。
|
237
|
+
# ファイアウォールグループを指定するためには、ファイアウォールグループ名が必要です。削除済みのファイアウォールグループを指定した、
|
238
|
+
# 管理外のファイアウォールグループを指定したなど、無効なファイアウォールグループを指定した場合は、エラーが返されます。
|
239
|
+
# またサーバーを指定するためには、サーバー名が必要です。すでにファイアウォールグループに適用されているサーバーを指定した、
|
240
|
+
# 削除済みのサーバーを指定した、管理外のサーバーを指定したなど、無効なサーバーを指定した場合は、エラーが返されます。
|
241
|
+
#
|
242
|
+
# @option options [String] :group_name ファイアウォールグループ名(必須)
|
243
|
+
# @option options [Array<String>] :instance_id サーバー名(必須)
|
244
|
+
# @return [Hash] レスポンスXML解析結果
|
245
|
+
#
|
246
|
+
# @example
|
247
|
+
# register_instances_with_security_group(:group_name => 'group01', :instance_id => ['server02', 'server03'])
|
248
|
+
#
|
249
|
+
def register_instances_with_security_group( options={} )
|
250
|
+
raise ArgumentError, "No :group_name provided." if blank?(options[:group_name])
|
251
|
+
raise ArgumentError, "Invalid :group_name provided." unless GROUP_NAME =~ options[:group_name].to_s
|
252
|
+
raise ArgumentError, "No :instance_id provided." if blank?(options[:instance_id])
|
253
|
+
|
254
|
+
params = {
|
255
|
+
'Action' => 'RegisterInstancesWithSecurityGroup',
|
256
|
+
'GroupName' => options[:group_name]
|
257
|
+
}
|
258
|
+
params.merge!(pathlist('InstanceId', options[:instance_id]))
|
259
|
+
|
260
|
+
return response_generator(params)
|
261
|
+
end
|
262
|
+
|
263
|
+
|
264
|
+
# API「RevokeSecurityGroupIngress」を実行し、指定したファイアウォールグループから許可ルールを削除します。
|
265
|
+
# ファイアウォールグループを指定するためには、ファイアウォールグループ名が必要です。削除済みのファイアウォールグループを指定した、
|
266
|
+
# 管理外のファイアウォールグループを指定したなど、無効なファイアウォールグループを指定した場合は、エラーが返されます。
|
267
|
+
# また許可ルールを指定するためには、設定されている 許可プロトコル名・許可ポート・許可するファイアウォールグループまたは許可するIPアドレスが必要です。
|
268
|
+
# 該当する許可ルールが存在しない場合は、エラーが返されます。
|
269
|
+
#
|
270
|
+
# @option options [String] :group_name 対象のファイアウォールグループ名(必須)
|
271
|
+
# @option options [Array<Hash>] :ip_permissions IP許可設定
|
272
|
+
# <Hash> options [String] :protocol - 許可プロトコル名
|
273
|
+
# 許可値: TCP | UDP | ICMP | SSH | HTTP | HTTPS
|
274
|
+
# [Integer] :from_port - 許可ポート(:protocolがTCP、UDPの場合は必須)
|
275
|
+
# [String] :in_out - Incoming/Outgoing 指定
|
276
|
+
# 許可値: IN(Incoming) | OUT(Outgoing)
|
277
|
+
# [Array<String>] :group_name - 許可するファイアウォールグループ名(:cidr_ipとどちらか必須)
|
278
|
+
# [Array<String>] :cidr_ip - 許可するIP アドレス(CIDR指定可) (:group_nameとどちらか必須)
|
279
|
+
# @return [Hash] レスポンスXML解析結果
|
280
|
+
#
|
281
|
+
# @example
|
282
|
+
# revoke_security_group_ingress(:group_name => 'gr1', :ip_permissions => [{:protocol => 'TCP',
|
283
|
+
# :from_port => 80,
|
284
|
+
# :in_out => 'IN',
|
285
|
+
# :group_name => ['gr1', 'gr2'],
|
286
|
+
# :cidr_ip => ['111.171.200.1/22', '111.111.111.112']} ])
|
287
|
+
#
|
288
|
+
def revoke_security_group_ingress( options={} )
|
289
|
+
raise ArgumentError, "No :group_name provided." if blank?(options[:group_name])
|
290
|
+
raise ArgumentError, "Invalid :group_name provided." unless GROUP_NAME =~ options[:group_name].to_s
|
291
|
+
raise ArgumentError, "No :ip_permissions provided." if blank?(options[:ip_permissions])
|
292
|
+
[options[:ip_permissions]].flatten.each do |opt|
|
293
|
+
raise ArgumentError, "expected each element of arr_of_hashes to be a Hash" unless opt.is_a?(Hash)
|
294
|
+
raise ArgumentError, "Invalid :ip_protocol provided." unless blank?(opt[:ip_protocol]) || IP_PROTOCOL.include?(opt[:ip_protocol].to_s.upcase)
|
295
|
+
raise ArgumentError, "No :from_port provided." if /TCP|UDP/ =~ opt[:ip_protocol] && blank?(opt[:from_port])
|
296
|
+
raise ArgumentError, "Invalid :from_port provided." unless blank?(opt[:from_port]) || valid_port?(opt[:from_port])
|
297
|
+
raise ArgumentError, "Invalid :to_port provided." unless blank?(opt[:to_port]) || valid_port?(opt[:to_port])
|
298
|
+
raise ArgumentError, "Invalid :in_out provided." unless blank?(opt[:in_out]) || IN_OUT.include?(opt[:in_out].to_s.upcase)
|
299
|
+
raise ArgumentError, ":group_name or :cidr_ip must be provided." if blank?(opt[:group_name]) && blank?(opt[:cidr_ip])
|
300
|
+
raise ArgumentError, "Invalid :group_name provided." unless blank?(opt[:group_name]) || GROUP_NAME =~ opt[:group_name].to_s
|
301
|
+
[opt[:cidr_ip]].flatten.each do |ip|
|
302
|
+
begin IPAddr.new(ip.to_s) rescue raise ArgumentError, "Invalid :cidr_ip provided." end
|
303
|
+
end unless blank?(opt[:cidr_ip])
|
304
|
+
|
305
|
+
opt[:user_id] = [opt[:user_id]].flatten unless blank?(opt[:user_id])
|
306
|
+
opt[:group_name] = [opt[:group_name]].flatten unless blank?(opt[:group_name])
|
307
|
+
opt[:cidr_ip] = [opt[:cidr_ip]].flatten unless blank?(opt[:cidr_ip])
|
308
|
+
end unless blank?(options[:ip_permissions])
|
309
|
+
|
310
|
+
params = {'Action' => 'RevokeSecurityGroupIngress'}
|
311
|
+
params.merge!(opts_to_prms(options, [:user_id, :group_name]))
|
312
|
+
unless blank?(options[:ip_permissions])
|
313
|
+
params.merge!(pathhashlist('IpPermissions', [options[:ip_permissions]].flatten,
|
314
|
+
{ :ip_protocol => 'IpProtocol',
|
315
|
+
:from_port => 'FromPort',
|
316
|
+
:to_port => 'ToPort',
|
317
|
+
:in_out => 'InOut',
|
318
|
+
:user_id => 'Groups',
|
319
|
+
:group_name => 'Groups',
|
320
|
+
:cidr_ip => 'IpRanges'},
|
321
|
+
{ :user_id => 'UserId',
|
322
|
+
:group_name => 'GroupName',
|
323
|
+
:cidr_ip => 'CidrIp'}))
|
324
|
+
end
|
325
|
+
|
326
|
+
params.reject! {|k, v| SECURITY_GROUPS_IGNORED_PARAMS =~ k } if @@ignore_amz_params
|
327
|
+
|
328
|
+
return response_generator(params)
|
329
|
+
end
|
330
|
+
|
331
|
+
|
332
|
+
# API「UpdateSecurityGroup」を実行し、ファイアウォールグループの設定情報を更新します。
|
333
|
+
# ファイアウォールグループを指定するためには、ファイアウォールグループ名が必要です。削除済みのファイアウォールグループを指定した、
|
334
|
+
# 管理外のファイアウォールグループを指定したなど、無効なファイアウォールグループを指定した場合は、エラーが返されます。
|
335
|
+
#
|
336
|
+
# @option options [String] :group_name ファイアウォールグループ名(必須)
|
337
|
+
# @option options [String] :group_name_update ファイアウォールグループ名の変更
|
338
|
+
# @option options [String] :group_description_update ファイアウォールグループのメモの変更
|
339
|
+
# @return [Hash] レスポンスXML解析結果
|
340
|
+
#
|
341
|
+
# @example
|
342
|
+
# update_security_group(:group_name => 'group01', :group_name_update => 'group02', :group_description_update => 'Security Group memo.Updated.')
|
343
|
+
#
|
344
|
+
def update_security_group( options={} )
|
345
|
+
raise ArgumentError, "No :group_name provided." if blank?(options[:group_name])
|
346
|
+
raise ArgumentError, "Invalid :group_name provided." unless GROUP_NAME =~ options[:group_name].to_s
|
347
|
+
raise ArgumentError, "Invalid :group_name_update provided." unless blank?(options[:group_name_update]) || ALPHANUMERIC =~ options[:group_name_update].to_s
|
348
|
+
|
349
|
+
params = {'Action' => 'UpdateSecurityGroup'}
|
350
|
+
params.merge!(opts_to_prms(options, [:group_name, :group_name_update, :group_description_update]))
|
351
|
+
|
352
|
+
return response_generator(params)
|
353
|
+
end
|
354
|
+
end
|
355
|
+
end
|
356
|
+
end
|
357
|
+
|
@@ -0,0 +1,140 @@
|
|
1
|
+
module NIFTY
|
2
|
+
module Cloud
|
3
|
+
class Base < NIFTY::Base
|
4
|
+
VOLUMES_CREATE_SIZE = ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '15', '20']
|
5
|
+
VOLUMES_CREATE_DISK_TYPE = ['1', '2', '3', '4', '5', '6']
|
6
|
+
VOLUMES_IGNORED_PARAMS = Regexp.union(/SnapshotId/,
|
7
|
+
/AvailabilityZone/,
|
8
|
+
/Device/,
|
9
|
+
/Force/)
|
10
|
+
|
11
|
+
# API「AttachVolume」を実行し、指定したディスクをサーバーへ接続します。
|
12
|
+
# ディスクを指定するためには、ディスク名が必要です。接続済み・削除済みのディスクを指定した、管理外のディスクを指定したなど、
|
13
|
+
# 無効なディスクを指定した場合は、エラーが返されます。
|
14
|
+
# またサーバーを指定するためには、サーバー名が必要です。接続済み・削除済みのサーバーを指定した、管理外のサーバーを指定したなど、
|
15
|
+
# 無効なサーバーを指定した場合は、エラーが返されます。
|
16
|
+
#
|
17
|
+
# @option options [String] :volume_id サーバーに接続するディスク名(必須)
|
18
|
+
# @option options [String] :instance_id 接続先のサーバー名(必須)
|
19
|
+
# @return [Hash] レスポンスXML解析結果
|
20
|
+
#
|
21
|
+
# @example
|
22
|
+
# attach_volume(:volume_id => 'vol1', :instance_id => 'server01')
|
23
|
+
#
|
24
|
+
def attach_volume( options = {} )
|
25
|
+
raise ArgumentError, "No :volume_id provided." if blank?(options[:volume_id])
|
26
|
+
raise ArgumentError, "No :instance_id provided." if blank?(options[:instance_id])
|
27
|
+
|
28
|
+
params = { 'Action' => 'AttachVolume' }
|
29
|
+
params.merge!(opts_to_prms(options, [:volume_id, :instance_id, :device]))
|
30
|
+
|
31
|
+
params.reject! {|k, v| VOLUMES_IGNORED_PARAMS =~ k } if @@ignore_amz_params
|
32
|
+
|
33
|
+
return response_generator(params)
|
34
|
+
end
|
35
|
+
|
36
|
+
|
37
|
+
# API「CreateVolume」を実行し、ディスクを新規作成します。
|
38
|
+
# サーバーを指定するためには、サーバー名が必要です。削除済みのサーバーを指定した、管理外のサーバーを指定した、停止済み
|
39
|
+
# 以外のサーバーを指定したなど、無効なサーバーを指定した場合は、エラーが返されます。同様に、ディスクサイズおよびディスク
|
40
|
+
# タイプに規定外の値を指定した、すでに存在するディスク名を指定したなどの場合は、エラーが返されます。
|
41
|
+
#
|
42
|
+
# @option options [String] :size ディスクサイズ(必須)
|
43
|
+
# 許可値: (低速) 1(100) | 2(200) | 3(300) | 4(400) | 5(500) | 10(1000) | 15(1500) | 20(2000)
|
44
|
+
# (高速) 1(100) | 2(200) | 3(300) | 4(400) | 5(500) | 6(600) | 7(700) | 8(800) | 9(900) | 10(1000) (単位: GB)
|
45
|
+
# @option options [String] :volume_id ディスク名
|
46
|
+
# @option options [String] :disk_type ディスクタイプ
|
47
|
+
# 許可値: 1(disk100) | 2(disk40) | 3(disk100A) | 4(disk100B) | 5(disk40A) | 6(disk40B)
|
48
|
+
# @option options [String] :instance_id サーバー名(必須)
|
49
|
+
# @return [Hash] レスポンスXML解析結果
|
50
|
+
#
|
51
|
+
# @example
|
52
|
+
# create_volume(:size => 1, :volume_id => 'vol1', :disk_type => 1, :instance_id => 'server01')
|
53
|
+
#
|
54
|
+
def create_volume( options = {} )
|
55
|
+
raise ArgumentError, "No :size provided." if blank?(options[:size])
|
56
|
+
raise ArgumentError, "No :instance_id provided." if blank?(options[:instance_id])
|
57
|
+
raise ArgumentError, "Invalid :size provided." unless blank?(options[:size]) || VOLUMES_CREATE_SIZE.include?(options[:size].to_s)
|
58
|
+
raise ArgumentError, "Invalid :disk_type provided." unless blank?(options[:disk_type]) || VOLUMES_CREATE_DISK_TYPE.include?(options[:disk_type].to_s)
|
59
|
+
|
60
|
+
params = {'Action' => 'CreateVolume'}
|
61
|
+
params.merge!(opts_to_prms(options, [:size, :snapshot_id, :availability_zone, :volume_id, :disk_type, :instance_id]))
|
62
|
+
|
63
|
+
params.reject! {|k, v| VOLUMES_IGNORED_PARAMS =~ k } if @@ignore_amz_params
|
64
|
+
|
65
|
+
return response_generator(params)
|
66
|
+
end
|
67
|
+
|
68
|
+
|
69
|
+
# API「DeleteVolume」を実行し、指定したディスクを削除します。
|
70
|
+
# ディスクを指定するためには、ディスク名が必要です。接続済み・削除済みのディスクを指定した、管理外のディスクを指定したなど、
|
71
|
+
# 無効なディスクを指定した場合は、エラーが返されます。
|
72
|
+
# 削除には、時間がかかることがあります。
|
73
|
+
# なお、サーバーに接続しているディスクを指定した場合には、エラーが返されます。ディスクの接続ステータスは、API
|
74
|
+
# 「DescribeVolumes」のレスポンス「attachmentSet.status」で確認できます。
|
75
|
+
#
|
76
|
+
# @option options [String] :volume_id 削除対象のディスク名(必須)
|
77
|
+
# @return [Hash] レスポンスXML解析結果
|
78
|
+
#
|
79
|
+
# @example
|
80
|
+
# delete_volume(:volume_id => 'vol1')
|
81
|
+
#
|
82
|
+
def delete_volume( options = {} )
|
83
|
+
raise ArgumentError, "No :volume_id provided." if blank?(options[:volume_id])
|
84
|
+
|
85
|
+
params = {
|
86
|
+
'Action' => 'DeleteVolume',
|
87
|
+
'VolumeId' => options[:volume_id].to_s
|
88
|
+
}
|
89
|
+
|
90
|
+
return response_generator(params)
|
91
|
+
end
|
92
|
+
|
93
|
+
|
94
|
+
# API「DescribeVolumes」を実行し、指定したディスクの情報を取得します。
|
95
|
+
# ディスクを指定するためには、ディスク名が必要です。削除済みのディスクを指定した、管理外のディスクを指定したなど、
|
96
|
+
# 無効なディスクを指定した場合は、エラーが返されます。
|
97
|
+
# ディスクを指定しない場合、取得できるすべてのディスク情報を取得します。
|
98
|
+
#
|
99
|
+
# @option options [Array<String>] :volume_id ディスク名
|
100
|
+
# @return [Hash] レスポンスXML解析結果
|
101
|
+
#
|
102
|
+
# @example
|
103
|
+
# describe_volumes(:volume_id => ['vol1', 'vol2'])
|
104
|
+
#
|
105
|
+
def describe_volumes( options = {} )
|
106
|
+
params = {'Action' => 'DescribeVolumes'}
|
107
|
+
params.merge!(pathlist("VolumeId", options[:volume_id]))
|
108
|
+
|
109
|
+
return response_generator(params)
|
110
|
+
end
|
111
|
+
|
112
|
+
|
113
|
+
# API「DetachVolume」を実行し、指定したディスクとサーバーの接続を解除します。
|
114
|
+
# ディスクを指定するためには、ディスク名が必要です。解除済み・削除済みのディスクを指定した、管理外のディスクを指定したなど、
|
115
|
+
# 無効なディスクを指定した場合は、エラーが返されます。
|
116
|
+
# またサーバーを指定するためには、サーバー名が必要です。解除済み・削除済みのサーバーを指定した、管理外のサーバーを指定したなど、
|
117
|
+
# 無効なサーバーを指定した場合は、エラーが返されます。サーバー名を指定せずに解除すると、指定したディスクのすべての接続情報を解除します。
|
118
|
+
#
|
119
|
+
# @option options [String] :volume_id 接続解除対象のディスク名(必須)
|
120
|
+
# @option options [String] :instance_id 接続解除されるサーバー名
|
121
|
+
# @return [Hash] レスポンスXML解析結果
|
122
|
+
#
|
123
|
+
# @example
|
124
|
+
# detach_volume(:volume_id => 'vol1', :instance_id => 'server01')
|
125
|
+
#
|
126
|
+
def detach_volume( options = {} )
|
127
|
+
raise ArgumentError, "No :volume_id provided." if blank?(options[:volume_id])
|
128
|
+
raise ArgumentError, "Invalid :force provided." unless blank?(options[:force]) || BOOLEAN.include?(options[:force].to_s)
|
129
|
+
|
130
|
+
params = { 'Action' => 'DetachVolume' }
|
131
|
+
params.merge!(opts_to_prms(options,[:volume_id, :instance_id, :device, :force]))
|
132
|
+
|
133
|
+
params.reject! {|k, v| VOLUMES_IGNORED_PARAMS =~ k } if @@ignore_amz_params
|
134
|
+
|
135
|
+
return response_generator(params)
|
136
|
+
end
|
137
|
+
end
|
138
|
+
end
|
139
|
+
end
|
140
|
+
|