From: Michal Fojtik <[email protected]>
Signed-off-by: Michal fojtik <[email protected]> --- 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
