1
0
mirror of https://github.com/OpenNebula/one.git synced 2025-02-03 13:47:01 +03:00

F #911: call reconfigure when detaching a nic/alias.

This commit is contained in:
Alejandro Huertas Herrero 2019-01-14 11:33:53 +01:00 committed by Ruben S. Montero
parent 6f59f41de2
commit e65dd8c251
3 changed files with 64 additions and 7 deletions

View File

@ -1068,9 +1068,25 @@ VM_RESTRICTED_ATTR = "NIC/OPENNEBULA_MANAGED"
VM_RESTRICTED_ATTR = "NIC/VCENTER_INSTANCE_ID"
VM_RESTRICTED_ATTR = "NIC/VCENTER_NET_REF"
VM_RESTRICTED_ATTR = "NIC/VCENTER_PORTGROUP_TYPE"
VM_RESTRICTED_ATTR = "NIC/EXTERNAL"
VM_RESTRICTED_ATTR = "NIC_ALIAS/MAC"
VM_RESTRICTED_ATTR = "NIC_ALIAS/VLAN_ID"
VM_RESTRICTED_ATTR = "NIC_ALIAS/BRIDGE"
VM_RESTRICTED_ATTR = "NIC_ALIAS/INBOUND_AVG_BW"
VM_RESTRICTED_ATTR = "NIC_ALIAS/INBOUND_PEAK_BW"
VM_RESTRICTED_ATTR = "NIC_ALIAS/INBOUND_PEAK_KB"
VM_RESTRICTED_ATTR = "NIC_ALIAS/OUTBOUND_AVG_BW"
VM_RESTRICTED_ATTR = "NIC_ALIAS/OUTBOUND_PEAK_BW"
VM_RESTRICTED_ATTR = "NIC_ALIAS/OUTBOUND_PEAK_KB"
VM_RESTRICTED_ATTR = "NIC_ALIAS/OPENNEBULA_MANAGED"
VM_RESTRICTED_ATTR = "NIC_ALIAS/VCENTER_INSTANCE_ID"
VM_RESTRICTED_ATTR = "NIC_ALIAS/VCENTER_NET_REF"
VM_RESTRICTED_ATTR = "NIC_ALIAS/VCENTER_PORTGROUP_TYPE"
VM_RESTRICTED_ATTR = "NIC_ALIAS/EXTERNAL"
VM_RESTRICTED_ATTR = "NIC_DEFAULT/MAC"
VM_RESTRICTED_ATTR = "NIC_DEFAULT/VLAN_ID"
VM_RESTRICTED_ATTR = "NIC_DEFAULT/BRIDGE"
VM_RESTRICTED_ATTR = "NIC_DEFAULT/EXTERNAL"
VM_RESTRICTED_ATTR = "DISK/TOTAL_BYTES_SEC"
VM_RESTRICTED_ATTR = "DISK/TOTAL_BYTES_SEC_MAX_LENGTH"
VM_RESTRICTED_ATTR = "DISK/TOTAL_BYTES_SEC_MAX"
@ -1141,6 +1157,8 @@ VNET_RESTRICTED_ATTR = "AR/FILTER_MAC_SPOOFING"
VNET_RESTRICTED_ATTR = "CLUSTER_IDS"
VNET_RESTRICTED_ATTR = "EXTERNAL"
#*******************************************************************************
# Inherited Attributes Configuration
#*******************************************************************************
@ -1209,6 +1227,7 @@ INHERIT_VNET_ATTR = "CONF"
INHERIT_VNET_ATTR = "BRIDGE_CONF"
INHERIT_VNET_ATTR = "OVS_BRIDGE_CONF"
INHERIT_VNET_ATTR = "IP_LINK_CONF"
INHERIT_VNET_ATTR = "EXTERNAL"
INHERIT_VNET_ATTR = "VCENTER_NET_REF"
INHERIT_VNET_ATTR = "VCENTER_SWITCH_NAME"

View File

@ -2408,6 +2408,9 @@ void VirtualMachineManager::detach_nic_action(
string vm_tmpl;
string * drv_msg;
string error_str;
string prolog_cmd;
string disk_path;
string password;
// Get the VM from the pool
vm = vmpool->get(vid);
@ -2430,6 +2433,11 @@ void VirtualMachineManager::detach_nic_action(
goto error_driver;
}
if ( do_context_command(vm, password, prolog_cmd, disk_path) == -1 )
{
goto error_no_tm_command;
}
// Invoke driver method
drv_msg = format_message(
vm->get_hostname(),
@ -2438,9 +2446,9 @@ void VirtualMachineManager::detach_nic_action(
"",
"",
"",
prolog_cmd,
"",
"",
"",
disk_path,
vm->to_xml(vm_tmpl),
vm->get_ds_id(),
-1);
@ -2463,6 +2471,11 @@ error_driver:
os << "detach_nic_action, error getting driver " << vm->get_vmm_mad();
goto error_common;
error_no_tm_command:
os.str("");
os << "Cannot set context disk to update it for VM " << vm->get_oid();
goto error_common;
error_common:
Nebula &ne = Nebula::instance();
LifeCycleManager * lcm = ne.get_lcm();

View File

@ -1015,6 +1015,15 @@ class ExecDriver < VirtualMachineDriver
action = ACTION[:detach_nic]
xml_data = decode(drv_message)
tm_command = xml_data.elements['TM_COMMAND']
tm_command = tm_command.text if tm_command
target_path = xml_data.elements['DISK_TARGET_PATH']
target_path = target_path.text if target_path
target_device = xml_data.elements['VM/TEMPLATE/CONTEXT/TARGET']
target_device = target_device.text if target_device
nic_alias = false
external = false
@ -1036,6 +1045,8 @@ class ExecDriver < VirtualMachineDriver
return
end
action = VmmAction.new(self, id, :detach_nic, drv_message)
if !nic_alias
steps=[
# Detach the NIC
@ -1062,13 +1073,27 @@ class ExecDriver < VirtualMachineDriver
steps = []
end
if steps.empty?
send_message(action, RESULT[:success], id, "")
else
action = VmmAction.new(self, id, :detach_nic, drv_message)
steps << {
:driver => :vmm,
:action => :prereconfigure,
:parameters => [:deploy_id, target_device]
}
action.run(steps)
if tm_command && !tm_command.empty?
steps << {
:driver => :tm,
:action => :tm_context,
:parameters => tm_command.strip.split(' ')
}
end
steps << {
:driver => :vmm,
:action => :reconfigure,
:parameters => [:deploy_id, target_device, target_path]
}
action.run(steps)
end
#