From 0a065d8b2e8f84306c2300d109562374b1eb9744 Mon Sep 17 00:00:00 2001 From: juanmont Date: Fri, 19 Oct 2018 16:53:04 +0200 Subject: [PATCH 01/11] F #2427: Added option to pick differents networks for a VM --- src/scheduler/include/Scheduler.h | 8 ++++++- src/scheduler/src/sched/Scheduler.cc | 22 ++++++++++++++++++++ src/scheduler/src/sched/SchedulerTemplate.cc | 6 ++++++ 3 files changed, 35 insertions(+), 1 deletion(-) diff --git a/src/scheduler/include/Scheduler.h b/src/scheduler/include/Scheduler.h index f40b27c589..c95dbf57a5 100644 --- a/src/scheduler/include/Scheduler.h +++ b/src/scheduler/include/Scheduler.h @@ -83,7 +83,8 @@ protected: machines_limit(0), dispatch_limit(0), host_dispatch_limit(0), - mem_ds_scale(0) + mem_ds_scale(0), + diff_vnets(false) { am.addListener(this); }; @@ -227,6 +228,11 @@ private: */ float mem_ds_scale; + /** + * Boolean to dispatch the VM inside different vnets + */ + bool diff_vnets; + /** * oned runtime configuration values */ diff --git a/src/scheduler/src/sched/Scheduler.cc b/src/scheduler/src/sched/Scheduler.cc index d67ad94e2c..31b4bccbe2 100644 --- a/src/scheduler/src/sched/Scheduler.cc +++ b/src/scheduler/src/sched/Scheduler.cc @@ -108,6 +108,7 @@ void Scheduler::start() ostringstream oss; string etc_path; + string diff_vnets_str; unsigned int live_rescheds; @@ -157,6 +158,22 @@ void Scheduler::start() conf.get("MEMORY_SYSTEM_DS_SCALE", mem_ds_scale); + conf.get("DIFFERENT_VNETS", diff_vnets_str); + + one_util::toupper(diff_vnets_str); + + if (diff_vnets_str != "" ) + { + if ( diff_vnets_str == "NO" ) + { + diff_vnets = false; + } + else if ( diff_vnets_str == "YES" ) + { + diff_vnets = true; + } + } + // ----------------------------------------------------------- // Log system & Configuration File // ----------------------------------------------------------- @@ -1537,6 +1554,11 @@ void Scheduler::dispatch() for (n = net_resources.rbegin() ; n != net_resources.rend(); n++) { + if ( diff_vnets && matched_networks.find((*n)->oid) != matched_networks.end() ) + { + continue; + } + net = vnetpool->get((*n)->oid); if ( net == 0 ) diff --git a/src/scheduler/src/sched/SchedulerTemplate.cc b/src/scheduler/src/sched/SchedulerTemplate.cc index b2c5f350a6..eca98cb8b5 100644 --- a/src/scheduler/src/sched/SchedulerTemplate.cc +++ b/src/scheduler/src/sched/SchedulerTemplate.cc @@ -122,6 +122,12 @@ void SchedulerTemplate::set_conf_default() attribute = new SingleAttribute("MEMORY_SYSTEM_DS_SCALE",value); conf_default.insert(make_pair(attribute->name(),attribute)); + //DIFFERENT_VNETS + value = "NO"; + + attribute = new SingleAttribute("DIFFERENT_VNETS",value); + conf_default.insert(make_pair(attribute->name(),attribute)); + //LOG CONFIGURATION vvalue.clear(); vvalue.insert(make_pair("SYSTEM","file")); From 03f47b809ff51acbac03bbd1d4b67d8a0b1738ae Mon Sep 17 00:00:00 2001 From: juanmont Date: Tue, 23 Oct 2018 11:00:23 +0200 Subject: [PATCH 02/11] F #2427: fixed bug when clear extra template --- src/scheduler/src/sched/Scheduler.cc | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/scheduler/src/sched/Scheduler.cc b/src/scheduler/src/sched/Scheduler.cc index 31b4bccbe2..805468a849 100644 --- a/src/scheduler/src/sched/Scheduler.cc +++ b/src/scheduler/src/sched/Scheduler.cc @@ -1534,13 +1534,13 @@ void Scheduler::dispatch() //------------------------------------------------------------------ // Get the highest ranked network //------------------------------------------------------------------ - extra.clear(); + extra.str(""); set nics_ids = vm->get_nics_ids(); map matched_networks; - unsigned int num_mached_networks = 0; + unsigned int num_matched_networks = 0; set::iterator it; @@ -1606,14 +1606,14 @@ void Scheduler::dispatch() matched_networks[netid] = 1; } - num_mached_networks++; + num_matched_networks++; - extra << "NIC=[NIC_ID=\"" << nic_id - << "\", NETWORK_MODE=\"auto\" , NETWORK_ID=\"" << netid + extra << "NIC=[NIC_ID=\"" << nic_id + << "\", NETWORK_MODE=\"auto\" , NETWORK_ID=\"" << netid << "\"]"; } - if ( num_mached_networks < nics_ids.size()) + if ( num_matched_networks < nics_ids.size()) { map::iterator it; From 27608f222cac187b8394f23293c812d7564508fc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christian=20Gonz=C3=A1lez?= Date: Mon, 22 Oct 2018 17:38:05 +0200 Subject: [PATCH 03/11] F #2456 Escape "$" at VM templates (#2529) (cherry picked from commit 9182eee7706aeb705d3c729ce5c296538701cf91) --- src/parsers/vm_var_parser.l | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/src/parsers/vm_var_parser.l b/src/parsers/vm_var_parser.l index c70a15eece..b683a1784d 100644 --- a/src/parsers/vm_var_parser.l +++ b/src/parsers/vm_var_parser.l @@ -46,6 +46,12 @@ %x VALUE %% + /* ------------------------------------------------------------------------- */ + /* Just copy the string verbatim till we find a variable (starts with $) */ + /* ------------------------------------------------------------------------- */ + +([^\$\\]|"\\\$"|\\[^\$])+ { yylval_param->val_str = mem_collector_strdup(mc,yytext); return RSTRING;} + /* ------------------------------------------------------------------------- */ /* Parse variables in the form: */ /* $VARIABLE */ @@ -86,13 +92,6 @@ <> { yylval_param->val_char = '\0'; BEGIN(INITIAL); return EOA;} - - /* ------------------------------------------------------------------------- */ - /* Just copy the string verbatim till we find a variable (starts with $) */ - /* ------------------------------------------------------------------------- */ - -[^\$]+ { yylval_param->val_str = mem_collector_strdup(mc,yytext); return RSTRING;} - %% int vm_var_wrap(yyscan_t scanner) From 2e8ed7896c4808a9b8d0fdc8d16db94486a7c018 Mon Sep 17 00:00:00 2001 From: "Ruben S. Montero" Date: Mon, 22 Oct 2018 17:55:15 +0200 Subject: [PATCH 04/11] F #2456: Regenerate VM attribute parsers (cherry picked from commit 28fedd7bb5b0ed0e9c76d116780b3947df915502) --- src/parsers/vm_var_parser.cc | 160 ++++++++++++++++++----------------- src/parsers/vm_var_parser.h | 2 +- 2 files changed, 83 insertions(+), 79 deletions(-) diff --git a/src/parsers/vm_var_parser.cc b/src/parsers/vm_var_parser.cc index bc78613da1..98b6e1bbcc 100644 --- a/src/parsers/vm_var_parser.cc +++ b/src/parsers/vm_var_parser.cc @@ -586,12 +586,12 @@ struct yy_trans_info flex_int32_t yy_verify; flex_int32_t yy_nxt; }; -static const flex_int16_t yy_accept[34] = +static const flex_int16_t yy_accept[36] = { 0, - 0, 0, 0, 0, 0, 0, 13, 11, 1, 10, - 10, 12, 9, 3, 6, 2, 4, 5, 12, 8, - 11, 0, 3, 2, 5, 3, 6, 2, 4, 0, - 7, 8, 0 + 0, 0, 0, 0, 0, 0, 13, 1, 2, 12, + 11, 11, 12, 10, 4, 7, 3, 5, 6, 12, + 9, 1, 0, 0, 4, 3, 6, 4, 7, 3, + 5, 0, 8, 9, 0 } ; static const YY_CHAR yy_ec[256] = @@ -605,7 +605,7 @@ static const YY_CHAR yy_ec[256] = 8, 1, 1, 1, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 9, 1, 10, 1, 11, 1, 7, 7, 7, 7, + 9, 10, 11, 1, 12, 1, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, @@ -626,52 +626,56 @@ static const YY_CHAR yy_ec[256] = 1, 1, 1, 1, 1 } ; -static const YY_CHAR yy_meta[12] = +static const YY_CHAR yy_meta[13] = { 0, 1, 1, 1, 1, 2, 1, 3, 1, 1, 1, - 3 + 1, 3 } ; -static const flex_int16_t yy_base[39] = +static const flex_int16_t yy_base[41] = { 0, - 41, 40, 0, 0, 8, 12, 44, 0, 47, 47, - 18, 47, 47, 41, 0, 40, 39, 47, 32, 20, - 0, 0, 23, 21, 47, 20, 0, 19, 16, 13, - 47, 7, 47, 28, 31, 34, 10, 37 + 0, 6, 16, 0, 25, 29, 45, 34, 59, 37, + 59, 35, 59, 59, 38, 0, 37, 36, 59, 31, + 27, 21, 25, 0, 13, 12, 59, 11, 0, 10, + 7, 4, 59, 0, 59, 46, 49, 52, 0, 55 } ; -static const flex_int16_t yy_def[39] = +static const flex_int16_t yy_def[41] = { 0, - 34, 34, 33, 3, 35, 35, 33, 36, 33, 33, - 33, 33, 33, 33, 37, 33, 33, 33, 38, 33, - 36, 11, 33, 33, 33, 33, 37, 33, 33, 38, - 33, 33, 0, 33, 33, 33, 33, 33 + 36, 36, 35, 3, 37, 37, 35, 38, 35, 38, + 35, 35, 35, 35, 35, 39, 35, 35, 35, 40, + 35, 38, 38, 12, 35, 35, 35, 35, 39, 35, + 35, 40, 35, 35, 0, 35, 35, 35, 35, 35 } ; -static const flex_int16_t yy_nxt[59] = +static const flex_int16_t yy_nxt[72] = { 0, - 10, 11, 12, 10, 13, 14, 15, 16, 17, 18, - 15, 19, 27, 32, 20, 19, 31, 29, 20, 22, - 28, 26, 28, 23, 26, 24, 32, 25, 8, 8, - 8, 12, 12, 12, 21, 31, 21, 30, 30, 30, - 29, 28, 26, 33, 9, 9, 7, 33, 33, 33, - 33, 33, 33, 33, 33, 33, 33, 33 + 35, 35, 29, 35, 9, 35, 34, 33, 31, 10, + 9, 30, 28, 30, 28, 10, 11, 12, 13, 11, + 14, 15, 16, 17, 18, 11, 19, 16, 20, 22, + 23, 21, 20, 34, 33, 21, 24, 31, 30, 28, + 25, 22, 26, 23, 35, 27, 8, 8, 8, 13, + 13, 13, 22, 35, 22, 32, 32, 32, 7, 35, + 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, + 35 } ; -static const flex_int16_t yy_chk[59] = +static const flex_int16_t yy_chk[72] = { 0, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 5, 37, 32, 5, 6, 30, 29, 6, 11, - 28, 26, 24, 11, 23, 11, 20, 11, 34, 34, - 34, 35, 35, 35, 36, 19, 36, 38, 38, 38, - 17, 16, 14, 7, 2, 1, 33, 33, 33, 33, - 33, 33, 33, 33, 33, 33, 33, 33 + 0, 0, 39, 0, 1, 0, 34, 32, 31, 1, + 2, 30, 28, 26, 25, 2, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 5, 23, + 22, 5, 6, 21, 20, 6, 12, 18, 17, 15, + 12, 10, 12, 8, 7, 12, 36, 36, 36, 37, + 37, 37, 38, 0, 38, 40, 40, 40, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, + 35 } ; /* Table of booleans, true if rule could match eol. */ static const flex_int32_t yy_rule_can_match_eol[13] = { 0, -0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, }; +1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, }; /* The intent behind this definition is that it'll catch * any uses of REJECT which flex missed. @@ -714,9 +718,9 @@ static const flex_int32_t yy_rule_can_match_eol[13] = #define YY_USER_ACTION llocp->first_line = yylineno; \ llocp->first_column = llocp->last_column; \ llocp->last_column += yyleng; -#line 717 "vm_var_parser.cc" +#line 721 "vm_var_parser.cc" -#line 719 "vm_var_parser.cc" +#line 723 "vm_var_parser.cc" #define INITIAL 0 #define VAR 1 @@ -995,11 +999,7 @@ YY_DECL #line 50 "vm_var_parser.l" /* ------------------------------------------------------------------------- */ - /* Parse variables in the form: */ - /* $VARIABLE */ - /* $VARIABLE[ATTR] */ - /* $VARIABLE[ATTR,ATTR=VALUE] */ - /* $NUM.CONTEXT_VARIABLE */ + /* Just copy the string verbatim till we find a variable (starts with $) */ /* ------------------------------------------------------------------------- */ #line 1005 "vm_var_parser.cc" @@ -1029,13 +1029,13 @@ yy_match: while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 34 ) + if ( yy_current_state >= 36 ) yy_c = yy_meta[yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; ++yy_cp; } - while ( yy_base[yy_current_state] != 47 ); + while ( yy_base[yy_current_state] != 59 ); yy_find_action: yy_act = yy_accept[yy_current_state]; @@ -1072,89 +1072,93 @@ do_action: /* This label is used only to access EOF actions. */ goto yy_find_action; case 1: +/* rule 1 can match eol */ YY_RULE_SETUP -#line 58 "vm_var_parser.l" -{ BEGIN VAR;} +#line 54 "vm_var_parser.l" +{ yylval_param->val_str = mem_collector_strdup(mc,yytext); return RSTRING;} YY_BREAK +/* ------------------------------------------------------------------------- */ +/* Parse variables in the form: */ +/* $VARIABLE */ +/* $VARIABLE[ATTR] */ +/* $VARIABLE[ATTR,ATTR=VALUE] */ +/* $NUM.CONTEXT_VARIABLE */ +/* ------------------------------------------------------------------------- */ case 2: YY_RULE_SETUP -#line 60 "vm_var_parser.l" -{ BEGIN VALUE; return EQUAL; } +#line 64 "vm_var_parser.l" +{ BEGIN VAR;} YY_BREAK case 3: YY_RULE_SETUP -#line 61 "vm_var_parser.l" -{ return COMMA;} +#line 66 "vm_var_parser.l" +{ BEGIN VALUE; return EQUAL; } YY_BREAK case 4: YY_RULE_SETUP -#line 62 "vm_var_parser.l" -{ return OBRACKET;} +#line 67 "vm_var_parser.l" +{ return COMMA;} YY_BREAK case 5: YY_RULE_SETUP -#line 63 "vm_var_parser.l" -{ return CBRACKET;} +#line 68 "vm_var_parser.l" +{ return OBRACKET;} YY_BREAK case 6: YY_RULE_SETUP -#line 65 "vm_var_parser.l" +#line 69 "vm_var_parser.l" +{ return CBRACKET;} + YY_BREAK +case 7: +YY_RULE_SETUP +#line 71 "vm_var_parser.l" { yylval_param->val_str = mem_collector_strdup(mc,yytext); return VARIABLE;} YY_BREAK -case 7: -/* rule 7 can match eol */ +case 8: +/* rule 8 can match eol */ YY_RULE_SETUP -#line 69 "vm_var_parser.l" +#line 75 "vm_var_parser.l" { yylval_param->val_str = mem_collector_strdup(mc,yytext+1); yylval_param->val_str[yyleng-2] = '\0'; BEGIN(VAR); return STRING;} YY_BREAK -case 8: +case 9: YY_RULE_SETUP -#line 75 "vm_var_parser.l" +#line 81 "vm_var_parser.l" { yylval_param->val_str = mem_collector_strdup(mc,yytext); BEGIN(VAR); return STRING;} YY_BREAK -case 9: +case 10: YY_RULE_SETUP -#line 80 "vm_var_parser.l" +#line 86 "vm_var_parser.l" { yylval_param->val_char = '\0'; return EOA;} YY_BREAK -case 10: +case 11: YY_RULE_SETUP -#line 83 "vm_var_parser.l" +#line 89 "vm_var_parser.l" { yylval_param->val_char = *yytext; BEGIN(INITIAL); return EOA;} YY_BREAK case YY_STATE_EOF(VAR): -#line 87 "vm_var_parser.l" +#line 93 "vm_var_parser.l" { yylval_param->val_char = '\0'; BEGIN(INITIAL); return EOA;} YY_BREAK -/* ------------------------------------------------------------------------- */ -/* Just copy the string verbatim till we find a variable (starts with $) */ -/* ------------------------------------------------------------------------- */ -case 11: -/* rule 11 can match eol */ -YY_RULE_SETUP -#line 95 "vm_var_parser.l" -{ yylval_param->val_str = mem_collector_strdup(mc,yytext); return RSTRING;} - YY_BREAK case 12: YY_RULE_SETUP -#line 97 "vm_var_parser.l" +#line 96 "vm_var_parser.l" ECHO; YY_BREAK -#line 1157 "vm_var_parser.cc" +#line 1161 "vm_var_parser.cc" case YY_STATE_EOF(INITIAL): case YY_STATE_EOF(VALUE): yyterminate(); @@ -1454,7 +1458,7 @@ static int yy_get_next_buffer (yyscan_t yyscanner) while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 34 ) + if ( yy_current_state >= 36 ) yy_c = yy_meta[yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; @@ -1483,11 +1487,11 @@ static int yy_get_next_buffer (yyscan_t yyscanner) while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 34 ) + if ( yy_current_state >= 36 ) yy_c = yy_meta[yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; - yy_is_jam = (yy_current_state == 33); + yy_is_jam = (yy_current_state == 35); (void)yyg; return yy_is_jam ? 0 : yy_current_state; @@ -2305,7 +2309,7 @@ void yyfree (void * ptr , yyscan_t yyscanner) #define YYTABLES_NAME "yytables" -#line 97 "vm_var_parser.l" +#line 96 "vm_var_parser.l" int vm_var_wrap(yyscan_t scanner) diff --git a/src/parsers/vm_var_parser.h b/src/parsers/vm_var_parser.h index b0764e7569..a2b85a73f2 100644 --- a/src/parsers/vm_var_parser.h +++ b/src/parsers/vm_var_parser.h @@ -711,7 +711,7 @@ extern int yylex \ #undef yyTABLES_NAME #endif -#line 97 "vm_var_parser.l" +#line 96 "vm_var_parser.l" #line 717 "vm_var_parser.h" From 57dd5f125404d6ecf0baeb1fbe276097ef9dfb6e Mon Sep 17 00:00:00 2001 From: Tino Vazquez Date: Mon, 22 Oct 2018 19:22:19 +0200 Subject: [PATCH 05/11] B #2526: improvement in vCenter VM monitoring Do not fail if VM does not have DS associated --- src/vmm_mad/remotes/lib/vcenter_driver/host.rb | 5 +++-- src/vmm_mad/remotes/lib/vcenter_driver/vm_template.rb | 7 ++++--- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/src/vmm_mad/remotes/lib/vcenter_driver/host.rb b/src/vmm_mad/remotes/lib/vcenter_driver/host.rb index 0d5ce10ce5..f9377c88fd 100644 --- a/src/vmm_mad/remotes/lib/vcenter_driver/host.rb +++ b/src/vmm_mad/remotes/lib/vcenter_driver/host.rb @@ -509,8 +509,9 @@ class ClusterComputeResource str_info << "POLL=\"#{vm.info.gsub('"', "\\\"")}\"]" rescue Exception => e - STDERR.puts e.inspect - STDERR.puts e.backtrace + tmp_str = e.inspect + tmp_str << e.backtrace.join("\n") + str_info << "ERROR=\"#{Base64.encode64(tmp_str).gsub("\n","")}\"]" end end diff --git a/src/vmm_mad/remotes/lib/vcenter_driver/vm_template.rb b/src/vmm_mad/remotes/lib/vcenter_driver/vm_template.rb index 982fe7650b..106328218d 100644 --- a/src/vmm_mad/remotes/lib/vcenter_driver/vm_template.rb +++ b/src/vmm_mad/remotes/lib/vcenter_driver/vm_template.rb @@ -806,12 +806,13 @@ class Template @state = 'POWEROFF' if @state == 'd' str << "IMPORT_STATE =\"#{@state}\"\n" - # Get DS information - if !@vm_info["datastore"].last._ref.nil? + # Get DS information + if !@vm_info["datastore"].nil? + !@vm_info["datastore"].last.nil? && + !@vm_info["datastore"].last._ref.nil? str << "VCENTER_DS_REF = \"#{@vm_info["datastore"].last._ref}\"\n" end - vnc_port = nil keymap = VCenterDriver::VIHelper.get_default("VM/TEMPLATE/GRAPHICS/KEYMAP") From fc934f2303f9f4d0a8b98032abbad789978988e5 Mon Sep 17 00:00:00 2001 From: Abel Coronado Date: Tue, 23 Oct 2018 09:59:25 +0200 Subject: [PATCH 06/11] B #2533: Impossible to instantiate a VM w/ RESTRICTED_ATTR DISK/SIZE (#2534) --- src/sunstone/public/app/utils/disks-resize.js | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/src/sunstone/public/app/utils/disks-resize.js b/src/sunstone/public/app/utils/disks-resize.js index 9122ad23e2..09ae93c05d 100644 --- a/src/sunstone/public/app/utils/disks-resize.js +++ b/src/sunstone/public/app/utils/disks-resize.js @@ -128,6 +128,7 @@ define(function(require){ "").appendTo($(".disksContainer", disksContext)); if (disks_base) { disks_base[disk_id].SIZE = disk.SIZE; + disks_base[disk_id].ORIGINAL_SIZE = disk.ORIGINAL_SIZE; diskContext.data("template_disk", disks_base[disk_id]); } @@ -223,14 +224,20 @@ define(function(require){ $(".diskContainer", context).each(function(){ if ($(this).data("template_disk")) { disk = $(this).data("template_disk"); - var fields = WizardFields.retrieve(this); - var size = $.extend(true, [], fields.SIZE); - var size = size.join(""); - var diskAux = $.extend(true, {}, disk); - diskAux["SIZE"] = fields.SIZE; - disks.push(diskAux); + if (disk["SIZE"] && fields["SIZE"] && disk["ORIGINAL_SIZE"] === fields["SIZE"] && fields["SIZE"] === disk["SIZE"]){ + if (disk["IMAGE_ID"] || disk["IMAGE_NAME"]){ + delete disk["SIZE"]; + } + delete disk["ORIGINAL_SIZE"]; + disks.push(disk); + } else { + var diskAux = $.extend(true, {}, disk); + diskAux["SIZE"] = fields["SIZE"]; + delete diskAux["ORIGINAL_SIZE"]; + disks.push(diskAux); + } } }); From 63cd7c78536b2782812305be575e91ae0e674c3f Mon Sep 17 00:00:00 2001 From: Jan Orel Date: Tue, 23 Oct 2018 12:23:05 +0200 Subject: [PATCH 07/11] B #2179 Report RSS + swap usage for KVM VMs _max_memory_ is always equal to Available because: 1. the memballoon is not used for resizing VM memory 2. the memballoon stats reporting is not enabled by default: ``` ``` (cherry picked from commit 92d1ff6b11b3adf0c3d7e98e57ce2555c077e694) --- src/vmm_mad/remotes/kvm/poll | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/src/vmm_mad/remotes/kvm/poll b/src/vmm_mad/remotes/kvm/poll index 16cf18fab0..1e3de34db0 100755 --- a/src/vmm_mad/remotes/kvm/poll +++ b/src/vmm_mad/remotes/kvm/poll @@ -80,13 +80,13 @@ module KVM cpu = get_cpu_info({one_vm => vm}) resident_mem = psinfo[5].to_i - max_mem = dominfo['Max memory'].split(/\s+/).first.to_i + swap_mem = get_swap_usage(vm[:pid]).to_i values=Hash.new values[:state] = get_state(dominfo['State'], vm[:reason]) values[:cpu] = cpu[vm[:pid]] if cpu[vm[:pid]] - values[:memory] = [resident_mem, max_mem].max + values[:memory] = resident_mem + swap_mem xml = dump_xml(one_vm) @@ -139,13 +139,13 @@ module KVM dominfo = vm[:dominfo] resident_mem = ps_data[5].to_i - max_mem = dominfo['Max memory'].split(/\s+/).first.to_i + swap_mem = get_swap_usage(vm[:pid]).to_i values = Hash.new values[:state] = get_state(dominfo['State'], vm[:reason]) values[:cpu] = cpu[vm[:pid]] if cpu[vm[:pid]] - values[:memory] = [resident_mem, max_mem].max + values[:memory] = resident_mem + swap_mem xml = dump_xml(name) @@ -243,6 +243,14 @@ module KVM ps.split(/\s+/) end + # Gets the swap allocation of given process + # @param pid [String] process id + # @return [Integer] of swap allocation of given process + def self.get_swap_usage(pid) + swap=`cat /proc/#{pid}/status 2>/dev/null | grep VmSwap` + swap.split()[1] || 0 + end + # Gets the info of a domain by its id # @param the ID of the VM as defined in libvirt # @return [Hash] with the output of virsh dominfo, indexed by name (Id...) From c82dbb54dc01fb48dd7b704c843f23201bed7dba Mon Sep 17 00:00:00 2001 From: Jan Orel Date: Tue, 23 Oct 2018 12:25:44 +0200 Subject: [PATCH 08/11] B #2438 Try blockcopy, fsfreeze or suspend first in ssh/cpds (#2528) (cherry picked from commit c0f3bd79a77e8c1ccc2150bf3395095beac4c5ad) --- src/tm_mad/ssh/cpds | 77 +++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 75 insertions(+), 2 deletions(-) diff --git a/src/tm_mad/ssh/cpds b/src/tm_mad/ssh/cpds index ae542c4b8b..c48bf58cb1 100755 --- a/src/tm_mad/ssh/cpds +++ b/src/tm_mad/ssh/cpds @@ -22,6 +22,7 @@ # - host is the target host to deploy the VM # - remote_system_ds is the path for the system datastore in the host # - snapid is the snapshot id. "-1" for none +# - dsid is the target datastore SRC=$1 DST=$2 @@ -35,14 +36,86 @@ else TMCOMMON=$ONE_LOCATION/var/remotes/tm/tm_common.sh fi +DRIVER_PATH=$(dirname $0) + . $TMCOMMON +. ${DRIVER_PATH}/../../etc/vmm/kvm/kvmrc + +#------------------------------------------------------------------------------- +# Get Image information +#------------------------------------------------------------------------------- + +DISK_ID=$(basename ${SRC} | cut -d. -f2) + +XPATH="${DRIVER_PATH}/../../datastore/xpath.rb --stdin" + +unset i j XPATH_ELEMENTS + +while IFS= read -r -d '' element; do + XPATH_ELEMENTS[i++]="$element" +done < <(onevm show -x $VMID| $XPATH \ + /VM/DEPLOY_ID \ + /VM/LCM_STATE \ + /VM/TEMPLATE/DISK[DISK_ID=$DISK_ID]/TARGET) + +DEPLOY_ID="${XPATH_ELEMENTS[j++]}" +LCM_STATE="${XPATH_ELEMENTS[j++]}" +DISK_TARGET="${XPATH_ELEMENTS[j++]}" + +#------------------------------------------------------------------------------- +# Set src path +#------------------------------------------------------------------------------- + +SRC_PATH=`arg_path $SRC` +SRC_HOST=`arg_host $SRC` +SRC_TEMP_PATH=$(mktemp -u ${SRC_PATH}.XXXXXXXX) + +if [ "${SNAP_ID}" != "-1" ]; then + SRC="${SRC}.snap/${SNAP_ID}" +fi #------------------------------------------------------------------------------- # Move the image back to the datastore #------------------------------------------------------------------------------- +# For current image of the running VMs, don't touch the image directly, +# but export the content via blockcopy. If that's not possible (old QEMU), +# domfsfreeze or suspend the domain before. -if [ "${SNAP_ID}" != "-1" ]; then - SRC="${SRC}.snap/${SNAP_ID}" +if [ "${LCM_STATE}" = '26' ] && [ "${SNAP_ID}" = '-1' ]; then + log "VM is running, trying blockcopy, fsfreeze, suspend" + + CPDS_CMD_EXPORT=$(cat <&2 + exit 1 + fi +fi +EOF +) + + CPDS_CMD_ERR="Error creating export for domain ${DEPLOY_ID} of disk ${DISK_TARGET} at ${SRC_TEMP_PATH}" + + # Always try delete temp export + trap "ssh_exec_and_log $SRC_HOST \"$RM ${SRC_TEMP_PATH}\"" EXIT TERM INT HUP + + if ssh_exec_and_log_no_error $SRC_HOST "$CPDS_CMD_EXPORT" "$CPDS_CMD_ERR"; then + # Export creation succeeded, point SRC there + SRC="${SRC_HOST}:${SRC_TEMP_PATH}" + else + log_error "Exporting failed" + exit 1 + fi fi log "Moving $SRC to datastore as $DST" From 3bc813ff7ac8c87a510cd6ba642db51171eae45f Mon Sep 17 00:00:00 2001 From: Abel Coronado Date: Wed, 24 Oct 2018 11:06:26 +0200 Subject: [PATCH 09/11] B #1333: Case (in)sensitive labels (#2475) --- src/sunstone/public/app/utils/labels/utils.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/sunstone/public/app/utils/labels/utils.js b/src/sunstone/public/app/utils/labels/utils.js index 4f5e5915c0..07a07364b1 100644 --- a/src/sunstone/public/app/utils/labels/utils.js +++ b/src/sunstone/public/app/utils/labels/utils.js @@ -294,7 +294,7 @@ define(function (require) { labelsDropdown.on('keypress', '.newLabelInput', function (e) { var ev = e || window.event; var key = ev.keyCode; - var labelName = $(this).val(); + var labelName = $(this).val().trim(); if (key == 13 && !ev.altKey && labelName != '') { var labelsArray, labelIndex; From e9805a788be50a13b2489f2a6a08adfc0598a657 Mon Sep 17 00:00:00 2001 From: Jose Angel Garrido Montoya Date: Thu, 25 Oct 2018 09:50:36 +0200 Subject: [PATCH 10/11] F #1089 Allow creation of Empty disk image for type OS --- .../public/app/tabs/images-tab/form-panels/create-common.js | 1 + .../public/app/tabs/images-tab/form-panels/create/wizard.hbs | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/sunstone/public/app/tabs/images-tab/form-panels/create-common.js b/src/sunstone/public/app/tabs/images-tab/form-panels/create-common.js index fbf7d38024..f7009624db 100644 --- a/src/sunstone/public/app/tabs/images-tab/form-panels/create-common.js +++ b/src/sunstone/public/app/tabs/images-tab/form-panels/create-common.js @@ -138,6 +138,7 @@ define(function(require) { var value = $(this).val(); switch (value){ case "DATABLOCK": + case "OS": $('#datablock_img', context).removeAttr("disabled"); break; default: diff --git a/src/sunstone/public/app/tabs/images-tab/form-panels/create/wizard.hbs b/src/sunstone/public/app/tabs/images-tab/form-panels/create/wizard.hbs index ada1f491a6..a32261a5dd 100644 --- a/src/sunstone/public/app/tabs/images-tab/form-panels/create/wizard.hbs +++ b/src/sunstone/public/app/tabs/images-tab/form-panels/create/wizard.hbs @@ -85,7 +85,7 @@ {{#if images}} - + {{/if}} From 9a99332aec0b76673f94c6cab620fca980345252 Mon Sep 17 00:00:00 2001 From: "Ruben S. Montero" Date: Thu, 25 Oct 2018 10:56:48 +0200 Subject: [PATCH 11/11] F #2427: Default to different vnets for VM NICS. Add new configuration attributes to sched.conf --- src/scheduler/etc/sched.conf | 27 +++++++++++++++++--- src/scheduler/src/sched/Scheduler.cc | 17 +----------- src/scheduler/src/sched/SchedulerTemplate.cc | 2 +- 3 files changed, 25 insertions(+), 21 deletions(-) diff --git a/src/scheduler/etc/sched.conf b/src/scheduler/etc/sched.conf index 9bbc074590..a7d97656a8 100644 --- a/src/scheduler/etc/sched.conf +++ b/src/scheduler/etc/sched.conf @@ -33,8 +33,8 @@ # 2 = Load-aware. Heuristic that tries to maximize resources available for # the VMs by using those nodes with less load # 3 = Custom. -# - rank: Custom arithmetic expression to rank suitable hosts based in their -# attributes +# - rank: Custom arithmetic expression to rank suitable hosts based in +# their attributes # 4 = Fixed. Hosts will be ranked according to the PRIORITY attribute found # in the Host or Cluster template. # @@ -45,11 +45,24 @@ # 1 = Striping. Tries to optimize I/O by distributing the VMs across # datastores. # 2 = Custom. -# - rank: Custom arithmetic exprission to rank suitable datastores based on -# their attributes +# - rank: Custom arithmetic exprission to rank suitable datastores based +# on their attributes # 3 = Fixed. Datastores will be ranked according to the PRIORITY attribute # found in the Datastore template. # +# DEFAULT_NIC_SCHED: Definition of the default virtual network scheduler +# - policy: +# 0 = Packing. Tries to pack address usage by selecting the VNET with +# less free leases +# 1 = Striping. Tries to distribute address usage across VNETs. +# 2 = Custom. +# - rank: Custom arithmetic exprission to rank suitable datastores based +# on their attributes +# 3 = Fixed. Virtual Networks will be ranked according to the PRIORITY +# attribute found in the Virtual Network template. +# +# DIFFERENT_VNETS: When set (YES) the NICs of a VM will be forced to be in +# different Virtual Networks. # # LOG: Configuration for the logging system # - system: defines the logging system: @@ -87,6 +100,8 @@ LIVE_RESCHEDS = 0 MEMORY_SYSTEM_DS_SCALE = 0 +DIFFERENT_VNETS = YES + DEFAULT_SCHED = [ policy = 1 ] @@ -95,6 +110,10 @@ DEFAULT_DS_SCHED = [ policy = 1 ] +DEFAULT_NIC_SCHED = [ + policy = 1 +] + #DEFAULT_SCHED = [ # policy = 3, # rank = "- (RUNNING_VMS * 50 + FREE_CPU)" diff --git a/src/scheduler/src/sched/Scheduler.cc b/src/scheduler/src/sched/Scheduler.cc index 805468a849..354bbea1ba 100644 --- a/src/scheduler/src/sched/Scheduler.cc +++ b/src/scheduler/src/sched/Scheduler.cc @@ -108,7 +108,6 @@ void Scheduler::start() ostringstream oss; string etc_path; - string diff_vnets_str; unsigned int live_rescheds; @@ -158,21 +157,7 @@ void Scheduler::start() conf.get("MEMORY_SYSTEM_DS_SCALE", mem_ds_scale); - conf.get("DIFFERENT_VNETS", diff_vnets_str); - - one_util::toupper(diff_vnets_str); - - if (diff_vnets_str != "" ) - { - if ( diff_vnets_str == "NO" ) - { - diff_vnets = false; - } - else if ( diff_vnets_str == "YES" ) - { - diff_vnets = true; - } - } + conf.get("DIFFERENT_VNETS", diff_vnets); // ----------------------------------------------------------- // Log system & Configuration File diff --git a/src/scheduler/src/sched/SchedulerTemplate.cc b/src/scheduler/src/sched/SchedulerTemplate.cc index eca98cb8b5..04659ece83 100644 --- a/src/scheduler/src/sched/SchedulerTemplate.cc +++ b/src/scheduler/src/sched/SchedulerTemplate.cc @@ -123,7 +123,7 @@ void SchedulerTemplate::set_conf_default() conf_default.insert(make_pair(attribute->name(),attribute)); //DIFFERENT_VNETS - value = "NO"; + value = "YES"; attribute = new SingleAttribute("DIFFERENT_VNETS",value); conf_default.insert(make_pair(attribute->name(),attribute));