public DomainWrapper cloneWithBackingStore(String cloneName, List<Filesystem> mappings) {
logger.info("Creating clone from {}", getName());
try {
Document cloneXmlDocument = domainXml.clone();
setDomainName(cloneXmlDocument, cloneName);
prepareForCloning(cloneXmlDocument);
updateCloneMetadata(cloneXmlDocument, getName(), new Date());
cloneDisks(cloneXmlDocument, cloneName);
updateFilesystemMappings(cloneXmlDocument, mappings);
String cloneXml = documentToString(cloneXmlDocument);
logger.debug("Clone xml={}", cloneXml);
Domain cloneDomain = domain.getConnect().domainDefineXML(cloneXml);
String createdCloneXml = cloneDomain.getXMLDesc(0);
logger.debug("Created clone xml: {}", createdCloneXml);
cloneDomain.create();
logger.debug("Starting clone: '{}'", cloneDomain.getName());
return newWrapper(cloneDomain);
} catch (IOException | LibvirtException e) {
throw new LibvirtRuntimeException("Unable to clone domain", e);
}
}