You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by ts...@apache.org on 2013/04/16 18:40:31 UTC
[25/50] [abbrv] Squashed commit of the following:
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/e94c7025/plugins/network-elements/cisco-vnmc/src/com/cloud/network/cisco/CiscoVnmcConnectionImpl.java
----------------------------------------------------------------------
diff --git a/plugins/network-elements/cisco-vnmc/src/com/cloud/network/cisco/CiscoVnmcConnectionImpl.java b/plugins/network-elements/cisco-vnmc/src/com/cloud/network/cisco/CiscoVnmcConnectionImpl.java
new file mode 100644
index 0000000..527fb04
--- /dev/null
+++ b/plugins/network-elements/cisco-vnmc/src/com/cloud/network/cisco/CiscoVnmcConnectionImpl.java
@@ -0,0 +1,1415 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements. See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership. The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License. You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied. See the License for the
+// specific language governing permissions and limitations
+// under the License.
+package com.cloud.network.cisco;
+
+import java.io.BufferedReader;
+import java.io.FileReader;
+import java.io.StringReader;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import javax.xml.parsers.DocumentBuilderFactory;
+
+import org.apache.commons.httpclient.HttpClient;
+import org.apache.commons.httpclient.HttpStatus;
+import org.apache.commons.httpclient.contrib.ssl.EasySSLProtocolSocketFactory;
+import org.apache.commons.httpclient.methods.PostMethod;
+import org.apache.log4j.Logger;
+import org.w3c.dom.Document;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+import org.xml.sax.InputSource;
+
+import com.cloud.utils.exception.ExecutionException;
+import com.cloud.utils.script.Script;
+
+public class CiscoVnmcConnectionImpl implements CiscoVnmcConnection {
+
+ private String _ip;
+ private String _username;
+ private String _password;
+ private String _cookie;
+
+ private final Logger s_logger = Logger.getLogger(CiscoVnmcConnectionImpl.class);
+
+ private enum VnmcXml {
+ LOGIN("login.xml", "mgmt-controller"),
+
+ CREATE_TENANT("create-tenant.xml", "service-reg"),
+ DELETE_TENANT("delete-tenant.xml", "service-reg"),
+ CREATE_VDC("create-vdc.xml", "service-reg"),
+ DELETE_VDC("delete-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"),
+ RESOLVE_EDGE_ROUTE_POLICY("associate-route-policy.xml", "policy-mgr"),
+
+ CREATE_DHCP_POLICY("create-dhcp-policy.xml", "policy-mgr"),
+ RESOLVE_EDGE_DHCP_POLICY("associate-dhcp-policy.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"),
+ DELETE_EDGE_SECURITY_PROFILE("delete-edge-security-profile.xml", "policy-mgr"),
+
+ CREATE_NAT_POLICY_SET("create-nat-policy-set.xml", "policy-mgr"),
+ DELETE_NAT_POLICY_SET("delete-nat-policy-set.xml", "policy-mgr"),
+ RESOLVE_NAT_POLICY_SET("associate-nat-policy-set.xml", "policy-mgr"),
+ CREATE_NAT_POLICY("create-nat-policy.xml", "policy-mgr"),
+ DELETE_NAT_POLICY("delete-nat-policy.xml", "policy-mgr"),
+ LIST_NAT_POLICIES("list-nat-policies.xml", "policy-mgr"),
+ CREATE_NAT_POLICY_REF("create-nat-policy-ref.xml", "policy-mgr"),
+ CREATE_PORT_POOL("create-port-pool.xml", "policy-mgr"),
+ CREATE_IP_POOL("create-ip-pool.xml", "policy-mgr"),
+
+ CREATE_PF_RULE("create-pf-rule.xml", "policy-mgr"),
+ CREATE_ACL_RULE_FOR_PF("create-acl-rule-for-pf.xml", "policy-mgr"),
+ CREATE_DNAT_RULE("create-dnat-rule.xml", "policy-mgr"),
+ CREATE_ACL_RULE_FOR_DNAT("create-acl-rule-for-dnat.xml", "policy-mgr"),
+ CREATE_SOURCE_NAT_RULE("create-source-nat-rule.xml", "policy-mgr"),
+
+ CREATE_ACL_POLICY_SET("create-acl-policy-set.xml", "policy-mgr"),
+ DELETE_ACL_POLICY_SET("delete-acl-policy-set.xml", "policy-mgr"),
+ RESOLVE_ACL_POLICY_SET("associate-acl-policy-set.xml", "policy-mgr"),
+ CREATE_ACL_POLICY("create-acl-policy.xml", "policy-mgr"),
+ DELETE_ACL_POLICY("delete-acl-policy.xml", "policy-mgr"),
+ LIST_ACL_POLICIES("list-acl-policies.xml", "policy-mgr"),
+ CREATE_ACL_POLICY_REF("create-acl-policy-ref.xml", "policy-mgr"),
+ CREATE_INGRESS_ACL_RULE("create-ingress-acl-rule.xml", "policy-mgr"),
+ CREATE_EGRESS_ACL_RULE("create-egress-acl-rule.xml", "policy-mgr"),
+ CREATE_GENERIC_INGRESS_ACL_RULE("create-generic-ingress-acl-rule.xml", "policy-mgr"),
+ CREATE_GENERIC_EGRESS_ACL_RULE("create-generic-egress-acl-rule.xml", "policy-mgr"),
+
+ DELETE_RULE("delete-rule.xml", "policy-mgr"),
+
+ LIST_CHILDREN("list-children.xml", "policy-mgr"),
+
+ CREATE_EDGE_FIREWALL("create-edge-firewall.xml", "resource-mgr"),
+ DELETE_EDGE_FIREWALL("delete-edge-firewall.xml", "resource-mgr"),
+
+ LIST_UNASSOC_ASA1000V("list-unassigned-asa1000v.xml", "resource-mgr"),
+ ASSIGN_ASA1000V("assoc-asa1000v.xml", "resource-mgr"),
+ UNASSIGN_ASA1000V("disassoc-asa1000v.xml", "resource-mgr");
+
+ private String scriptsDir = "scripts/network/cisco";
+ private String xml;
+ private String service;
+ private final Logger s_logger = Logger.getLogger(CiscoVnmcConnectionImpl.class);
+
+
+ private VnmcXml(String filename, String service) {
+ this.xml = getXml(filename);
+ this.service = service;
+ }
+
+ public String getXml() {
+ return xml;
+ }
+
+ private String getXml(String filename) {
+ try {
+ String xmlFilePath = Script.findScript(scriptsDir, filename);
+
+ if (xmlFilePath == null) {
+ throw new Exception("Failed to find Cisco VNMC XML file: " + filename);
+ }
+
+ FileReader fr = new FileReader(xmlFilePath);
+ BufferedReader br = new BufferedReader(fr);
+
+ String xml = "";
+ String line;
+ while ((line = br.readLine()) != null) {
+ //xml += line.replaceAll("\n"," ");
+ xml += line;
+ }
+
+ return xml;
+ } catch (Exception e) {
+ s_logger.debug(e);
+ return null;
+ }
+ }
+
+ public String getService() {
+ return service;
+ }
+ }
+
+ public CiscoVnmcConnectionImpl(String hostIp, String userName, String password) {
+ this._ip = hostIp;
+ this._username = userName;
+ this._password = password;
+
+ }
+
+ public boolean login() throws ExecutionException {
+ String xml = VnmcXml.LOGIN.getXml();
+ String service = VnmcXml.LOGIN.getService();
+ xml = replaceXmlValue(xml, "username", _username);
+ xml = replaceXmlValue(xml, "password", _password);
+ String response = sendRequest(service, xml);
+ Map<String, String> checked = checkResponse(response, "outCookie", "errorCode", "response");
+
+ if (checked.get("errorCode") != null)
+ return false;
+ _cookie = checked.get("outCookie");
+ if (_cookie == null) {
+ return false;
+ }
+ return true;
+ }
+
+ private String getDnForTenant(String tenantName) {
+ return "org-root/org-" + tenantName;
+ }
+
+ private String getDnForTenantVDC(String tenantName) {
+ return getDnForTenant(tenantName) + "/org-VDC-" + tenantName;
+ }
+
+ private String getDnForTenantVDCEdgeDeviceProfile(String tenantName) {
+ 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?
+ }
+
+ 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 getNameForEdgeDeviceSecurityProfile(String tenantName) {
+ return "ESP-" + tenantName;
+ }
+
+ private String getNameForEdgeDeviceRoutePolicy(String tenantName) {
+ return "EDSP-" + tenantName + "-Routes";
+ }
+
+ @Override
+ public boolean createTenant(String tenantName) throws ExecutionException {
+ String xml = VnmcXml.CREATE_TENANT.getXml();
+ String service = VnmcXml.CREATE_TENANT.getService();
+ xml = replaceXmlValue(xml, "cookie", _cookie);
+ xml = replaceXmlValue(xml, "descr", "Tenant for account " + tenantName);
+ xml = replaceXmlValue(xml, "name", tenantName);
+ xml = replaceXmlValue(xml, "dn", getDnForTenant(tenantName));
+
+ String response = sendRequest(service, xml);
+ return verifySuccess(response);
+ }
+
+ @Override
+ public boolean deleteTenant(String tenantName) throws ExecutionException {
+ String xml = VnmcXml.DELETE_TENANT.getXml();
+ String service = VnmcXml.DELETE_TENANT.getService();
+ xml = replaceXmlValue(xml, "cookie", _cookie);
+ xml = replaceXmlValue(xml, "name", tenantName);
+ xml = replaceXmlValue(xml, "dn", getDnForTenant(tenantName));
+
+ String response = sendRequest(service, xml);
+ return verifySuccess(response);
+ }
+
+ @Override
+ public boolean createTenantVDC(String tenantName) throws ExecutionException {
+ String xml = VnmcXml.CREATE_VDC.getXml();
+ String service = VnmcXml.CREATE_VDC.getService();
+ xml = replaceXmlValue(xml, "cookie", _cookie);
+ xml = replaceXmlValue(xml, "descr", "VDC for Tenant" + tenantName);
+ xml = replaceXmlValue(xml, "name", getNameForTenantVDC(tenantName));
+ xml = replaceXmlValue(xml, "dn", getDnForTenantVDC(tenantName));
+
+ String response = sendRequest(service, xml);
+ return verifySuccess(response);
+ }
+
+ @Override
+ public boolean deleteTenantVDC(String tenantName) throws ExecutionException {
+ String xml = VnmcXml.DELETE_VDC.getXml();
+ String service = VnmcXml.DELETE_VDC.getService();
+ xml = replaceXmlValue(xml, "cookie", _cookie);
+ xml = replaceXmlValue(xml, "name", getNameForTenantVDC(tenantName));
+ xml = replaceXmlValue(xml, "dn", getDnForTenantVDC(tenantName));
+
+ String response = sendRequest(service, xml);
+ return verifySuccess(response);
+ }
+
+ @Override
+ public boolean createTenantVDCEdgeDeviceProfile(String tenantName) throws ExecutionException {
+ String xml = VnmcXml.CREATE_EDGE_DEVICE_PROFILE.getXml();
+ 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", getNameForEdgeDeviceServiceProfile(tenantName));
+ xml = replaceXmlValue(xml, "dn", getDnForTenantVDCEdgeDeviceProfile(tenantName));
+
+ String response = sendRequest(service, xml);
+ return verifySuccess(response);
+ }
+
+ @Override
+ public boolean createTenantVDCEdgeStaticRoutePolicy(String tenantName) throws ExecutionException {
+ 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", getNameForEdgeDeviceRoutePolicy(tenantName));
+ xml = replaceXmlValue(xml, "routepolicydn", getDnForEdgeDeviceRoutingPolicy(tenantName));
+ xml = replaceXmlValue(xml, "descr", "Routing Policy for Edge Device for Tenant " + tenantName);
+
+ String response = sendRequest(service, xml);
+ return verifySuccess(response);
+ }
+
+ @Override
+ public boolean createTenantVDCEdgeStaticRoute(String tenantName,
+ String nextHopIp, String destination, String netmask) throws ExecutionException {
+ String xml = VnmcXml.CREATE_EDGE_ROUTE.getXml();
+ String service = VnmcXml.CREATE_EDGE_ROUTE.getService();
+ xml = replaceXmlValue(xml, "cookie", _cookie);
+ xml = replaceXmlValue(xml, "routepolicydn", getDnForEdgeDeviceRoutingPolicy(tenantName));
+ xml = replaceXmlValue(xml, "nexthop", nextHopIp);
+ xml = replaceXmlValue(xml, "nexthopintf", getNameForEdgeOutsideIntf(tenantName));
+ xml = replaceXmlValue(xml, "destination", destination);
+ xml = replaceXmlValue(xml, "netmask", netmask);
+
+ String response = sendRequest(service, xml);
+ return verifySuccess(response);
+ }
+
+ @Override
+ 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, "name", getNameForEdgeDeviceServiceProfile(tenantName));
+ xml = replaceXmlValue(xml, "dn", getDnForTenantVDCEdgeDeviceProfile(tenantName));
+ xml = replaceXmlValue(xml, "routepolicyname", getNameForEdgeDeviceRoutePolicy(tenantName));
+
+ String response = sendRequest(service, xml);
+ return verifySuccess(response);
+ }
+
+ @Override
+ 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);
+ return verifySuccess(response);
+ }
+
+ @Override
+ 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", getNameForDhcpPolicy(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);
+ return verifySuccess(response);
+ }
+
+ @Override
+ public boolean associateTenantVDCEdgeDhcpServerPolicy(String tenantName, String intfName) throws ExecutionException {
+ String xml = VnmcXml.RESOLVE_EDGE_DHCP_SERVER_POLICY.getXml();
+ String service = VnmcXml.RESOLVE_EDGE_DHCP_SERVER_POLICY.getService();
+ xml = replaceXmlValue(xml, "cookie", _cookie);
+ xml = replaceXmlValue(xml, "dhcpdn", getDnForDhcpPolicy(tenantName, intfName));
+ xml = replaceXmlValue(xml, "insideintf", intfName);
+ xml = replaceXmlValue(xml, "dhcpserverpolicyname", getNameForDhcpServer(tenantName));
+
+ String response = sendRequest(service, xml);
+ return verifySuccess(response);
+ }
+
+ @Override
+ 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);
+ }
+
+ @Override
+ public boolean deleteTenantVDCEdgeSecurityProfile(String tenantName) throws ExecutionException {
+ String xml = VnmcXml.DELETE_EDGE_SECURITY_PROFILE.getXml();
+ String service = VnmcXml.DELETE_EDGE_SECURITY_PROFILE.getService();
+ xml = replaceXmlValue(xml, "cookie", _cookie);
+ xml = replaceXmlValue(xml, "name", getNameForEdgeDeviceSecurityProfile(tenantName));
+ xml = replaceXmlValue(xml, "espdn", getDnForTenantVDCEdgeSecurityProfile(tenantName));
+
+ String response = sendRequest(service, xml);
+ return verifySuccess(response);
+ }
+
+ private String getNameForSourceNatIpPool(String tenantName) {
+ return "SNATIp-" + tenantName;
+ }
+
+ private String getDnForSourceNatPool(String tenantName) {
+ return getDnForTenantVDC(tenantName) + "/objgrp-" + getNameForSourceNatIpPool(tenantName);
+ }
+
+ @Override
+ public boolean createTenantVDCSourceNatIpPool(String tenantName, String identifier,
+ String publicIp) throws ExecutionException {
+ return createTenantVDCIpPool(
+ getDnForSourceNatPool(tenantName),
+ getNameForSourceNatIpPool(tenantName),
+ "Source NAT ip pool for Tenant VDC " + tenantName,
+ publicIp);
+ }
+
+ private String getNameForSourceNatPolicy(String tenantName) {
+ return "SNAT-Policy-" + tenantName;
+ }
+
+ private String getDnForSourceNatPolicy(String tenantName) {
+ return getDnForTenantVDC(tenantName) + "/natpol-" + getNameForSourceNatPolicy(tenantName);
+ }
+
+ private String getNameForSourceNatRule(String tenantName) {
+ return "SNAT-Rule-" + tenantName;
+ }
+
+ private String getDnForSourceNatRule(String tenantName) {
+ return getDnForSourceNatPolicy(tenantName) + "/rule-" + getNameForSourceNatRule(tenantName);
+ }
+
+ private String getNameForNatPolicySet(String tenantName) {
+ return "NAT-PolicySet-" + tenantName;
+ }
+
+ private String getDnForNatPolicySet(String tenantName) {
+ return getDnForTenantVDC(tenantName) + "/natpset-" + getNameForNatPolicySet(tenantName) ;
+ }
+
+ private String getDnForSourceNatPolicyRef(String tenantName) {
+ return getDnForNatPolicySet(tenantName) + "/polref-" + getNameForSourceNatPolicy(tenantName) ;
+ }
+
+ @Override
+ public boolean createTenantVDCSourceNatRule(String tenantName, String identifier,
+ String startSourceIp, String endSourceIp) throws ExecutionException {
+
+ String xml = VnmcXml.CREATE_SOURCE_NAT_RULE.getXml();
+ String service = VnmcXml.CREATE_SOURCE_NAT_RULE.getService();
+ xml = replaceXmlValue(xml, "cookie", _cookie);
+ xml = replaceXmlValue(xml, "natruledn", getDnForSourceNatRule(tenantName));
+ xml = replaceXmlValue(xml, "natrulename", getNameForSourceNatRule(tenantName));
+ xml = replaceXmlValue(xml, "descr", "Source NAT rule for Tenant VDC " + tenantName);
+ xml = replaceXmlValue(xml, "srcstartip", startSourceIp);
+ xml = replaceXmlValue(xml, "srcendip", endSourceIp);
+ xml = replaceXmlValue(xml, "ippoolname", getNameForSourceNatIpPool(tenantName));
+
+ List<String> rules = listChildren(getDnForSourceNatPolicy(tenantName));
+ int order = 100;
+ if (rules != null) {
+ order += rules.size();
+ }
+ xml = replaceXmlValue(xml, "order", Integer.toString(order));
+
+ String response = sendRequest(service, xml);
+ return verifySuccess(response);
+ }
+
+ @Override
+ public boolean createTenantVDCSourceNatPolicyRef(String tenantName, String identifier) throws ExecutionException {
+ return createTenantVDCNatPolicyRef(
+ getDnForSourceNatPolicyRef(tenantName),
+ getNameForSourceNatPolicy(tenantName),
+ tenantName);
+ }
+
+ @Override
+ public boolean createTenantVDCSourceNatPolicy(String tenantName, String identifier) throws ExecutionException {
+ return createTenantVDCNatPolicy(
+ getDnForSourceNatPolicy(tenantName),
+ getNameForSourceNatPolicy(tenantName));
+ }
+
+ @Override
+ 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, "natpolicysetname", getNameForNatPolicySet(tenantName));
+ xml = replaceXmlValue(xml, "natpolicysetdn", getDnForNatPolicySet(tenantName));
+
+ String response = sendRequest(service, xml);
+ return verifySuccess(response);
+ }
+
+ @Override
+ public boolean deleteTenantVDCNatPolicySet(String tenantName) throws ExecutionException {
+ String xml = VnmcXml.DELETE_NAT_POLICY_SET.getXml();
+ String service = VnmcXml.DELETE_NAT_POLICY_SET.getService();
+ xml = replaceXmlValue(xml, "cookie", _cookie);
+ xml = replaceXmlValue(xml, "natpolicysetname", getNameForNatPolicySet(tenantName));
+ xml = replaceXmlValue(xml, "natpolicysetdn", getDnForNatPolicySet(tenantName));
+
+ String response = sendRequest(service, xml);
+ return verifySuccess(response);
+ }
+
+ @Override
+ 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, "natpolicysetname", getNameForNatPolicySet(tenantName));
+
+ String response = sendRequest(service, xml);
+ return verifySuccess(response);
+ }
+
+ private String getNameForAclPolicySet(String tenantName, boolean ingress) {
+ return (ingress ? "Ingress-" : "Egress-") + "ACL-PolicySet-" + tenantName;
+ }
+
+ private String getDnForAclPolicySet(String tenantName, boolean ingress) {
+ return getDnForTenantVDC(tenantName) + "/pset-" + getNameForAclPolicySet(tenantName, ingress) ;
+ }
+
+ private String getNameForAclPolicy(String tenantName, String identifier) {
+ return "ACL-" + tenantName + "-" + identifier;
+ }
+
+ private String getDnForAclPolicy(String tenantName, String identifier) {
+ return getDnForTenantVDC(tenantName) + "/pol-" + getNameForAclPolicy(tenantName, identifier);
+ }
+
+ private String getDnForAclPolicyRef(String tenantName, String identifier, boolean ingress) {
+ return getDnForAclPolicySet(tenantName, ingress) + "/polref-" + getNameForAclPolicy(tenantName, identifier);
+ }
+
+ private String getNameForAclRule(String tenantName, String identifier) {
+ return "Rule-" + tenantName + "-" + identifier;
+ }
+
+ private String getDnForAclRule(String tenantName, String identifier, String policyIdentifier) {
+ return getDnForAclPolicy(tenantName, policyIdentifier) + "/rule-" + getNameForAclRule(tenantName, identifier);
+ }
+
+ @Override
+ public boolean createTenantVDCAclPolicy(String tenantName, String identifier) throws ExecutionException {
+ String xml = VnmcXml.CREATE_ACL_POLICY.getXml();
+ String service = VnmcXml.CREATE_ACL_POLICY.getService();
+ xml = replaceXmlValue(xml, "cookie", _cookie);
+ xml = replaceXmlValue(xml, "aclpolicyname", getNameForAclPolicy(tenantName, identifier));
+ xml = replaceXmlValue(xml, "aclpolicydn", getDnForAclPolicy(tenantName, identifier));
+
+ String response = sendRequest(service, xml);
+ return verifySuccess(response);
+ }
+
+ @Override
+ public boolean deleteTenantVDCAclPolicy(String tenantName, String identifier) throws ExecutionException {
+ String xml = VnmcXml.DELETE_ACL_POLICY.getXml();
+ String service = VnmcXml.DELETE_ACL_POLICY.getService();
+ xml = replaceXmlValue(xml, "cookie", _cookie);
+ xml = replaceXmlValue(xml, "aclpolicyname", getNameForAclPolicy(tenantName, identifier));
+ xml = replaceXmlValue(xml, "aclpolicydn", getDnForAclPolicy(tenantName, identifier));
+
+ String response = sendRequest(service, xml);
+ return verifySuccess(response);
+ }
+
+ @Override
+ public boolean createTenantVDCAclPolicyRef(String tenantName, String identifier, boolean ingress) throws ExecutionException {
+ String xml = VnmcXml.CREATE_ACL_POLICY_REF.getXml();
+ String service = VnmcXml.CREATE_ACL_POLICY_REF.getService();
+ xml = replaceXmlValue(xml, "cookie", _cookie);
+ xml = replaceXmlValue(xml, "aclpolicyname", getNameForAclPolicy(tenantName, identifier));
+ xml = replaceXmlValue(xml, "aclpolicydn", getDnForAclPolicy(tenantName, identifier));
+ xml = replaceXmlValue(xml, "aclpolicyrefdn", getDnForAclPolicyRef(tenantName, identifier, ingress));
+
+ List<String> policies = listAclPolicies(tenantName);
+ int order = 100;
+ if (policies != null) {
+ order += policies.size();
+ }
+ xml = replaceXmlValue(xml, "order", Integer.toString(order));
+
+ String response = sendRequest(service, xml);
+ return verifySuccess(response);
+ }
+
+ @Override
+ public boolean createTenantVDCAclPolicySet(String tenantName, boolean ingress) throws ExecutionException {
+ String xml = VnmcXml.CREATE_ACL_POLICY_SET.getXml();
+ String service = VnmcXml.CREATE_ACL_POLICY_SET.getService();
+ xml = replaceXmlValue(xml, "cookie", _cookie);
+ xml = replaceXmlValue(xml, "descr", "ACL policy set for Tenant VDC " + tenantName);
+ xml = replaceXmlValue(xml, "aclpolicysetname", getNameForAclPolicySet(tenantName, ingress));
+ xml = replaceXmlValue(xml, "aclpolicysetdn", getDnForAclPolicySet(tenantName, ingress));
+
+ String response = sendRequest(service, xml);
+ return verifySuccess(response);
+ }
+
+ @Override
+ public boolean deleteTenantVDCAclPolicySet(String tenantName, boolean ingress) throws ExecutionException {
+ String xml = VnmcXml.DELETE_ACL_POLICY_SET.getXml();
+ String service = VnmcXml.DELETE_ACL_POLICY_SET.getService();
+ xml = replaceXmlValue(xml, "cookie", _cookie);
+ xml = replaceXmlValue(xml, "aclpolicysetname", getNameForAclPolicySet(tenantName, ingress));
+ xml = replaceXmlValue(xml, "aclpolicysetdn", getDnForAclPolicySet(tenantName, ingress));
+
+ String response = sendRequest(service, xml);
+ return verifySuccess(response);
+ }
+
+ @Override
+ public boolean associateAclPolicySet(String tenantName) throws ExecutionException {
+ String xml = VnmcXml.RESOLVE_ACL_POLICY_SET.getXml();
+ String service = VnmcXml.RESOLVE_ACL_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, "egresspolicysetname", getNameForAclPolicySet(tenantName, false));
+ xml = replaceXmlValue(xml, "egresspolicysetname", "default-egress");
+ xml = replaceXmlValue(xml, "ingresspolicysetname", getNameForAclPolicySet(tenantName, true));
+ xml = replaceXmlValue(xml, "natpolicysetname", getNameForNatPolicySet(tenantName));
+
+ String response = sendRequest(service, xml);
+ return verifySuccess(response);
+ }
+
+ @Override
+ public boolean createTenantVDCIngressAclRule(String tenantName,
+ String identifier, String policyIdentifier,
+ String protocol, String sourceStartIp, String sourceEndIp,
+ String destStartPort, String destEndPort, String destIp) throws ExecutionException {
+ String xml = VnmcXml.CREATE_INGRESS_ACL_RULE.getXml();
+ String service = VnmcXml.CREATE_INGRESS_ACL_RULE.getService();
+
+ xml = replaceXmlValue(xml, "cookie", _cookie);
+ xml = replaceXmlValue(xml, "aclruledn", getDnForAclRule(tenantName, identifier, policyIdentifier));
+ xml = replaceXmlValue(xml, "aclrulename", getNameForAclRule(tenantName, identifier));
+ xml = replaceXmlValue(xml, "descr", "Ingress ACL rule for Tenant VDC " + tenantName);
+ xml = replaceXmlValue(xml, "actiontype", "permit");
+ xml = replaceXmlValue(xml, "protocolvalue", protocol);
+ xml = replaceXmlValue(xml, "sourcestartip", sourceStartIp);
+ xml = replaceXmlValue(xml, "sourceendip", sourceEndIp);
+ xml = replaceXmlValue(xml, "deststartport", destStartPort);
+ xml = replaceXmlValue(xml, "destendport", destEndPort);
+ xml = replaceXmlValue(xml, "destip", destIp);
+
+ List<String> rules = listChildren(getDnForAclPolicy(tenantName, policyIdentifier));
+ int order = 100;
+ if (rules != null) {
+ order += rules.size();
+ }
+ xml = replaceXmlValue(xml, "order", Integer.toString(order));
+
+ String response = sendRequest(service, xml);
+ return verifySuccess(response);
+ }
+
+ @Override
+ public boolean createTenantVDCIngressAclRule(String tenantName,
+ String identifier, String policyIdentifier,
+ String protocol, String sourceStartIp, String sourceEndIp,
+ String destIp) throws ExecutionException {
+ String xml = VnmcXml.CREATE_GENERIC_INGRESS_ACL_RULE.getXml();
+ String service = VnmcXml.CREATE_GENERIC_INGRESS_ACL_RULE.getService();
+
+ xml = replaceXmlValue(xml, "cookie", _cookie);
+ xml = replaceXmlValue(xml, "aclruledn", getDnForAclRule(tenantName, identifier, policyIdentifier));
+ xml = replaceXmlValue(xml, "aclrulename", getNameForAclRule(tenantName, identifier));
+ xml = replaceXmlValue(xml, "descr", "Ingress ACL rule for Tenant VDC " + tenantName);
+ xml = replaceXmlValue(xml, "actiontype", "permit");
+ xml = replaceXmlValue(xml, "protocolvalue", protocol);
+ xml = replaceXmlValue(xml, "sourcestartip", sourceStartIp);
+ xml = replaceXmlValue(xml, "sourceendip", sourceEndIp);
+
+ List<String> rules = listChildren(getDnForAclPolicy(tenantName, policyIdentifier));
+ int order = 100;
+ if (rules != null) {
+ order += rules.size();
+ }
+ xml = replaceXmlValue(xml, "order", Integer.toString(order));
+
+ String response = sendRequest(service, xml);
+ return verifySuccess(response);
+ }
+
+ @Override
+ public boolean createTenantVDCEgressAclRule(String tenantName,
+ String identifier, String policyIdentifier,
+ String protocol, String sourceStartPort, String sourceEndPort, String sourceIp,
+ String destStartIp, String destEndIp) throws ExecutionException {
+ String xml = VnmcXml.CREATE_EGRESS_ACL_RULE.getXml();
+ String service = VnmcXml.CREATE_EGRESS_ACL_RULE.getService();
+
+ xml = replaceXmlValue(xml, "cookie", _cookie);
+ xml = replaceXmlValue(xml, "aclruledn", getDnForAclRule(tenantName, identifier, policyIdentifier));
+ xml = replaceXmlValue(xml, "aclrulename", getNameForAclRule(tenantName, identifier));
+ xml = replaceXmlValue(xml, "descr", "Egress ACL rule for Tenant VDC " + tenantName);
+ xml = replaceXmlValue(xml, "actiontype", "permit");
+ xml = replaceXmlValue(xml, "protocolvalue", protocol);
+ xml = replaceXmlValue(xml, "deststartip", destStartIp);
+ xml = replaceXmlValue(xml, "destendip", destEndIp);
+ xml = replaceXmlValue(xml, "sourcestartport", sourceStartPort);
+ xml = replaceXmlValue(xml, "sourceendport", sourceEndPort);
+ xml = replaceXmlValue(xml, "sourceip", sourceIp);
+
+ List<String> rules = listChildren(getDnForAclPolicy(tenantName, policyIdentifier));
+ int order = 100;
+ if (rules != null) {
+ order += rules.size();
+ }
+ xml = replaceXmlValue(xml, "order", Integer.toString(order));
+
+ String response = sendRequest(service, xml);
+ return verifySuccess(response);
+ }
+
+ @Override
+ public boolean createTenantVDCEgressAclRule(String tenantName,
+ String identifier, String policyIdentifier,
+ String protocol, String sourceIp,
+ String destStartIp, String destEndIp) throws ExecutionException {
+ String xml = VnmcXml.CREATE_GENERIC_EGRESS_ACL_RULE.getXml();
+ String service = VnmcXml.CREATE_GENERIC_EGRESS_ACL_RULE.getService();
+
+ xml = replaceXmlValue(xml, "cookie", _cookie);
+ xml = replaceXmlValue(xml, "aclruledn", getDnForAclRule(tenantName, identifier, policyIdentifier));
+ xml = replaceXmlValue(xml, "aclrulename", getNameForAclRule(tenantName, identifier));
+ xml = replaceXmlValue(xml, "descr", "Egress ACL rule for Tenant VDC " + tenantName);
+ xml = replaceXmlValue(xml, "actiontype", "permit");
+ xml = replaceXmlValue(xml, "protocolvalue", protocol);
+ xml = replaceXmlValue(xml, "deststartip", destStartIp);
+ xml = replaceXmlValue(xml, "destendip", destEndIp);
+
+ List<String> rules = listChildren(getDnForAclPolicy(tenantName, policyIdentifier));
+ int order = 100;
+ if (rules != null) {
+ order += rules.size();
+ }
+ xml = replaceXmlValue(xml, "order", Integer.toString(order));
+
+ String response = sendRequest(service, xml);
+ return verifySuccess(response);
+ }
+
+ @Override
+ public boolean deleteTenantVDCAclRule(String tenantName, String identifier, String policyIdentifier) throws ExecutionException {
+ return deleteTenantVDCRule(
+ getDnForAclRule(tenantName, identifier, policyIdentifier),
+ getNameForAclRule(tenantName, identifier));
+ }
+
+ private String getNameForPFPortPool(String tenantName, String identifier) {
+ return "PFPort-" + tenantName + "-" + identifier;
+ }
+
+ private String getDnForPFPortPool(String tenantName, String identifier) {
+ return getDnForTenantVDC(tenantName) + "/objgrp-" + getNameForPFPortPool(tenantName, identifier);
+ }
+
+ private String getNameForPFIpPool(String tenantName, String identifier) {
+ return "PFIp-" + tenantName + "-" + identifier;
+ }
+
+ private String getDnForPFIpPool(String tenantName, String identifier) {
+ return getDnForTenantVDC(tenantName) + "/objgrp-" + getNameForPFIpPool(tenantName, identifier);
+ }
+
+ private boolean createTenantVDCPortPool(String poolDn, String name,
+ String description, String startPort, String endPort) throws ExecutionException {
+ String xml = VnmcXml.CREATE_PORT_POOL.getXml();
+ String service = VnmcXml.CREATE_PORT_POOL.getService();
+ xml = replaceXmlValue(xml, "cookie", _cookie);
+ xml = replaceXmlValue(xml, "portpooldn", poolDn);
+ xml = replaceXmlValue(xml, "portpoolname", name);
+ xml = replaceXmlValue(xml, "descr", description);
+ xml = replaceXmlValue(xml, "startport", startPort);
+ xml = replaceXmlValue(xml, "endport", endPort);
+
+ String response = sendRequest(service, xml);
+ return verifySuccess(response);
+ }
+
+ private boolean createTenantVDCIpPool(String poolDn, String name,
+ String description, String ipAddress) throws ExecutionException {
+ String xml = VnmcXml.CREATE_IP_POOL.getXml();
+ String service = VnmcXml.CREATE_IP_POOL.getService();
+ xml = replaceXmlValue(xml, "cookie", _cookie);
+ xml = replaceXmlValue(xml, "ippooldn", poolDn);
+ xml = replaceXmlValue(xml, "ippoolname", name);
+ xml = replaceXmlValue(xml, "descr", description);
+ xml = replaceXmlValue(xml, "ipvalue", ipAddress);
+
+ String response = sendRequest(service, xml);
+ return verifySuccess(response);
+ }
+
+ private boolean createTenantVDCNatPolicyRef(String policyRefDn, String name, String tenantName) throws ExecutionException {
+ String xml = VnmcXml.CREATE_NAT_POLICY_REF.getXml();
+ String service = VnmcXml.CREATE_NAT_POLICY_REF.getService();
+ xml = replaceXmlValue(xml, "cookie", _cookie);
+ xml = replaceXmlValue(xml, "natpolicyrefdn", policyRefDn);
+ xml = replaceXmlValue(xml, "natpolicyname", name);
+
+ List<String> policies = listNatPolicies(tenantName);
+ int order = 100;
+ if (policies != null) {
+ order += policies.size();
+ }
+ xml = replaceXmlValue(xml, "order", Integer.toString(order));
+
+ String response = sendRequest(service, xml);
+ return verifySuccess(response);
+ }
+
+ private boolean createTenantVDCNatPolicy(String policyDn, String name) throws ExecutionException {
+ String xml = VnmcXml.CREATE_NAT_POLICY.getXml();
+ String service = VnmcXml.CREATE_NAT_POLICY.getService();
+ xml = replaceXmlValue(xml, "cookie", _cookie);
+ xml = replaceXmlValue(xml, "natpolicydn", policyDn);
+ xml = replaceXmlValue(xml, "natpolicyname", name);
+
+ String response = sendRequest(service, xml);
+ return verifySuccess(response);
+ }
+
+ private boolean deleteTenantVDCNatPolicy(String policyDn, String name) throws ExecutionException {
+ String xml = VnmcXml.DELETE_NAT_POLICY.getXml();
+ String service = VnmcXml.DELETE_NAT_POLICY.getService();
+ xml = replaceXmlValue(xml, "cookie", _cookie);
+ xml = replaceXmlValue(xml, "natpolicydn", policyDn);
+ xml = replaceXmlValue(xml, "natpolicyname", name);
+
+ String response = sendRequest(service, xml);
+ return verifySuccess(response);
+ }
+
+ private boolean deleteTenantVDCRule(String ruledn, String ruleName) throws ExecutionException {
+ String xml = VnmcXml.DELETE_RULE.getXml();
+ String service = VnmcXml.DELETE_RULE.getService();
+ xml = replaceXmlValue(xml, "cookie", _cookie);
+ xml = replaceXmlValue(xml, "ruledn", ruledn);
+ xml = replaceXmlValue(xml, "rulename", ruleName);
+
+ String response = sendRequest(service, xml);
+ return verifySuccess(response);
+ }
+
+ private List<String> listNatPolicies(String tenantName) throws ExecutionException {
+
+ String xml = VnmcXml.LIST_NAT_POLICIES.getXml();
+ String service = VnmcXml.LIST_NAT_POLICIES.getService();
+ xml = replaceXmlValue(xml, "cookie", _cookie);
+ xml = replaceXmlValue(xml, "vdcdn", getDnForTenantVDC(tenantName));
+
+ String response = sendRequest(service, xml);
+
+ List<String> result = new ArrayList<String>();
+ Document xmlDoc = getDocument(response);
+ xmlDoc.normalize();
+ NodeList policyList = xmlDoc.getElementsByTagName("pair");
+ for (int i=0; i < policyList.getLength(); i++) {
+ Node policyNode = policyList.item(i);
+ result.add(policyNode.getAttributes().getNamedItem("key").getNodeValue());
+ }
+
+ return result;
+ }
+
+ private List<String> listAclPolicies(String tenantName) throws ExecutionException {
+
+ String xml = VnmcXml.LIST_ACL_POLICIES.getXml();
+ String service = VnmcXml.LIST_ACL_POLICIES.getService();
+ xml = replaceXmlValue(xml, "cookie", _cookie);
+ xml = replaceXmlValue(xml, "vdcdn", getDnForTenantVDC(tenantName));
+
+ String response = sendRequest(service, xml);
+
+ List<String> result = new ArrayList<String>();
+ Document xmlDoc = getDocument(response);
+ xmlDoc.normalize();
+ NodeList policyList = xmlDoc.getElementsByTagName("pair");
+ for (int i=0; i < policyList.getLength(); i++) {
+ Node policyNode = policyList.item(i);
+ result.add(policyNode.getAttributes().getNamedItem("key").getNodeValue());
+ }
+
+ return result;
+ }
+
+ private List<String> listChildren(String dn) throws ExecutionException {
+
+ String xml = VnmcXml.LIST_CHILDREN.getXml();
+ String service = VnmcXml.LIST_CHILDREN.getService();
+ xml = replaceXmlValue(xml, "cookie", _cookie);
+ xml = replaceXmlValue(xml, "dn", dn);
+
+ String response = sendRequest(service, xml);
+
+ List<String> result = new ArrayList<String>();
+ Document xmlDoc = getDocument(response);
+ xmlDoc.normalize();
+ NodeList policyList = xmlDoc.getElementsByTagName("policyRule");
+ for (int i=0; i < policyList.getLength(); i++) {
+ Node policyNode = policyList.item(i);
+ result.add(policyNode.getAttributes().getNamedItem("name").getNodeValue());
+ }
+
+ return result;
+ }
+
+ @Override
+ public boolean createTenantVDCPFPortPool(String tenantName, String identifier,
+ String startPort, String endPort) throws ExecutionException {
+ return createTenantVDCPortPool(
+ getDnForPFPortPool(tenantName, identifier),
+ getNameForPFPortPool(tenantName, identifier),
+ "PF port pool for " + getNameForPFPortPool(tenantName, identifier),
+ startPort, endPort);
+ }
+
+ @Override
+ public boolean createTenantVDCPFIpPool(String tenantName, String identifier,
+ String ipAddress) throws ExecutionException {
+ return createTenantVDCIpPool(
+ getDnForPFIpPool(tenantName, identifier),
+ getNameForPFIpPool(tenantName, identifier),
+ "PF ip pool for " + getNameForPFIpPool(tenantName, identifier),
+ ipAddress);
+ }
+
+ private String getNameForPFPolicy(String tenantName, String identifier) {
+ return "PF-" + tenantName + "-" + identifier;
+ }
+
+ private String getDnForPFPolicy(String tenantName, String identifier) {
+ return getDnForTenantVDC(tenantName) + "/natpol-" + getNameForPFPolicy(tenantName, identifier);
+ }
+
+ private String getDnForPFPolicyRef(String tenantName, String identifier) {
+ return getDnForNatPolicySet(tenantName) + "/polref-" + getNameForPFPolicy(tenantName, identifier);
+ }
+
+ private String getNameForPFRule(String tenantName, String identifier) {
+ return "Rule-" + tenantName + "-" + identifier;
+ }
+
+ private String getDnForPFRule(String tenantName, String identifier, String policyIdentifier) {
+ return getDnForPFPolicy(tenantName, policyIdentifier) + "/rule-" + getNameForPFRule(tenantName, identifier);
+ }
+
+ @Override
+ public boolean createTenantVDCPFRule(String tenantName,
+ String identifier, String policyIdentifier,
+ String protocol, String publicIp,
+ String startPort, String endPort) throws ExecutionException {
+ String xml = VnmcXml.CREATE_PF_RULE.getXml();
+ String service = VnmcXml.CREATE_PF_RULE.getService();
+ xml = replaceXmlValue(xml, "cookie", _cookie);
+ xml = replaceXmlValue(xml, "natruledn", getDnForPFRule(tenantName, identifier, policyIdentifier));
+ xml = replaceXmlValue(xml, "natrulename", getNameForPFRule(tenantName, identifier));
+ xml = replaceXmlValue(xml, "descr", "PF rule for Tenant VDC " + tenantName);
+ xml = replaceXmlValue(xml, "ippoolname", getNameForPFIpPool(tenantName, policyIdentifier + "-" + identifier));
+ xml = replaceXmlValue(xml, "portpoolname", getNameForPFPortPool(tenantName, policyIdentifier + "-" + identifier));
+ xml = replaceXmlValue(xml, "ip", publicIp);
+ xml = replaceXmlValue(xml, "startport", startPort);
+ xml = replaceXmlValue(xml, "endport", endPort);
+ xml = replaceXmlValue(xml, "protocolvalue", protocol);
+
+ List<String> rules = listChildren(getDnForPFPolicy(tenantName, policyIdentifier));
+ int order = 100;
+ if (rules != null) {
+ order += rules.size();
+ }
+ xml = replaceXmlValue(xml, "order", Integer.toString(order));
+
+ String response = sendRequest(service, xml);
+ return verifySuccess(response);
+ }
+
+ @Override
+ public boolean deleteTenantVDCPFRule(String tenantName, String identifier,
+ String policyIdentifier) throws ExecutionException {
+ return deleteTenantVDCRule(
+ getDnForPFRule(tenantName, identifier, policyIdentifier),
+ getNameForPFRule(tenantName, identifier));
+ }
+
+ @Override
+ public boolean createTenantVDCAclRuleForPF(String tenantName,
+ String identifier, String policyIdentifier, String protocol,
+ String ipAddress, String startPort, String endPort)
+ throws ExecutionException {
+ String xml = VnmcXml.CREATE_ACL_RULE_FOR_PF.getXml();
+ String service = VnmcXml.CREATE_ACL_RULE_FOR_PF.getService();
+ xml = replaceXmlValue(xml, "cookie", _cookie);
+ xml = replaceXmlValue(xml, "aclruledn", getDnForAclRule(tenantName, identifier, policyIdentifier));
+ xml = replaceXmlValue(xml, "aclrulename", getNameForAclRule(tenantName, identifier));
+ xml = replaceXmlValue(xml, "descr", "ACL rule for Tenant VDC " + tenantName);
+ xml = replaceXmlValue(xml, "actiontype", "permit");
+ xml = replaceXmlValue(xml, "protocolvalue", protocol);
+ xml = replaceXmlValue(xml, "ip", ipAddress);
+ xml = replaceXmlValue(xml, "startport", startPort);
+ xml = replaceXmlValue(xml, "endport", endPort);
+
+ List<String> rules = listChildren(getDnForAclPolicy(tenantName, policyIdentifier));
+ int order = 100;
+ if (rules != null) {
+ order += rules.size();
+ }
+ xml = replaceXmlValue(xml, "order", Integer.toString(order));
+
+ String response = sendRequest(service, xml);
+ return verifySuccess(response);
+ }
+
+ @Override
+ public boolean createTenantVDCPFPolicyRef(String tenantName, String identifier) throws ExecutionException {
+ return createTenantVDCNatPolicyRef(
+ getDnForPFPolicyRef(tenantName, identifier),
+ getNameForPFPolicy(tenantName, identifier),
+ tenantName);
+ }
+
+ @Override
+ public boolean createTenantVDCPFPolicy(String tenantName, String identifier) throws ExecutionException {
+ return createTenantVDCNatPolicy(
+ getDnForPFPolicy(tenantName, identifier),
+ getNameForPFPolicy(tenantName, identifier));
+ }
+
+ @Override
+ public boolean deleteTenantVDCPFPolicy(String tenantName, String identifier) throws ExecutionException {
+ return deleteTenantVDCNatPolicy(
+ getDnForPFPolicy(tenantName, identifier),
+ getNameForPFPolicy(tenantName, identifier));
+ }
+
+ private String getNameForDNatIpPool(String tenantName, String identifier) {
+ return "DNATIp-" + tenantName + "-" + identifier;
+ }
+
+ private String getDnForDNatIpPool(String tenantName, String identifier) {
+ return getDnForTenantVDC(tenantName) + "/objgrp-" + getNameForDNatIpPool(tenantName, identifier);
+ }
+
+ @Override
+ public boolean createTenantVDCDNatIpPool(String tenantName,
+ String identifier, String ipAddress) throws ExecutionException {
+ return createTenantVDCIpPool(
+ getDnForDNatIpPool(tenantName, identifier),
+ getNameForDNatIpPool(tenantName, identifier),
+ "DNAT ip pool for " + getNameForDNatIpPool(tenantName, identifier),
+ ipAddress);
+ }
+
+ private String getNameForDNatRule(String tenantName, String identifier) {
+ return "Rule-" + tenantName + "-" + identifier;
+ }
+
+ private String getDnForDNatRule(String tenantName, String identifier, String policyIdentifier) {
+ return getDnForDNatPolicy(tenantName, policyIdentifier) + "/rule-" + getNameForDNatRule(tenantName, identifier);
+ }
+
+ private String getNameForDNatPolicy(String tenantName, String identifier) {
+ return "DNAT-" + tenantName + "-" + identifier;
+ }
+
+ private String getDnForDNatPolicy(String tenantName, String identifier) {
+ return getDnForTenantVDC(tenantName) + "/natpol-" + getNameForDNatPolicy(tenantName, identifier);
+ }
+
+ private String getDnForDNatPolicyRef(String tenantName, String identifier) {
+ return getDnForNatPolicySet(tenantName) + "/polref-" + getNameForDNatPolicy(tenantName, identifier);
+ }
+
+ @Override
+ public boolean createTenantVDCDNatRule(String tenantName,
+ String identifier, String policyIdentifier, String publicIp)
+ throws ExecutionException {
+ String xml = VnmcXml.CREATE_DNAT_RULE.getXml();
+ String service = VnmcXml.CREATE_DNAT_RULE.getService();
+ xml = replaceXmlValue(xml, "cookie", _cookie);
+ xml = replaceXmlValue(xml, "natruledn", getDnForDNatRule(tenantName, identifier, policyIdentifier));
+ xml = replaceXmlValue(xml, "natrulename", getNameForDNatRule(tenantName, identifier));
+ xml = replaceXmlValue(xml, "descr", "DNAT rule for Tenant VDC " + tenantName);
+ xml = replaceXmlValue(xml, "ippoolname", getNameForDNatIpPool(tenantName, policyIdentifier + "-" + identifier));
+ xml = replaceXmlValue(xml, "ip", publicIp);
+
+ List<String> rules = listChildren(getDnForDNatPolicy(tenantName, policyIdentifier));
+ int order = 100;
+ if (rules != null) {
+ order += rules.size();
+ }
+ xml = replaceXmlValue(xml, "order", Integer.toString(order));
+
+ String response = sendRequest(service, xml);
+ return verifySuccess(response);
+ }
+
+ @Override
+ public boolean deleteTenantVDCDNatRule(String tenantName,
+ String identifier, String policyIdentifier)
+ throws ExecutionException {
+ return deleteTenantVDCRule(
+ getDnForDNatRule(tenantName, identifier, policyIdentifier),
+ getNameForDNatRule(tenantName, identifier));
+ }
+
+ @Override
+ public boolean createTenantVDCAclRuleForDNat(String tenantName,
+ String identifier, String policyIdentifier, String ipAddress)
+ throws ExecutionException {
+ String xml = VnmcXml.CREATE_ACL_RULE_FOR_DNAT.getXml();
+ String service = VnmcXml.CREATE_ACL_RULE_FOR_DNAT.getService();
+ xml = replaceXmlValue(xml, "cookie", _cookie);
+ xml = replaceXmlValue(xml, "aclruledn", getDnForAclRule(tenantName, identifier, policyIdentifier));
+ xml = replaceXmlValue(xml, "aclrulename", getNameForAclRule(tenantName, identifier));
+ xml = replaceXmlValue(xml, "descr", "ACL rule for Tenant VDC " + tenantName);
+ xml = replaceXmlValue(xml, "actiontype", "permit");
+ xml = replaceXmlValue(xml, "ip", ipAddress);
+
+ List<String> rules = listChildren(getDnForAclPolicy(tenantName, policyIdentifier));
+ int order = 100;
+ if (rules != null) {
+ order += rules.size();
+ }
+ xml = replaceXmlValue(xml, "order", Integer.toString(order));
+
+ String response = sendRequest(service, xml);
+ return verifySuccess(response);
+ }
+
+ @Override
+ public boolean createTenantVDCDNatPolicyRef(String tenantName,
+ String identifier) throws ExecutionException {
+ return createTenantVDCNatPolicyRef(
+ getDnForDNatPolicyRef(tenantName, identifier),
+ getNameForDNatPolicy(tenantName, identifier),
+ tenantName);
+ }
+
+ @Override
+ public boolean createTenantVDCDNatPolicy(String tenantName,
+ String identifier) throws ExecutionException {
+ return createTenantVDCNatPolicy(
+ getDnForDNatPolicy(tenantName, identifier),
+ getNameForDNatPolicy(tenantName, identifier));
+ }
+
+ @Override
+ public boolean deleteTenantVDCDNatPolicy(String tenantName,
+ String identifier) throws ExecutionException {
+ return deleteTenantVDCNatPolicy(
+ getDnForDNatPolicy(tenantName, identifier),
+ getNameForDNatPolicy(tenantName, identifier));
+ }
+
+ private String getNameForEdgeFirewall(String tenantName) {
+ return "ASA-1000v-" + tenantName;
+ }
+
+ private String getDnForEdgeFirewall(String tenantName) {
+ return getDnForTenantVDC(tenantName) + "/efw-" + getNameForEdgeFirewall(tenantName);
+ }
+
+ private String getNameForEdgeInsideIntf(String tenantName) {
+ return "Edge_Inside"; //TODO: make this configurable
+ }
+
+ private String getNameForEdgeOutsideIntf(String tenantName) {
+ return "Edge_Outside"; //TODO: make this configurable
+ }
+
+ private String getDnForOutsideIntf(String tenantName) {
+ return getDnForEdgeFirewall(tenantName) + "/interface-" + getNameForEdgeOutsideIntf(tenantName);
+ }
+
+ private String getDnForInsideIntf(String tenantName) {
+ return getDnForEdgeFirewall(tenantName) + "/interface-" + getNameForEdgeInsideIntf(tenantName);
+ }
+
+ @Override
+ public boolean createEdgeFirewall(String tenantName, String publicIp, String insideIp,
+ String publicSubnet, String insideSubnet) throws ExecutionException {
+ String xml = VnmcXml.CREATE_EDGE_FIREWALL.getXml();
+ String service = VnmcXml.CREATE_EDGE_FIREWALL.getService();
+ xml = replaceXmlValue(xml, "cookie", _cookie);
+ xml = replaceXmlValue(xml, "edgefwdescr", "Edge Firewall for Tenant VDC " + tenantName);
+ xml = replaceXmlValue(xml, "edgefwname", getNameForEdgeFirewall(tenantName));
+ xml = replaceXmlValue(xml, "edgefwdn", getDnForEdgeFirewall(tenantName));
+ xml = replaceXmlValue(xml, "insideintfname", getNameForEdgeInsideIntf(tenantName));
+ xml = replaceXmlValue(xml, "outsideintfname", getNameForEdgeOutsideIntf(tenantName));
+
+ xml = replaceXmlValue(xml, "insideintfdn", getDnForInsideIntf(tenantName));
+ xml = replaceXmlValue(xml, "outsideintfdn", getDnForOutsideIntf(tenantName));
+
+ xml = replaceXmlValue(xml, "deviceserviceprofiledn", getDnForEdgeFirewall(tenantName) + "/device-service-profile");
+ xml = replaceXmlValue(xml, "outsideintfsp", getDnForOutsideIntf(tenantName) + "/interface-service-profile");
+
+ xml = replaceXmlValue(xml, "secprofileref", getNameForEdgeDeviceSecurityProfile(tenantName));
+ xml = replaceXmlValue(xml, "deviceserviceprofile", getNameForEdgeDeviceServiceProfile(tenantName));
+
+ xml = replaceXmlValue(xml, "insideip", insideIp);
+ xml = replaceXmlValue(xml, "publicip", publicIp);
+ xml = replaceXmlValue(xml, "insidesubnet", insideSubnet);
+ xml = replaceXmlValue(xml, "outsidesubnet", publicSubnet);
+
+ String response = sendRequest(service, xml);
+ return verifySuccess(response);
+ }
+
+ @Override
+ public boolean deleteEdgeFirewall(String tenantName) throws ExecutionException {
+ String xml = VnmcXml.DELETE_EDGE_FIREWALL.getXml();
+ String service = VnmcXml.DELETE_EDGE_FIREWALL.getService();
+ xml = replaceXmlValue(xml, "cookie", _cookie);
+ xml = replaceXmlValue(xml, "edgefwname", getNameForEdgeFirewall(tenantName));
+ xml = replaceXmlValue(xml, "edgefwdn", getDnForEdgeFirewall(tenantName));
+
+ String response = sendRequest(service, xml);
+ return verifySuccess(response);
+ }
+
+ @Override
+ public Map<String, String> listUnAssocAsa1000v() throws ExecutionException {
+ String xml = VnmcXml.LIST_UNASSOC_ASA1000V.getXml();
+ String service = VnmcXml.LIST_UNASSOC_ASA1000V.getService();
+ xml = replaceXmlValue(xml, "cookie", _cookie);
+
+ String response = sendRequest(service, xml);
+
+ Map<String, String> result = new HashMap<String, String>();
+ Document xmlDoc = getDocument(response);
+ xmlDoc.normalize();
+ NodeList fwList = xmlDoc.getElementsByTagName("fwInstance");
+ for (int j=0; j < fwList.getLength(); j++) {
+ Node fwNode = fwList.item(j);
+ result.put(fwNode.getAttributes().getNamedItem("mgmtIp").getNodeValue(),
+ fwNode.getAttributes().getNamedItem("dn").getNodeValue());
+ }
+
+ return result;
+ }
+
+ @Override
+ public boolean assignAsa1000v(String tenantName, String firewallDn) throws ExecutionException {
+ String xml = VnmcXml.ASSIGN_ASA1000V.getXml();
+ String service = VnmcXml.ASSIGN_ASA1000V.getService();
+ xml = replaceXmlValue(xml, "cookie", _cookie);
+ xml = replaceXmlValue(xml, "binddn", getDnForEdgeFirewall(tenantName) + "/binding");
+ xml = replaceXmlValue(xml, "fwdn", firewallDn);
+
+ String response = sendRequest(service, xml);
+ return verifySuccess(response);
+ }
+
+ @Override
+ public boolean unassignAsa1000v(String tenantName, String firewallDn) throws ExecutionException {
+ String xml = VnmcXml.UNASSIGN_ASA1000V.getXml();
+ String service = VnmcXml.UNASSIGN_ASA1000V.getService();
+ xml = replaceXmlValue(xml, "cookie", _cookie);
+ xml = replaceXmlValue(xml, "binddn", getDnForEdgeFirewall(tenantName) + "/binding");
+ xml = replaceXmlValue(xml, "fwdn", firewallDn);
+
+ String response = sendRequest(service, xml);
+ return verifySuccess(response);
+ }
+
+ 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);
+ HttpClient client = new HttpClient();
+ client.getHostConfiguration().setHost(_ip, 443, myhttps);
+ byte[] response = null;
+ PostMethod method = new PostMethod("/xmlIM/" + service);
+
+ method.setRequestBody(xmlRequest);
+
+ try{
+ int statusCode = client.executeMethod(method);
+
+ if (statusCode != HttpStatus.SC_OK) {
+ throw new Exception("Error code : " + statusCode);
+ }
+ 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);
+ }
+
+ private Map<String, String> checkResponse(String xmlResponse, String... keys) throws ExecutionException {
+ Document xmlDoc = getDocument(xmlResponse);
+ Map<String, String> result = new HashMap<String, String>();
+ Node topElement = xmlDoc.getChildNodes().item(0);
+ if (topElement != null) {
+ for (String key: keys){
+ Node valueNode = topElement.getAttributes().getNamedItem(key);
+ result.put(key, valueNode==null?null:valueNode.getNodeValue());
+ }
+ }
+ return result;
+ }
+
+ private boolean verifySuccess(String xmlResponse) throws ExecutionException {
+ Map<String, String> 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
+ */
+
+ private Document getDocument(String xml) throws ExecutionException {
+ StringReader xmlReader = new StringReader("<?xml version=\"1.0\"?> \n" + xml.trim());
+ InputSource xmlSource = new InputSource(xmlReader);
+ Document doc = null;
+
+ try {
+ doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(xmlSource);
+
+ } catch (Exception e) {
+ s_logger.error(e);
+ throw new ExecutionException(e.getMessage());
+ }
+
+ if (doc == null) {
+ throw new ExecutionException("Failed to parse xml " + xml);
+ } else {
+ return doc;
+ }
+ }
+
+ private String replaceXmlTag(String xml, String oldTag, String newTag) {
+ return xml.replaceAll(oldTag, newTag);
+ }
+
+ private String replaceXmlValue(String xml, String marker, String value) {
+ marker = "\\s*%" + marker + "%\\s*";
+
+ if (value == null) {
+ value = "";
+ }
+
+ return xml.replaceAll(marker, value);
+ }
+
+ private String extractXml(String xml, String marker) {
+ String startMarker = "<" + marker + ">";
+ String endMarker = "</" + marker + ">";
+ if (xml.contains(startMarker) && xml.contains(endMarker)) {
+ return xml.substring(xml.indexOf(startMarker) + startMarker.length(), xml.indexOf(endMarker));
+ } else {
+ return null;
+ }
+
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/e94c7025/plugins/network-elements/cisco-vnmc/src/com/cloud/network/cisco/CiscoVnmcController.java
----------------------------------------------------------------------
diff --git a/plugins/network-elements/cisco-vnmc/src/com/cloud/network/cisco/CiscoVnmcController.java b/plugins/network-elements/cisco-vnmc/src/com/cloud/network/cisco/CiscoVnmcController.java
new file mode 100644
index 0000000..e756165
--- /dev/null
+++ b/plugins/network-elements/cisco-vnmc/src/com/cloud/network/cisco/CiscoVnmcController.java
@@ -0,0 +1,40 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements. See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership. The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License. You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied. See the License for the
+// specific language governing permissions and limitations
+// under the License.
+package com.cloud.network.cisco;
+
+import org.apache.cloudstack.api.Identity;
+import org.apache.cloudstack.api.InternalIdentity;
+
+import com.cloud.org.Grouping;
+
+public interface CiscoVnmcController extends Grouping, InternalIdentity, Identity {
+
+ long getId();
+
+ String getUuid();
+
+ void setUuid(String uuid);
+
+ long getPhysicalNetworkId();
+
+ long getHostId();
+
+ String getProviderName();
+
+ String getDeviceName();
+
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/e94c7025/plugins/network-elements/cisco-vnmc/src/com/cloud/network/cisco/CiscoVnmcControllerVO.java
----------------------------------------------------------------------
diff --git a/plugins/network-elements/cisco-vnmc/src/com/cloud/network/cisco/CiscoVnmcControllerVO.java b/plugins/network-elements/cisco-vnmc/src/com/cloud/network/cisco/CiscoVnmcControllerVO.java
new file mode 100644
index 0000000..4207f1d
--- /dev/null
+++ b/plugins/network-elements/cisco-vnmc/src/com/cloud/network/cisco/CiscoVnmcControllerVO.java
@@ -0,0 +1,102 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements. See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership. The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License. You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied. See the License for the
+// specific language governing permissions and limitations
+// under the License.
+package com.cloud.network.cisco;
+
+import java.util.UUID;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.Table;
+
+@Entity
+@Table(name="external_cisco_vnmc_devices")
+public class CiscoVnmcControllerVO implements CiscoVnmcController {
+
+ @Id
+ @GeneratedValue(strategy = GenerationType.IDENTITY)
+ @Column(name="id")
+ private long id;
+
+ @Column(name="uuid")
+ private String uuid;
+
+ @Column(name="host_id")
+ private long hostId;
+
+ @Column(name="physical_network_id")
+ private long physicalNetworkId;
+
+ @Column(name="provider_name")
+ private String providerName;
+
+ @Column(name="device_name")
+ private String deviceName;
+
+
+ public CiscoVnmcControllerVO() {
+ this.uuid = UUID.randomUUID().toString();
+ }
+
+ public CiscoVnmcControllerVO(long hostId, long physicalNetworkId,
+ String providerName, String deviceName) {
+ super();
+ this.hostId = hostId;
+ this.physicalNetworkId = physicalNetworkId;
+ this.providerName = providerName;
+ this.deviceName = deviceName;
+ this.uuid = UUID.randomUUID().toString();
+ }
+
+ @Override
+ public long getId() {
+ return id;
+ }
+
+ @Override
+ public String getUuid() {
+ return uuid;
+ }
+
+ @Override
+ public void setUuid(String uuid) {
+ this.uuid = uuid;
+ }
+
+ @Override
+ public long getPhysicalNetworkId() {
+ return physicalNetworkId;
+ }
+
+ @Override
+ public long getHostId() {
+ return hostId;
+ }
+
+ @Override
+ public String getProviderName() {
+ return providerName;
+ }
+
+ @Override
+ public String getDeviceName() {
+ return deviceName;
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/e94c7025/plugins/network-elements/cisco-vnmc/src/com/cloud/network/cisco/NetworkAsa1000vMap.java
----------------------------------------------------------------------
diff --git a/plugins/network-elements/cisco-vnmc/src/com/cloud/network/cisco/NetworkAsa1000vMap.java b/plugins/network-elements/cisco-vnmc/src/com/cloud/network/cisco/NetworkAsa1000vMap.java
new file mode 100755
index 0000000..2e004dc
--- /dev/null
+++ b/plugins/network-elements/cisco-vnmc/src/com/cloud/network/cisco/NetworkAsa1000vMap.java
@@ -0,0 +1,31 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements. See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership. The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License. You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied. See the License for the
+// specific language governing permissions and limitations
+// under the License.
+package com.cloud.network.cisco;
+
+import org.apache.cloudstack.api.InternalIdentity;
+
+import com.cloud.org.Grouping;
+
+public interface NetworkAsa1000vMap extends Grouping, InternalIdentity {
+
+ long getId();
+
+ long getNetworkId();
+
+ long getAsa1000vId();
+
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/e94c7025/plugins/network-elements/cisco-vnmc/src/com/cloud/network/cisco/NetworkAsa1000vMapVO.java
----------------------------------------------------------------------
diff --git a/plugins/network-elements/cisco-vnmc/src/com/cloud/network/cisco/NetworkAsa1000vMapVO.java b/plugins/network-elements/cisco-vnmc/src/com/cloud/network/cisco/NetworkAsa1000vMapVO.java
new file mode 100755
index 0000000..9638b6f
--- /dev/null
+++ b/plugins/network-elements/cisco-vnmc/src/com/cloud/network/cisco/NetworkAsa1000vMapVO.java
@@ -0,0 +1,73 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements. See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership. The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License. You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied. See the License for the
+// specific language governing permissions and limitations
+// under the License.
+package com.cloud.network.cisco;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.Table;
+
+@Entity
+@Table(name="network_asa1000v_map")
+public class NetworkAsa1000vMapVO implements NetworkAsa1000vMap {
+
+ @Id
+ @GeneratedValue(strategy = GenerationType.IDENTITY)
+ @Column(name="id")
+ private long id;
+
+ @Column(name="network_id")
+ private long networkId;
+
+ @Column(name="asa1000v_id")
+ private long asa1000vId;
+
+ public NetworkAsa1000vMapVO() {
+ }
+
+ public NetworkAsa1000vMapVO(long networkId, long asa1000vId) {
+ super();
+ this.networkId = networkId;
+ this.asa1000vId = asa1000vId;
+ }
+
+ @Override
+ public long getId() {
+ return id;
+ }
+
+ @Override
+ public long getAsa1000vId() {
+ return asa1000vId;
+ }
+
+ public void setAsa1000vId(long asa1000vId) {
+ this.asa1000vId = asa1000vId;
+ }
+
+ @Override
+ public long getNetworkId() {
+ return networkId;
+ }
+
+ public void setNetworkId(long networkId) {
+ this.networkId = networkId;
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/e94c7025/plugins/network-elements/cisco-vnmc/src/com/cloud/network/dao/CiscoAsa1000vDao.java
----------------------------------------------------------------------
diff --git a/plugins/network-elements/cisco-vnmc/src/com/cloud/network/dao/CiscoAsa1000vDao.java b/plugins/network-elements/cisco-vnmc/src/com/cloud/network/dao/CiscoAsa1000vDao.java
new file mode 100755
index 0000000..1a380b1
--- /dev/null
+++ b/plugins/network-elements/cisco-vnmc/src/com/cloud/network/dao/CiscoAsa1000vDao.java
@@ -0,0 +1,33 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements. See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership. The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License. You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied. See the License for the
+// specific language governing permissions and limitations
+// under the License.
+package com.cloud.network.dao;
+
+import java.util.List;
+
+import com.cloud.network.cisco.CiscoAsa1000vDeviceVO;
+import com.cloud.utils.db.GenericDao;
+
+public interface CiscoAsa1000vDao extends GenericDao<CiscoAsa1000vDeviceVO, Long>{
+ /**
+ * list all the Cisco Asa 1000v devices added in to this physical network
+ * @param physicalNetworkId physical Network Id
+ * @return list of CiscoAsa1000vDeviceVO for this physical network.
+ */
+ List<CiscoAsa1000vDeviceVO> listByPhysicalNetwork(long physicalNetworkId);
+
+ CiscoAsa1000vDeviceVO findByManagementIp(String managementIp);
+}
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/e94c7025/plugins/network-elements/cisco-vnmc/src/com/cloud/network/dao/CiscoAsa1000vDaoImpl.java
----------------------------------------------------------------------
diff --git a/plugins/network-elements/cisco-vnmc/src/com/cloud/network/dao/CiscoAsa1000vDaoImpl.java b/plugins/network-elements/cisco-vnmc/src/com/cloud/network/dao/CiscoAsa1000vDaoImpl.java
new file mode 100755
index 0000000..a5820de
--- /dev/null
+++ b/plugins/network-elements/cisco-vnmc/src/com/cloud/network/dao/CiscoAsa1000vDaoImpl.java
@@ -0,0 +1,63 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements. See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership. The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License. You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied. See the License for the
+// specific language governing permissions and limitations
+// under the License.
+package com.cloud.network.dao;
+
+import java.util.List;
+
+import javax.ejb.Local;
+
+import org.springframework.stereotype.Component;
+
+import com.cloud.network.cisco.CiscoAsa1000vDeviceVO;
+import com.cloud.utils.db.GenericDaoBase;
+import com.cloud.utils.db.SearchBuilder;
+import com.cloud.utils.db.SearchCriteria;
+import com.cloud.utils.db.SearchCriteria.Op;
+
+@Component
+@Local(value=CiscoAsa1000vDao.class)
+public class CiscoAsa1000vDaoImpl extends GenericDaoBase<CiscoAsa1000vDeviceVO, Long>
+ implements CiscoAsa1000vDao {
+
+ protected final SearchBuilder<CiscoAsa1000vDeviceVO> physicalNetworkIdSearch;
+ protected final SearchBuilder<CiscoAsa1000vDeviceVO> managementIpSearch;
+
+ public CiscoAsa1000vDaoImpl() {
+ physicalNetworkIdSearch = createSearchBuilder();
+ physicalNetworkIdSearch.and("physicalNetworkId", physicalNetworkIdSearch.entity().getPhysicalNetworkId(), Op.EQ);
+ physicalNetworkIdSearch.done();
+
+ managementIpSearch = createSearchBuilder();
+ managementIpSearch.and("managementIp", managementIpSearch.entity().getManagementIp(), Op.EQ);
+ managementIpSearch.done();
+ }
+
+ @Override
+ public List<CiscoAsa1000vDeviceVO> listByPhysicalNetwork(long physicalNetworkId) {
+ SearchCriteria<CiscoAsa1000vDeviceVO> sc = physicalNetworkIdSearch.create();
+ sc.setParameters("physicalNetworkId", physicalNetworkId);
+ return search(sc, null);
+ }
+
+ @Override
+ public CiscoAsa1000vDeviceVO findByManagementIp(String managementIp) {
+ SearchCriteria<CiscoAsa1000vDeviceVO> sc = managementIpSearch.create();
+ sc.setParameters("managementIp", managementIp);
+ return findOneBy(sc);
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/e94c7025/plugins/network-elements/cisco-vnmc/src/com/cloud/network/dao/CiscoVnmcDao.java
----------------------------------------------------------------------
diff --git a/plugins/network-elements/cisco-vnmc/src/com/cloud/network/dao/CiscoVnmcDao.java b/plugins/network-elements/cisco-vnmc/src/com/cloud/network/dao/CiscoVnmcDao.java
new file mode 100644
index 0000000..f0b3948
--- /dev/null
+++ b/plugins/network-elements/cisco-vnmc/src/com/cloud/network/dao/CiscoVnmcDao.java
@@ -0,0 +1,32 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements. See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership. The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License. You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied. See the License for the
+// specific language governing permissions and limitations
+// under the License.
+package com.cloud.network.dao;
+
+import java.util.List;
+
+import com.cloud.network.cisco.CiscoVnmcControllerVO;
+import com.cloud.utils.db.GenericDao;
+
+public interface CiscoVnmcDao extends GenericDao<CiscoVnmcControllerVO, Long>{
+ /**
+ * list all the Cisco VNMC devices added in to this physical network
+ * @param physicalNetworkId physical Network Id
+ * @return list of CiscoVnmcDeviceVO for this physical network.
+ */
+ List<CiscoVnmcControllerVO> listByPhysicalNetwork(long physicalNetworkId);
+
+}
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/e94c7025/plugins/network-elements/cisco-vnmc/src/com/cloud/network/dao/CiscoVnmcDaoImpl.java
----------------------------------------------------------------------
diff --git a/plugins/network-elements/cisco-vnmc/src/com/cloud/network/dao/CiscoVnmcDaoImpl.java b/plugins/network-elements/cisco-vnmc/src/com/cloud/network/dao/CiscoVnmcDaoImpl.java
new file mode 100644
index 0000000..8951810
--- /dev/null
+++ b/plugins/network-elements/cisco-vnmc/src/com/cloud/network/dao/CiscoVnmcDaoImpl.java
@@ -0,0 +1,51 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements. See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership. The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License. You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied. See the License for the
+// specific language governing permissions and limitations
+// under the License.
+package com.cloud.network.dao;
+
+import java.util.List;
+
+import javax.ejb.Local;
+
+import org.springframework.stereotype.Component;
+
+import com.cloud.network.cisco.CiscoVnmcControllerVO;
+import com.cloud.utils.db.GenericDaoBase;
+import com.cloud.utils.db.SearchBuilder;
+import com.cloud.utils.db.SearchCriteria;
+import com.cloud.utils.db.SearchCriteria.Op;
+
+@Component
+@Local(value=CiscoVnmcDao.class)
+public class CiscoVnmcDaoImpl extends GenericDaoBase<CiscoVnmcControllerVO, Long>
+ implements CiscoVnmcDao {
+
+ protected final SearchBuilder<CiscoVnmcControllerVO> physicalNetworkIdSearch;
+
+ public CiscoVnmcDaoImpl() {
+ physicalNetworkIdSearch = createSearchBuilder();
+ physicalNetworkIdSearch.and("physicalNetworkId", physicalNetworkIdSearch.entity().getPhysicalNetworkId(), Op.EQ);
+ physicalNetworkIdSearch.done();
+ }
+
+ @Override
+ public List<CiscoVnmcControllerVO> listByPhysicalNetwork(long physicalNetworkId) {
+ SearchCriteria<CiscoVnmcControllerVO> sc = physicalNetworkIdSearch.create();
+ sc.setParameters("physicalNetworkId", physicalNetworkId);
+ return search(sc, null);
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/e94c7025/plugins/network-elements/cisco-vnmc/src/com/cloud/network/dao/NetworkAsa1000vMapDao.java
----------------------------------------------------------------------
diff --git a/plugins/network-elements/cisco-vnmc/src/com/cloud/network/dao/NetworkAsa1000vMapDao.java b/plugins/network-elements/cisco-vnmc/src/com/cloud/network/dao/NetworkAsa1000vMapDao.java
new file mode 100755
index 0000000..053f4af
--- /dev/null
+++ b/plugins/network-elements/cisco-vnmc/src/com/cloud/network/dao/NetworkAsa1000vMapDao.java
@@ -0,0 +1,28 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements. See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership. The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License. You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied. See the License for the
+// specific language governing permissions and limitations
+// under the License.
+package com.cloud.network.dao;
+
+import com.cloud.network.cisco.NetworkAsa1000vMapVO;
+import com.cloud.utils.db.GenericDao;
+
+public interface NetworkAsa1000vMapDao extends GenericDao<NetworkAsa1000vMapVO, Long>{
+
+ NetworkAsa1000vMapVO findByNetworkId(long networkId);
+
+ NetworkAsa1000vMapVO findByAsa1000vId(long asa1000vId);
+
+}
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/e94c7025/plugins/network-elements/cisco-vnmc/src/com/cloud/network/dao/NetworkAsa1000vMapDaoImpl.java
----------------------------------------------------------------------
diff --git a/plugins/network-elements/cisco-vnmc/src/com/cloud/network/dao/NetworkAsa1000vMapDaoImpl.java b/plugins/network-elements/cisco-vnmc/src/com/cloud/network/dao/NetworkAsa1000vMapDaoImpl.java
new file mode 100755
index 0000000..692b3d6
--- /dev/null
+++ b/plugins/network-elements/cisco-vnmc/src/com/cloud/network/dao/NetworkAsa1000vMapDaoImpl.java
@@ -0,0 +1,61 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements. See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership. The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License. You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied. See the License for the
+// specific language governing permissions and limitations
+// under the License.
+package com.cloud.network.dao;
+
+import javax.ejb.Local;
+
+import org.springframework.stereotype.Component;
+
+import com.cloud.network.cisco.NetworkAsa1000vMapVO;
+import com.cloud.utils.db.GenericDaoBase;
+import com.cloud.utils.db.SearchBuilder;
+import com.cloud.utils.db.SearchCriteria;
+import com.cloud.utils.db.SearchCriteria.Op;
+
+@Component
+@Local(value=NetworkAsa1000vMapDao.class)
+public class NetworkAsa1000vMapDaoImpl extends GenericDaoBase<NetworkAsa1000vMapVO, Long>
+ implements NetworkAsa1000vMapDao {
+
+ protected final SearchBuilder<NetworkAsa1000vMapVO> networkSearch;
+ protected final SearchBuilder<NetworkAsa1000vMapVO> asa1000vSearch;
+
+ public NetworkAsa1000vMapDaoImpl() {
+ networkSearch = createSearchBuilder();
+ networkSearch.and("networkId", networkSearch.entity().getNetworkId(), Op.EQ);
+ networkSearch.done();
+
+ asa1000vSearch = createSearchBuilder();
+ asa1000vSearch.and("asa1000vId", asa1000vSearch.entity().getAsa1000vId(), Op.EQ);
+ asa1000vSearch.done();
+ }
+
+ @Override
+ public NetworkAsa1000vMapVO findByNetworkId(long networkId) {
+ SearchCriteria<NetworkAsa1000vMapVO> sc = networkSearch.create();
+ sc.setParameters("networkId", networkId);
+ return findOneBy(sc);
+ }
+
+ @Override
+ public NetworkAsa1000vMapVO findByAsa1000vId(long asa1000vId) {
+ SearchCriteria<NetworkAsa1000vMapVO> sc = asa1000vSearch.create();
+ sc.setParameters("asa1000vId", asa1000vId);
+ return findOneBy(sc);
+ }
+
+}