WIP : dhcp server policy Signed-off-by: Chiradeep Vittal <[email protected]>
Project: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/commit/446a9b84 Tree: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/tree/446a9b84 Diff: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/diff/446a9b84 Branch: refs/heads/cisco-vnmc-api-integration Commit: 446a9b84919e8e3d0ed9f131c675726c42ed6a4f Parents: e35e0eb Author: Chiradeep Vittal <[email protected]> Authored: Wed Jan 16 15:30:18 2013 -0800 Committer: Chiradeep Vittal <[email protected]> Committed: Wed Jan 16 15:30:18 2013 -0800 ---------------------------------------------------------------------- .../network/cisco/associate-dhcp-policy.xml | 16 ++ .../network/cisco/associate-route-policy.xml | 15 ++ .../scripts/network/cisco/create-dhcp-policy.xml | 62 ++++++ .../cloud/network/resource/CiscoVnmcResource.java | 145 ++++++++++++++- .../resource/test/CiscoVnmcResourceTest.java | 38 ++++- 5 files changed, 264 insertions(+), 12 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/446a9b84/plugins/network-elements/cisco-vnmc/scripts/network/cisco/associate-dhcp-policy.xml ---------------------------------------------------------------------- diff --git a/plugins/network-elements/cisco-vnmc/scripts/network/cisco/associate-dhcp-policy.xml b/plugins/network-elements/cisco-vnmc/scripts/network/cisco/associate-dhcp-policy.xml new file mode 100644 index 0000000..7ca6b8e --- /dev/null +++ b/plugins/network-elements/cisco-vnmc/scripts/network/cisco/associate-dhcp-policy.xml @@ -0,0 +1,16 @@ +<configConfMos + cookie="%cookie%" + inHierarchical="false"> + <inConfigs> + <pair key="%dhcpdn%"> + <policyDhcpPolicyAssoc + dn="%dhcpdn%" + interfaceName="%insideintf%" + policyRef="" + status="created" + type="server"/> + </pair> + </inConfigs> +</configConfMos> + <!--dn="org-root/org-TestTenant3/org-Tenant3-VDC/edsp-Tenant3-Edge-Device-Profile/dhcp-Edge_Inside"--> + http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/446a9b84/plugins/network-elements/cisco-vnmc/scripts/network/cisco/associate-route-policy.xml ---------------------------------------------------------------------- diff --git a/plugins/network-elements/cisco-vnmc/scripts/network/cisco/associate-route-policy.xml b/plugins/network-elements/cisco-vnmc/scripts/network/cisco/associate-route-policy.xml new file mode 100644 index 0000000..af4e4d0 --- /dev/null +++ b/plugins/network-elements/cisco-vnmc/scripts/network/cisco/associate-route-policy.xml @@ -0,0 +1,15 @@ +<configConfMo +dn="" +cookie="%cookie%" +inHierarchical="false"> + <inConfig> + <policyEdgeDeviceServiceProfile + addrTranslationTimeout="10800" + dn="%profiledn%" + ipAudit="" + name="%profilename%" + routing="%routepolicyname%" + status="modified" + vpn=""/> + </inConfig> +</configConfMo> http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/446a9b84/plugins/network-elements/cisco-vnmc/scripts/network/cisco/create-dhcp-policy.xml ---------------------------------------------------------------------- diff --git a/plugins/network-elements/cisco-vnmc/scripts/network/cisco/create-dhcp-policy.xml b/plugins/network-elements/cisco-vnmc/scripts/network/cisco/create-dhcp-policy.xml new file mode 100644 index 0000000..0b7de76 --- /dev/null +++ b/plugins/network-elements/cisco-vnmc/scripts/network/cisco/create-dhcp-policy.xml @@ -0,0 +1,62 @@ +<configConfMos + cookie="%cookie%" + inHierarchical="false"> + <inConfigs> + <pair key="%dhcpserverdn%"> + <policyDhcpServerPolicy + adminState="enabled" + autoConfigIfName="" + + descr="%dhcpserverdescr%" + dn="%dhcpserverdn%" + dnsDomainRef="" + leaseTime="1036799" + name="%dhcpservername%" + pingTimeout="50" + status="created"/> + </pair> + + <pair key="%iprangedn%" > + <policyIPAddressRange + descr="" + dn="%iprangedn%" + endip="%endip%" + name="iprange" + startip="%startip%" + status="created" + subnet="%subnet%"/> + </pair> + + <pair key="%dnsservicedn%"> + <commDns + adminState="enabled" + descr="" + dn="%dnsservicedn%" + domain="%domain%" + name="%dnsservicename%" + port="0" + proto="none" + status="created"/> + </pair> + + <pair key="%nameserverdn%"> + <commDnsProvider + adminState="enabled" + descr="" + dn="%nameserverdn%" + hostip="%nameserverip%" + hostname="" + intfName="" + name="" + order="100" + status="created"/> + </pair> + + </inConfigs> +</configConfMos> + +<!--"org-root/org-TestTenant3/org-Tenant3-VDC/dhcp-server-Tenant3-DHCP-Policy" +"org-root/org-TestTenant3/org-Tenant3-VDC/dhcp-server-Tenant3-DHCP-Policy/ip-range-iprange" + "org-root/org-TestTenant3/org-Tenant3-VDC/dhcp-server-Tenant3-DHCP-Policy/dns-svc-Tenant3-DNS" + "org-root/org-TestTenant3/org-Tenant3-VDC/dhcp-server-Tenant3-DHCP-Policy/dns-svc-Tenant3-DNS/dns-8.8.8.8" +--!> http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/446a9b84/plugins/network-elements/cisco-vnmc/src/com/cloud/network/resource/CiscoVnmcResource.java ---------------------------------------------------------------------- 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 180b665..802e1f9 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 @@ -20,7 +20,6 @@ import java.io.BufferedReader; import java.io.FileReader; import java.io.StringReader; import java.util.HashMap; -import java.util.List; import java.util.Map; import javax.naming.ConfigurationException; @@ -49,15 +48,12 @@ import com.cloud.agent.api.StartupCommand; import com.cloud.agent.api.StartupExternalFirewallCommand; import com.cloud.agent.api.routing.IpAssocAnswer; import com.cloud.agent.api.routing.IpAssocCommand; -import com.cloud.agent.api.routing.NetworkElementCommand; import com.cloud.agent.api.routing.SetPortForwardingRulesCommand; import com.cloud.agent.api.routing.SetStaticNatRulesCommand; -import com.cloud.agent.api.to.IpAddressTO; import com.cloud.host.Host; import com.cloud.resource.ServerResource; import com.cloud.utils.NumbersUtil; import com.cloud.utils.exception.ExecutionException; -import com.cloud.utils.net.NetUtils; import com.cloud.utils.script.Script; public class CiscoVnmcResource implements ServerResource { @@ -89,7 +85,12 @@ public class CiscoVnmcResource implements ServerResource { CREATE_VDC("create-vdc.xml", "service-reg"), CREATE_EDGE_DEVICE_PROFILE("create-edge-device-profile.xml", "policy-mgr"), CREATE_EDGE_ROUTE_POLICY("create-edge-device-route-policy.xml", "policy-mgr"), - CREATE_EDGE_ROUTE("create-edge-device-route.xml", "policy-mgr"); + CREATE_EDGE_ROUTE("create-edge-device-route.xml", "policy-mgr"), + 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"); + + private String scriptsDir = "scripts/network/cisco"; @@ -335,11 +336,11 @@ public class CiscoVnmcResource implements ServerResource { } private String getDnForTenantVDCEdgeDeviceProfile(String tenantName) { - return getDnForTenantVDC(tenantName) + "/edsp-" + tenantName + "-Edge-Device-Profile"; + return getDnForTenantVDC(tenantName) + "/edsp-" + getNameForEdgeDeviceServiceProfile(tenantName); } private String getDnForEdgeDeviceRoutingPolicy(String tenantName) { - return getDnForTenantVDC(tenantName) + "/routing-policy-EDSP-" + tenantName + "-Routes"; + return getDnForTenantVDC(tenantName) + "/routing-policy-" + getNameForEdgeDeviceRoutePolicy(tenantName); //FIXME: any other construct is unreliable. why? } @@ -347,7 +348,55 @@ public class CiscoVnmcResource implements ServerResource { return getDnForEdgeDeviceRoutingPolicy(tenantName) + "/sroute-" + id ; } + private String getDnForDhcpPolicy(String tenantName, String intfName) { + return getDnForTenantVDCEdgeDeviceProfile(tenantName) + "/dhcp-" + intfName; + } + + private String getNameForDhcpPolicy(String tenantName) { + return tenantName + "-Dhcp-Policy"; + } + + private String getNameForDhcpServer(String tenantName) { + return tenantName + "-Dhcp-Server"; + } + + private String getDnForDhcpServerPolicy(String tenantName) { + return getDnForTenantVDC(tenantName) + "/dhcp-server-" + getNameForDhcpPolicy(tenantName); + } + + private String getNameForIpRange() { + return "iprange"; + } + + private String getDnForDhcpIpRange(String tenantName) { + return getDnForDhcpServerPolicy(tenantName) + "/ip-range-" + getNameForIpRange(); + } + + private String getNameForDNSService(String tenantName) { + return tenantName + "-DNS"; + } + + private String getDnForDnsService(String tenantName) { + return getDnForDhcpServerPolicy(tenantName) + "/dns-svc-" + getNameForDNSService(tenantName); + } + + private String getDnForDnsServer(String tenantName, String dnsip) { + return getDnForDnsService(tenantName) + "/dns-" + dnsip; + } + + private String getNameForTenantVDC(String tenantName) { + return "VDC-" + tenantName; + } + + private String getNameForEdgeDeviceServiceProfile(String tenantName) { + return "EDSP-" + tenantName; + } + + private String getNameForEdgeDeviceRoutePolicy(String tenantName) { + return "EDSP-" + tenantName + "-Routes";//FIXME: this has to match DN somehow? + } + public boolean createTenant(String tenantName) throws ExecutionException { String xml = VnmcXml.CREATE_TENANT.getXml(); String service = VnmcXml.CREATE_TENANT.getService(); @@ -375,7 +424,7 @@ public class CiscoVnmcResource implements ServerResource { String service = VnmcXml.CREATE_VDC.getService(); xml = replaceXmlValue(xml, "cookie", _cookie); xml = replaceXmlValue(xml, "descr", "VDC for Tenant" + tenantName); - xml = replaceXmlValue(xml, "name", "VDC-" + tenantName); + xml = replaceXmlValue(xml, "name", getNameForTenantVDC(tenantName)); xml = replaceXmlValue(xml, "dn", getDnForTenantVDC(tenantName)); String response = sendRequest(service, xml); @@ -397,7 +446,7 @@ public class CiscoVnmcResource implements ServerResource { String service = VnmcXml.CREATE_EDGE_DEVICE_PROFILE.getService(); xml = replaceXmlValue(xml, "cookie", _cookie); xml = replaceXmlValue(xml, "descr", "Edge Device Profile for Tenant VDC" + tenantName); - xml = replaceXmlValue(xml, "name", "EDSP-" + tenantName); + xml = replaceXmlValue(xml, "name", getNameForEdgeDeviceServiceProfile(tenantName)); xml = replaceXmlValue(xml, "dn", getDnForTenantVDCEdgeDeviceProfile(tenantName)); String response = sendRequest(service, xml); @@ -418,7 +467,7 @@ public class CiscoVnmcResource implements ServerResource { String xml = VnmcXml.CREATE_EDGE_ROUTE_POLICY.getXml(); String service = VnmcXml.CREATE_EDGE_ROUTE_POLICY.getService(); xml = replaceXmlValue(xml, "cookie", _cookie); - xml = replaceXmlValue(xml, "name", "EDSP-" + tenantName + "-Routes");//FIXME: this has to match DN somehow? + xml = replaceXmlValue(xml, "name", getNameForEdgeDeviceRoutePolicy(tenantName));//FIXME: this has to match DN somehow? xml = replaceXmlValue(xml, "routepolicydn", getDnForEdgeDeviceRoutingPolicy(tenantName)); xml = replaceXmlValue(xml, "descr", "Routing Policy for Edge Device for Tenant " + tenantName); @@ -465,6 +514,82 @@ public class CiscoVnmcResource implements ServerResource { } return true; } + + public boolean associateTenantVDCEdgeStaticRoutePolicy(String tenantName) throws ExecutionException { + String xml = VnmcXml.RESOLVE_EDGE_ROUTE_POLICY.getXml(); + String service = VnmcXml.RESOLVE_EDGE_ROUTE_POLICY.getService(); + xml = replaceXmlValue(xml, "cookie", _cookie); + xml = replaceXmlValue(xml, "profilename", getNameForEdgeDeviceServiceProfile(tenantName)); + xml = replaceXmlValue(xml, "profiledn", getDnForTenantVDC(tenantName) + "/edsp-" + getNameForEdgeDeviceServiceProfile(tenantName)); + xml = replaceXmlValue(xml, "routepolicyname", getNameForEdgeDeviceRoutePolicy(tenantName)); + + String response = sendRequest(service, xml); + Map<String, String> 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; + } + + public boolean associateTenantVDCEdgeDhcpPolicy(String tenantName, String intfName) throws ExecutionException { + String xml = VnmcXml.RESOLVE_EDGE_DHCP_POLICY.getXml(); + String service = VnmcXml.RESOLVE_EDGE_DHCP_POLICY.getService(); + xml = replaceXmlValue(xml, "cookie", _cookie); + xml = replaceXmlValue(xml, "dhcpdn", getDnForDhcpPolicy(tenantName, intfName)); + xml = replaceXmlValue(xml, "insideintf", intfName); + + String response = sendRequest(service, xml); + Map<String, String> 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; + } + + public boolean createTenantVDCEdgeDhcpPolicy(String tenantName, + String startIp, String endIp, String subnet, String nameServerIp, String domain) throws ExecutionException { + String xml = VnmcXml.CREATE_DHCP_POLICY.getXml(); + String service = VnmcXml.CREATE_DHCP_POLICY.getService(); + xml = replaceXmlValue(xml, "cookie", _cookie); + xml = replaceXmlValue(xml, "dhcpserverdn", getDnForDhcpServerPolicy(tenantName)); + xml = replaceXmlValue(xml, "dhcpserverdescr", "DHCP server for " + tenantName); + xml = replaceXmlValue(xml, "dhcpservername", getNameForDhcpServer(tenantName)); + xml = replaceXmlValue(xml, "iprangedn", getDnForDhcpIpRange(tenantName)); + xml = replaceXmlValue(xml, "startip", startIp); + xml = replaceXmlValue(xml, "endip", endIp); + xml = replaceXmlValue(xml, "subnet", subnet); + xml = replaceXmlValue(xml, "domain", domain); + xml = replaceXmlValue(xml, "dnsservicedn", getDnForDnsService(tenantName)); + xml = replaceXmlValue(xml, "dnsservicename", getNameForDNSService(tenantName)); + xml = replaceXmlValue(xml, "nameserverip", nameServerIp); + xml = replaceXmlValue(xml, "nameserverdn", getDnForDnsServer(tenantName, nameServerIp)); + + String response = sendRequest(service, xml); + Map<String, String> 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; + } + private String sendRequest(String service, String xmlRequest) throws ExecutionException { org.apache.commons.httpclient.protocol.Protocol myhttps = new org.apache.commons.httpclient.protocol.Protocol("https", new EasySSLProtocolSocketFactory(), 443); http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/446a9b84/plugins/network-elements/cisco-vnmc/src/com/cloud/network/resource/test/CiscoVnmcResourceTest.java ---------------------------------------------------------------------- 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 ff80616..d8ca6a1 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 @@ -28,7 +28,7 @@ import com.cloud.utils.exception.ExecutionException; public class CiscoVnmcResourceTest { static CiscoVnmcResource resource; - static String tenantName = "TenantB"; + static String tenantName = "TenantD"; @BeforeClass public static void setUpClass() throws Exception { resource = new CiscoVnmcResource("10.223.56.5", "admin", "C1sco123"); @@ -41,7 +41,7 @@ public class CiscoVnmcResourceTest { } } - @Test + //@Test public void testLogin() { //fail("Not yet implemented"); try { @@ -112,4 +112,38 @@ public class CiscoVnmcResourceTest { e.printStackTrace(); } } + + @Test + public void testAssociateRoutePolicyWithEdgeProfile() { + try { + boolean response = resource.associateTenantVDCEdgeStaticRoutePolicy(tenantName); + assertTrue(response); + } catch (ExecutionException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + + @Test + public void testAssociateTenantVDCEdgeDhcpPolicy() { + try { + boolean response = resource.associateTenantVDCEdgeDhcpPolicy(tenantName, "Edge_Inside"); + assertTrue(response); + } catch (ExecutionException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + + @Test + public void testCreateTenantVDCEdgeDhcpPolicy() { + try { + boolean response = resource.createTenantVDCEdgeDhcpPolicy(tenantName, + "10.1.1.2", "10.1.1.254", "255.255.255.0","4.4.4.4", tenantName+ ".net"); + assertTrue(response); + } catch (ExecutionException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } }
