Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -149,7 +149,11 @@ Use VIR_DOMAIN_XML_SECURE (value = 1) prior to v1.0.0.

final String target = command.getDestinationIp();
xmlDesc = dm.getXMLDesc(xmlFlag);
xmlDesc = replaceIpForVNCInDescFile(xmlDesc, target);

// Limit the VNC password in case the length is greater than 8 characters
// Since libvirt version 8 VNC passwords are limited to 8 characters
String vncPassword = org.apache.commons.lang3.StringUtils.truncate(to.getVncPassword(), 8);
xmlDesc = replaceIpForVNCInDescFileAndNormalizePassword(xmlDesc, target, vncPassword);
Comment on lines +153 to +156
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

separate methos?

Suggested change
// Limit the VNC password in case the length is greater than 8 characters
// Since libvirt version 8 VNC passwords are limited to 8 characters
String vncPassword = org.apache.commons.lang3.StringUtils.truncate(to.getVncPassword(), 8);
xmlDesc = replaceIpForVNCInDescFileAndNormalizePassword(xmlDesc, target, vncPassword);
/**
* Limit the VNC password in case the length is greater than 8 characters
* Since libvirt version 8 VNC passwords are limited to 8 characters
*/
private XmlDescOrSuchAThing getXmlDesc(....) {
String vncPassword = org.apache.commons.lang3.StringUtils.truncate(to.getVncPassword(), 8);
return replaceIpForVNCInDescFileAndNormalizePassword(xmlDesc, target, vncPassword);
}


String oldIsoVolumePath = getOldVolumePath(disks, vmName);
String newIsoVolumePath = getNewVolumePathIfDatastoreHasChanged(libvirtComputingResource, conn, to);
Expand Down Expand Up @@ -450,16 +454,20 @@ protected MigrateDiskInfo searchDiskDefOnMigrateDiskInfoList(List<MigrateDiskInf
* </graphics>
* @param xmlDesc the qemu xml description
* @param target the ip address to migrate to
* @param vncPassword if set, the VNC password truncated to 8 characters
* @return the new xmlDesc
*/
String replaceIpForVNCInDescFile(String xmlDesc, final String target) {
String replaceIpForVNCInDescFileAndNormalizePassword(String xmlDesc, final String target, String vncPassword) {
final int begin = xmlDesc.indexOf(GRAPHICS_ELEM_START);
if (begin >= 0) {
final int end = xmlDesc.lastIndexOf(GRAPHICS_ELEM_END) + GRAPHICS_ELEM_END.length();
if (end > begin) {
String graphElem = xmlDesc.substring(begin, end);
graphElem = graphElem.replaceAll("listen='[a-zA-Z0-9\\.]*'", "listen='" + target + "'");
graphElem = graphElem.replaceAll("address='[a-zA-Z0-9\\.]*'", "address='" + target + "'");
if (org.apache.commons.lang3.StringUtils.isNotBlank(vncPassword)) {
graphElem = graphElem.replaceAll("passwd='([^\\s]+)'", "passwd='" + vncPassword + "'");
}
xmlDesc = xmlDesc.replaceAll(GRAPHICS_ELEM_START + CONTENTS_WILDCARD + GRAPHICS_ELEM_END, graphElem);
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -571,53 +571,55 @@ public void setup() throws Exception {
@Test
public void testReplaceIpForVNCInDescFile() {
final String targetIp = "192.168.22.21";
final String result = libvirtMigrateCmdWrapper.replaceIpForVNCInDescFile(fullfile, targetIp);
final String result = libvirtMigrateCmdWrapper.replaceIpForVNCInDescFileAndNormalizePassword(fullfile, targetIp, null);
assertTrue("transformation does not live up to expectation:\n" + result, targetfile.equals(result));
}

@Test
public void testReplaceIpForVNCInDesc() {
public void testReplaceIpAndPasswordForVNCInDesc() {
final String xmlDesc =
"<domain type='kvm' id='3'>" +
" <devices>" +
" <graphics type='vnc' port='5900' autoport='yes' listen='10.10.10.1'>" +
" <graphics type='vnc' port='5900' autoport='yes' listen='10.10.10.1' passwd='123456789012345'>" +
" <listen type='address' address='10.10.10.1'/>" +
" </graphics>" +
" </devices>" +
"</domain>";
final String expectedXmlDesc =
"<domain type='kvm' id='3'>" +
" <devices>" +
" <graphics type='vnc' port='5900' autoport='yes' listen='10.10.10.10'>" +
" <graphics type='vnc' port='5900' autoport='yes' listen='10.10.10.10' passwd='12345678'>" +
" <listen type='address' address='10.10.10.10'/>" +
" </graphics>" +
" </devices>" +
"</domain>";
final String targetIp = "10.10.10.10";
final String result = libvirtMigrateCmdWrapper.replaceIpForVNCInDescFile(xmlDesc, targetIp);
final String password = "12345678";
final String result = libvirtMigrateCmdWrapper.replaceIpForVNCInDescFileAndNormalizePassword(xmlDesc, targetIp, password);
assertTrue("transformation does not live up to expectation:\n" + result, expectedXmlDesc.equals(result));
}

@Test
public void testReplaceFqdnForVNCInDesc() {
public void testReplaceFqdnAndPasswordForVNCInDesc() {
final String xmlDesc =
"<domain type='kvm' id='3'>" +
" <devices>" +
" <graphics type='vnc' port='5900' autoport='yes' listen='localhost.local'>" +
" <graphics type='vnc' port='5900' autoport='yes' listen='localhost.local' passwd='123456789012345'>" +
" <listen type='address' address='localhost.local'/>" +
" </graphics>" +
" </devices>" +
"</domain>";
final String expectedXmlDesc =
"<domain type='kvm' id='3'>" +
" <devices>" +
" <graphics type='vnc' port='5900' autoport='yes' listen='localhost.localdomain'>" +
" <graphics type='vnc' port='5900' autoport='yes' listen='localhost.localdomain' passwd='12345678'>" +
" <listen type='address' address='localhost.localdomain'/>" +
" </graphics>" +
" </devices>" +
"</domain>";
final String targetIp = "localhost.localdomain";
final String result = libvirtMigrateCmdWrapper.replaceIpForVNCInDescFile(xmlDesc, targetIp);
final String password = "12345678";
final String result = libvirtMigrateCmdWrapper.replaceIpForVNCInDescFileAndNormalizePassword(xmlDesc, targetIp, password);
assertTrue("transformation does not live up to expectation:\n" + result, expectedXmlDesc.equals(result));
}

Expand Down Expand Up @@ -789,5 +791,4 @@ public void testReplaceDPDKPorts() throws ParserConfigurationException, IOExcept
Assert.assertTrue(replaced.contains("csdpdk-7"));
Assert.assertFalse(replaced.contains("csdpdk-1"));
}

}