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:41 UTC
[PATCH core 4/5] Mock: Support for user-data testing
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