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.
Files changed (238) hide show
  1. data/CHANGELOG +127 -0
  2. data/LICENSE +1 -0
  3. data/README.rdoc +59 -0
  4. data/bin/hpcloud +11 -0
  5. data/completion/hpcloud +372 -0
  6. data/lib/hpcloud/accounts.rb +288 -0
  7. data/lib/hpcloud/acl.rb +112 -0
  8. data/lib/hpcloud/acl_cmd.rb +81 -0
  9. data/lib/hpcloud/address_helper.rb +63 -0
  10. data/lib/hpcloud/addresses.rb +42 -0
  11. data/lib/hpcloud/auth_cache.rb +128 -0
  12. data/lib/hpcloud/base_helper.rb +56 -0
  13. data/lib/hpcloud/checker.rb +104 -0
  14. data/lib/hpcloud/cli.rb +170 -0
  15. data/lib/hpcloud/cli_status.rb +80 -0
  16. data/lib/hpcloud/columns.rb +46 -0
  17. data/lib/hpcloud/commands/account/catalog.rb +57 -0
  18. data/lib/hpcloud/commands/account/copy.rb +44 -0
  19. data/lib/hpcloud/commands/account/edit.rb +204 -0
  20. data/lib/hpcloud/commands/account/remove.rb +53 -0
  21. data/lib/hpcloud/commands/account/setup.rb +40 -0
  22. data/lib/hpcloud/commands/account/tenants.rb +43 -0
  23. data/lib/hpcloud/commands/account/use.rb +46 -0
  24. data/lib/hpcloud/commands/account/verify.rb +55 -0
  25. data/lib/hpcloud/commands/account.rb +67 -0
  26. data/lib/hpcloud/commands/acl/grant.rb +59 -0
  27. data/lib/hpcloud/commands/acl/revoke.rb +52 -0
  28. data/lib/hpcloud/commands/acl.rb +63 -0
  29. data/lib/hpcloud/commands/addresses/add.rb +67 -0
  30. data/lib/hpcloud/commands/addresses/associate.rb +63 -0
  31. data/lib/hpcloud/commands/addresses/disassociate.rb +58 -0
  32. data/lib/hpcloud/commands/addresses/remove.rb +57 -0
  33. data/lib/hpcloud/commands/addresses.rb +63 -0
  34. data/lib/hpcloud/commands/cdn_containers/add.rb +56 -0
  35. data/lib/hpcloud/commands/cdn_containers/get.rb +70 -0
  36. data/lib/hpcloud/commands/cdn_containers/location.rb +61 -0
  37. data/lib/hpcloud/commands/cdn_containers/remove.rb +55 -0
  38. data/lib/hpcloud/commands/cdn_containers/set.rb +63 -0
  39. data/lib/hpcloud/commands/cdn_containers.rb +72 -0
  40. data/lib/hpcloud/commands/complete.rb +60 -0
  41. data/lib/hpcloud/commands/config/set.rb +63 -0
  42. data/lib/hpcloud/commands/config.rb +46 -0
  43. data/lib/hpcloud/commands/containers/add.rb +67 -0
  44. data/lib/hpcloud/commands/containers/remove.rb +63 -0
  45. data/lib/hpcloud/commands/containers/sync.rb +59 -0
  46. data/lib/hpcloud/commands/containers.rb +24 -0
  47. data/lib/hpcloud/commands/copy.rb +78 -0
  48. data/lib/hpcloud/commands/dns/add.rb +56 -0
  49. data/lib/hpcloud/commands/dns/records/add.rb +50 -0
  50. data/lib/hpcloud/commands/dns/records/remove.rb +53 -0
  51. data/lib/hpcloud/commands/dns/records/update.rb +50 -0
  52. data/lib/hpcloud/commands/dns/records.rb +57 -0
  53. data/lib/hpcloud/commands/dns/remove.rb +57 -0
  54. data/lib/hpcloud/commands/dns/servers.rb +57 -0
  55. data/lib/hpcloud/commands/dns/update.rb +58 -0
  56. data/lib/hpcloud/commands/dns.rb +65 -0
  57. data/lib/hpcloud/commands/flavors.rb +59 -0
  58. data/lib/hpcloud/commands/get.rb +58 -0
  59. data/lib/hpcloud/commands/images/add.rb +54 -0
  60. data/lib/hpcloud/commands/images/metadata/add.rb +54 -0
  61. data/lib/hpcloud/commands/images/metadata/remove.rb +56 -0
  62. data/lib/hpcloud/commands/images/metadata.rb +54 -0
  63. data/lib/hpcloud/commands/images/remove.rb +58 -0
  64. data/lib/hpcloud/commands/images.rb +67 -0
  65. data/lib/hpcloud/commands/info.rb +41 -0
  66. data/lib/hpcloud/commands/keypairs/add.rb +73 -0
  67. data/lib/hpcloud/commands/keypairs/import.rb +62 -0
  68. data/lib/hpcloud/commands/keypairs/private/add.rb +44 -0
  69. data/lib/hpcloud/commands/keypairs/private/location.rb +50 -0
  70. data/lib/hpcloud/commands/keypairs/private/remove.rb +52 -0
  71. data/lib/hpcloud/commands/keypairs/private.rb +47 -0
  72. data/lib/hpcloud/commands/keypairs/public_key.rb +51 -0
  73. data/lib/hpcloud/commands/keypairs/remove.rb +58 -0
  74. data/lib/hpcloud/commands/keypairs.rb +64 -0
  75. data/lib/hpcloud/commands/lb/add.rb +92 -0
  76. data/lib/hpcloud/commands/lb/algorithms.rb +55 -0
  77. data/lib/hpcloud/commands/lb/limits.rb +55 -0
  78. data/lib/hpcloud/commands/lb/nodes/add.rb +47 -0
  79. data/lib/hpcloud/commands/lb/nodes/remove.rb +54 -0
  80. data/lib/hpcloud/commands/lb/nodes/update.rb +47 -0
  81. data/lib/hpcloud/commands/lb/nodes.rb +55 -0
  82. data/lib/hpcloud/commands/lb/protocols.rb +55 -0
  83. data/lib/hpcloud/commands/lb/remove.rb +54 -0
  84. data/lib/hpcloud/commands/lb/update.rb +46 -0
  85. data/lib/hpcloud/commands/lb/versions.rb +55 -0
  86. data/lib/hpcloud/commands/lb/virtualips.rb +51 -0
  87. data/lib/hpcloud/commands/lb.rb +73 -0
  88. data/lib/hpcloud/commands/list.rb +114 -0
  89. data/lib/hpcloud/commands/location.rb +56 -0
  90. data/lib/hpcloud/commands/metadata/set.rb +61 -0
  91. data/lib/hpcloud/commands/metadata.rb +60 -0
  92. data/lib/hpcloud/commands/migrate.rb +61 -0
  93. data/lib/hpcloud/commands/move.rb +73 -0
  94. data/lib/hpcloud/commands/networks/add.rb +55 -0
  95. data/lib/hpcloud/commands/networks/remove.rb +57 -0
  96. data/lib/hpcloud/commands/networks/update.rb +54 -0
  97. data/lib/hpcloud/commands/networks.rb +63 -0
  98. data/lib/hpcloud/commands/ports/add.rb +81 -0
  99. data/lib/hpcloud/commands/ports/remove.rb +57 -0
  100. data/lib/hpcloud/commands/ports/update.rb +67 -0
  101. data/lib/hpcloud/commands/ports.rb +63 -0
  102. data/lib/hpcloud/commands/remove.rb +75 -0
  103. data/lib/hpcloud/commands/routers/add.rb +67 -0
  104. data/lib/hpcloud/commands/routers/interface/add.rb +59 -0
  105. data/lib/hpcloud/commands/routers/interface/remove.rb +66 -0
  106. data/lib/hpcloud/commands/routers/remove.rb +54 -0
  107. data/lib/hpcloud/commands/routers/update.rb +66 -0
  108. data/lib/hpcloud/commands/routers.rb +66 -0
  109. data/lib/hpcloud/commands/securitygroups/add.rb +52 -0
  110. data/lib/hpcloud/commands/securitygroups/remove.rb +57 -0
  111. data/lib/hpcloud/commands/securitygroups/rules/add.rb +126 -0
  112. data/lib/hpcloud/commands/securitygroups/rules/remove.rb +51 -0
  113. data/lib/hpcloud/commands/securitygroups/rules.rb +56 -0
  114. data/lib/hpcloud/commands/securitygroups.rb +62 -0
  115. data/lib/hpcloud/commands/servers/add.rb +100 -0
  116. data/lib/hpcloud/commands/servers/console.rb +81 -0
  117. data/lib/hpcloud/commands/servers/limits.rb +46 -0
  118. data/lib/hpcloud/commands/servers/metadata/add.rb +56 -0
  119. data/lib/hpcloud/commands/servers/metadata/remove.rb +57 -0
  120. data/lib/hpcloud/commands/servers/metadata.rb +56 -0
  121. data/lib/hpcloud/commands/servers/password.rb +47 -0
  122. data/lib/hpcloud/commands/servers/ratelimits.rb +46 -0
  123. data/lib/hpcloud/commands/servers/reboot.rb +61 -0
  124. data/lib/hpcloud/commands/servers/rebuild.rb +59 -0
  125. data/lib/hpcloud/commands/servers/remove.rb +58 -0
  126. data/lib/hpcloud/commands/servers/securitygroups/add.rb +47 -0
  127. data/lib/hpcloud/commands/servers/securitygroups/remove.rb +47 -0
  128. data/lib/hpcloud/commands/servers/ssh.rb +92 -0
  129. data/lib/hpcloud/commands/servers.rb +92 -0
  130. data/lib/hpcloud/commands/snapshots/add.rb +62 -0
  131. data/lib/hpcloud/commands/snapshots/remove.rb +58 -0
  132. data/lib/hpcloud/commands/snapshots.rb +62 -0
  133. data/lib/hpcloud/commands/subnets/add.rb +78 -0
  134. data/lib/hpcloud/commands/subnets/remove.rb +57 -0
  135. data/lib/hpcloud/commands/subnets/update.rb +70 -0
  136. data/lib/hpcloud/commands/subnets.rb +63 -0
  137. data/lib/hpcloud/commands/tempurl.rb +62 -0
  138. data/lib/hpcloud/commands/volumes/add.rb +88 -0
  139. data/lib/hpcloud/commands/volumes/attach.rb +59 -0
  140. data/lib/hpcloud/commands/volumes/detach.rb +57 -0
  141. data/lib/hpcloud/commands/volumes/metadata/add.rb +54 -0
  142. data/lib/hpcloud/commands/volumes/metadata.rb +55 -0
  143. data/lib/hpcloud/commands/volumes/remove.rb +57 -0
  144. data/lib/hpcloud/commands/volumes/server.rb +64 -0
  145. data/lib/hpcloud/commands/volumes.rb +65 -0
  146. data/lib/hpcloud/config.rb +205 -0
  147. data/lib/hpcloud/connection.rb +290 -0
  148. data/lib/hpcloud/container_resource.rb +175 -0
  149. data/lib/hpcloud/database_helper.rb +70 -0
  150. data/lib/hpcloud/databases.rb +38 -0
  151. data/lib/hpcloud/dns_helper.rb +125 -0
  152. data/lib/hpcloud/dnss.rb +38 -0
  153. data/lib/hpcloud/error_response.rb +89 -0
  154. data/lib/hpcloud/exceptions/base.rb +35 -0
  155. data/lib/hpcloud/exceptions/general.rb +34 -0
  156. data/lib/hpcloud/exceptions/not_found.rb +34 -0
  157. data/lib/hpcloud/flavors.rb +40 -0
  158. data/lib/hpcloud/floating_ip_helper.rb +114 -0
  159. data/lib/hpcloud/floating_ips.rb +42 -0
  160. data/lib/hpcloud/fog_collection.rb +124 -0
  161. data/lib/hpcloud/image_helper.rb +111 -0
  162. data/lib/hpcloud/images.rb +43 -0
  163. data/lib/hpcloud/keypair_helper.rb +109 -0
  164. data/lib/hpcloud/keypairs.rb +41 -0
  165. data/lib/hpcloud/lb_algorithms.rb +37 -0
  166. data/lib/hpcloud/lb_limits.rb +37 -0
  167. data/lib/hpcloud/lb_nodes.rb +42 -0
  168. data/lib/hpcloud/lb_protocols.rb +37 -0
  169. data/lib/hpcloud/lb_versions.rb +37 -0
  170. data/lib/hpcloud/lb_virtualips.rb +42 -0
  171. data/lib/hpcloud/lbs.rb +38 -0
  172. data/lib/hpcloud/local_resource.rb +183 -0
  173. data/lib/hpcloud/log.rb +55 -0
  174. data/lib/hpcloud/metadata.rb +118 -0
  175. data/lib/hpcloud/monkey.rb +22 -0
  176. data/lib/hpcloud/network_helper.rb +88 -0
  177. data/lib/hpcloud/networks.rb +47 -0
  178. data/lib/hpcloud/object_store.rb +66 -0
  179. data/lib/hpcloud/port_helper.rb +150 -0
  180. data/lib/hpcloud/ports.rb +38 -0
  181. data/lib/hpcloud/progress.rb +53 -0
  182. data/lib/hpcloud/remote_resource.rb +512 -0
  183. data/lib/hpcloud/resource.rb +264 -0
  184. data/lib/hpcloud/resource_factory.rb +110 -0
  185. data/lib/hpcloud/routers.rb +56 -0
  186. data/lib/hpcloud/rule_helper.rb +70 -0
  187. data/lib/hpcloud/rules.rb +41 -0
  188. data/lib/hpcloud/security_group_helper.rb +59 -0
  189. data/lib/hpcloud/security_groups.rb +37 -0
  190. data/lib/hpcloud/server_helper.rb +318 -0
  191. data/lib/hpcloud/servers.rb +47 -0
  192. data/lib/hpcloud/shared_resource.rb +172 -0
  193. data/lib/hpcloud/snapshot_helper.rb +78 -0
  194. data/lib/hpcloud/snapshots.rb +38 -0
  195. data/lib/hpcloud/subnet_helper.rb +170 -0
  196. data/lib/hpcloud/subnets.rb +38 -0
  197. data/lib/hpcloud/tableizer.rb +77 -0
  198. data/lib/hpcloud/thor_ext/thor.rb +54 -0
  199. data/lib/hpcloud/time_parser.rb +47 -0
  200. data/lib/hpcloud/version.rb +27 -0
  201. data/lib/hpcloud/volume_attachment.rb +58 -0
  202. data/lib/hpcloud/volume_attachments.rb +58 -0
  203. data/lib/hpcloud/volume_helper.rb +119 -0
  204. data/lib/hpcloud/volumes.rb +38 -0
  205. data/lib/hpcloud.rb +112 -0
  206. data/lib/monkey/hp/lb.rb +188 -0
  207. data/lib/monkey/hp/models/lb/algorithm.rb +32 -0
  208. data/lib/monkey/hp/models/lb/algorithms.rb +46 -0
  209. data/lib/monkey/hp/models/lb/limit.rb +38 -0
  210. data/lib/monkey/hp/models/lb/limits.rb +50 -0
  211. data/lib/monkey/hp/models/lb/load_balancer.rb +70 -0
  212. data/lib/monkey/hp/models/lb/load_balancers.rb +46 -0
  213. data/lib/monkey/hp/models/lb/node.rb +69 -0
  214. data/lib/monkey/hp/models/lb/nodes.rb +47 -0
  215. data/lib/monkey/hp/models/lb/protocol.rb +33 -0
  216. data/lib/monkey/hp/models/lb/protocols.rb +46 -0
  217. data/lib/monkey/hp/models/lb/version.rb +34 -0
  218. data/lib/monkey/hp/models/lb/versions.rb +47 -0
  219. data/lib/monkey/hp/models/lb/virtual_ip.rb +37 -0
  220. data/lib/monkey/hp/models/lb/virtual_ips.rb +47 -0
  221. data/lib/monkey/hp/requests/lb/create_load_balancer.rb +64 -0
  222. data/lib/monkey/hp/requests/lb/create_load_balancer_node.rb +58 -0
  223. data/lib/monkey/hp/requests/lb/delete_load_balancer.rb +54 -0
  224. data/lib/monkey/hp/requests/lb/delete_load_balancer_node.rb +60 -0
  225. data/lib/monkey/hp/requests/lb/get_load_balancer.rb +88 -0
  226. data/lib/monkey/hp/requests/lb/get_load_balancer_node.rb +60 -0
  227. data/lib/monkey/hp/requests/lb/get_version.rb +68 -0
  228. data/lib/monkey/hp/requests/lb/get_virtual_ips.rb +48 -0
  229. data/lib/monkey/hp/requests/lb/list_algorithms.rb +51 -0
  230. data/lib/monkey/hp/requests/lb/list_limits.rb +60 -0
  231. data/lib/monkey/hp/requests/lb/list_load_balancer_nodes.rb +79 -0
  232. data/lib/monkey/hp/requests/lb/list_load_balancer_virtual_ips.rb +76 -0
  233. data/lib/monkey/hp/requests/lb/list_load_balancers.rb +69 -0
  234. data/lib/monkey/hp/requests/lb/list_protocols.rb +51 -0
  235. data/lib/monkey/hp/requests/lb/list_versions.rb +51 -0
  236. data/lib/monkey/hp/requests/lb/update_load_balancer.rb +46 -0
  237. data/lib/monkey/hp/requests/lb/update_load_balancer_node.rb +50 -0
  238. 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