bbrowning-deltacloud-core 0.0.3.1 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,13 @@
1
+ require 'gogrid_client'
2
+ require 'ap'
3
+
4
+ user='fbb1de3897597ccf'
5
+ password='ngieth10'
6
+
7
+ client=GoGridClient.new('https://api.gogrid.com/api', user, password)
8
+
9
+ ap client.request('grid/ip/list', {
10
+ 'ip.type' => '1',
11
+ 'ip.state' => '1',
12
+ 'datacenter' => '1'
13
+ })
@@ -29,11 +29,13 @@ class RackspaceDriver < Deltacloud::BaseDriver
29
29
 
30
30
  def hardware_profiles(credentials, opts = nil)
31
31
  racks = new_client( credentials )
32
- results = racks.list_flavors.map do |flav|
33
- HardwareProfile.new(flav["id"].to_s) do
34
- architecture 'x86_64'
35
- memory flav["ram"].to_i
36
- storage flav["disk"].to_i
32
+ safely do
33
+ results = racks.list_flavors.map do |flav|
34
+ HardwareProfile.new(flav["id"].to_s) do
35
+ architecture 'x86_64'
36
+ memory flav["ram"].to_i
37
+ storage flav["disk"].to_i
38
+ end
37
39
  end
38
40
  end
39
41
  filter_hardware_profiles(results, opts)
@@ -41,14 +43,16 @@ class RackspaceDriver < Deltacloud::BaseDriver
41
43
 
42
44
  def images(credentials, opts=nil)
43
45
  racks = new_client( credentials )
44
- results = racks.list_images.map do |img|
45
- Image.new( {
46
- :id=>img["id"].to_s,
47
- :name=>img["name"],
48
- :description => img["name"] + " " + img["status"] + "",
49
- :owner_id=>"root",
50
- :architecture=>'x86_64'
51
- } )
46
+ safely do
47
+ results = racks.list_images.map do |img|
48
+ Image.new( {
49
+ :id=>img["id"].to_s,
50
+ :name=>img["name"],
51
+ :description => img["name"] + " " + img["status"] + "",
52
+ :owner_id=>"root",
53
+ :architecture=>'x86_64'
54
+ } )
55
+ end
52
56
  end
53
57
  results.sort_by{|e| [e.description]}
54
58
  results = filter_on( results, :id, opts )
@@ -66,7 +70,14 @@ class RackspaceDriver < Deltacloud::BaseDriver
66
70
 
67
71
  def reboot_instance(credentials, id)
68
72
  racks = new_client(credentials)
69
- racks.reboot_server(id)
73
+ safely do
74
+ racks.reboot_server(id)
75
+ end
76
+ Instance.new( {
77
+ :id => id,
78
+ :state => "REBOOT",
79
+ :actions => instance_actions_for( state ),
80
+ } )
70
81
  end
71
82
 
72
83
  def stop_instance(credentials, id)
@@ -75,7 +86,14 @@ class RackspaceDriver < Deltacloud::BaseDriver
75
86
 
76
87
  def destroy_instance(credentials, id)
77
88
  racks = new_client(credentials)
78
- racks.delete_server(id)
89
+ safely do
90
+ racks.delete_server(id)
91
+ end
92
+ Instance.new( {
93
+ :id => id,
94
+ :state => "STOPPED",
95
+ :actions => instance_actions_for( "STOPPED" ),
96
+ } )
79
97
  end
80
98
 
81
99
 
@@ -88,7 +106,9 @@ class RackspaceDriver < Deltacloud::BaseDriver
88
106
  hwp_id = opts[:hwp_id] || 1
89
107
  name = Time.now.to_s
90
108
  if (opts[:name]) then name = opts[:name] end
91
- convert_srv_to_instance(racks.start_server(image_id, hwp_id, name))
109
+ safely do
110
+ return convert_srv_to_instance(racks.start_server(image_id, hwp_id, name))
111
+ end
92
112
  end
93
113
 
94
114
  #
@@ -97,12 +117,14 @@ class RackspaceDriver < Deltacloud::BaseDriver
97
117
  def instances(credentials, opts=nil)
98
118
  racks = new_client(credentials)
99
119
  instances = []
100
- if (opts.nil?)
101
- instances = racks.list_servers.map do |srv|
102
- convert_srv_to_instance(srv)
120
+ safely do
121
+ if (opts.nil?)
122
+ instances = racks.list_servers.map do |srv|
123
+ convert_srv_to_instance(srv)
124
+ end
125
+ else
126
+ instances << convert_srv_to_instance(racks.load_server_details(opts[:id]))
103
127
  end
104
- else
105
- instances << convert_srv_to_instance(racks.load_server_details(opts[:id]))
106
128
  end
107
129
  instances = filter_on( instances, :id, opts )
108
130
  instances = filter_on( instances, :state, opts )
@@ -111,7 +133,6 @@ class RackspaceDriver < Deltacloud::BaseDriver
111
133
 
112
134
 
113
135
  def convert_srv_to_instance(srv)
114
- status = srv["status"] == "ACTIVE" ? "RUNNING" : "PENDING"
115
136
  inst = Instance.new(:id => srv["id"].to_s,
116
137
  :owner_id => "root",
117
138
  :realm_id => "us")
@@ -128,7 +149,9 @@ class RackspaceDriver < Deltacloud::BaseDriver
128
149
  end
129
150
 
130
151
  def new_client(credentials)
131
- RackspaceClient.new(credentials.user, credentials.password)
152
+ safely do
153
+ return RackspaceClient.new(credentials.user, credentials.password)
154
+ end
132
155
  end
133
156
 
134
157
  define_instance_states do
@@ -144,6 +167,14 @@ class RackspaceDriver < Deltacloud::BaseDriver
144
167
  stopped.to( :finish ) .automatically
145
168
  end
146
169
 
170
+ def safely(&block)
171
+ begin
172
+ block.call
173
+ rescue Exception => e
174
+ raise Deltacloud::BackendError.new(500, e.class.to_s, e.message, e.backtrace)
175
+ end
176
+ end
177
+
147
178
  end
148
179
 
149
180
  end
@@ -29,15 +29,17 @@ class RimuHostingDriver < Deltacloud::BaseDriver
29
29
  feature :instances, :user_name
30
30
 
31
31
  def images(credentails, opts=nil)
32
- rh = RimuHostingClient.new(credentails)
33
- images = rh.list_images.map do | image |
34
- Image.new({
35
- :id => image["distro_code"].gsub(/\./,"-"),
36
- :name => image["distro_code"],
37
- :description => image["distro_description"],
38
- :owner_id => "root",
39
- :architecture => "x86"
40
- })
32
+ safely do
33
+ rh = RimuHostingClient.new(credentails)
34
+ images = rh.list_images.map do | image |
35
+ Image.new({
36
+ :id => image["distro_code"].gsub(/\./,"-"),
37
+ :name => image["distro_code"],
38
+ :description => image["distro_description"],
39
+ :owner_id => "root",
40
+ :architecture => "x86"
41
+ })
42
+ end
41
43
  end
42
44
  images.sort_by{|e| [e.description]}
43
45
  images = filter_on( images, :id, opts)
@@ -45,15 +47,17 @@ class RimuHostingDriver < Deltacloud::BaseDriver
45
47
  end
46
48
 
47
49
  def hardware_profiles(credentials, opts = nil)
48
- rh = RimuHostingClient.new(credentials)
49
- results = rh.list_plans.map do |plan|
50
- # FIXME: x86 is not a valid architecture; what is Rimu offering ?
51
- # FIXME: VPS plans offer a range of memory/storage, but that's
52
- # not contained in hte pricing_plan_infos
53
- HardwareProfile.new(plan["pricing_plan_code"]) do
54
- memory plan["minimum_memory_mb"].to_f
55
- storage plan["minimum_disk_gb"].to_i
56
- architecture "x86"
50
+ safely do
51
+ rh = RimuHostingClient.new(credentials)
52
+ results = rh.list_plans.map do |plan|
53
+ # FIXME: x86 is not a valid architecture; what is Rimu offering ?
54
+ # FIXME: VPS plans offer a range of memory/storage, but that's
55
+ # not contained in hte pricing_plan_infos
56
+ HardwareProfile.new(plan["pricing_plan_code"]) do
57
+ memory plan["minimum_memory_mb"].to_f
58
+ storage plan["minimum_disk_gb"].to_i
59
+ architecture "x86"
60
+ end
57
61
  end
58
62
  end
59
63
  filter_hardware_profiles(results, opts)
@@ -68,9 +72,11 @@ class RimuHostingDriver < Deltacloud::BaseDriver
68
72
  end
69
73
 
70
74
  def instances(credentials, opts=nil)
71
- rh = RimuHostingClient.new(credentials)
72
- instances = rh.list_nodes.map do | inst |
73
- convert_srv_to_instance(inst)
75
+ safely do
76
+ rh = RimuHostingClient.new(credentials)
77
+ instances = rh.list_nodes.map do | inst |
78
+ convert_srv_to_instance(inst)
79
+ end
74
80
  end
75
81
  instances = filter_on( instances, :id, opts)
76
82
  instances = filter_on( instances, :state, opts )
@@ -78,13 +84,17 @@ class RimuHostingDriver < Deltacloud::BaseDriver
78
84
  end
79
85
 
80
86
  def reboot_instance(credentials, id)
81
- rh = RimuHostingClient.new(credentials)
82
- rh.set_server_state(id, :RESTARTING)
87
+ safely do
88
+ rh = RimuHostingClient.new(credentials)
89
+ rh.set_server_state(id, :RESTARTING)
90
+ end
83
91
  end
84
92
 
85
93
  def start_instance(credentials, id)
86
- rh = RimuHostingClient.new(credentials)
87
- rh.set_server_state(id, :STARTED)
94
+ safely do
95
+ rh = RimuHostingClient.new(credentials)
96
+ rh.set_server_state(id, :STARTED)
97
+ end
88
98
  end
89
99
 
90
100
  def stop_instance(credentials, id)
@@ -92,8 +102,10 @@ class RimuHostingDriver < Deltacloud::BaseDriver
92
102
  end
93
103
 
94
104
  def destroy_instance(credentials, id)
95
- rh = RimuHostingClient.new(credentials)
96
- rh.delete_server(id)
105
+ safely do
106
+ rh = RimuHostingClient.new(credentials)
107
+ return rh.delete_server(id)
108
+ end
97
109
  end
98
110
 
99
111
  def create_instance(credentials, image_id, opts)
@@ -138,6 +150,14 @@ class RimuHostingDriver < Deltacloud::BaseDriver
138
150
  stopped.to( :finish ) .automatically
139
151
  end
140
152
 
153
+ def safely(&block)
154
+ begin
155
+ block.call
156
+ rescue Exception => e
157
+ raise Deltacloud::BackendError.new(500, e.class.to_s, e.message, e.backtrace)
158
+ end
159
+ end
160
+
141
161
 
142
162
  end
143
163
 
@@ -57,15 +57,17 @@ VAPP_STATE_MAP = { "0" => "PENDING", "1" => "PENDING", "2" => "STOPPED", "4"
57
57
  def images(credentials, opts=nil)
58
58
  image_list = []
59
59
  terremark_client = new_client(credentials)
60
- vdc_id = terremark_client.default_vdc_id
61
- catalogItems = terremark_client.get_catalog(vdc_id).body['CatalogItems']
62
- catalogItems.each{ |catalog_item|
63
- current_item_id = catalog_item['href'].split('/').last
64
- current_item = terremark_client.get_catalog_item(current_item_id).body['Entity']
65
- if(current_item['type'] == 'application/vnd.vmware.vcloud.vAppTemplate+xml')
66
- image_list << convert_image(current_item, credentials.user)
67
- end
68
- } #end of catalogItems.each
60
+ safely do
61
+ vdc_id = terremark_client.default_vdc_id
62
+ catalogItems = terremark_client.get_catalog(vdc_id).body['CatalogItems']
63
+ catalogItems.each{ |catalog_item|
64
+ current_item_id = catalog_item['href'].split('/').last
65
+ current_item = terremark_client.get_catalog_item(current_item_id).body['Entity']
66
+ if(current_item['type'] == 'application/vnd.vmware.vcloud.vAppTemplate+xml')
67
+ image_list << convert_image(current_item, credentials.user)
68
+ end
69
+ } #end of catalogItems.each
70
+ end
69
71
  image_list = filter_on( image_list, :id, opts )
70
72
  image_list = filter_on( image_list, :architecture, opts )
71
73
  image_list = filter_on( image_list, :owner_id, opts )
@@ -91,14 +93,16 @@ VAPP_STATE_MAP = { "0" => "PENDING", "1" => "PENDING", "2" => "STOPPED", "4"
91
93
  def instances(credentials, opts=nil)
92
94
  instances = []
93
95
  terremark_client = new_client(credentials)
94
- vdc_items = terremark_client.get_vdc(terremark_client.default_vdc_id()).body['ResourceEntities']
95
- vdc_items.each{|current_item|
96
- if(current_item['type'] == 'application/vnd.vmware.vcloud.vApp+xml')
97
- vapp_id = current_item['href'].split('/').last
98
- vapp = terremark_client.get_vapp(vapp_id)
99
- instances << convert_instance(vapp, terremark_client, credentials.user)
100
- end
101
- }#end vdc_items.each
96
+ safely do
97
+ vdc_items = terremark_client.get_vdc(terremark_client.default_vdc_id()).body['ResourceEntities']
98
+ vdc_items.each{|current_item|
99
+ if(current_item['type'] == 'application/vnd.vmware.vcloud.vApp+xml')
100
+ vapp_id = current_item['href'].split('/').last
101
+ vapp = terremark_client.get_vapp(vapp_id)
102
+ instances << convert_instance(vapp, terremark_client, credentials.user)
103
+ end
104
+ }#end vdc_items.each
105
+ end
102
106
  instances = filter_on( instances, :id, opts )
103
107
  instances
104
108
  end
@@ -114,7 +118,7 @@ VAPP_STATE_MAP = { "0" => "PENDING", "1" => "PENDING", "2" => "STOPPED", "4"
114
118
  running.to(:running) .on( :reboot )
115
119
  running.to(:shutting_down) .on( :stop )
116
120
  shutting_down.to(:stopped) .automatically
117
- stopped.to(:end) .on( :destroy )
121
+ stopped.to(:finish) .on( :destroy )
118
122
  end
119
123
 
120
124
 
@@ -135,37 +139,45 @@ VAPP_STATE_MAP = { "0" => "PENDING", "1" => "PENDING", "2" => "STOPPED", "4"
135
139
  end
136
140
  vapp_opts['cpus'] = opts[:hwp_cpu]
137
141
  vapp_opts['memory'] = opts[:hwp_memory]
138
- terremark_client = new_client(credentials)
142
+ safely do
143
+ terremark_client = new_client(credentials)
139
144
  #######
140
145
  #FIXME# what happens if there is an issue getting the new vapp id? (eg even though created succesfully)
141
146
  #######
142
- vapp_id = terremark_client.instantiate_vapp_template(name, image_id, vapp_opts).body['href'].split('/').last
143
- new_vapp = terremark_client.get_vapp(vapp_id)
144
- return convert_instance(new_vapp, terremark_client, credentials.user) #return an Instance object
147
+ vapp_id = terremark_client.instantiate_vapp_template(name, image_id, vapp_opts).body['href'].split('/').last
148
+ new_vapp = terremark_client.get_vapp(vapp_id)
149
+ return convert_instance(new_vapp, terremark_client, credentials.user) #return an Instance object
150
+ end
145
151
  end
146
152
 
147
153
  #--
148
154
  # REBOOT INSTANCE
149
155
  #--
150
156
  def reboot_instance(credentials, id)
151
- terremark_client = new_client(credentials)
152
- terremark_client.power_reset(id)
157
+ safely do
158
+ terremark_client = new_client(credentials)
159
+ return terremark_client.power_reset(id)
160
+ end
153
161
  end
154
162
 
155
163
  #--
156
164
  # START INSTANCE
157
165
  #--
158
166
  def start_instance(credentials, id)
167
+ safely do
159
168
  terremark_client = new_client(credentials)
160
- terremark_client.power_on(id)
169
+ return terremark_client.power_on(id)
170
+ end
161
171
  end
162
172
 
163
173
  #--
164
174
  # STOP INSTANCE
165
175
  #--
166
176
  def stop_instance(credentials, id)
177
+ safely do
167
178
  terremark_client = new_client(credentials)
168
- terremark_client.power_shutdown(id)
179
+ return terremark_client.power_shutdown(id)
180
+ end
169
181
  end
170
182
 
171
183
  #--
@@ -173,8 +185,10 @@ end
173
185
  #--
174
186
  #shuts down... in terremark need to do a futher delete to get rid of a vapp entirely
175
187
  def destroy_instance(credentials, id)
188
+ safely do
176
189
  terremark_client = new_client(credentials)
177
- terremark_client.delete_vapp(id)
190
+ return terremark_client.delete_vapp(id)
191
+ end
178
192
  end
179
193
 
180
194
  #--
@@ -246,14 +260,24 @@ end
246
260
  def new_client(credentials)
247
261
  #Fog constructor expecting credentials[:terremark_password] and credentials[:terremark_username]
248
262
  terremark_credentials = {:terremark_vcloud_username => "#{credentials.user}", :terremark_vcloud_password => "#{credentials.password}" }
249
- terremark_client = Fog::Terremark::Vcloud.new(terremark_credentials)
250
- vdc_id = terremark_client.default_vdc_id
263
+ safely do
264
+ terremark_client = Fog::Terremark::Vcloud.new(terremark_credentials)
265
+ vdc_id = terremark_client.default_vdc_id
266
+ end
251
267
  if (vdc_id.nil?)
252
268
  raise DeltaCloud::AuthException.new
253
269
  end
254
270
  terremark_client
255
271
  end
256
272
 
273
+ def safely(&block)
274
+ begin
275
+ block.call
276
+ rescue Exception => e
277
+ raise Deltacloud::BackendError.new(500, e.class.to_s, e.message, e.backtrace)
278
+ end
279
+ end
280
+
257
281
 
258
282
  end
259
283
 
@@ -106,4 +106,10 @@ module ApplicationHelper
106
106
  end
107
107
  end
108
108
 
109
+ def cdata(&block)
110
+ text = capture_haml(&block)
111
+ text.gsub!("\n", "\n ")
112
+ "<![CDATA[\n #{text}\n]]>"
113
+ end
114
+
109
115
  end
@@ -52,8 +52,8 @@ class BaseModel
52
52
  out
53
53
  end
54
54
 
55
- def to_json
56
- self.to_hash.to_json
55
+ def to_json(*a)
56
+ self.to_hash.to_json(*a)
57
57
  end
58
58
 
59
59
  end
@@ -0,0 +1,35 @@
1
+ #
2
+ # Copyright (C) 2009 Red Hat, Inc.
3
+ #
4
+ # Licensed to the Apache Software Foundation (ASF) under one or more
5
+ # contributor license agreements. See the NOTICE file distributed with
6
+ # this work for additional information regarding copyright ownership. The
7
+ # ASF licenses this file to you under the Apache License, Version 2.0 (the
8
+ # "License"); you may not use this file except in compliance with the
9
+ # License. You may obtain a copy of the License at
10
+ #
11
+ # http://www.apache.org/licenses/LICENSE-2.0
12
+ #
13
+ # Unless required by applicable law or agreed to in writing, software
14
+ # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
15
+ # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
16
+ # License for the specific language governing permissions and limitations
17
+ # under the License.
18
+
19
+ class Key < BaseModel
20
+
21
+ attr_accessor :credential_type
22
+ attr_accessor :fingerprint
23
+ attr_accessor :username
24
+ attr_accessor :password
25
+ attr_accessor :pem_rsa_key
26
+
27
+ def is_password?
28
+ true if @credential_type.eql?(:password)
29
+ end
30
+
31
+ def is_key?
32
+ true if @credential_type.eql?(:key)
33
+ end
34
+
35
+ end