diff --git a/src/vm/VirtualMachineParser.cc b/src/vm/VirtualMachineParser.cc index 832d760c9b..cca9beea0f 100644 --- a/src/vm/VirtualMachineParser.cc +++ b/src/vm/VirtualMachineParser.cc @@ -418,10 +418,11 @@ int VirtualMachine::parse_graphics(string& error_str, Template * tmpl) } } - string random_passwd = graphics->vector_value("RANDOM_PASSWD"); + bool random_passwd; + graphics->vector_value("RANDOM_PASSWD", random_passwd); string password = graphics->vector_value("PASSWD"); - if ( !random_passwd.empty() && password.empty() ) + if ( random_passwd && password.empty() ) { password = one_util::random_password(); diff --git a/src/vmm/LibVirtDriverKVM.cc b/src/vmm/LibVirtDriverKVM.cc index b6b943ea27..843019e4ea 100644 --- a/src/vmm/LibVirtDriverKVM.cc +++ b/src/vmm/LibVirtDriverKVM.cc @@ -536,12 +536,6 @@ int LibVirtDriver::deployment_description_kvm( const VectorAttribute * graphics; - string listen = ""; - string port = ""; - string passwd = ""; - string keymap = ""; - string spice_options = ""; - const VectorAttribute * input; vector pci; @@ -1589,11 +1583,33 @@ int LibVirtDriver::deployment_description_kvm( if ( graphics != 0 ) { - type = graphics->vector_value("TYPE"); - listen = graphics->vector_value("LISTEN"); + string listen; + string port; + string passwd; + string keymap; + string spice_options; + bool random_passwrd; + + get_attribute(vm, host, cluster, "GRAPHICS", "TYPE", type); + get_attribute(vm, host, cluster, "GRAPHICS", "LISTEN", listen); + get_attribute(vm, host, cluster, "GRAPHICS", "PASSWD", passwd); + get_attribute(vm, host, cluster, "GRAPHICS", "KEYMAP", keymap); + get_attribute(vm, host, cluster, "GRAPHICS", "RANDOM_PASSWD", random_passwrd); + port = graphics->vector_value("PORT"); - passwd = graphics->vector_value("PASSWD"); - keymap = graphics->vector_value("KEYMAP"); + + if ( random_passwrd && passwd.empty()) + { + passwd = one_util::random_password(); + + if ( graphics->vector_value("TYPE") == "SPICE" ) + { + // Spice password must be 60 characters maximum + passwd = passwd.substr(0, 59); + } + + const_cast(graphics)->replace("PASSWD", passwd); + } one_util::tolower(type); diff --git a/src/vmm_mad/exec/vmm_exec_kvm.conf b/src/vmm_mad/exec/vmm_exec_kvm.conf index d491aeb80d..8c55705226 100644 --- a/src/vmm_mad/exec/vmm_exec_kvm.conf +++ b/src/vmm_mad/exec/vmm_exec_kvm.conf @@ -21,6 +21,7 @@ # - os [kernel,initrd,boot,root,kernel_cmd,arch,machine,sd_disk_bus] # - vcpu # - memory_slots: number of memory slots for hotplug memory +# - graphics [type, listen, passwd, keymap, random_passwd] # - features [acpi, pae, apic, hyperv, localtime, guest_agent, virtio_scsi_queues, iothreads] # - cpu_model [model] # - disk [driver, cache, io, discard, total_bytes_sec, total_iops_sec, read_bytes_sec, write_bytes_sec, read_iops_sec, write_iops_sec, size_iops_sec] @@ -62,6 +63,14 @@ NIC = [ # FILTER = "clean-traffic" ] +# GRAPHICS = [ +# TYPE = "vnc", +# LISTEN = "0.0.0.0", +# PASSWD = "", +# KEYMAP = "", +# RANDOM_PASSWD = "YES" +# ] + #RAW = "" HYPERV_OPTIONS = ""