diff --git a/plugins/network-elements/cisco-vnmc/scripts/network/cisco/associate-nat-policy-set.xml b/plugins/network-elements/cisco-vnmc/scripts/network/cisco/associate-nat-policy-set.xml new file mode 100644 index 00000000000..a16c8aeb9cb --- /dev/null +++ b/plugins/network-elements/cisco-vnmc/scripts/network/cisco/associate-nat-policy-set.xml @@ -0,0 +1,19 @@ + + + + + + + diff --git a/plugins/network-elements/cisco-vnmc/scripts/network/cisco/create-edge-security-profile.xml b/plugins/network-elements/cisco-vnmc/scripts/network/cisco/create-edge-security-profile.xml new file mode 100644 index 00000000000..4827711b31a --- /dev/null +++ b/plugins/network-elements/cisco-vnmc/scripts/network/cisco/create-edge-security-profile.xml @@ -0,0 +1,23 @@ + + + + + + + diff --git a/plugins/network-elements/cisco-vnmc/scripts/network/cisco/create-nat-policy-set.xml b/plugins/network-elements/cisco-vnmc/scripts/network/cisco/create-nat-policy-set.xml new file mode 100644 index 00000000000..1f483669f3c --- /dev/null +++ b/plugins/network-elements/cisco-vnmc/scripts/network/cisco/create-nat-policy-set.xml @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + diff --git a/plugins/network-elements/cisco-vnmc/scripts/network/cisco/create-source-nat-policy.xml b/plugins/network-elements/cisco-vnmc/scripts/network/cisco/create-source-nat-policy.xml new file mode 100644 index 00000000000..995e7669e4f --- /dev/null +++ b/plugins/network-elements/cisco-vnmc/scripts/network/cisco/create-source-nat-policy.xml @@ -0,0 +1,109 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/plugins/network-elements/cisco-vnmc/scripts/network/cisco/create-source-nat-pool.xml b/plugins/network-elements/cisco-vnmc/scripts/network/cisco/create-source-nat-pool.xml new file mode 100644 index 00000000000..da5a7bdee9b --- /dev/null +++ b/plugins/network-elements/cisco-vnmc/scripts/network/cisco/create-source-nat-pool.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + diff --git a/plugins/network-elements/cisco-vnmc/scripts/network/cisco/xml b/plugins/network-elements/cisco-vnmc/scripts/network/cisco/xml new file mode 100644 index 00000000000..eca3705a2e4 --- /dev/null +++ b/plugins/network-elements/cisco-vnmc/scripts/network/cisco/xml @@ -0,0 +1 @@ + diff --git a/plugins/network-elements/cisco-vnmc/src/com/cloud/network/resource/CiscoVnmcResource.java b/plugins/network-elements/cisco-vnmc/src/com/cloud/network/resource/CiscoVnmcResource.java index 1d5b76de804..f9a4eae3428 100644 --- a/plugins/network-elements/cisco-vnmc/src/com/cloud/network/resource/CiscoVnmcResource.java +++ b/plugins/network-elements/cisco-vnmc/src/com/cloud/network/resource/CiscoVnmcResource.java @@ -89,7 +89,15 @@ public class CiscoVnmcResource implements ServerResource { RESOLVE_EDGE_ROUTE_POLICY("associate-route-policy.xml", "policy-mgr"), RESOLVE_EDGE_DHCP_POLICY("associate-dhcp-policy.xml", "policy-mgr"), CREATE_DHCP_POLICY("create-dhcp-policy.xml", "policy-mgr"), - RESOLVE_EDGE_DHCP_SERVER_POLICY("associate-dhcp-server.xml", "policy-mgr"); + RESOLVE_EDGE_DHCP_SERVER_POLICY("associate-dhcp-server.xml", "policy-mgr"), + CREATE_EDGE_SECURITY_PROFILE("create-edge-security-profile.xml", "policy-mgr"), + CREATE_SOURCE_NAT_POOL("create-source-nat-pool.xml", "policy-mgr"), + CREATE_SOURCE_NAT_POLICY("create-source-nat-policy.xml", "policy-mgr"), + CREATE_NAT_POLICY_SET("create-nat-policy-set.xml", "policy-mgr"), + RESOLVE_NAT_POLICY_SET("associate-nat-policy-set.xml", "policy-mgr"); + + + private String scriptsDir = "scripts/network/cisco"; private String xml; @@ -119,7 +127,8 @@ public class CiscoVnmcResource implements ServerResource { String xml = ""; String line; while ((line = br.readLine()) != null) { - xml += line.replaceAll("\n"," "); + //xml += line.replaceAll("\n"," "); + xml += line; } return xml; @@ -337,6 +346,10 @@ public class CiscoVnmcResource implements ServerResource { return getDnForTenantVDC(tenantName) + "/edsp-" + getNameForEdgeDeviceServiceProfile(tenantName); } + private String getDnForTenantVDCEdgeSecurityProfile(String tenantName) { + return getDnForTenantVDC(tenantName) + "/vnep-" + getNameForEdgeDeviceSecurityProfile(tenantName); + } + private String getDnForEdgeDeviceRoutingPolicy(String tenantName) { return getDnForTenantVDC(tenantName) + "/routing-policy-" + getNameForEdgeDeviceRoutePolicy(tenantName); //FIXME: any other construct is unreliable. why? @@ -391,6 +404,10 @@ public class CiscoVnmcResource implements ServerResource { return "EDSP-" + tenantName; } + private String getNameForEdgeDeviceSecurityProfile(String tenantName) { + return "ESP-" + tenantName; + } + private String getNameForEdgeDeviceRoutePolicy(String tenantName) { return "EDSP-" + tenantName + "-Routes";//FIXME: this has to match DN somehow? } @@ -404,17 +421,7 @@ public class CiscoVnmcResource implements ServerResource { xml = replaceXmlValue(xml, "dn", getDnForTenant(tenantName)); String response = sendRequest(service, xml); - Map checked = checkResponse(response, "errorCode", "response"); - - if (checked.get("errorCode") != null) { - String errorCode = checked.get("errorCode"); - if (errorCode.equals("103")) { - //tenant already exists - return true; - } - return false; - } - return true; + return verifySuccess(response); } public boolean createTenantVDC(String tenantName) throws ExecutionException { @@ -426,17 +433,8 @@ public class CiscoVnmcResource implements ServerResource { xml = replaceXmlValue(xml, "dn", getDnForTenantVDC(tenantName)); String response = sendRequest(service, xml); - Map checked = checkResponse(response, "errorCode", "response"); - if (checked.get("errorCode") != null) { - String errorCode = checked.get("errorCode"); - if (errorCode.equals("103")) { - //tenant already exists - return true; - } - return false; - } - return true; + return verifySuccess(response); } public boolean createTenantVDCEdgeDeviceProfile(String tenantName) throws ExecutionException { @@ -448,17 +446,8 @@ public class CiscoVnmcResource implements ServerResource { xml = replaceXmlValue(xml, "dn", getDnForTenantVDCEdgeDeviceProfile(tenantName)); String response = sendRequest(service, xml); - Map checked = checkResponse(response, "errorCode", "response"); - if (checked.get("errorCode") != null) { - String errorCode = checked.get("errorCode"); - if (errorCode.equals("103")) { - //tenant already exists - return true; - } - return false; - } - return true; + return verifySuccess(response); } public boolean createTenantVDCEdgeStaticRoutePolicy(String tenantName) throws ExecutionException { @@ -471,17 +460,7 @@ public class CiscoVnmcResource implements ServerResource { String response = sendRequest(service, xml); - Map checked = checkResponse(response, "errorCode", "response"); - - if (checked.get("errorCode") != null) { - String errorCode = checked.get("errorCode"); - if (errorCode.equals("103")) { - //already exists - return true; - } - return false; - } - return true; + return verifySuccess(response); } public boolean createTenantVDCEdgeStaticRoute(String tenantName, @@ -500,17 +479,7 @@ public class CiscoVnmcResource implements ServerResource { //TODO: this adds default route, make it more generic String response = sendRequest(service, xml); - Map checked = checkResponse(response, "errorCode", "response"); - - if (checked.get("errorCode") != null) { - String errorCode = checked.get("errorCode"); - if (errorCode.equals("103")) { - //tenant already exists - return true; - } - return false; - } - return true; + return verifySuccess(response); } public boolean associateTenantVDCEdgeStaticRoutePolicy(String tenantName) throws ExecutionException { @@ -522,17 +491,7 @@ public class CiscoVnmcResource implements ServerResource { xml = replaceXmlValue(xml, "routepolicyname", getNameForEdgeDeviceRoutePolicy(tenantName)); String response = sendRequest(service, xml); - Map checked = checkResponse(response, "errorCode", "response"); - - if (checked.get("errorCode") != null) { - String errorCode = checked.get("errorCode"); - if (errorCode.equals("103")) { - //already exists - return true; - } - return false; - } - return true; + return verifySuccess(response); } public boolean associateTenantVDCEdgeDhcpPolicy(String tenantName, String intfName) throws ExecutionException { @@ -543,17 +502,8 @@ public class CiscoVnmcResource implements ServerResource { xml = replaceXmlValue(xml, "insideintf", intfName); String response = sendRequest(service, xml); - Map checked = checkResponse(response, "errorCode", "response"); - if (checked.get("errorCode") != null) { - String errorCode = checked.get("errorCode"); - if (errorCode.equals("103")) { - //already exists - return true; - } - return false; - } - return true; + return verifySuccess(response); } public boolean createTenantVDCEdgeDhcpPolicy(String tenantName, @@ -575,17 +525,7 @@ public class CiscoVnmcResource implements ServerResource { xml = replaceXmlValue(xml, "nameserverdn", getDnForDnsServer(tenantName, nameServerIp)); String response = sendRequest(service, xml); - Map checked = checkResponse(response, "errorCode", "response"); - - if (checked.get("errorCode") != null) { - String errorCode = checked.get("errorCode"); - if (errorCode.equals("103")) { - //already exists - return true; - } - return false; - } - return true; + return verifySuccess(response); } public boolean associateTenantVDCEdgeDhcpServerPolicy(String tenantName, String intfName) throws ExecutionException { @@ -597,18 +537,167 @@ public class CiscoVnmcResource implements ServerResource { xml = replaceXmlValue(xml, "dhcpserverpolicyname", getNameForDhcpServer(tenantName)); String response = sendRequest(service, xml); - Map checked = checkResponse(response, "errorCode", "response"); - - if (checked.get("errorCode") != null) { - String errorCode = checked.get("errorCode"); - if (errorCode.equals("103")) { - //already exists - return true; - } - return false; - } - return true; - } + return verifySuccess(response); + } + + public boolean createTenantVDCEdgeSecurityProfile(String tenantName) throws ExecutionException { + String xml = VnmcXml.CREATE_EDGE_SECURITY_PROFILE.getXml(); + String service = VnmcXml.CREATE_EDGE_SECURITY_PROFILE.getService(); + xml = replaceXmlValue(xml, "cookie", _cookie); + xml = replaceXmlValue(xml, "descr", "Edge Security Profile for Tenant VDC" + tenantName); + xml = replaceXmlValue(xml, "name", getNameForEdgeDeviceSecurityProfile(tenantName)); + xml = replaceXmlValue(xml, "espdn", getDnForTenantVDCEdgeSecurityProfile(tenantName)); + xml = replaceXmlValue(xml, "egressref", "default-egress"); + xml = replaceXmlValue(xml, "ingressref", "default-ingress"); //FIXME: allows everything + + String response = sendRequest(service, xml); + + return verifySuccess(response); + } + + private String getNameForSourceNatPool(String tenantName) { + return "Source-NAT-Pool-For-" + tenantName; + } + + private String getDnForSourceNatPool(String tenantName) { + return getDnForTenantVDC(tenantName) + "/objgrp-" + getNameForSourceNatPool(tenantName); + } + + private String getDnForSourceNatPoolExpr(String tenantName) { + return getDnForSourceNatPool(tenantName) + "/objgrp-expr-2"; + } + + private String getDnForSourceNatPublicIp(String tenantName) { + return getDnForSourceNatPoolExpr(tenantName) + "/nw-ip-2"; + } + + public boolean createTenantVDCSourceNATPool(String tenantName, String publicIp) throws ExecutionException { + String xml = VnmcXml.CREATE_SOURCE_NAT_POOL.getXml(); + String service = VnmcXml.CREATE_SOURCE_NAT_POOL.getService(); + xml = replaceXmlValue(xml, "cookie", _cookie); + xml = replaceXmlValue(xml, "descr", "Source NAT pool for Tenant VDC " + tenantName); + xml = replaceXmlValue(xml, "name", getNameForSourceNatPool(tenantName)); + xml = replaceXmlValue(xml, "snatpooldn", getDnForSourceNatPool(tenantName)); + xml = replaceXmlValue(xml, "snatpoolexprdn", getDnForSourceNatPoolExpr(tenantName)); + xml = replaceXmlValue(xml, "publicipdn", getDnForSourceNatPublicIp(tenantName)); + xml = replaceXmlValue(xml, "publicip", publicIp); + + String response = sendRequest(service, xml); + + return verifySuccess(response); + } + + + private String getNameForSourceNatPolicy(String tenantName) { + return "Source-NAT-For-" + tenantName; + } + + private String getDnForSourceNatPolicy(String tenantName) { + return getDnForTenantVDC(tenantName) + "/natpol-" + getNameForSourceNatPolicy(tenantName); + } + + private String getNameForSourceNatRule(String tenantName) { + return "Source-NAT-Policy-Rule-" + tenantName; + } + + private String getDnForSourceNatRule(String tenantName) { + return getDnForSourceNatPolicy(tenantName) + "/rule-" + getNameForSourceNatRule(tenantName); + } + + private String getDnForSourceNatRuleAction(String tenantName) { + return getDnForSourceNatRule(tenantName) + "/nat-action"; + } + + private String getDnForSourceNatRuleRule(String tenantName) { + return getDnForSourceNatRule(tenantName) + "/rule-cond-2"; + } + + private String getDnForSourceNatRuleRange(String tenantName) { + return getDnForSourceNatRuleRule(tenantName) + "/nw-expr2"; + } + + private String getDnForSourceNatRuleRangeIp(String tenantName, int id) { + return getDnForSourceNatRuleRange(tenantName) + "/nw-ip-" + id; + } + + private String getDnForSourceNatRuleRangeAttr(String tenantName) { + return getDnForSourceNatRuleRange(tenantName) + "/nw-attr-qual"; + } + + public boolean createTenantVDCSourceNATPolicy(String tenantName, + String startSourceIp, String endSourceIp) throws ExecutionException { + + String xml = VnmcXml.CREATE_SOURCE_NAT_POLICY.getXml(); + String service = VnmcXml.CREATE_SOURCE_NAT_POLICY.getService(); + xml = replaceXmlValue(xml, "cookie", _cookie); + xml = replaceXmlValue(xml, "descr", "Source NAT Policy for Tenant VDC " + tenantName); + xml = replaceXmlValue(xml, "srcTranslatedIpPool", getNameForSourceNatPool(tenantName)); + xml = replaceXmlValue(xml, "natrulename", getNameForSourceNatRule(tenantName)); + xml = replaceXmlValue(xml, "natpolname", getNameForSourceNatPolicy(tenantName)); + xml = replaceXmlValue(xml, "natruleruledescr", "Source NAT Policy for Tenant " + tenantName); + xml = replaceXmlValue(xml, "natpoldescr", "Source NAT Rule for Tenant " + tenantName); + xml = replaceXmlValue(xml, "natpoldn", getDnForSourceNatPolicy(tenantName)); + xml = replaceXmlValue(xml, "natruledn", getDnForSourceNatRule(tenantName)); + xml = replaceXmlValue(xml, "sourcestartip", startSourceIp); + xml = replaceXmlValue(xml, "sourceendip", endSourceIp); + xml = replaceXmlValue(xml, "sourcenatpoolname", getNameForSourceNatPool(tenantName)); + + + xml = replaceXmlValue(xml, "natactiondn", getDnForSourceNatRuleAction(tenantName)); + xml = replaceXmlValue(xml, "natruleruledn", getDnForSourceNatRuleRule(tenantName)); + xml = replaceXmlValue(xml, "natrangedn", getDnForSourceNatRuleRange(tenantName)); + xml = replaceXmlValue(xml, "natipdn2", getDnForSourceNatRuleRangeIp(tenantName, 2)); + xml = replaceXmlValue(xml, "natipdn3", getDnForSourceNatRuleRangeIp(tenantName, 3)); + + xml = replaceXmlValue(xml, "natsnatruleconddn", getDnForSourceNatRuleRangeAttr(tenantName)); + + String response = sendRequest(service, xml); + + return verifySuccess(response); + } + + private String getNameForNatPolicySet(String tenantName) { + return "NAT-Policy-Set-" + tenantName; + } + + private String getDnForNatPolicySet(String tenantName) { + return getDnForTenantVDC(tenantName) + "/natpset-" + getNameForNatPolicySet(tenantName) ; + } + + private String getDnForNatPolicySetRef(String tenantName) { + return getDnForNatPolicySet(tenantName) + "/polref-" + getNameForSourceNatPolicy(tenantName) ; + } + + public boolean createTenantVDCNatPolicySet(String tenantName) throws ExecutionException { + String xml = VnmcXml.CREATE_NAT_POLICY_SET.getXml(); + String service = VnmcXml.CREATE_NAT_POLICY_SET.getService(); + xml = replaceXmlValue(xml, "cookie", _cookie); + //xml = replaceXmlValue(xml, "descr", "Nat Policy Set for Tenant VDC " + tenantName); + xml = replaceXmlValue(xml, "natpolicyname", getNameForSourceNatPolicy(tenantName)); + xml = replaceXmlValue(xml, "natpolicysetname", getNameForNatPolicySet(tenantName)); + xml = replaceXmlValue(xml, "natpolicysetdn", getDnForNatPolicySet(tenantName)); + xml = replaceXmlValue(xml, "natpolicyrefdn", getDnForNatPolicySetRef(tenantName)); + + String response = sendRequest(service, xml); + + return verifySuccess(response); + } + + public boolean associateNatPolicySet(String tenantName) throws ExecutionException { + String xml = VnmcXml.RESOLVE_NAT_POLICY_SET.getXml(); + String service = VnmcXml.RESOLVE_NAT_POLICY_SET.getService(); + xml = replaceXmlValue(xml, "cookie", _cookie); + xml = replaceXmlValue(xml, "descr", "Edge Security Profile for Tenant VDC" + tenantName); + xml = replaceXmlValue(xml, "name", getNameForEdgeDeviceSecurityProfile(tenantName)); + xml = replaceXmlValue(xml, "espdn", getDnForTenantVDCEdgeSecurityProfile(tenantName)); + xml = replaceXmlValue(xml, "egressref", "default-egress"); + xml = replaceXmlValue(xml, "ingressref", "default-ingress"); + xml = replaceXmlValue(xml, "natpolicysetname", getNameForNatPolicySet(tenantName)); + + String response = sendRequest(service, xml); + + return verifySuccess(response); + } private String sendRequest(String service, String xmlRequest) throws ExecutionException { org.apache.commons.httpclient.protocol.Protocol myhttps = @@ -629,6 +718,7 @@ public class CiscoVnmcResource implements ServerResource { response = method.getResponseBody(); }catch(Exception e){ System.out.println(e.getMessage()); + throw new ExecutionException(e.getMessage()); } System.out.println(new String(response)); return new String(response); @@ -702,8 +792,20 @@ public class CiscoVnmcResource implements ServerResource { return result; } - + private boolean verifySuccess(String xmlResponse) throws ExecutionException { + Map checked = checkResponse(xmlResponse, "errorCode", "errorDescr"); + if (checked.get("errorCode") != null) { + String errorCode = checked.get("errorCode"); + if (errorCode.equals("103")) { + //tenant already exists + return true; + } + String errorDescr = checked.get("errorDescr"); + throw new ExecutionException(errorDescr); + } + return true; + } /* * XML utils diff --git a/plugins/network-elements/cisco-vnmc/src/com/cloud/network/resource/test/CiscoVnmcResourceTest.java b/plugins/network-elements/cisco-vnmc/src/com/cloud/network/resource/test/CiscoVnmcResourceTest.java index b7d69d02f15..f1e6d28517e 100644 --- a/plugins/network-elements/cisco-vnmc/src/com/cloud/network/resource/test/CiscoVnmcResourceTest.java +++ b/plugins/network-elements/cisco-vnmc/src/com/cloud/network/resource/test/CiscoVnmcResourceTest.java @@ -19,6 +19,7 @@ package com.cloud.network.resource.test; import static org.junit.Assert.assertTrue; import org.junit.BeforeClass; +import org.junit.Ignore; import org.junit.Test; import com.cloud.network.resource.CiscoVnmcResource; @@ -41,7 +42,8 @@ public class CiscoVnmcResourceTest { } } - //@Test + @Ignore + @Test public void testLogin() { //fail("Not yet implemented"); try { @@ -53,6 +55,7 @@ public class CiscoVnmcResourceTest { } } + @Ignore @Test public void testCreateTenant() { //fail("Not yet implemented"); @@ -65,6 +68,7 @@ public class CiscoVnmcResourceTest { } } + @Ignore @Test public void testCreateTenantVDC() { //fail("Not yet implemented"); @@ -77,7 +81,7 @@ public class CiscoVnmcResourceTest { } } - + @Ignore @Test public void testCreateTenantVDCEdgeDeviceProfile() { //fail("Not yet implemented"); @@ -90,6 +94,7 @@ public class CiscoVnmcResourceTest { } } + @Ignore @Test public void testCreateTenantVDCEdgeDeviceRoutePolicy() { try { @@ -101,6 +106,7 @@ public class CiscoVnmcResourceTest { } } + @Ignore @Test public void testCreateTenantVDCEdgeDeviceRoute() { try { @@ -113,6 +119,7 @@ public class CiscoVnmcResourceTest { } } + @Ignore @Test public void testAssociateRoutePolicyWithEdgeProfile() { try { @@ -124,6 +131,7 @@ public class CiscoVnmcResourceTest { } } + @Ignore @Test public void testAssociateTenantVDCEdgeDhcpPolicy() { try { @@ -135,6 +143,7 @@ public class CiscoVnmcResourceTest { } } + @Ignore @Test public void testCreateTenantVDCEdgeDhcpPolicy() { try { @@ -147,14 +156,63 @@ public class CiscoVnmcResourceTest { } } + @Ignore @Test - public void testAssociateTenantVDCEdgeDhcpServerPolicy() { + public void testCreateTenantVDCEdgeSecurityProfile() { try { - boolean response = resource.associateTenantVDCEdgeDhcpServerPolicy(tenantName, "Edge_Inside"); + boolean response = resource.createTenantVDCEdgeSecurityProfile(tenantName); assertTrue(response); } catch (ExecutionException e) { // TODO Auto-generated catch block e.printStackTrace(); } } + + @Ignore + @Test + public void testCreateTenantVDCSourceNATPool() { + try { + boolean response = resource.createTenantVDCSourceNATPool(tenantName, "10.223.136.10"); + assertTrue(response); + } catch (ExecutionException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + + @Ignore + @Test + public void testCreateTenantVDCSourceNATPolicy() { + try { + boolean response = resource.createTenantVDCSourceNATPolicy(tenantName, "10.1.1.2", "10.1.1.254"); + assertTrue(response); + } catch (ExecutionException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + + @Ignore + @Test + public void testCreateTenantVDCNatPolicySet() { + try { + boolean response = resource.createTenantVDCNatPolicySet(tenantName); + assertTrue(response); + } catch (ExecutionException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + + @Test + public void testAssociateNatPolicySet() { + try { + boolean response = resource.associateNatPolicySet(tenantName); + assertTrue(response); + } catch (ExecutionException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + }