1616// under the License.
1717package com .cloud .hypervisor .vmware .mo ;
1818
19- import java .io .File ;
20- import java .net .URI ;
21- import java .net .URISyntaxException ;
22- import java .security .InvalidParameterException ;
23- import java .util .ArrayList ;
24- import java .util .Arrays ;
25- import java .util .List ;
26- import java .util .Map ;
27-
28- import org .apache .log4j .Logger ;
29-
3019import com .cloud .exception .CloudException ;
3120import com .cloud .hypervisor .vmware .util .VmwareContext ;
3221import com .cloud .hypervisor .vmware .util .VmwareHelper ;
9281import com .vmware .vim25 .VmwareDistributedVirtualSwitchPvlanSpec ;
9382import com .vmware .vim25 .VmwareDistributedVirtualSwitchVlanIdSpec ;
9483import com .vmware .vim25 .VmwareDistributedVirtualSwitchVlanSpec ;
84+ import org .apache .log4j .Logger ;
85+ import org .w3c .dom .Document ;
86+ import org .w3c .dom .Element ;
87+ import org .w3c .dom .Node ;
88+ import org .w3c .dom .traversal .DocumentTraversal ;
89+ import org .w3c .dom .traversal .NodeFilter ;
90+ import org .w3c .dom .traversal .NodeIterator ;
91+ import org .xml .sax .SAXException ;
92+
93+ import javax .xml .parsers .DocumentBuilderFactory ;
94+ import javax .xml .parsers .ParserConfigurationException ;
95+ import javax .xml .transform .Transformer ;
96+ import javax .xml .transform .TransformerException ;
97+ import javax .xml .transform .TransformerFactory ;
98+ import javax .xml .transform .dom .DOMSource ;
99+ import javax .xml .transform .stream .StreamResult ;
100+ import java .io .ByteArrayInputStream ;
101+ import java .io .File ;
102+ import java .io .IOException ;
103+ import java .io .StringWriter ;
104+ import java .net .URI ;
105+ import java .net .URISyntaxException ;
106+ import java .security .InvalidParameterException ;
107+ import java .util .ArrayList ;
108+ import java .util .Arrays ;
109+ import java .util .List ;
110+ import java .util .Map ;
95111
96112public class HypervisorHostHelper {
97113 private static final Logger s_logger = Logger .getLogger (HypervisorHostHelper .class );
@@ -1477,6 +1493,40 @@ public static String resolveHostNameInUrl(DatacenterMO dcMo, String url) {
14771493 return url ;
14781494 }
14791495
1496+ public static String removeOVFNetwork (final String ovfString ) {
1497+ if (ovfString == null || ovfString .isEmpty ()) {
1498+ return ovfString ;
1499+ }
1500+ try {
1501+ final DocumentBuilderFactory factory = DocumentBuilderFactory .newInstance ();
1502+ final Document doc = factory .newDocumentBuilder ().parse (new ByteArrayInputStream (ovfString .getBytes ()));
1503+ final DocumentTraversal traversal = (DocumentTraversal ) doc ;
1504+ final NodeIterator iterator = traversal .createNodeIterator (doc .getDocumentElement (), NodeFilter .SHOW_ELEMENT , null , true );
1505+ for (Node n = iterator .nextNode (); n != null ; n = iterator .nextNode ()) {
1506+ final Element e = (Element ) n ;
1507+ if ("NetworkSection" .equals (e .getTagName ())) {
1508+ if (e .getParentNode () != null ) {
1509+ e .getParentNode ().removeChild (e );
1510+ }
1511+ } else if ("rasd:Connection" .equals (e .getTagName ())) {
1512+ if (e .getParentNode () != null && e .getParentNode ().getParentNode () != null ) {
1513+ e .getParentNode ().getParentNode ().removeChild (e .getParentNode ());
1514+ }
1515+ }
1516+ }
1517+ final DOMSource domSource = new DOMSource (doc );
1518+ final StringWriter writer = new StringWriter ();
1519+ final StreamResult result = new StreamResult (writer );
1520+ final TransformerFactory tf = TransformerFactory .newInstance ();
1521+ final Transformer transformer = tf .newTransformer ();
1522+ transformer .transform (domSource , result );
1523+ return writer .toString ();
1524+ } catch (SAXException | IOException | ParserConfigurationException | TransformerException e ) {
1525+ s_logger .warn ("Unexpected exception caught while removing network elements from OVF:" , e );
1526+ }
1527+ return ovfString ;
1528+ }
1529+
14801530 public static void importVmFromOVF (VmwareHypervisorHost host , String ovfFilePath , String vmName , DatastoreMO dsMo , String diskOption , ManagedObjectReference morRp ,
14811531 ManagedObjectReference morHost ) throws Exception {
14821532
@@ -1488,9 +1538,9 @@ public static void importVmFromOVF(VmwareHypervisorHost host, String ovfFilePath
14881538 importSpecParams .setEntityName (vmName );
14891539 importSpecParams .setDeploymentOption ("" );
14901540 importSpecParams .setDiskProvisioning (diskOption ); // diskOption: thin, thick, etc
1491- //importSpecParams.setPropertyMapping(null);
14921541
1493- String ovfDescriptor = HttpNfcLeaseMO .readOvfContent (ovfFilePath );
1542+ String ovfDescriptor = removeOVFNetwork (HttpNfcLeaseMO .readOvfContent (ovfFilePath ));
1543+
14941544 VmwareContext context = host .getContext ();
14951545 OvfCreateImportSpecResult ovfImportResult =
14961546 context .getService ().createImportSpec (context .getServiceContent ().getOvfManager (), ovfDescriptor , morRp , dsMo .getMor (), importSpecParams );
0 commit comments