mirror of https://github.com/apache/cloudstack.git
WIP : dhcp server policy
Signed-off-by: Chiradeep Vittal <chiradeep@apache.org>
This commit is contained in:
parent
e35e0eb59b
commit
446a9b8491
|
|
@ -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"-->
|
||||
|
||||
|
|
@ -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>
|
||||
|
|
@ -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"
|
||||
--!>
|
||||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue