You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@deltacloud.apache.org by mf...@redhat.com on 2011/08/03 14:20:38 UTC
[PATCH core 1/5] Client: Added support for addresses types
From: Michal Fojtik <mf...@redhat.com>
Signed-off-by: Michal fojtik <mf...@redhat.com>
---
client/lib/base_object.rb | 13 +++++++++++++
client/lib/deltacloud.rb | 8 ++++++--
2 files changed, 19 insertions(+), 2 deletions(-)
diff --git a/client/lib/base_object.rb b/client/lib/base_object.rb
index f6ef149..dd2b64a 100644
--- a/client/lib/base_object.rb
+++ b/client/lib/base_object.rb
@@ -84,6 +84,19 @@ module DeltaCloud
# <address>127.0.0.1</address>
# <address>127.0.0.2</address>
# </addresses>
+ def add_addresses!(collection_name, values=[])
+ @objects << {
+ :type => :collection,
+ :method_name => collection_name.sanitize,
+ :values => values.collect { |v| { :address => v.text.strip, :type => v[:type] }}
+ }
+ end
+
+ # This method define collection of text elements inside REST model
+ # XML syntax: <addresses>
+ # <address>127.0.0.1</address>
+ # <address>127.0.0.2</address>
+ # </addresses>
def add_collection!(collection_name, values=[])
@objects << {
:type => :collection,
diff --git a/client/lib/deltacloud.rb b/client/lib/deltacloud.rb
index e2db0ba..bfe25a2 100644
--- a/client/lib/deltacloud.rb
+++ b/client/lib/deltacloud.rb
@@ -23,7 +23,7 @@ require 'logger'
require 'hwp_properties'
require 'instance_state'
require 'documentation'
-require 'base_object'
+require 'lib/base_object'
require 'client_bucket_methods'
module DeltaCloud
@@ -225,7 +225,7 @@ module DeltaCloud
end
#deal with blob metadata
- if(attribute.name == 'user_metadata')
+ if (attribute.name == 'user_metadata')
meta = {}
attribute.children.select {|x| x.name=="entry" }.each do |element|
value = element.content.gsub!(/(\n) +/,'')
@@ -234,6 +234,10 @@ module DeltaCloud
obj.add_collection!(attribute.name, meta.inspect) && next
end
+ if (['public_addresses', 'private_addresses'].include? attribute.name)
+ obj.add_addresses!(attribute.name, (attribute/'*')) && next
+ end
+
# Deal with collections like public-addresses, private-addresses
if (attribute/'./*').length > 0
obj.add_collection!(attribute.name, (attribute/'*').collect { |value| value.text }) && next
--
1.7.4.1
[PATCH core 5/5] Mock: Fill keyname property correctly for an instance
Posted by mf...@redhat.com.
From: Michal Fojtik <mf...@redhat.com>
Signed-off-by: Michal fojtik <mf...@redhat.com>
---
server/lib/deltacloud/drivers/mock/mock_driver.rb | 13 +++++++------
1 files changed, 7 insertions(+), 6 deletions(-)
diff --git a/server/lib/deltacloud/drivers/mock/mock_driver.rb b/server/lib/deltacloud/drivers/mock/mock_driver.rb
index fa575c1..77d7738 100644
--- a/server/lib/deltacloud/drivers/mock/mock_driver.rb
+++ b/server/lib/deltacloud/drivers/mock/mock_driver.rb
@@ -141,14 +141,14 @@ class MockDriver < Deltacloud::BaseDriver
safely do
image = {
:id => opts[:name],
- :name => opts[:name],
- :owner_id => 'root',
- :description => opts[:description],
- :architecture => 'i386',
- :state => 'UP'
+ :name => opts[:name],
+ :owner_id => 'root',
+ :description => opts[:description],
+ :architecture => 'i386',
+ :state => 'UP'
}
File.open( "#{@storage_root}/images/#{opts[:name]}.yml", 'w' ) do |f|
- YAML.dump( image, f )
+ YAML.dump( image, f )
end
Image.new(image)
end
@@ -215,6 +215,7 @@ class MockDriver < Deltacloud::BaseDriver
instance = {
:name=>name,
:state=>'RUNNING',
+ :keyname => opts[:keyname],
:image_id=>image_id,
:owner_id=>credentials.user,
:public_addresses=>["#{image_id}.#{next_id}.public.com"],
--
1.7.4.1
[PATCH core 4/5] Mock: Support for user-data testing
Posted by mf...@redhat.com.
From: Michal Fojtik <mf...@redhat.com>
Signed-off-by: Michal fojtik <mf...@redhat.com>
---
server/lib/deltacloud/drivers/mock/mock_driver.rb | 4 +-
server/public/javascripts/application.js | 49 +++++++++++++++++++++
server/views/instances/new.html.haml | 7 +++
3 files changed, 59 insertions(+), 1 deletions(-)
diff --git a/server/lib/deltacloud/drivers/mock/mock_driver.rb b/server/lib/deltacloud/drivers/mock/mock_driver.rb
index 44e6a22..fa575c1 100644
--- a/server/lib/deltacloud/drivers/mock/mock_driver.rb
+++ b/server/lib/deltacloud/drivers/mock/mock_driver.rb
@@ -85,6 +85,7 @@ class MockDriver < Deltacloud::BaseDriver
end
feature :instances, :user_name
+ feature :instances, :user_data
feature :instances, :authentication_key
def initialize
@@ -221,7 +222,8 @@ class MockDriver < Deltacloud::BaseDriver
:instance_profile => InstanceProfile.new(hwp.name, opts),
:realm_id=>realm_id,
:create_image=>true,
- :actions=>instance_actions_for( 'RUNNING' )
+ :actions=>instance_actions_for( 'RUNNING' ),
+ :user_data => opts[:user_data]
}
File.open( "#{@storage_root}/instances/#{next_id}.yml", 'w' ) {|f|
YAML.dump( instance, f )
diff --git a/server/public/javascripts/application.js b/server/public/javascripts/application.js
index 703879c..e3aec10 100644
--- a/server/public/javascripts/application.js
+++ b/server/public/javascripts/application.js
@@ -17,6 +17,55 @@ $(document).ready(function() {
})
+function encodeb64 () {
+ // Encodes string using MIME base64 algorithm
+ //
+ // version: 1107.2516
+ // discuss at: http://phpjs.org/functions/base64_encode // + original by: Tyler Akins (http://rumkin.com)
+ // + improved by: Bayron Guevara
+ // + improved by: Thunder.m
+ // + improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
+ // + bugfixed by: Pellentesque Malesuada // + improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
+ // - depends on: utf8_encode
+ // * example 1: base64_encode('Kevin van Zonneveld');
+ // * returns 1: 'S2V2aW4gdmFuIFpvbm5ldmVsZA=='
+ // mozilla has this native // - but breaks in 2.0.0.12!
+ //if (typeof this.window['atob'] == 'function') {
+ // return atob(data);
+ //}
+ var b64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; var o1, o2, o3, h1, h2, h3, h4, bits, i = 0,
+ ac = 0,
+ enc = "",
+ tmp_arr = [];
+
+ var data = $("textarea#user_data").attr('value');
+
+ do { // pack three octets into four hexets
+ o1 = data.charCodeAt(i++);
+ o2 = data.charCodeAt(i++);
+ o3 = data.charCodeAt(i++);
+ bits = o1 << 16 | o2 << 8 | o3;
+
+ h1 = bits >> 18 & 0x3f;
+ h2 = bits >> 12 & 0x3f; h3 = bits >> 6 & 0x3f;
+ h4 = bits & 0x3f;
+
+ // use hexets to index into b64, and append result to encoded string
+ tmp_arr[ac++] = b64.charAt(h1) + b64.charAt(h2) + b64.charAt(h3) + b64.charAt(h4); } while (i < data.length);
+
+ enc = tmp_arr.join('');
+
+ switch (data.length % 3) { case 1:
+ enc = enc.slice(0, -2) + '==';
+ break;
+ case 2:
+ enc = enc.slice(0, -1) + '='; break;
+ }
+
+ $("textarea#user_data").attr('value', enc);
+ return false;
+}
+
function more_fields()
{
//increment the hidden input that captures how many meta_data are passed
diff --git a/server/views/instances/new.html.haml b/server/views/instances/new.html.haml
index 263d43c..3b1b667 100644
--- a/server/views/instances/new.html.haml
+++ b/server/views/instances/new.html.haml
@@ -12,6 +12,13 @@
%div{ 'data-role' => :collapsible, 'data-collapsed' => "true"}
%h3 Additional parameters
+ - if driver_has_feature?(:user_data)
+ %div{ 'data-role' => :fieldcontain }
+ %label{ :for => :user_data} Base64 encoded user-data:
+ %textarea{ :id => :user_data, :name => :user_data, :value => '' }
+ %br/
+ %a{ :href => "", :onclick => 'encodeb64();', :'data-ajax' => 'false'} Encode data
+
- if driver_has_feature?(:instance_count)
%div{ 'data-role' => :fieldcontain }
%label{ :for => :instance_count} # of instances to be launched:
--
1.7.4.1
[PATCH core 2/5] Client: Removed trailing whitespaces
Posted by mf...@redhat.com.
From: Michal Fojtik <mf...@redhat.com>
Signed-off-by: Michal fojtik <mf...@redhat.com>
---
client/lib/base_object.rb | 4 ++--
client/lib/deltacloud.rb | 4 ++--
2 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/client/lib/base_object.rb b/client/lib/base_object.rb
index dd2b64a..8aec05b 100644
--- a/client/lib/base_object.rb
+++ b/client/lib/base_object.rb
@@ -162,7 +162,7 @@ module DeltaCloud
@actions = []
end
- # This trigger is called right after action.
+ # This trigger is called right after action.
# This method does nothing inside ActionObject
# but it can be redifined and used in meta-programming
def action_trigger(action)
@@ -327,7 +327,7 @@ module DeltaCloud
DeltaCloud::API.class_eval("class #{class_name} < DeltaCloud::#{parent_class}; end")
@defined_classes << class_name
end
-
+
DeltaCloud::API.const_get(parent.classify).const_get(name.classify)
end
diff --git a/client/lib/deltacloud.rb b/client/lib/deltacloud.rb
index bfe25a2..70189aa 100644
--- a/client/lib/deltacloud.rb
+++ b/client/lib/deltacloud.rb
@@ -213,7 +213,7 @@ module DeltaCloud
# If there are actions, add they to ActionObject/StateFullObject
if attribute.name == 'actions'
(attribute/'link').each do |link|
- (obj.add_run_action!(item['id'], link) && next) if link[:rel] == 'run'
+ (obj.add_run_action!(item['id'], link) && next) if link[:rel] == 'run'
obj.add_action_link!(item['id'], link)
end && next
end
@@ -316,7 +316,7 @@ module DeltaCloud
def use_driver(driver, opts={})
if driver
- @api_driver = driver
+ @api_driver = driver
@driver_name = driver
discover_entry_points
end
--
1.7.4.1
[PATCH core 3/5] Client: Added authentication method for an instance
Posted by mf...@redhat.com.
From: Michal Fojtik <mf...@redhat.com>
Signed-off-by: Michal fojtik <mf...@redhat.com>
---
client/lib/base_object.rb | 15 +++++++++++++++
client/lib/deltacloud.rb | 4 ++++
2 files changed, 19 insertions(+), 0 deletions(-)
diff --git a/client/lib/base_object.rb b/client/lib/base_object.rb
index 8aec05b..22a0865 100644
--- a/client/lib/base_object.rb
+++ b/client/lib/base_object.rb
@@ -79,6 +79,21 @@ module DeltaCloud
}
end
+ def add_authentication!(auth_type, values=[])
+ value = { :key => (values/'login/keyname').text.strip } if auth_type == 'key'
+ if auth_type == 'password'
+ value = {
+ :username => (values/'login/username').text.strip,
+ :username => (values/'login/password').text.strip
+ }
+ end
+ @objects << {
+ :type => :collection,
+ :method_name => 'authentication',
+ :values => value
+ }
+ end
+
# This method define collection of text elements inside REST model
# XML syntax: <addresses>
# <address>127.0.0.1</address>
diff --git a/client/lib/deltacloud.rb b/client/lib/deltacloud.rb
index 70189aa..6c9c92a 100644
--- a/client/lib/deltacloud.rb
+++ b/client/lib/deltacloud.rb
@@ -238,6 +238,10 @@ module DeltaCloud
obj.add_addresses!(attribute.name, (attribute/'*')) && next
end
+ if ('authentication'.include? attribute.name)
+ obj.add_authentication!(attribute[:type], (attribute/'*')) && next
+ end
+
# Deal with collections like public-addresses, private-addresses
if (attribute/'./*').length > 0
obj.add_collection!(attribute.name, (attribute/'*').collect { |value| value.text }) && next
--
1.7.4.1