hpcloud 2.0.0
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 +127 -0
- data/LICENSE +1 -0
- data/README.rdoc +59 -0
- data/bin/hpcloud +11 -0
- data/completion/hpcloud +372 -0
- data/lib/hpcloud/accounts.rb +288 -0
- data/lib/hpcloud/acl.rb +112 -0
- data/lib/hpcloud/acl_cmd.rb +81 -0
- data/lib/hpcloud/address_helper.rb +63 -0
- data/lib/hpcloud/addresses.rb +42 -0
- data/lib/hpcloud/auth_cache.rb +128 -0
- data/lib/hpcloud/base_helper.rb +56 -0
- data/lib/hpcloud/checker.rb +104 -0
- data/lib/hpcloud/cli.rb +170 -0
- data/lib/hpcloud/cli_status.rb +80 -0
- data/lib/hpcloud/columns.rb +46 -0
- data/lib/hpcloud/commands/account/catalog.rb +57 -0
- data/lib/hpcloud/commands/account/copy.rb +44 -0
- data/lib/hpcloud/commands/account/edit.rb +204 -0
- data/lib/hpcloud/commands/account/remove.rb +53 -0
- data/lib/hpcloud/commands/account/setup.rb +40 -0
- data/lib/hpcloud/commands/account/tenants.rb +43 -0
- data/lib/hpcloud/commands/account/use.rb +46 -0
- data/lib/hpcloud/commands/account/verify.rb +55 -0
- data/lib/hpcloud/commands/account.rb +67 -0
- data/lib/hpcloud/commands/acl/grant.rb +59 -0
- data/lib/hpcloud/commands/acl/revoke.rb +52 -0
- data/lib/hpcloud/commands/acl.rb +63 -0
- data/lib/hpcloud/commands/addresses/add.rb +67 -0
- data/lib/hpcloud/commands/addresses/associate.rb +63 -0
- data/lib/hpcloud/commands/addresses/disassociate.rb +58 -0
- data/lib/hpcloud/commands/addresses/remove.rb +57 -0
- data/lib/hpcloud/commands/addresses.rb +63 -0
- data/lib/hpcloud/commands/cdn_containers/add.rb +56 -0
- data/lib/hpcloud/commands/cdn_containers/get.rb +70 -0
- data/lib/hpcloud/commands/cdn_containers/location.rb +61 -0
- data/lib/hpcloud/commands/cdn_containers/remove.rb +55 -0
- data/lib/hpcloud/commands/cdn_containers/set.rb +63 -0
- data/lib/hpcloud/commands/cdn_containers.rb +72 -0
- data/lib/hpcloud/commands/complete.rb +60 -0
- data/lib/hpcloud/commands/config/set.rb +63 -0
- data/lib/hpcloud/commands/config.rb +46 -0
- data/lib/hpcloud/commands/containers/add.rb +67 -0
- data/lib/hpcloud/commands/containers/remove.rb +63 -0
- data/lib/hpcloud/commands/containers/sync.rb +59 -0
- data/lib/hpcloud/commands/containers.rb +24 -0
- data/lib/hpcloud/commands/copy.rb +78 -0
- data/lib/hpcloud/commands/dns/add.rb +56 -0
- data/lib/hpcloud/commands/dns/records/add.rb +50 -0
- data/lib/hpcloud/commands/dns/records/remove.rb +53 -0
- data/lib/hpcloud/commands/dns/records/update.rb +50 -0
- data/lib/hpcloud/commands/dns/records.rb +57 -0
- data/lib/hpcloud/commands/dns/remove.rb +57 -0
- data/lib/hpcloud/commands/dns/servers.rb +57 -0
- data/lib/hpcloud/commands/dns/update.rb +58 -0
- data/lib/hpcloud/commands/dns.rb +65 -0
- data/lib/hpcloud/commands/flavors.rb +59 -0
- data/lib/hpcloud/commands/get.rb +58 -0
- data/lib/hpcloud/commands/images/add.rb +54 -0
- data/lib/hpcloud/commands/images/metadata/add.rb +54 -0
- data/lib/hpcloud/commands/images/metadata/remove.rb +56 -0
- data/lib/hpcloud/commands/images/metadata.rb +54 -0
- data/lib/hpcloud/commands/images/remove.rb +58 -0
- data/lib/hpcloud/commands/images.rb +67 -0
- data/lib/hpcloud/commands/info.rb +41 -0
- data/lib/hpcloud/commands/keypairs/add.rb +73 -0
- data/lib/hpcloud/commands/keypairs/import.rb +62 -0
- data/lib/hpcloud/commands/keypairs/private/add.rb +44 -0
- data/lib/hpcloud/commands/keypairs/private/location.rb +50 -0
- data/lib/hpcloud/commands/keypairs/private/remove.rb +52 -0
- data/lib/hpcloud/commands/keypairs/private.rb +47 -0
- data/lib/hpcloud/commands/keypairs/public_key.rb +51 -0
- data/lib/hpcloud/commands/keypairs/remove.rb +58 -0
- data/lib/hpcloud/commands/keypairs.rb +64 -0
- data/lib/hpcloud/commands/lb/add.rb +92 -0
- data/lib/hpcloud/commands/lb/algorithms.rb +55 -0
- data/lib/hpcloud/commands/lb/limits.rb +55 -0
- data/lib/hpcloud/commands/lb/nodes/add.rb +47 -0
- data/lib/hpcloud/commands/lb/nodes/remove.rb +54 -0
- data/lib/hpcloud/commands/lb/nodes/update.rb +47 -0
- data/lib/hpcloud/commands/lb/nodes.rb +55 -0
- data/lib/hpcloud/commands/lb/protocols.rb +55 -0
- data/lib/hpcloud/commands/lb/remove.rb +54 -0
- data/lib/hpcloud/commands/lb/update.rb +46 -0
- data/lib/hpcloud/commands/lb/versions.rb +55 -0
- data/lib/hpcloud/commands/lb/virtualips.rb +51 -0
- data/lib/hpcloud/commands/lb.rb +73 -0
- data/lib/hpcloud/commands/list.rb +114 -0
- data/lib/hpcloud/commands/location.rb +56 -0
- data/lib/hpcloud/commands/metadata/set.rb +61 -0
- data/lib/hpcloud/commands/metadata.rb +60 -0
- data/lib/hpcloud/commands/migrate.rb +61 -0
- data/lib/hpcloud/commands/move.rb +73 -0
- data/lib/hpcloud/commands/networks/add.rb +55 -0
- data/lib/hpcloud/commands/networks/remove.rb +57 -0
- data/lib/hpcloud/commands/networks/update.rb +54 -0
- data/lib/hpcloud/commands/networks.rb +63 -0
- data/lib/hpcloud/commands/ports/add.rb +81 -0
- data/lib/hpcloud/commands/ports/remove.rb +57 -0
- data/lib/hpcloud/commands/ports/update.rb +67 -0
- data/lib/hpcloud/commands/ports.rb +63 -0
- data/lib/hpcloud/commands/remove.rb +75 -0
- data/lib/hpcloud/commands/routers/add.rb +67 -0
- data/lib/hpcloud/commands/routers/interface/add.rb +59 -0
- data/lib/hpcloud/commands/routers/interface/remove.rb +66 -0
- data/lib/hpcloud/commands/routers/remove.rb +54 -0
- data/lib/hpcloud/commands/routers/update.rb +66 -0
- data/lib/hpcloud/commands/routers.rb +66 -0
- data/lib/hpcloud/commands/securitygroups/add.rb +52 -0
- data/lib/hpcloud/commands/securitygroups/remove.rb +57 -0
- data/lib/hpcloud/commands/securitygroups/rules/add.rb +126 -0
- data/lib/hpcloud/commands/securitygroups/rules/remove.rb +51 -0
- data/lib/hpcloud/commands/securitygroups/rules.rb +56 -0
- data/lib/hpcloud/commands/securitygroups.rb +62 -0
- data/lib/hpcloud/commands/servers/add.rb +100 -0
- data/lib/hpcloud/commands/servers/console.rb +81 -0
- data/lib/hpcloud/commands/servers/limits.rb +46 -0
- data/lib/hpcloud/commands/servers/metadata/add.rb +56 -0
- data/lib/hpcloud/commands/servers/metadata/remove.rb +57 -0
- data/lib/hpcloud/commands/servers/metadata.rb +56 -0
- data/lib/hpcloud/commands/servers/password.rb +47 -0
- data/lib/hpcloud/commands/servers/ratelimits.rb +46 -0
- data/lib/hpcloud/commands/servers/reboot.rb +61 -0
- data/lib/hpcloud/commands/servers/rebuild.rb +59 -0
- data/lib/hpcloud/commands/servers/remove.rb +58 -0
- data/lib/hpcloud/commands/servers/securitygroups/add.rb +47 -0
- data/lib/hpcloud/commands/servers/securitygroups/remove.rb +47 -0
- data/lib/hpcloud/commands/servers/ssh.rb +92 -0
- data/lib/hpcloud/commands/servers.rb +92 -0
- data/lib/hpcloud/commands/snapshots/add.rb +62 -0
- data/lib/hpcloud/commands/snapshots/remove.rb +58 -0
- data/lib/hpcloud/commands/snapshots.rb +62 -0
- data/lib/hpcloud/commands/subnets/add.rb +78 -0
- data/lib/hpcloud/commands/subnets/remove.rb +57 -0
- data/lib/hpcloud/commands/subnets/update.rb +70 -0
- data/lib/hpcloud/commands/subnets.rb +63 -0
- data/lib/hpcloud/commands/tempurl.rb +62 -0
- data/lib/hpcloud/commands/volumes/add.rb +88 -0
- data/lib/hpcloud/commands/volumes/attach.rb +59 -0
- data/lib/hpcloud/commands/volumes/detach.rb +57 -0
- data/lib/hpcloud/commands/volumes/metadata/add.rb +54 -0
- data/lib/hpcloud/commands/volumes/metadata.rb +55 -0
- data/lib/hpcloud/commands/volumes/remove.rb +57 -0
- data/lib/hpcloud/commands/volumes/server.rb +64 -0
- data/lib/hpcloud/commands/volumes.rb +65 -0
- data/lib/hpcloud/config.rb +205 -0
- data/lib/hpcloud/connection.rb +290 -0
- data/lib/hpcloud/container_resource.rb +175 -0
- data/lib/hpcloud/database_helper.rb +70 -0
- data/lib/hpcloud/databases.rb +38 -0
- data/lib/hpcloud/dns_helper.rb +125 -0
- data/lib/hpcloud/dnss.rb +38 -0
- data/lib/hpcloud/error_response.rb +89 -0
- data/lib/hpcloud/exceptions/base.rb +35 -0
- data/lib/hpcloud/exceptions/general.rb +34 -0
- data/lib/hpcloud/exceptions/not_found.rb +34 -0
- data/lib/hpcloud/flavors.rb +40 -0
- data/lib/hpcloud/floating_ip_helper.rb +114 -0
- data/lib/hpcloud/floating_ips.rb +42 -0
- data/lib/hpcloud/fog_collection.rb +124 -0
- data/lib/hpcloud/image_helper.rb +111 -0
- data/lib/hpcloud/images.rb +43 -0
- data/lib/hpcloud/keypair_helper.rb +109 -0
- data/lib/hpcloud/keypairs.rb +41 -0
- data/lib/hpcloud/lb_algorithms.rb +37 -0
- data/lib/hpcloud/lb_limits.rb +37 -0
- data/lib/hpcloud/lb_nodes.rb +42 -0
- data/lib/hpcloud/lb_protocols.rb +37 -0
- data/lib/hpcloud/lb_versions.rb +37 -0
- data/lib/hpcloud/lb_virtualips.rb +42 -0
- data/lib/hpcloud/lbs.rb +38 -0
- data/lib/hpcloud/local_resource.rb +183 -0
- data/lib/hpcloud/log.rb +55 -0
- data/lib/hpcloud/metadata.rb +118 -0
- data/lib/hpcloud/monkey.rb +22 -0
- data/lib/hpcloud/network_helper.rb +88 -0
- data/lib/hpcloud/networks.rb +47 -0
- data/lib/hpcloud/object_store.rb +66 -0
- data/lib/hpcloud/port_helper.rb +150 -0
- data/lib/hpcloud/ports.rb +38 -0
- data/lib/hpcloud/progress.rb +53 -0
- data/lib/hpcloud/remote_resource.rb +512 -0
- data/lib/hpcloud/resource.rb +264 -0
- data/lib/hpcloud/resource_factory.rb +110 -0
- data/lib/hpcloud/routers.rb +56 -0
- data/lib/hpcloud/rule_helper.rb +70 -0
- data/lib/hpcloud/rules.rb +41 -0
- data/lib/hpcloud/security_group_helper.rb +59 -0
- data/lib/hpcloud/security_groups.rb +37 -0
- data/lib/hpcloud/server_helper.rb +318 -0
- data/lib/hpcloud/servers.rb +47 -0
- data/lib/hpcloud/shared_resource.rb +172 -0
- data/lib/hpcloud/snapshot_helper.rb +78 -0
- data/lib/hpcloud/snapshots.rb +38 -0
- data/lib/hpcloud/subnet_helper.rb +170 -0
- data/lib/hpcloud/subnets.rb +38 -0
- data/lib/hpcloud/tableizer.rb +77 -0
- data/lib/hpcloud/thor_ext/thor.rb +54 -0
- data/lib/hpcloud/time_parser.rb +47 -0
- data/lib/hpcloud/version.rb +27 -0
- data/lib/hpcloud/volume_attachment.rb +58 -0
- data/lib/hpcloud/volume_attachments.rb +58 -0
- data/lib/hpcloud/volume_helper.rb +119 -0
- data/lib/hpcloud/volumes.rb +38 -0
- data/lib/hpcloud.rb +112 -0
- data/lib/monkey/hp/lb.rb +188 -0
- data/lib/monkey/hp/models/lb/algorithm.rb +32 -0
- data/lib/monkey/hp/models/lb/algorithms.rb +46 -0
- data/lib/monkey/hp/models/lb/limit.rb +38 -0
- data/lib/monkey/hp/models/lb/limits.rb +50 -0
- data/lib/monkey/hp/models/lb/load_balancer.rb +70 -0
- data/lib/monkey/hp/models/lb/load_balancers.rb +46 -0
- data/lib/monkey/hp/models/lb/node.rb +69 -0
- data/lib/monkey/hp/models/lb/nodes.rb +47 -0
- data/lib/monkey/hp/models/lb/protocol.rb +33 -0
- data/lib/monkey/hp/models/lb/protocols.rb +46 -0
- data/lib/monkey/hp/models/lb/version.rb +34 -0
- data/lib/monkey/hp/models/lb/versions.rb +47 -0
- data/lib/monkey/hp/models/lb/virtual_ip.rb +37 -0
- data/lib/monkey/hp/models/lb/virtual_ips.rb +47 -0
- data/lib/monkey/hp/requests/lb/create_load_balancer.rb +64 -0
- data/lib/monkey/hp/requests/lb/create_load_balancer_node.rb +58 -0
- data/lib/monkey/hp/requests/lb/delete_load_balancer.rb +54 -0
- data/lib/monkey/hp/requests/lb/delete_load_balancer_node.rb +60 -0
- data/lib/monkey/hp/requests/lb/get_load_balancer.rb +88 -0
- data/lib/monkey/hp/requests/lb/get_load_balancer_node.rb +60 -0
- data/lib/monkey/hp/requests/lb/get_version.rb +68 -0
- data/lib/monkey/hp/requests/lb/get_virtual_ips.rb +48 -0
- data/lib/monkey/hp/requests/lb/list_algorithms.rb +51 -0
- data/lib/monkey/hp/requests/lb/list_limits.rb +60 -0
- data/lib/monkey/hp/requests/lb/list_load_balancer_nodes.rb +79 -0
- data/lib/monkey/hp/requests/lb/list_load_balancer_virtual_ips.rb +76 -0
- data/lib/monkey/hp/requests/lb/list_load_balancers.rb +69 -0
- data/lib/monkey/hp/requests/lb/list_protocols.rb +51 -0
- data/lib/monkey/hp/requests/lb/list_versions.rb +51 -0
- data/lib/monkey/hp/requests/lb/update_load_balancer.rb +46 -0
- data/lib/monkey/hp/requests/lb/update_load_balancer_node.rb +50 -0
- metadata +368 -0
|
@@ -0,0 +1,264 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
#
|
|
3
|
+
# © Copyright 2013 Hewlett-Packard Development Company, L.P.
|
|
4
|
+
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
5
|
+
# of this software and associated documentation files (the "Software"), to deal
|
|
6
|
+
# in the Software without restriction, including without limitation the rights
|
|
7
|
+
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
8
|
+
# copies of the Software, and to permit persons to whom the Software is
|
|
9
|
+
# furnished to do so, subject to the following conditions:
|
|
10
|
+
#
|
|
11
|
+
# The above copyright notice and this permission notice shall be included in all
|
|
12
|
+
# copies or substantial portions of the Software.
|
|
13
|
+
#
|
|
14
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
15
|
+
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
16
|
+
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
17
|
+
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
18
|
+
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
19
|
+
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
20
|
+
# SOFTWARE.
|
|
21
|
+
|
|
22
|
+
require 'hpcloud/connection.rb'
|
|
23
|
+
require 'mime/types'
|
|
24
|
+
require 'ruby-progressbar'
|
|
25
|
+
|
|
26
|
+
module HP
|
|
27
|
+
module Cloud
|
|
28
|
+
class Resource
|
|
29
|
+
attr_accessor :path
|
|
30
|
+
attr_reader :fname, :ftype, :container
|
|
31
|
+
attr_reader :public_url, :readers, :writers, :public
|
|
32
|
+
attr_reader :destination, :cstatus
|
|
33
|
+
attr_reader :restart
|
|
34
|
+
|
|
35
|
+
@@limit = nil
|
|
36
|
+
|
|
37
|
+
def initialize(storage, fname)
|
|
38
|
+
@cstatus = CliStatus.new
|
|
39
|
+
@storage = storage
|
|
40
|
+
@fname = fname
|
|
41
|
+
@ftype = ResourceFactory.detect_type(@fname)
|
|
42
|
+
@disable_pbar = false
|
|
43
|
+
@mime_type = nil
|
|
44
|
+
@restart = false
|
|
45
|
+
@readacl = []
|
|
46
|
+
@writeacl = []
|
|
47
|
+
parse()
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def is_valid?
|
|
51
|
+
return @cstatus.is_success?
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
def set_error(from)
|
|
55
|
+
return unless is_valid?
|
|
56
|
+
@cstatus.set(from.cstatus)
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
def not_implemented(value)
|
|
60
|
+
@cstatus = CliStatus.new("Not implemented: #{value}")
|
|
61
|
+
return false
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
def isLocal()
|
|
65
|
+
return ResourceFactory::is_local?(@ftype)
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
def isRemote()
|
|
69
|
+
return ResourceFactory::is_remote?(@ftype)
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
def is_object_store?
|
|
73
|
+
return @ftype == :object_store
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
def is_container?
|
|
77
|
+
return @ftype == :container
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
def is_shared?
|
|
81
|
+
return @ftype == :shared_resource || @ftype == :shared_directory
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
def isDirectory()
|
|
85
|
+
return @ftype == :directory ||
|
|
86
|
+
@ftype == :container_directory ||
|
|
87
|
+
@ftype == :shared_directory ||
|
|
88
|
+
@ftype == :container ||
|
|
89
|
+
@ftype == :object_store
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
def isFile()
|
|
93
|
+
return @ftype == :file
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
def isObject()
|
|
97
|
+
return @ftype == :object || @ftype == :shared_resource
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
def parse
|
|
101
|
+
@container = nil
|
|
102
|
+
@path = nil
|
|
103
|
+
if @fname.empty?
|
|
104
|
+
return
|
|
105
|
+
end
|
|
106
|
+
if @fname[0,1] == ':'
|
|
107
|
+
@container, *rest = @fname.split('/')
|
|
108
|
+
@container = @container[1..-1] if @container[0,1] == ':'
|
|
109
|
+
@path = rest.empty? ? '' : rest.join('/')
|
|
110
|
+
unless @container.length < 257
|
|
111
|
+
raise Exception.new("Valid container names must be less than 256 characters long")
|
|
112
|
+
end
|
|
113
|
+
else
|
|
114
|
+
rest = @fname.split('/')
|
|
115
|
+
@path = rest.empty? ? '' : rest.join('/')
|
|
116
|
+
end
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
def to_hash
|
|
120
|
+
hash = {}
|
|
121
|
+
instance_variables.each {|var| hash[var.to_s.delete("@")] = instance_variable_get(var) }
|
|
122
|
+
hash
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
def set_mime_type(value)
|
|
126
|
+
@mime_type = value.tr("'", "") unless value.nil?
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
def get_mime_type()
|
|
130
|
+
return @mime_type unless @mime_type.nil?
|
|
131
|
+
filename = ::File.basename(@fname)
|
|
132
|
+
unless (mime_types = ::MIME::Types.of(filename)).empty?
|
|
133
|
+
return mime_types.first.content_type
|
|
134
|
+
end
|
|
135
|
+
return 'application/octet-stream'
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
def valid_source()
|
|
139
|
+
return true
|
|
140
|
+
end
|
|
141
|
+
|
|
142
|
+
def isMulti()
|
|
143
|
+
return true if isDirectory()
|
|
144
|
+
found = false
|
|
145
|
+
foreach { |x|
|
|
146
|
+
if (found == true)
|
|
147
|
+
return true
|
|
148
|
+
end
|
|
149
|
+
found = true
|
|
150
|
+
}
|
|
151
|
+
return false
|
|
152
|
+
end
|
|
153
|
+
|
|
154
|
+
def valid_destination(source)
|
|
155
|
+
return true
|
|
156
|
+
end
|
|
157
|
+
|
|
158
|
+
def set_destination(from)
|
|
159
|
+
return true
|
|
160
|
+
end
|
|
161
|
+
|
|
162
|
+
def head()
|
|
163
|
+
@cstatus = CliStatus.new("Not supported on local object '#{@fname}'.", :not_supported)
|
|
164
|
+
return false
|
|
165
|
+
end
|
|
166
|
+
|
|
167
|
+
def container_head()
|
|
168
|
+
@cstatus = CliStatus.new("Not supported on local object '#{@fname}'.", :not_supported)
|
|
169
|
+
return false
|
|
170
|
+
end
|
|
171
|
+
|
|
172
|
+
def open(output=false, siz=0)
|
|
173
|
+
return not_implemented("open")
|
|
174
|
+
end
|
|
175
|
+
|
|
176
|
+
def read()
|
|
177
|
+
not_implemented("read")
|
|
178
|
+
return nil
|
|
179
|
+
end
|
|
180
|
+
|
|
181
|
+
def write(data)
|
|
182
|
+
return not_implemented("write")
|
|
183
|
+
end
|
|
184
|
+
|
|
185
|
+
def close()
|
|
186
|
+
return not_implemented("close")
|
|
187
|
+
end
|
|
188
|
+
|
|
189
|
+
def copy_file(from)
|
|
190
|
+
return not_implemented("copy_file")
|
|
191
|
+
end
|
|
192
|
+
|
|
193
|
+
def copy(from)
|
|
194
|
+
if copy_all(from)
|
|
195
|
+
return true
|
|
196
|
+
end
|
|
197
|
+
set_error(from)
|
|
198
|
+
return false
|
|
199
|
+
end
|
|
200
|
+
|
|
201
|
+
def copy_all(from)
|
|
202
|
+
if ! from.valid_source()
|
|
203
|
+
@cstatus = from.cstatus
|
|
204
|
+
return false
|
|
205
|
+
end
|
|
206
|
+
if ! valid_destination(from) then return false end
|
|
207
|
+
|
|
208
|
+
copiedfile = false
|
|
209
|
+
original = File.dirname(from.path)
|
|
210
|
+
from.foreach { |file|
|
|
211
|
+
if (original != '.')
|
|
212
|
+
filename = file.path.sub(original, '').sub(/^\//, '')
|
|
213
|
+
else
|
|
214
|
+
filename = file.path
|
|
215
|
+
end
|
|
216
|
+
return false unless set_destination(filename)
|
|
217
|
+
unless copy_file(file)
|
|
218
|
+
from.set_error(file)
|
|
219
|
+
return false
|
|
220
|
+
end
|
|
221
|
+
copiedfile = true
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
if (copiedfile == false)
|
|
225
|
+
@cstatus = CliStatus.new("No files found matching source '#{from.path}'", :not_found)
|
|
226
|
+
return false
|
|
227
|
+
end
|
|
228
|
+
return true
|
|
229
|
+
end
|
|
230
|
+
|
|
231
|
+
def foreach(&block)
|
|
232
|
+
return
|
|
233
|
+
end
|
|
234
|
+
|
|
235
|
+
def get_destination()
|
|
236
|
+
return @destination.to_s
|
|
237
|
+
end
|
|
238
|
+
|
|
239
|
+
def remove(force, at=nil, after=nil)
|
|
240
|
+
@cstatus = CliStatus.new("Removal of local objects is not supported: #{@fname}", :incorrect_usage)
|
|
241
|
+
return false
|
|
242
|
+
end
|
|
243
|
+
|
|
244
|
+
def tempurl(period = 172800)
|
|
245
|
+
@cstatus = CliStatus.new("Temporary URLs of local objects is not supported: #{@fname}", :incorrect_usage)
|
|
246
|
+
return nil
|
|
247
|
+
end
|
|
248
|
+
|
|
249
|
+
def grant(acl)
|
|
250
|
+
@cstatus = CliStatus.new("ACLs of local objects are not supported: #{@fname}", :incorrect_usage)
|
|
251
|
+
return false
|
|
252
|
+
end
|
|
253
|
+
|
|
254
|
+
def revoke(acl)
|
|
255
|
+
@cstatus = CliStatus.new("ACLs of local objects are not supported: #{@fname}", :incorrect_usage)
|
|
256
|
+
return false
|
|
257
|
+
end
|
|
258
|
+
|
|
259
|
+
def set_restart(value)
|
|
260
|
+
@restart = value
|
|
261
|
+
end
|
|
262
|
+
end
|
|
263
|
+
end
|
|
264
|
+
end
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
#
|
|
3
|
+
# © Copyright 2013 Hewlett-Packard Development Company, L.P.
|
|
4
|
+
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
5
|
+
# of this software and associated documentation files (the "Software"), to deal
|
|
6
|
+
# in the Software without restriction, including without limitation the rights
|
|
7
|
+
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
8
|
+
# copies of the Software, and to permit persons to whom the Software is
|
|
9
|
+
# furnished to do so, subject to the following conditions:
|
|
10
|
+
#
|
|
11
|
+
# The above copyright notice and this permission notice shall be included in all
|
|
12
|
+
# copies or substantial portions of the Software.
|
|
13
|
+
#
|
|
14
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
15
|
+
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
16
|
+
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
17
|
+
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
18
|
+
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
19
|
+
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
20
|
+
# SOFTWARE.
|
|
21
|
+
|
|
22
|
+
require 'hpcloud/resource.rb'
|
|
23
|
+
require 'hpcloud/container_resource.rb'
|
|
24
|
+
require 'hpcloud/local_resource.rb'
|
|
25
|
+
require 'hpcloud/remote_resource.rb'
|
|
26
|
+
require 'hpcloud/shared_resource.rb'
|
|
27
|
+
require 'hpcloud/object_store.rb'
|
|
28
|
+
|
|
29
|
+
module HP
|
|
30
|
+
module Cloud
|
|
31
|
+
class ResourceFactory
|
|
32
|
+
|
|
33
|
+
REMOTE_TYPES = [:container,
|
|
34
|
+
:container_directory,
|
|
35
|
+
:object,
|
|
36
|
+
:object_store,
|
|
37
|
+
:shared_directory,
|
|
38
|
+
:shared_resource]
|
|
39
|
+
LOCAL_TYPES = [:directory, :file]
|
|
40
|
+
|
|
41
|
+
def self.create(storage, fname)
|
|
42
|
+
unless (fname.start_with?('http://') || fname.start_with?('https://'))
|
|
43
|
+
if fname.length > 0
|
|
44
|
+
unless fname.start_with?(':')
|
|
45
|
+
unless fname.start_with?('/')
|
|
46
|
+
unless fname.start_with?('.')
|
|
47
|
+
fname = ':' + fname
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
return ResourceFactory.create_any(storage, fname)
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
def self.create_any(storage, fname)
|
|
57
|
+
ftype = detect_type(fname)
|
|
58
|
+
case ftype
|
|
59
|
+
when :directory, :file
|
|
60
|
+
return LocalResource.new(storage, fname)
|
|
61
|
+
when :object_store
|
|
62
|
+
return ObjectStore.new(storage, fname)
|
|
63
|
+
when :shared_resource, :shared_directory
|
|
64
|
+
return SharedResource.new(storage, fname)
|
|
65
|
+
when :container
|
|
66
|
+
return ContainerResource.new(storage, fname)
|
|
67
|
+
end
|
|
68
|
+
return RemoteResource.new(storage, fname)
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
def self.detect_type(resource)
|
|
72
|
+
if resource.empty?
|
|
73
|
+
return :object_store
|
|
74
|
+
end
|
|
75
|
+
if resource[0,1] == ':'
|
|
76
|
+
if resource[-1,1] == '/'
|
|
77
|
+
:container_directory
|
|
78
|
+
elsif resource.index('/')
|
|
79
|
+
:object
|
|
80
|
+
else
|
|
81
|
+
:container
|
|
82
|
+
end
|
|
83
|
+
else
|
|
84
|
+
if (resource.start_with?('http://') ||
|
|
85
|
+
resource.start_with?('https://'))
|
|
86
|
+
if resource[-1,1] == '/'
|
|
87
|
+
:shared_directory
|
|
88
|
+
else
|
|
89
|
+
:shared_resource
|
|
90
|
+
end
|
|
91
|
+
elsif resource[-1,1] == '/'
|
|
92
|
+
:directory
|
|
93
|
+
elsif File.directory?(resource)
|
|
94
|
+
:directory
|
|
95
|
+
else
|
|
96
|
+
:file
|
|
97
|
+
end
|
|
98
|
+
end
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
def self.is_local?(ftype)
|
|
102
|
+
return ResourceFactory::LOCAL_TYPES.include?(ftype)
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
def self.is_remote?(ftype)
|
|
106
|
+
return ResourceFactory::REMOTE_TYPES.include?(ftype)
|
|
107
|
+
end
|
|
108
|
+
end
|
|
109
|
+
end
|
|
110
|
+
end
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
#
|
|
3
|
+
# © Copyright 2013 Hewlett-Packard Development Company, L.P.
|
|
4
|
+
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
5
|
+
# of this software and associated documentation files (the "Software"), to deal
|
|
6
|
+
# in the Software without restriction, including without limitation the rights
|
|
7
|
+
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
8
|
+
# copies of the Software, and to permit persons to whom the Software is
|
|
9
|
+
# furnished to do so, subject to the following conditions:
|
|
10
|
+
#
|
|
11
|
+
# The above copyright notice and this permission notice shall be included in all
|
|
12
|
+
# copies or substantial portions of the Software.
|
|
13
|
+
#
|
|
14
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
15
|
+
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
16
|
+
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
17
|
+
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
18
|
+
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
19
|
+
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
20
|
+
# SOFTWARE.
|
|
21
|
+
|
|
22
|
+
require 'hpcloud/fog_collection'
|
|
23
|
+
|
|
24
|
+
module HP
|
|
25
|
+
module Cloud
|
|
26
|
+
class Routers < FogCollection
|
|
27
|
+
def initialize
|
|
28
|
+
super("router")
|
|
29
|
+
@items = @connection.network.routers
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def unique(name)
|
|
33
|
+
super(name)
|
|
34
|
+
Fog::HP::Network::Router.new({:service => Connection.instance.network})
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def self.parse_gateway(value)
|
|
38
|
+
networks = Networks.new
|
|
39
|
+
unless value.nil?
|
|
40
|
+
unless value.empty?
|
|
41
|
+
netty = networks.get(value)
|
|
42
|
+
return netty
|
|
43
|
+
end
|
|
44
|
+
return nil
|
|
45
|
+
end
|
|
46
|
+
networks.items.each{ |x|
|
|
47
|
+
if x.router_external == true
|
|
48
|
+
return x
|
|
49
|
+
end
|
|
50
|
+
}
|
|
51
|
+
raise HP::Cloud::Exceptions::General.new("Cannot find external network to use as gateway")
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
end
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
#
|
|
3
|
+
# © Copyright 2013 Hewlett-Packard Development Company, L.P.
|
|
4
|
+
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
5
|
+
# of this software and associated documentation files (the "Software"), to deal
|
|
6
|
+
# in the Software without restriction, including without limitation the rights
|
|
7
|
+
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
8
|
+
# copies of the Software, and to permit persons to whom the Software is
|
|
9
|
+
# furnished to do so, subject to the following conditions:
|
|
10
|
+
#
|
|
11
|
+
# The above copyright notice and this permission notice shall be included in all
|
|
12
|
+
# copies or substantial portions of the Software.
|
|
13
|
+
#
|
|
14
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
15
|
+
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
16
|
+
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
17
|
+
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
18
|
+
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
19
|
+
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
20
|
+
# SOFTWARE.
|
|
21
|
+
|
|
22
|
+
module HP
|
|
23
|
+
module Cloud
|
|
24
|
+
class RuleHelper < BaseHelper
|
|
25
|
+
attr_accessor :id, :source, :protocol, :from, :to, :name
|
|
26
|
+
attr_accessor :tenant_id, :type, :direction, :cidr
|
|
27
|
+
|
|
28
|
+
def self.get_keys()
|
|
29
|
+
return [ "id", "source", "type", "protocol", "direction", "cidr", "from", "to" ]
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def initialize(connection, security_group, foggy = nil)
|
|
33
|
+
super(connection, foggy)
|
|
34
|
+
@security_group = security_group
|
|
35
|
+
return if foggy.nil?
|
|
36
|
+
@id = foggy['id']
|
|
37
|
+
@name = foggy['remote_group_id']
|
|
38
|
+
@source = @name
|
|
39
|
+
@protocol = foggy['protocol']
|
|
40
|
+
@direction = foggy['direction']
|
|
41
|
+
@cidr = foggy['remote_ip_prefix']
|
|
42
|
+
@tenant_id = foggy['tenant_id']
|
|
43
|
+
@type = foggy['ethertype']
|
|
44
|
+
@from = foggy['port_range_min']
|
|
45
|
+
@to = foggy['port_range_max']
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def save
|
|
49
|
+
return false if is_valid? == false
|
|
50
|
+
if @fog.nil?
|
|
51
|
+
port_range = @from.to_s + ".." + @to.to_s
|
|
52
|
+
response = @security_group.fog.create_rule(port_range, @protocol, @name)
|
|
53
|
+
if response.nil?
|
|
54
|
+
set_error("Error creating rule")
|
|
55
|
+
return false
|
|
56
|
+
end
|
|
57
|
+
@fog = response.body["security_group_rule"]
|
|
58
|
+
@id = @fog['id']
|
|
59
|
+
return true
|
|
60
|
+
else
|
|
61
|
+
raise "Update not implemented"
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
def destroy
|
|
66
|
+
@fog.destroy
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
end
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
#
|
|
3
|
+
# © Copyright 2013 Hewlett-Packard Development Company, L.P.
|
|
4
|
+
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
5
|
+
# of this software and associated documentation files (the "Software"), to deal
|
|
6
|
+
# in the Software without restriction, including without limitation the rights
|
|
7
|
+
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
8
|
+
# copies of the Software, and to permit persons to whom the Software is
|
|
9
|
+
# furnished to do so, subject to the following conditions:
|
|
10
|
+
#
|
|
11
|
+
# The above copyright notice and this permission notice shall be included in all
|
|
12
|
+
# copies or substantial portions of the Software.
|
|
13
|
+
#
|
|
14
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
15
|
+
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
16
|
+
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
17
|
+
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
18
|
+
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
19
|
+
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
20
|
+
# SOFTWARE.
|
|
21
|
+
|
|
22
|
+
require 'hpcloud/fog_collection'
|
|
23
|
+
|
|
24
|
+
module HP
|
|
25
|
+
module Cloud
|
|
26
|
+
class Rules < FogCollection
|
|
27
|
+
def initialize(sec_group_name)
|
|
28
|
+
super("rule")
|
|
29
|
+
@security_group = SecurityGroups.new.get(sec_group_name)
|
|
30
|
+
if @security_group.is_valid? == false
|
|
31
|
+
raise Exception.new(@security_group.cstatus.to_s)
|
|
32
|
+
end
|
|
33
|
+
@items = @security_group.fog.security_group_rules
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def create(item = nil)
|
|
37
|
+
return RuleHelper.new(@connection, @security_group, item)
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
#
|
|
3
|
+
# © Copyright 2013 Hewlett-Packard Development Company, L.P.
|
|
4
|
+
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
5
|
+
# of this software and associated documentation files (the "Software"), to deal
|
|
6
|
+
# in the Software without restriction, including without limitation the rights
|
|
7
|
+
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
8
|
+
# copies of the Software, and to permit persons to whom the Software is
|
|
9
|
+
# furnished to do so, subject to the following conditions:
|
|
10
|
+
#
|
|
11
|
+
# The above copyright notice and this permission notice shall be included in all
|
|
12
|
+
# copies or substantial portions of the Software.
|
|
13
|
+
#
|
|
14
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
15
|
+
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
16
|
+
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
17
|
+
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
18
|
+
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
19
|
+
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
20
|
+
# SOFTWARE.
|
|
21
|
+
|
|
22
|
+
module HP
|
|
23
|
+
module Cloud
|
|
24
|
+
class SecurityGroupHelper < BaseHelper
|
|
25
|
+
attr_accessor :id, :name, :description
|
|
26
|
+
|
|
27
|
+
def self.get_keys()
|
|
28
|
+
return [ "id", "name", "description" ]
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def initialize(connection, foggy = nil)
|
|
32
|
+
super(connection, foggy)
|
|
33
|
+
return if foggy.nil?
|
|
34
|
+
@id = foggy.id
|
|
35
|
+
@name = foggy.name
|
|
36
|
+
@description = foggy.description
|
|
37
|
+
@tenant_id = foggy.tenant_id
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def save
|
|
41
|
+
return false if is_valid? == false
|
|
42
|
+
if @fog.nil?
|
|
43
|
+
hsh = {:name => @name, :description => @description}
|
|
44
|
+
security_group = @connection.network.security_groups.new(hsh)
|
|
45
|
+
if security_group.nil?
|
|
46
|
+
set_error("Error creating security group")
|
|
47
|
+
return false
|
|
48
|
+
end
|
|
49
|
+
security_group.save
|
|
50
|
+
@fog = security_group
|
|
51
|
+
@id = security_group.id
|
|
52
|
+
return true
|
|
53
|
+
else
|
|
54
|
+
raise "Update not implemented"
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
end
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
#
|
|
3
|
+
# © Copyright 2013 Hewlett-Packard Development Company, L.P.
|
|
4
|
+
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
5
|
+
# of this software and associated documentation files (the "Software"), to deal
|
|
6
|
+
# in the Software without restriction, including without limitation the rights
|
|
7
|
+
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
8
|
+
# copies of the Software, and to permit persons to whom the Software is
|
|
9
|
+
# furnished to do so, subject to the following conditions:
|
|
10
|
+
#
|
|
11
|
+
# The above copyright notice and this permission notice shall be included in all
|
|
12
|
+
# copies or substantial portions of the Software.
|
|
13
|
+
#
|
|
14
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
15
|
+
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
16
|
+
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
17
|
+
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
18
|
+
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
19
|
+
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
20
|
+
# SOFTWARE.
|
|
21
|
+
|
|
22
|
+
require 'hpcloud/fog_collection'
|
|
23
|
+
|
|
24
|
+
module HP
|
|
25
|
+
module Cloud
|
|
26
|
+
class SecurityGroups < FogCollection
|
|
27
|
+
def initialize()
|
|
28
|
+
super("security group")
|
|
29
|
+
@items = @connection.network.security_groups
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def create(item = nil)
|
|
33
|
+
return SecurityGroupHelper.new(@connection, item)
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|