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();
+               }
+       }
 }

Reply via email to