bbrowning-deltacloud-core 0.0.4-java

Sign up to get free protection for your applications and to get access to all the features.
Files changed (134) hide show
  1. data/COPYING +176 -0
  2. data/Rakefile +99 -0
  3. data/bin/deltacloudd +120 -0
  4. data/config.ru +5 -0
  5. data/deltacloud.rb +18 -0
  6. data/lib/deltacloud/base_driver/base_driver.rb +229 -0
  7. data/lib/deltacloud/base_driver/features.rb +166 -0
  8. data/lib/deltacloud/base_driver/mock_driver.rb +40 -0
  9. data/lib/deltacloud/base_driver.rb +20 -0
  10. data/lib/deltacloud/drivers/ec2/ec2_driver.rb +410 -0
  11. data/lib/deltacloud/drivers/ec2/ec2_mock_driver.rb +170 -0
  12. data/lib/deltacloud/drivers/gogrid/gogrid_client.rb +50 -0
  13. data/lib/deltacloud/drivers/gogrid/gogrid_driver.rb +332 -0
  14. data/lib/deltacloud/drivers/gogrid/test.rb +13 -0
  15. data/lib/deltacloud/drivers/mock/data/images/img1.yml +3 -0
  16. data/lib/deltacloud/drivers/mock/data/images/img2.yml +3 -0
  17. data/lib/deltacloud/drivers/mock/data/images/img3.yml +3 -0
  18. data/lib/deltacloud/drivers/mock/data/instances/inst0.yml +16 -0
  19. data/lib/deltacloud/drivers/mock/data/instances/inst1.yml +9 -0
  20. data/lib/deltacloud/drivers/mock/data/instances/inst2.yml +9 -0
  21. data/lib/deltacloud/drivers/mock/data/storage_snapshots/snap1.yml +4 -0
  22. data/lib/deltacloud/drivers/mock/data/storage_snapshots/snap2.yml +4 -0
  23. data/lib/deltacloud/drivers/mock/data/storage_snapshots/snap3.yml +4 -0
  24. data/lib/deltacloud/drivers/mock/data/storage_volumes/vol1.yml +6 -0
  25. data/lib/deltacloud/drivers/mock/data/storage_volumes/vol2.yml +6 -0
  26. data/lib/deltacloud/drivers/mock/data/storage_volumes/vol3.yml +6 -0
  27. data/lib/deltacloud/drivers/mock/mock_driver.rb +277 -0
  28. data/lib/deltacloud/drivers/opennebula/cloud_client.rb +116 -0
  29. data/lib/deltacloud/drivers/opennebula/occi_client.rb +204 -0
  30. data/lib/deltacloud/drivers/opennebula/opennebula_driver.rb +241 -0
  31. data/lib/deltacloud/drivers/rackspace/rackspace_client.rb +130 -0
  32. data/lib/deltacloud/drivers/rackspace/rackspace_driver.rb +182 -0
  33. data/lib/deltacloud/drivers/rhevm/rhevm_driver.rb +255 -0
  34. data/lib/deltacloud/drivers/rimuhosting/rimuhosting_client.rb +85 -0
  35. data/lib/deltacloud/drivers/rimuhosting/rimuhosting_driver.rb +166 -0
  36. data/lib/deltacloud/drivers/terremark/terremark_driver.rb +286 -0
  37. data/lib/deltacloud/hardware_profile.rb +153 -0
  38. data/lib/deltacloud/helpers/application_helper.rb +115 -0
  39. data/lib/deltacloud/helpers/conversion_helper.rb +39 -0
  40. data/lib/deltacloud/helpers/hardware_profiles_helper.rb +35 -0
  41. data/lib/deltacloud/helpers.rb +5 -0
  42. data/lib/deltacloud/method_serializer.rb +85 -0
  43. data/lib/deltacloud/models/base_model.rb +59 -0
  44. data/lib/deltacloud/models/image.rb +27 -0
  45. data/lib/deltacloud/models/instance.rb +38 -0
  46. data/lib/deltacloud/models/instance_profile.rb +48 -0
  47. data/lib/deltacloud/models/key.rb +35 -0
  48. data/lib/deltacloud/models/realm.rb +26 -0
  49. data/lib/deltacloud/models/storage_snapshot.rb +27 -0
  50. data/lib/deltacloud/models/storage_volume.rb +28 -0
  51. data/lib/deltacloud/state_machine.rb +84 -0
  52. data/lib/deltacloud/validation.rb +70 -0
  53. data/lib/drivers.rb +50 -0
  54. data/lib/sinatra/accept_media_types.rb +128 -0
  55. data/lib/sinatra/lazy_auth.rb +56 -0
  56. data/lib/sinatra/rabbit.rb +273 -0
  57. data/lib/sinatra/respond_to.rb +272 -0
  58. data/lib/sinatra/static_assets.rb +83 -0
  59. data/lib/sinatra/url_for.rb +53 -0
  60. data/public/favicon.ico +0 -0
  61. data/public/images/grid.png +0 -0
  62. data/public/images/logo-wide.png +0 -0
  63. data/public/images/rails.png +0 -0
  64. data/public/images/topbar-bg.png +0 -0
  65. data/public/javascripts/application.js +32 -0
  66. data/public/javascripts/jquery-1.4.2.min.js +154 -0
  67. data/public/stylesheets/compiled/application.css +613 -0
  68. data/public/stylesheets/compiled/ie.css +31 -0
  69. data/public/stylesheets/compiled/print.css +27 -0
  70. data/public/stylesheets/compiled/screen.css +456 -0
  71. data/server.rb +354 -0
  72. data/support/fedora/deltacloudd +68 -0
  73. data/support/fedora/rubygem-deltacloud-core.spec +91 -0
  74. data/tests/api_test.rb +37 -0
  75. data/tests/hardware_profiles_test.rb +120 -0
  76. data/tests/images_test.rb +111 -0
  77. data/tests/instance_states_test.rb +52 -0
  78. data/tests/instances_test.rb +219 -0
  79. data/tests/realms_test.rb +78 -0
  80. data/tests/url_for_test.rb +50 -0
  81. data/views/accounts/index.html.haml +11 -0
  82. data/views/accounts/show.html.haml +30 -0
  83. data/views/api/show.html.haml +15 -0
  84. data/views/api/show.xml.haml +5 -0
  85. data/views/docs/collection.html.haml +37 -0
  86. data/views/docs/collection.xml.haml +14 -0
  87. data/views/docs/index.html.haml +15 -0
  88. data/views/docs/index.xml.haml +5 -0
  89. data/views/docs/operation.html.haml +31 -0
  90. data/views/docs/operation.xml.haml +10 -0
  91. data/views/errors/auth_exception.html.haml +8 -0
  92. data/views/errors/auth_exception.xml.haml +2 -0
  93. data/views/errors/backend_error.html.haml +19 -0
  94. data/views/errors/backend_error.xml.haml +8 -0
  95. data/views/errors/not_found.html.haml +6 -0
  96. data/views/errors/not_found.xml.haml +2 -0
  97. data/views/errors/validation_failure.html.haml +11 -0
  98. data/views/errors/validation_failure.xml.haml +7 -0
  99. data/views/hardware_profiles/index.html.haml +25 -0
  100. data/views/hardware_profiles/index.xml.haml +4 -0
  101. data/views/hardware_profiles/show.html.haml +19 -0
  102. data/views/hardware_profiles/show.xml.haml +18 -0
  103. data/views/images/index.html.haml +30 -0
  104. data/views/images/index.xml.haml +8 -0
  105. data/views/images/show.html.haml +21 -0
  106. data/views/images/show.xml.haml +5 -0
  107. data/views/instance_states/show.gv.erb +45 -0
  108. data/views/instance_states/show.html.haml +31 -0
  109. data/views/instance_states/show.xml.haml +8 -0
  110. data/views/instances/index.html.haml +30 -0
  111. data/views/instances/index.xml.haml +21 -0
  112. data/views/instances/new.html.haml +55 -0
  113. data/views/instances/show.html.haml +43 -0
  114. data/views/instances/show.xml.haml +49 -0
  115. data/views/keys/index.html.haml +26 -0
  116. data/views/keys/index.xml.haml +4 -0
  117. data/views/keys/new.html.haml +8 -0
  118. data/views/keys/show.html.haml +22 -0
  119. data/views/keys/show.xml.haml +20 -0
  120. data/views/layout.html.haml +26 -0
  121. data/views/realms/index.html.haml +29 -0
  122. data/views/realms/index.xml.haml +10 -0
  123. data/views/realms/show.html.haml +15 -0
  124. data/views/realms/show.xml.haml +9 -0
  125. data/views/root/index.html.haml +4 -0
  126. data/views/storage_snapshots/index.html.haml +20 -0
  127. data/views/storage_snapshots/index.xml.haml +9 -0
  128. data/views/storage_snapshots/show.html.haml +14 -0
  129. data/views/storage_snapshots/show.xml.haml +7 -0
  130. data/views/storage_volumes/index.html.haml +21 -0
  131. data/views/storage_volumes/index.xml.haml +13 -0
  132. data/views/storage_volumes/show.html.haml +20 -0
  133. data/views/storage_volumes/show.xml.haml +11 -0
  134. metadata +334 -0
@@ -0,0 +1,31 @@
1
+ %h2
2
+ %a{:href => url_for("/api/docs/#{@collection.name.to_s}")} #{@collection.name.to_s.titlecase}
3
+ #{'::'}
4
+ #{@operation.name}
5
+
6
+ %p #{@operation.description}
7
+
8
+ %br
9
+ %h3
10
+ URL:
11
+ %u
12
+ = url_for("/api/#{@collection.name.to_s}/#{@operation.name.to_s}")
13
+ %br
14
+ %h3 Parameters:
15
+
16
+
17
+ %table
18
+ %thead
19
+ %tr
20
+ %th Name
21
+ %th Type
22
+ %th Class
23
+ %th Valid values
24
+ %tbody
25
+ - @operation.each_param do |p|
26
+ %tr
27
+ %td{:style => "width:15em"}
28
+ %em #{p.name}
29
+ %td{:style => "width:10em"} #{p.type}
30
+ %td #{p.klass}
31
+ %td{:style => "width:10em"} #{p.options.join(',')}
@@ -0,0 +1,10 @@
1
+ %docs{:status => "unsupported"}
2
+ %operation{:url => url_for("/api/docs/#{@collection.name.to_s}"), :name => "#{@operation.name.to_s}", :href => url_for("#{@operation.path}"), :method => "#{@operation.method}"}
3
+ %description #{@operation.description}
4
+ - @operation.each_param do |param|
5
+ %parameter{:name => "#{param.name}", :type => "#{param.type}"}
6
+ %class #{param.klass}
7
+ - unless param.options.empty?
8
+ %values
9
+ - param.options.each do |v|
10
+ %value #{v}
@@ -0,0 +1,8 @@
1
+ %h1 Authentication Failure
2
+
3
+ %p= @error.message
4
+
5
+ %dl
6
+ %di
7
+ %dt Request URL
8
+ %dd= request.env['REQUEST_URI']
@@ -0,0 +1,2 @@
1
+ %error{:url => "#{request.env['REQUEST_URI']}", :status => "#{response.status}"}
2
+ %message #{@error.message}
@@ -0,0 +1,19 @@
1
+ %h1 Backend Error
2
+
3
+ %p= @error.message
4
+
5
+ %dl
6
+ %di
7
+ %dt Request URL
8
+ %dd= request.env['REQUEST_URI']
9
+ %di
10
+ %dt Code
11
+ %dd= @error.code
12
+ %di
13
+ %dt Cause
14
+ %dd= @error.cause
15
+ %di
16
+ %dt Details
17
+ %dd
18
+ %pre
19
+ =@error.details.join("\n")
@@ -0,0 +1,8 @@
1
+ %error{:url => "#{request.env['REQUEST_URI']}", :status => "#{response.status}"}
2
+ %kind backend_error
3
+ %backend{ :driver => DRIVER }
4
+ %code= @error.code
5
+ %cause= @error.cause
6
+ - if @error.details
7
+ %details #{@error.details}
8
+ %message #{@error.message}
@@ -0,0 +1,6 @@
1
+ %h1 Not Found
2
+
3
+ %dl
4
+ %di
5
+ %dt Request URL
6
+ %dd= request.env['REQUEST_URI']
@@ -0,0 +1,2 @@
1
+ %error{:url => "#{request.env['REQUEST_URI']}", :status => "#{response.status}"}
2
+ %message Not Found
@@ -0,0 +1,11 @@
1
+ %h1 Validation Failure
2
+
3
+ %p= @error.message
4
+
5
+ %dl
6
+ %di
7
+ %dt Request URL
8
+ %dd= request.env['REQUEST_URI']
9
+ %di
10
+ %dt Parameter
11
+ %dd= @error.name
@@ -0,0 +1,7 @@
1
+ %error{:url => "#{request.env['REQUEST_URI']}", :status => "#{response.status}"}
2
+ %parameter #{@error.name}
3
+ %message #{@error.message}
4
+ - unless @error.param.options.empty?
5
+ %valid_options
6
+ - @error.param.options.each do |v|
7
+ %value #{v}
@@ -0,0 +1,25 @@
1
+ %h1
2
+ Hardware Profiles
3
+
4
+ %table.display
5
+ %thead
6
+ %tr
7
+ %th
8
+ Name
9
+ %th
10
+ Architecture
11
+ %th
12
+ Memory
13
+ %th
14
+ Storage
15
+ %tbody
16
+ - for profile in @profiles
17
+ %tr
18
+ %td
19
+ = link_to profile.name, hardware_profile_url( profile.name )
20
+ %td
21
+ = format_hardware_property profile.architecture
22
+ %td
23
+ = format_hardware_property profile.memory
24
+ %td
25
+ = format_hardware_property profile.storage
@@ -0,0 +1,4 @@
1
+ !!! XML
2
+ %hardware_profiles
3
+ - @profiles.each do |prof|
4
+ = haml :'hardware_profiles/show', :locals => { :@profile => prof, :partial => true }
@@ -0,0 +1,19 @@
1
+ %h1
2
+ = @profile.name
3
+
4
+ %dl
5
+ %di
6
+ %dt
7
+ Architecture
8
+ %dd
9
+ = format_hardware_property @profile.architecture
10
+ %di
11
+ %dt
12
+ Memory
13
+ %dd
14
+ = format_hardware_property @profile.memory
15
+ %di
16
+ %dt
17
+ Storage
18
+ %dd
19
+ = format_hardware_property @profile.storage
@@ -0,0 +1,18 @@
1
+ - unless defined?(partial)
2
+ !!! XML
3
+ %hardware_profile{ :href => hardware_profile_url(@profile.name), :id => @profile.name }
4
+ %name<
5
+ =@profile.name
6
+ - @profile.each_property do |prop|
7
+ - attr = { :name => prop.name, :kind => prop.kind, :unit => prop.unit }
8
+ - if prop.kind == :fixed
9
+ %property{ attr, :value => prop.value }/
10
+ - else
11
+ %property{ attr, :value => prop.default }
12
+ %param{ :operation => "create", :href => instances_url, :method => "post", :name => prop.param }
13
+ - if prop.kind == :range
14
+ %range{ :first => prop.first, :last => prop.last }/
15
+ - elsif prop.kind == :enum
16
+ %enum
17
+ - prop.values.each do |v|
18
+ %entry{ :value => v }/
@@ -0,0 +1,30 @@
1
+ %h1
2
+ Images
3
+
4
+ %table.display
5
+ %thead
6
+ %tr
7
+ %th
8
+ ID
9
+ %th
10
+ Name
11
+ %th
12
+ Owner
13
+ %th
14
+ Architecture
15
+ %th
16
+ Description
17
+ %tbody
18
+ - @images.each do |image|
19
+ %tr
20
+ %td
21
+ = link_to image.id, image_url(image.id)
22
+ %td
23
+ = image.name
24
+ %td
25
+ = link_to image.owner_id, images_url
26
+ %td
27
+ = image.architecture
28
+ %td
29
+ = image.description
30
+
@@ -0,0 +1,8 @@
1
+ !!! XML
2
+ %images
3
+ - @elements.each do |image|
4
+ %image{:href => image_url(image.id), :id => image.id}
5
+ - image.attributes.select{ |attr| attr!=:id }.each do |attribute|
6
+ - haml_tag("#{attribute}".tr('-', '_'), :<) do
7
+ - haml_concat image.send(attribute)
8
+
@@ -0,0 +1,21 @@
1
+ %h1 Image
2
+ %h2
3
+ = @image.id
4
+
5
+ %dl
6
+ %di
7
+ %dt Name
8
+ %dd
9
+ = @image.name
10
+ %dt Owner
11
+ %dd
12
+ = link_to @image.owner_id, images_url( :owner_id => @image.owner_id )
13
+ %dt Architecture
14
+ %dd
15
+ = @image.architecture
16
+ %dt Description
17
+ %dd
18
+ = @image.description
19
+ %dt
20
+ %dd
21
+ = link_to 'Launch', "/api/instances/new?image_id=#{@image.id}"
@@ -0,0 +1,5 @@
1
+ !!! XML
2
+ %image{:href => image_url(@image.id), :id => @image.id}
3
+ - @image.attributes.select{ |attr| attr!=:id }.each do |attribute|
4
+ - haml_tag(attribute, :<) do
5
+ - haml_concat @image.send(attribute)
@@ -0,0 +1,45 @@
1
+ digraph instance_states {
2
+ rankdir=LR;
3
+ <% for state in @machine.states do %>
4
+ <%= state %>
5
+ [
6
+ label="<%= state.to_s.titlecase %>",
7
+ labelloc="c",
8
+ fontsize="12.0",
9
+ <% if ( state.name == :start || state.name == :finish ) %>
10
+ fontname="Liberation Sans Bold",
11
+ color="<%= state.name == :start ? '#449944' : '#994444' %>",
12
+ fillcolor="<%= state.name == :start ? '#88DD88' : '#DD8888' %>",
13
+ style="filled",
14
+ shape="doublecircle",
15
+ <% else %>
16
+ fontname="Liberation Sans Bold",
17
+ shape="rect",
18
+ color="#999999",
19
+ fillcolor="#DDDDDD",
20
+ style="filled",
21
+ <% end %>
22
+ height=0.5
23
+ ]
24
+ <% end %>
25
+
26
+ <% for state in @machine.states do %>
27
+ <% for transition in state.transitions do %>
28
+ <%= state %> -> <%= transition.destination %>
29
+ [
30
+ label="<%= transition.automatically? ? 'auto' : transition.action %>",
31
+ fontsize="14.0",
32
+ penwidth="2.0",
33
+ labelloc="t",
34
+ color="#CCCCCC",
35
+ <% if transition.automatically? %>
36
+ fontcolor="#227722",
37
+ fontname="Liberation Sans Bold Italic",
38
+ <% else %>
39
+ fontcolor="#333333",
40
+ fontname="Liberation Sans Bold",
41
+ <% end %>
42
+ ];
43
+ <% end %>
44
+ <% end %>
45
+ }
@@ -0,0 +1,31 @@
1
+ %h1 Instance States
2
+
3
+ %div#state_graph
4
+ = image_tag url_for( '/api/instance_states.png' )
5
+
6
+ %table.states
7
+ %thead
8
+ %tr
9
+ %th Origin
10
+ %th Action
11
+ %th Destination
12
+ %tbody
13
+ - @machine.states.each do |state|
14
+ %tr
15
+ %td.origin{:rowspan => "#{state.transitions.empty? ? 2 : (state.transitions.size + 1)}"}
16
+ = state
17
+ - if state.transitions.empty?
18
+ %tr
19
+ %td --
20
+ %td --
21
+ - else
22
+ - state.transitions.each do |transition|
23
+ %tr
24
+ %td
25
+ - if transition.automatically?
26
+ %em auto
27
+ - else
28
+ = transition.action
29
+ %td
30
+ = transition.destination
31
+
@@ -0,0 +1,8 @@
1
+ %states
2
+ - for state in @machine.states
3
+ %state{ :name=>state }
4
+ - for transition in state.transitions
5
+ - if ( transition.automatically? )
6
+ %transition{ :to=>transition.destination, :auto=>'true'}
7
+ - else
8
+ %transition{ :to=>transition.destination, :action=>transition.action }
@@ -0,0 +1,30 @@
1
+ %h1 Instances
2
+
3
+ %table.display
4
+ %thead
5
+ %tr
6
+ %th ID
7
+ %th Owner
8
+ %th Name
9
+ %th Image
10
+ %th Realm
11
+ %th State
12
+ %th Actions
13
+ %tbody
14
+ - @instances.each do |instance|
15
+ %tr
16
+ %td
17
+ = link_to instance.id, instance_url( instance.id )
18
+ %td
19
+ = link_to instance.owner_id, images_url
20
+ %td
21
+ = instance.name
22
+ %td
23
+ = link_to instance.image_id, image_url( instance.image_id )
24
+ %td
25
+ = instance.realm_id ? link_to(instance.realm_id, realm_url( instance.realm_id )) : 'default'
26
+ %td
27
+ = instance.state
28
+ %td
29
+ -instance.actions.each do |action|
30
+ =link_to action, self.send(:"#{action}_instance_url", instance.id), :class => instance_action_method(action)
@@ -0,0 +1,21 @@
1
+ !!! XML
2
+ %instances
3
+ - @elements.each do |instance|
4
+ %instance{:href => instance_url(instance.id), :id => instance.id}
5
+ %name #{instance.name}
6
+ %owner_id #{instance.owner_id}
7
+ %image{:href => image_url(instance.image_id), :id => instance.image_id }
8
+ %realm{:href => realm_url(instance.realm_id), :id => instance.realm_id }
9
+ %state #{instance.state}
10
+ - haml_tag :"hardware_profile", { :id => instance.instance_profile.id, :href => hardware_profile_url(instance.instance_profile.id)} do
11
+ - instance.instance_profile.overrides.each do |p, v|
12
+ %property{:kind => 'fixed', :name => p, :value => v, :unit => Deltacloud::HardwareProfile::unit(p)}
13
+ %actions
14
+ - instance.actions.compact.each do |action|
15
+ %link{:rel => action, :href => self.send("#{action}_instance_url", instance.id), :method => instance_action_method(action)}
16
+ %public_addresses
17
+ - instance.public_addresses.each do |address|
18
+ %address #{address}
19
+ %private_addresses
20
+ - instance.private_addresses.each do |address|
21
+ %address #{address}
@@ -0,0 +1,55 @@
1
+ %h1 New Instance
2
+
3
+ %h2= @image.id
4
+ %h3= @image.description
5
+
6
+ %form{ :action => instances_url, :method => :post }
7
+ %input{ :name => :image_id, :type => :hidden, :value => @instance.image_id }/
8
+ %p
9
+ %label
10
+ Instance Name:
11
+ %input{ :name => 'name', :size => 30 }/
12
+ -if driver_has_feature?(:authentication_key)
13
+ %p
14
+ %label
15
+ Instance Keyname:
16
+ %input{:name => 'keyname', :size => 30 }
17
+ - if !@hardware_profiles.empty?
18
+ %h3 What size machine?
19
+ - for hwp in @hardware_profiles
20
+ .radio-group
21
+ %label{ :for => "hwp_id_#{hwp.name}" }
22
+ %input{ :type => :radio, :name => 'hwp_id', :value => hwp.name }/
23
+ = hwp.name
24
+ %br/
25
+ %span.radio-group-details
26
+ - first = true
27
+ - hwp.properties.select { |prop| prop.fixed? }.each do |prop|
28
+ - unless first
29
+ ,
30
+ - first = false
31
+ = format_hardware_property prop
32
+ - hwp.properties.reject { |prop| prop.fixed? }.each do |prop|
33
+ %span.radio-group-details
34
+ %label{ :for => "#{prop.param}_#{hwp.name}" }
35
+ = prop.name
36
+ - if prop.kind == :enum
37
+ %select{ :size => 1, :name => prop.param }
38
+ - for v in prop.values
39
+ %option= v
40
+ = prop.unit
41
+ - else
42
+ %input{ :name => prop.param, :size => 10, :value => "#{prop.default}" }
43
+ = prop.unit
44
+ (value must be between #{prop.first} #{prop.unit} and #{prop.last} #{prop.unit})
45
+ - if !@realms.empty?
46
+ %h3 Where do you want it?
47
+ - for realm in @realms
48
+ .radio-group
49
+ %label{ :for => "realm_id_#{realm.id}" }
50
+ %input{ :type => :radio, :name => 'realm_id', :value => realm.id }/
51
+ = realm.id
52
+ %br/
53
+ %span.radio-group-details
54
+ = "#{realm.name}, #{realm.limit}"
55
+ %input{ :type => :submit, :name => "commit", :value => "create" }/
@@ -0,0 +1,43 @@
1
+ %h1
2
+ = @instance.id
3
+
4
+ %dl
5
+ %di
6
+ %dt Image
7
+ %dd
8
+ = link_to @instance.image_id, image_url( @instance.image_id )
9
+ %di
10
+ %dt Owner
11
+ %dd
12
+ = @instance.owner_id
13
+ %di
14
+ %dt Name
15
+ %dd
16
+ = @instance.name
17
+ %di
18
+ %dt Hardware Profile
19
+ %dd
20
+ - prof = @instance.instance_profile
21
+ = link_to(prof.name, hardware_profile_url(prof.name))
22
+ = format_instance_profile(prof)
23
+ %di
24
+ %dt Realm
25
+ %dd
26
+ = @instance.realm_id ? link_to(@instance.realm_id, realm_url(@instance.realm_id)) : 'default'
27
+ %di
28
+ %dt State
29
+ %dd
30
+ = @instance.state
31
+ %di
32
+ %dt Public Addresses
33
+ %dd
34
+ = @instance.public_addresses.collect { |address| "<div>#{address}</div>" }.join
35
+ %di
36
+ %dt Private Addresses
37
+ %dd
38
+ = @instance.private_addresses.collect { |address| "<div>#{address}</div>" }.join
39
+ %di
40
+ %dt
41
+ %dd
42
+ -@instance.actions.each do |action|
43
+ =link_to action, self.send(:"#{action}_instance_url", @instance.id), :class => instance_action_method(action)
@@ -0,0 +1,49 @@
1
+ !!! XML
2
+ %instance{:href => instance_url(@instance.id), :id => @instance.id}
3
+ - if @instance.name
4
+ %name<
5
+ =@instance.name
6
+ - if @instance.owner_id
7
+ %owner_id<
8
+ =@instance.owner_id
9
+ - if @instance.image_id
10
+ %image{:href => image_url(@instance.image_id), :id => @instance.image_id }
11
+ - if @instance.realm_id
12
+ %realm{:href => realm_url(@instance.realm_id), :id => @instance.realm_id }
13
+ - if @instance.state
14
+ %state<
15
+ =@instance.state
16
+ - if @instance.instance_profile
17
+ - haml_tag :"hardware_profile", {:id => @instance.instance_profile.id, :href => hardware_profile_url(@instance.instance_profile.id)} do
18
+ - @instance.instance_profile.overrides.each do |p, v|
19
+ %property{:kind => 'fixed', :name => p, :value => v, :unit => Deltacloud::HardwareProfile::unit(p)}
20
+ - if @instance.actions
21
+ %actions
22
+ - @instance.actions.compact.each do |instance_action|
23
+ %link{:rel => instance_action, :method => instance_action_method(instance_action), :href => self.send("#{instance_action}_instance_url", @instance.id)}
24
+ - if @instance.instance_variables.include?("@launch_time")
25
+ %launch_time<
26
+ =@instance.launch_time
27
+ - if @instance.public_addresses
28
+ %public_addresses
29
+ - @instance.public_addresses.each do |address|
30
+ %address<
31
+ =address
32
+ - if @instance.private_addresses
33
+ %private_addresses
34
+ - @instance.private_addresses.each do |address|
35
+ %address<
36
+ =address
37
+ - if driver_has_auth_features?
38
+ %authentication{ :type => driver_auth_feature_name }
39
+ - if @instance.authn_feature_failed?
40
+ %error #{@instance.authn_error}
41
+ - else
42
+ - if driver_auth_feature_name == 'password'
43
+ %login
44
+ %username #{@instance.username}
45
+ %password #{@instance.password}
46
+ - if driver_auth_feature_name == 'key'
47
+ %login
48
+ %keyname #{@instance.keyname}
49
+
@@ -0,0 +1,26 @@
1
+ %h1 Keys
2
+
3
+ %table.display
4
+ %thead
5
+ %tr
6
+ %th ID
7
+ %th Credentials details
8
+ %th Actions
9
+ %tbody
10
+ - @elements.each do |key|
11
+ %tr
12
+ %td
13
+ = link_to key.id, key_url( key.id )
14
+ %td
15
+ - if key.credential_type.eql?(:key)
16
+ = key.fingerprint
17
+ - if key.credential_type.eql?(:password)
18
+ = "#{key.username} - #{key.password}"
19
+ %td
20
+ - if driver.respond_to?(:destroy_key)
21
+ =link_to 'Destroy', destroy_key_url(key.id), :class => 'delete'
22
+ %tfoot
23
+ - if driver.respond_to?(:create_key)
24
+ %tr
25
+ %td{:colspan => 3, :style => "text-align:right;"}
26
+ =link_to 'Create &raquo;', "#{url_for('/api/keys/new')}", :class => 'button'
@@ -0,0 +1,4 @@
1
+ !!!XML
2
+ %keys
3
+ - @elements.each do |c|
4
+ = haml :'keys/show', :locals => { :@key => c, :partial => true }
@@ -0,0 +1,8 @@
1
+ %h1 New key
2
+
3
+ %form{ :action => '/api/keys', :method => :post }
4
+ %p
5
+ %label
6
+ Name:
7
+ %input{ :name => 'name', :size => 30 }/
8
+ %input{ :type => :submit, :name => "commit", :value => "create" }/
@@ -0,0 +1,22 @@
1
+ %h1
2
+ = @key.id
3
+
4
+ %dl
5
+ - if @key.is_key?
6
+ %di
7
+ %dt Fingerprint
8
+ %dd
9
+ = @key.fingerprint
10
+ - if @key.pem_rsa_key
11
+ %dt PEM key
12
+ %dd
13
+ %pre
14
+ = @key.pem_rsa_key
15
+ - if @key.is_password?
16
+ %di
17
+ %dt Username
18
+ %dd
19
+ = @key.username
20
+ %dt Password
21
+ %dd
22
+ = @key.password
@@ -0,0 +1,20 @@
1
+ - unless defined?(partial)
2
+ !!! XML
3
+ %key{ :href => key_url(@key.id), :id => @key.id, :type => "#{@key.credential_type}" }
4
+ %actions
5
+ - if driver.respond_to?(:destroy_key)
6
+ %link{ :rel => "destroy", :method => "delete", :href => destroy_key_url(@key.id)}
7
+ - if @key.is_key?
8
+ %fingerprint<
9
+ =@key.fingerprint
10
+ - unless @key.pem_rsa_key.nil?
11
+ %pem<
12
+ =cdata do
13
+ =@key.pem_rsa_key
14
+ - if @key.is_password?
15
+ %username<
16
+ =cdata do
17
+ =@key.username
18
+ %password<
19
+ =cdata do
20
+ =@key.password
@@ -0,0 +1,26 @@
1
+ !!!
2
+ !!! XML
3
+
4
+ %html
5
+ %head
6
+ = stylesheet_link_tag '/stylesheets/compiled/screen.css', :media => 'screen, projection'
7
+ = stylesheet_link_tag '/stylesheets/compiled/print.css', :media => 'print'
8
+ /[if lt IE 8]
9
+ = stylesheet_link_tag '/stylesheets/compiled/ie.css', :media => 'screen, projection'
10
+ = stylesheet_link_tag '/stylesheets/compiled/application.css', :media => 'screen, projection'
11
+ %script{:type => "text/javascript", :src => "/javascripts/jquery-1.4.2.min.js" }
12
+ %script{:type => "text/javascript", :src => "/javascripts/application.js" }
13
+ %body
14
+ #wrapper
15
+ #header
16
+ = link_to image_tag( "/images/logo-wide.png" ), root_url
17
+ = bread_crumb
18
+ #content
19
+ = yield
20
+ #footer
21
+ #driver_info
22
+ Driver: #{DRIVER}
23
+ #copyright
24
+ Copyright 2009, 2010
25
+ %a{:href => 'http://redhat.com'} Red Hat
26
+ and individual contributors.