diff --git a/client/pom.xml b/client/pom.xml
index 9157894ba40..37b9c39b904 100644
--- a/client/pom.xml
+++ b/client/pom.xml
@@ -929,21 +929,6 @@
-
- srx
-
-
- noredist
-
-
-
-
- org.apache.cloudstack
- cloud-plugin-network-srx
- ${project.version}
-
-
-
vmware
diff --git a/plugins/network-elements/f5/pom.xml b/plugins/network-elements/f5/pom.xml
deleted file mode 100644
index 7f4ef07b713..00000000000
--- a/plugins/network-elements/f5/pom.xml
+++ /dev/null
@@ -1,41 +0,0 @@
-
-
- 4.0.0
- cloud-plugin-network-f5
- Apache CloudStack Plugin - F5
-
- org.apache.cloudstack
- cloudstack-plugins
- 4.18.0.0-SNAPSHOT
- ../../pom.xml
-
-
-
- com.cloud.com.f5
- icontrol
- 12.1
-
-
- commons-discovery
- commons-discovery
-
-
-
diff --git a/plugins/network-elements/f5/src/main/java/com/cloud/api/commands/AddExternalLoadBalancerCmd.java b/plugins/network-elements/f5/src/main/java/com/cloud/api/commands/AddExternalLoadBalancerCmd.java
deleted file mode 100644
index 6deea1063d5..00000000000
--- a/plugins/network-elements/f5/src/main/java/com/cloud/api/commands/AddExternalLoadBalancerCmd.java
+++ /dev/null
@@ -1,118 +0,0 @@
-// 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.api.commands;
-
-import javax.inject.Inject;
-
-import org.apache.log4j.Logger;
-
-import org.apache.cloudstack.api.APICommand;
-import org.apache.cloudstack.api.ApiConstants;
-import org.apache.cloudstack.api.ApiErrorCode;
-import org.apache.cloudstack.api.BaseCmd;
-import org.apache.cloudstack.api.Parameter;
-import org.apache.cloudstack.api.ServerApiException;
-import org.apache.cloudstack.api.response.ExternalLoadBalancerResponse;
-import org.apache.cloudstack.api.response.ZoneResponse;
-
-import com.cloud.exception.InvalidParameterValueException;
-import com.cloud.host.Host;
-import com.cloud.network.element.F5ExternalLoadBalancerElementService;
-import com.cloud.user.Account;
-import com.cloud.utils.exception.CloudRuntimeException;
-
-@APICommand(name = "addExternalLoadBalancer", description = "Adds F5 external load balancer appliance.", responseObject = ExternalLoadBalancerResponse.class,
- requestHasSensitiveInfo = true, responseHasSensitiveInfo = false)
-@Deprecated
-// API supported only for backward compatibility.
-public class AddExternalLoadBalancerCmd extends BaseCmd {
- public static final Logger s_logger = Logger.getLogger(AddExternalLoadBalancerCmd.class.getName());
- private static final String s_name = "addexternalloadbalancerresponse";
-
- /////////////////////////////////////////////////////
- //////////////// API parameters /////////////////////
- /////////////////////////////////////////////////////
-
- @Parameter(name = ApiConstants.ZONE_ID,
- type = CommandType.UUID,
- entityType = ZoneResponse.class,
- required = true,
- description = "Zone in which to add the external load balancer appliance.")
- private Long zoneId;
-
- @Parameter(name = ApiConstants.URL, type = CommandType.STRING, required = true, description = "URL of the external load balancer appliance.")
- private String url;
-
- @Parameter(name = ApiConstants.USERNAME, type = CommandType.STRING, required = true, description = "Username of the external load balancer appliance.")
- private String username;
-
- @Parameter(name = ApiConstants.PASSWORD, type = CommandType.STRING, required = true, description = "Password of the external load balancer appliance.")
- private String password;
-
- ///////////////////////////////////////////////////
- /////////////////// Accessors ///////////////////////
- /////////////////////////////////////////////////////
-
- public Long getZoneId() {
- return zoneId;
- }
-
- public String getUrl() {
- return url;
- }
-
- public String getUsername() {
- return username;
- }
-
- public String getPassword() {
- return password;
- }
-
- @Inject
- F5ExternalLoadBalancerElementService _f5DeviceManagerService;
-
- /////////////////////////////////////////////////////
- /////////////// API Implementation///////////////////
- /////////////////////////////////////////////////////
-
- @Override
- public String getCommandName() {
- return s_name;
- }
-
- @Override
- public long getEntityOwnerId() {
- return Account.ACCOUNT_ID_SYSTEM;
- }
-
- @Override
- public void execute() {
- try {
- Host externalLoadBalancer = _f5DeviceManagerService.addExternalLoadBalancer(this);
- ExternalLoadBalancerResponse response = _f5DeviceManagerService.createExternalLoadBalancerResponse(externalLoadBalancer);
- response.setObjectName("externalloadbalancer");
- response.setResponseName(getCommandName());
- this.setResponseObject(response);
- } catch (InvalidParameterValueException ipve) {
- throw new ServerApiException(ApiErrorCode.PARAM_ERROR, ipve.getMessage());
- } catch (CloudRuntimeException cre) {
- throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, cre.getMessage());
- }
- }
-}
diff --git a/plugins/network-elements/f5/src/main/java/com/cloud/api/commands/AddF5LoadBalancerCmd.java b/plugins/network-elements/f5/src/main/java/com/cloud/api/commands/AddF5LoadBalancerCmd.java
deleted file mode 100644
index 951439ddb65..00000000000
--- a/plugins/network-elements/f5/src/main/java/com/cloud/api/commands/AddF5LoadBalancerCmd.java
+++ /dev/null
@@ -1,143 +0,0 @@
-// 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.api.commands;
-
-import javax.inject.Inject;
-
-import org.apache.log4j.Logger;
-
-import org.apache.cloudstack.api.APICommand;
-import org.apache.cloudstack.api.ApiConstants;
-import org.apache.cloudstack.api.ApiErrorCode;
-import org.apache.cloudstack.api.BaseAsyncCmd;
-import org.apache.cloudstack.api.Parameter;
-import org.apache.cloudstack.api.ServerApiException;
-import org.apache.cloudstack.api.response.PhysicalNetworkResponse;
-import org.apache.cloudstack.context.CallContext;
-
-import com.cloud.api.response.F5LoadBalancerResponse;
-import com.cloud.event.EventTypes;
-import com.cloud.exception.ConcurrentOperationException;
-import com.cloud.exception.InsufficientCapacityException;
-import com.cloud.exception.InvalidParameterValueException;
-import com.cloud.exception.ResourceAllocationException;
-import com.cloud.exception.ResourceUnavailableException;
-import com.cloud.network.dao.ExternalLoadBalancerDeviceVO;
-import com.cloud.network.element.F5ExternalLoadBalancerElementService;
-import com.cloud.utils.exception.CloudRuntimeException;
-
-@APICommand(name = "addF5LoadBalancer", responseObject = F5LoadBalancerResponse.class, description = "Adds a F5 BigIP load balancer device",
- requestHasSensitiveInfo = false, responseHasSensitiveInfo = false)
-public class AddF5LoadBalancerCmd extends BaseAsyncCmd {
-
- public static final Logger s_logger = Logger.getLogger(AddF5LoadBalancerCmd.class.getName());
- private static final String s_name = "addf5bigiploadbalancerresponse";
- @Inject
- F5ExternalLoadBalancerElementService _f5DeviceManagerService;
-
- /////////////////////////////////////////////////////
- //////////////// API parameters /////////////////////
- /////////////////////////////////////////////////////
-
- @Parameter(name = ApiConstants.PHYSICAL_NETWORK_ID,
- type = CommandType.UUID,
- entityType = PhysicalNetworkResponse.class,
- required = true,
- description = "the Physical Network ID")
- private Long physicalNetworkId;
-
- @Parameter(name = ApiConstants.URL, type = CommandType.STRING, required = true, description = "URL of the F5 load balancer appliance.")
- private String url;
-
- @Parameter(name = ApiConstants.USERNAME, type = CommandType.STRING, required = true, description = "Credentials to reach F5 BigIP load balancer device")
- private String username;
-
- @Parameter(name = ApiConstants.PASSWORD, type = CommandType.STRING, required = true, description = "Credentials to reach F5 BigIP load balancer device")
- private String password;
-
- @Parameter(name = ApiConstants.NETWORK_DEVICE_TYPE, type = CommandType.STRING, required = true, description = "supports only F5BigIpLoadBalancer")
- private String deviceType;
-
- /////////////////////////////////////////////////////
- /////////////////// Accessors ///////////////////////
- /////////////////////////////////////////////////////
-
- public Long getPhysicalNetworkId() {
- return physicalNetworkId;
- }
-
- public String getUrl() {
- return url;
- }
-
- public String getUsername() {
- return username;
- }
-
- public String getPassword() {
- return password;
- }
-
- public String getDeviceType() {
- return deviceType;
- }
-
- /////////////////////////////////////////////////////
- /////////////// API Implementation///////////////////
- /////////////////////////////////////////////////////
-
- @Override
- public void execute() throws ResourceUnavailableException, InsufficientCapacityException, ServerApiException, ConcurrentOperationException,
- ResourceAllocationException {
- try {
- ExternalLoadBalancerDeviceVO lbDeviceVO = _f5DeviceManagerService.addF5LoadBalancer(this);
- if (lbDeviceVO != null) {
- F5LoadBalancerResponse response = _f5DeviceManagerService.createF5LoadBalancerResponse(lbDeviceVO);
- response.setObjectName("f5loadbalancer");
- response.setResponseName(getCommandName());
- this.setResponseObject(response);
- } else {
- throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to add F5 Big IP load balancer due to internal error.");
- }
- } catch (InvalidParameterValueException invalidParamExcp) {
- throw new ServerApiException(ApiErrorCode.PARAM_ERROR, invalidParamExcp.getMessage());
- } catch (CloudRuntimeException runtimeExcp) {
- throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, runtimeExcp.getMessage());
- }
- }
-
- @Override
- public String getEventDescription() {
- return "Adding a F5 Big Ip load balancer device";
- }
-
- @Override
- public String getEventType() {
- return EventTypes.EVENT_EXTERNAL_LB_DEVICE_ADD;
- }
-
- @Override
- public String getCommandName() {
- return s_name;
- }
-
- @Override
- public long getEntityOwnerId() {
- return CallContext.current().getCallingAccount().getId();
- }
-}
diff --git a/plugins/network-elements/f5/src/main/java/com/cloud/api/commands/ConfigureF5LoadBalancerCmd.java b/plugins/network-elements/f5/src/main/java/com/cloud/api/commands/ConfigureF5LoadBalancerCmd.java
deleted file mode 100644
index dc520ff7100..00000000000
--- a/plugins/network-elements/f5/src/main/java/com/cloud/api/commands/ConfigureF5LoadBalancerCmd.java
+++ /dev/null
@@ -1,124 +0,0 @@
-// 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.api.commands;
-
-import javax.inject.Inject;
-
-import org.apache.log4j.Logger;
-
-import org.apache.cloudstack.api.APICommand;
-import org.apache.cloudstack.api.ApiConstants;
-import org.apache.cloudstack.api.ApiErrorCode;
-import org.apache.cloudstack.api.BaseAsyncCmd;
-import org.apache.cloudstack.api.Parameter;
-import org.apache.cloudstack.api.ServerApiException;
-import org.apache.cloudstack.context.CallContext;
-
-import com.cloud.api.response.F5LoadBalancerResponse;
-import com.cloud.event.EventTypes;
-import com.cloud.exception.ConcurrentOperationException;
-import com.cloud.exception.InsufficientCapacityException;
-import com.cloud.exception.InvalidParameterValueException;
-import com.cloud.exception.ResourceAllocationException;
-import com.cloud.exception.ResourceUnavailableException;
-import com.cloud.network.dao.ExternalLoadBalancerDeviceVO;
-import com.cloud.network.element.F5ExternalLoadBalancerElementService;
-import com.cloud.utils.exception.CloudRuntimeException;
-
-@APICommand(name = "configureF5LoadBalancer", responseObject = F5LoadBalancerResponse.class, description = "configures a F5 load balancer device",
- requestHasSensitiveInfo = false, responseHasSensitiveInfo = false)
-public class ConfigureF5LoadBalancerCmd extends BaseAsyncCmd {
-
- public static final Logger s_logger = Logger.getLogger(ConfigureF5LoadBalancerCmd.class.getName());
- private static final String s_name = "configuref5Rloadbalancerresponse";
- @Inject
- F5ExternalLoadBalancerElementService _f5DeviceManagerService;
-
- /////////////////////////////////////////////////////
- //////////////// API parameters /////////////////////
- /////////////////////////////////////////////////////
-
- @Parameter(name = ApiConstants.LOAD_BALANCER_DEVICE_ID,
- type = CommandType.UUID,
- entityType = F5LoadBalancerResponse.class,
- required = true,
- description = "F5 load balancer device ID")
- private Long lbDeviceId;
-
- @Parameter(name = ApiConstants.LOAD_BALANCER_DEVICE_CAPACITY,
- type = CommandType.LONG,
- required = false,
- description = "capacity of the device, Capacity will be interpreted as number of networks device can handle")
- private Long capacity;
-
- /////////////////////////////////////////////////////
- /////////////////// Accessors ///////////////////////
- /////////////////////////////////////////////////////
-
- public Long getLoadBalancerDeviceId() {
- return lbDeviceId;
- }
-
- public Long getLoadBalancerCapacity() {
- return capacity;
- }
-
- /////////////////////////////////////////////////////
- /////////////// API Implementation///////////////////
- /////////////////////////////////////////////////////
-
- @Override
- public void execute() throws ResourceUnavailableException, InsufficientCapacityException, ServerApiException, ConcurrentOperationException,
- ResourceAllocationException {
- try {
- ExternalLoadBalancerDeviceVO lbDeviceVO = _f5DeviceManagerService.configureF5LoadBalancer(this);
- if (lbDeviceVO != null) {
- F5LoadBalancerResponse response = _f5DeviceManagerService.createF5LoadBalancerResponse(lbDeviceVO);
- response.setObjectName("f5loadbalancer");
- response.setResponseName(getCommandName());
- this.setResponseObject(response);
- } else {
- throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to configure F5 load balancer due to internal error.");
- }
- } catch (InvalidParameterValueException invalidParamExcp) {
- throw new ServerApiException(ApiErrorCode.PARAM_ERROR, invalidParamExcp.getMessage());
- } catch (CloudRuntimeException runtimeExcp) {
- throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, runtimeExcp.getMessage());
- }
- }
-
- @Override
- public String getEventDescription() {
- return "Configuring a F5 load balancer device";
- }
-
- @Override
- public String getEventType() {
- return EventTypes.EVENT_EXTERNAL_LB_DEVICE_CONFIGURE;
- }
-
- @Override
- public String getCommandName() {
- return s_name;
- }
-
- @Override
- public long getEntityOwnerId() {
- return CallContext.current().getCallingAccount().getId();
- }
-}
diff --git a/plugins/network-elements/f5/src/main/java/com/cloud/api/commands/DeleteExternalLoadBalancerCmd.java b/plugins/network-elements/f5/src/main/java/com/cloud/api/commands/DeleteExternalLoadBalancerCmd.java
deleted file mode 100644
index b695ce4256d..00000000000
--- a/plugins/network-elements/f5/src/main/java/com/cloud/api/commands/DeleteExternalLoadBalancerCmd.java
+++ /dev/null
@@ -1,96 +0,0 @@
-// 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.api.commands;
-
-import javax.inject.Inject;
-
-import org.apache.log4j.Logger;
-
-import org.apache.cloudstack.api.APICommand;
-import org.apache.cloudstack.api.ApiConstants;
-import org.apache.cloudstack.api.ApiErrorCode;
-import org.apache.cloudstack.api.BaseCmd;
-import org.apache.cloudstack.api.Parameter;
-import org.apache.cloudstack.api.ServerApiException;
-import org.apache.cloudstack.api.response.HostResponse;
-import org.apache.cloudstack.api.response.SuccessResponse;
-
-import com.cloud.exception.InvalidParameterValueException;
-import com.cloud.network.element.F5ExternalLoadBalancerElementService;
-import com.cloud.user.Account;
-
-@APICommand(name = "deleteExternalLoadBalancer", description = "Deletes a F5 external load balancer appliance added in a zone.", responseObject = SuccessResponse.class,
- requestHasSensitiveInfo = false, responseHasSensitiveInfo = false)
-@Deprecated
-// API supported for backward compatibility.
-public class DeleteExternalLoadBalancerCmd extends BaseCmd {
- public static final Logger s_logger = Logger.getLogger(DeleteExternalLoadBalancerCmd.class.getName());
- private static final String s_name = "deleteexternalloadbalancerresponse";
-
- /////////////////////////////////////////////////////
- //////////////// API parameters /////////////////////
- /////////////////////////////////////////////////////
-
- @Parameter(name = ApiConstants.ID,
- type = CommandType.UUID,
- entityType = HostResponse.class,
- required = true,
- description = "Id of the external loadbalancer appliance.")
- private Long id;
-
- ///////////////////////////////////////////////////
- /////////////////// Accessors ///////////////////////
- /////////////////////////////////////////////////////
-
- public Long getId() {
- return id;
- }
-
- /////////////////////////////////////////////////////
- /////////////// API Implementation///////////////////
- /////////////////////////////////////////////////////
-
- @Inject
- F5ExternalLoadBalancerElementService _f5DeviceManagerService;
-
- @Override
- public String getCommandName() {
- return s_name;
- }
-
- @Override
- public long getEntityOwnerId() {
- return Account.ACCOUNT_ID_SYSTEM;
- }
-
- @Override
- public void execute() {
- try {
- boolean result = _f5DeviceManagerService.deleteExternalLoadBalancer(this);
- if (result) {
- SuccessResponse response = new SuccessResponse(getCommandName());
- response.setResponseName(getCommandName());
- this.setResponseObject(response);
- } else {
- throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to delete external load balancer.");
- }
- } catch (InvalidParameterValueException e) {
- throw new ServerApiException(ApiErrorCode.PARAM_ERROR, "Failed to delete external load balancer.");
- }
- }
-}
diff --git a/plugins/network-elements/f5/src/main/java/com/cloud/api/commands/DeleteF5LoadBalancerCmd.java b/plugins/network-elements/f5/src/main/java/com/cloud/api/commands/DeleteF5LoadBalancerCmd.java
deleted file mode 100644
index cd60c61e3b8..00000000000
--- a/plugins/network-elements/f5/src/main/java/com/cloud/api/commands/DeleteF5LoadBalancerCmd.java
+++ /dev/null
@@ -1,112 +0,0 @@
-// 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.api.commands;
-
-import javax.inject.Inject;
-
-import org.apache.log4j.Logger;
-
-import org.apache.cloudstack.api.APICommand;
-import org.apache.cloudstack.api.ApiConstants;
-import org.apache.cloudstack.api.ApiErrorCode;
-import org.apache.cloudstack.api.BaseAsyncCmd;
-import org.apache.cloudstack.api.Parameter;
-import org.apache.cloudstack.api.ServerApiException;
-import org.apache.cloudstack.api.response.SuccessResponse;
-import org.apache.cloudstack.context.CallContext;
-
-import com.cloud.api.response.F5LoadBalancerResponse;
-import com.cloud.event.EventTypes;
-import com.cloud.exception.ConcurrentOperationException;
-import com.cloud.exception.InsufficientCapacityException;
-import com.cloud.exception.InvalidParameterValueException;
-import com.cloud.exception.ResourceAllocationException;
-import com.cloud.exception.ResourceUnavailableException;
-import com.cloud.network.element.F5ExternalLoadBalancerElementService;
-import com.cloud.utils.exception.CloudRuntimeException;
-
-@APICommand(name = "deleteF5LoadBalancer", responseObject = SuccessResponse.class, description = " delete a F5 load balancer device",
- requestHasSensitiveInfo = false, responseHasSensitiveInfo = false)
-public class DeleteF5LoadBalancerCmd extends BaseAsyncCmd {
- public static final Logger s_logger = Logger.getLogger(DeleteF5LoadBalancerCmd.class.getName());
- private static final String s_name = "deletef5loadbalancerresponse";
- @Inject
- F5ExternalLoadBalancerElementService _f5DeviceManagerService;
-
- /////////////////////////////////////////////////////
- //////////////// API parameters /////////////////////
- /////////////////////////////////////////////////////
-
- @Parameter(name = ApiConstants.LOAD_BALANCER_DEVICE_ID,
- type = CommandType.UUID,
- entityType = F5LoadBalancerResponse.class,
- required = true,
- description = "netscaler load balancer device ID")
- private Long lbDeviceId;
-
- /////////////////////////////////////////////////////
- /////////////////// Accessors ///////////////////////
- /////////////////////////////////////////////////////
-
- public Long getLoadBalancerDeviceId() {
- return lbDeviceId;
- }
-
- /////////////////////////////////////////////////////
- /////////////// API Implementation///////////////////
- /////////////////////////////////////////////////////
-
- @Override
- public void execute() throws ResourceUnavailableException, InsufficientCapacityException, ServerApiException, ConcurrentOperationException,
- ResourceAllocationException {
- try {
- boolean result = _f5DeviceManagerService.deleteF5LoadBalancer(this);
- if (result) {
- SuccessResponse response = new SuccessResponse(getCommandName());
- response.setResponseName(getCommandName());
- this.setResponseObject(response);
- } else {
- throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to delete F5 load balancer.");
- }
- } catch (InvalidParameterValueException invalidParamExcp) {
- throw new ServerApiException(ApiErrorCode.PARAM_ERROR, invalidParamExcp.getMessage());
- } catch (CloudRuntimeException runtimeExcp) {
- throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, runtimeExcp.getMessage());
- }
- }
-
- @Override
- public String getEventDescription() {
- return "Deleting a F5 load balancer device";
- }
-
- @Override
- public String getEventType() {
- return EventTypes.EVENT_LOAD_BALANCER_DELETE;
- }
-
- @Override
- public String getCommandName() {
- return s_name;
- }
-
- @Override
- public long getEntityOwnerId() {
- return CallContext.current().getCallingAccount().getId();
- }
-}
diff --git a/plugins/network-elements/f5/src/main/java/com/cloud/api/commands/ListExternalLoadBalancersCmd.java b/plugins/network-elements/f5/src/main/java/com/cloud/api/commands/ListExternalLoadBalancersCmd.java
deleted file mode 100644
index 4ffe85f5537..00000000000
--- a/plugins/network-elements/f5/src/main/java/com/cloud/api/commands/ListExternalLoadBalancersCmd.java
+++ /dev/null
@@ -1,90 +0,0 @@
-// 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.api.commands;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import javax.inject.Inject;
-
-import org.apache.log4j.Logger;
-
-import org.apache.cloudstack.api.APICommand;
-import org.apache.cloudstack.api.ApiConstants;
-import org.apache.cloudstack.api.BaseListCmd;
-import org.apache.cloudstack.api.Parameter;
-import org.apache.cloudstack.api.response.ExternalLoadBalancerResponse;
-import org.apache.cloudstack.api.response.HostResponse;
-import org.apache.cloudstack.api.response.ListResponse;
-import org.apache.cloudstack.api.response.ZoneResponse;
-
-import com.cloud.host.Host;
-import com.cloud.network.element.F5ExternalLoadBalancerElementService;
-
-@APICommand(name = "listExternalLoadBalancers", description = "Lists F5 external load balancer appliances added in a zone.", responseObject = HostResponse.class,
- requestHasSensitiveInfo = false, responseHasSensitiveInfo = false)
-@Deprecated
-// API supported for backward compatibility.
-public class ListExternalLoadBalancersCmd extends BaseListCmd {
- public static final Logger s_logger = Logger.getLogger(ListExternalLoadBalancersCmd.class.getName());
- private static final String s_name = "listexternalloadbalancersresponse";
-
- /////////////////////////////////////////////////////
- //////////////// API parameters /////////////////////
- /////////////////////////////////////////////////////
-
- @Parameter(name = ApiConstants.ZONE_ID, type = CommandType.UUID, entityType = ZoneResponse.class, description = "zone Id")
- private long zoneId;
-
- /////////////////////////////////////////////////////
- /////////////////// Accessors ///////////////////////
- /////////////////////////////////////////////////////
-
- public long getZoneId() {
- return zoneId;
- }
-
- /////////////////////////////////////////////////////
- /////////////// API Implementation///////////////////
- /////////////////////////////////////////////////////
-
- @Inject
- F5ExternalLoadBalancerElementService _f5DeviceManagerService;
-
- @Override
- public String getCommandName() {
- return s_name;
- }
-
- @Override
- public void execute() {
- List extends Host> externalLoadBalancers = _f5DeviceManagerService.listExternalLoadBalancers(this);
- ListResponse listResponse = new ListResponse();
- List responses = new ArrayList();
- for (Host externalLoadBalancer : externalLoadBalancers) {
- ExternalLoadBalancerResponse response = _f5DeviceManagerService.createExternalLoadBalancerResponse(externalLoadBalancer);
- response.setObjectName("externalloadbalancer");
- response.setResponseName(getCommandName());
- responses.add(response);
- }
-
- listResponse.setResponses(responses);
- listResponse.setResponseName(getCommandName());
- this.setResponseObject(listResponse);
- }
-}
diff --git a/plugins/network-elements/f5/src/main/java/com/cloud/api/commands/ListF5LoadBalancerNetworksCmd.java b/plugins/network-elements/f5/src/main/java/com/cloud/api/commands/ListF5LoadBalancerNetworksCmd.java
deleted file mode 100644
index 1b7e1ec84a4..00000000000
--- a/plugins/network-elements/f5/src/main/java/com/cloud/api/commands/ListF5LoadBalancerNetworksCmd.java
+++ /dev/null
@@ -1,108 +0,0 @@
-// 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.api.commands;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import javax.inject.Inject;
-
-import org.apache.log4j.Logger;
-
-import org.apache.cloudstack.api.APICommand;
-import org.apache.cloudstack.api.ApiConstants;
-import org.apache.cloudstack.api.ApiErrorCode;
-import org.apache.cloudstack.api.BaseListCmd;
-import org.apache.cloudstack.api.Parameter;
-import org.apache.cloudstack.api.ResponseObject.ResponseView;
-import org.apache.cloudstack.api.ServerApiException;
-import org.apache.cloudstack.api.response.ListResponse;
-import org.apache.cloudstack.api.response.NetworkResponse;
-
-import com.cloud.api.response.F5LoadBalancerResponse;
-import com.cloud.exception.ConcurrentOperationException;
-import com.cloud.exception.InsufficientCapacityException;
-import com.cloud.exception.InvalidParameterValueException;
-import com.cloud.exception.ResourceAllocationException;
-import com.cloud.exception.ResourceUnavailableException;
-import com.cloud.network.Network;
-import com.cloud.network.element.F5ExternalLoadBalancerElementService;
-import com.cloud.utils.exception.CloudRuntimeException;
-
-@APICommand(name = "listF5LoadBalancerNetworks", responseObject = NetworkResponse.class, description = "lists network that are using a F5 load balancer device",
- requestHasSensitiveInfo = false, responseHasSensitiveInfo = false)
-public class ListF5LoadBalancerNetworksCmd extends BaseListCmd {
-
- public static final Logger s_logger = Logger.getLogger(ListF5LoadBalancerNetworksCmd.class.getName());
- private static final String s_name = "listf5loadbalancernetworksresponse";
- @Inject
- F5ExternalLoadBalancerElementService _f5DeviceManagerService;
-
- /////////////////////////////////////////////////////
- //////////////// API parameters /////////////////////
- /////////////////////////////////////////////////////
-
- @Parameter(name = ApiConstants.LOAD_BALANCER_DEVICE_ID,
- type = CommandType.UUID,
- entityType = F5LoadBalancerResponse.class,
- required = true,
- description = "f5 load balancer device ID")
- private Long lbDeviceId;
-
- /////////////////////////////////////////////////////
- /////////////////// Accessors ///////////////////////
- /////////////////////////////////////////////////////
-
- public Long getLoadBalancerDeviceId() {
- return lbDeviceId;
- }
-
- /////////////////////////////////////////////////////
- /////////////// API Implementation///////////////////
- /////////////////////////////////////////////////////
-
- @Override
- public void execute() throws ResourceUnavailableException, InsufficientCapacityException, ServerApiException, ConcurrentOperationException,
- ResourceAllocationException {
- try {
- List extends Network> networks = _f5DeviceManagerService.listNetworks(this);
- ListResponse response = new ListResponse();
- List networkResponses = new ArrayList();
-
- if (networks != null && !networks.isEmpty()) {
- for (Network network : networks) {
- NetworkResponse networkResponse = _responseGenerator.createNetworkResponse(ResponseView.Full, network);
- networkResponses.add(networkResponse);
- }
- }
-
- response.setResponses(networkResponses);
- response.setResponseName(getCommandName());
- setResponseObject(response);
- } catch (InvalidParameterValueException invalidParamExcp) {
- throw new ServerApiException(ApiErrorCode.PARAM_ERROR, invalidParamExcp.getMessage());
- } catch (CloudRuntimeException runtimeExcp) {
- throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, runtimeExcp.getMessage());
- }
- }
-
- @Override
- public String getCommandName() {
- return s_name;
- }
-}
diff --git a/plugins/network-elements/f5/src/main/java/com/cloud/api/commands/ListF5LoadBalancersCmd.java b/plugins/network-elements/f5/src/main/java/com/cloud/api/commands/ListF5LoadBalancersCmd.java
deleted file mode 100644
index 283a1502da6..00000000000
--- a/plugins/network-elements/f5/src/main/java/com/cloud/api/commands/ListF5LoadBalancersCmd.java
+++ /dev/null
@@ -1,112 +0,0 @@
-// 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.api.commands;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import javax.inject.Inject;
-
-import org.apache.log4j.Logger;
-
-import org.apache.cloudstack.api.APICommand;
-import org.apache.cloudstack.api.ApiConstants;
-import org.apache.cloudstack.api.ApiErrorCode;
-import org.apache.cloudstack.api.BaseListCmd;
-import org.apache.cloudstack.api.Parameter;
-import org.apache.cloudstack.api.ServerApiException;
-import org.apache.cloudstack.api.response.ListResponse;
-import org.apache.cloudstack.api.response.PhysicalNetworkResponse;
-
-import com.cloud.api.response.F5LoadBalancerResponse;
-import com.cloud.exception.ConcurrentOperationException;
-import com.cloud.exception.InsufficientCapacityException;
-import com.cloud.exception.InvalidParameterValueException;
-import com.cloud.exception.ResourceAllocationException;
-import com.cloud.exception.ResourceUnavailableException;
-import com.cloud.network.dao.ExternalLoadBalancerDeviceVO;
-import com.cloud.network.element.F5ExternalLoadBalancerElementService;
-import com.cloud.utils.exception.CloudRuntimeException;
-
-@APICommand(name = "listF5LoadBalancers", responseObject = F5LoadBalancerResponse.class, description = "lists F5 load balancer devices",
- requestHasSensitiveInfo = false, responseHasSensitiveInfo = false)
-public class ListF5LoadBalancersCmd extends BaseListCmd {
- public static final Logger s_logger = Logger.getLogger(ListF5LoadBalancersCmd.class.getName());
- private static final String s_name = "listf5loadbalancerresponse";
- @Inject
- F5ExternalLoadBalancerElementService _f5DeviceManagerService;
-
- /////////////////////////////////////////////////////
- //////////////// API parameters /////////////////////
- /////////////////////////////////////////////////////
-
- @Parameter(name = ApiConstants.PHYSICAL_NETWORK_ID, type = CommandType.UUID, entityType = PhysicalNetworkResponse.class, description = "the Physical Network ID")
- private Long physicalNetworkId;
-
- @Parameter(name = ApiConstants.LOAD_BALANCER_DEVICE_ID,
- type = CommandType.UUID,
- entityType = F5LoadBalancerResponse.class,
- description = "f5 load balancer device ID")
- private Long lbDeviceId;
-
- /////////////////////////////////////////////////////
- /////////////////// Accessors ///////////////////////
- /////////////////////////////////////////////////////
-
- public Long getLoadBalancerDeviceId() {
- return lbDeviceId;
- }
-
- public Long getPhysicalNetworkId() {
- return physicalNetworkId;
- }
-
- /////////////////////////////////////////////////////
- /////////////// API Implementation///////////////////
- /////////////////////////////////////////////////////
-
- @Override
- public void execute() throws ResourceUnavailableException, InsufficientCapacityException, ServerApiException, ConcurrentOperationException,
- ResourceAllocationException {
- try {
- List lbDevices = _f5DeviceManagerService.listF5LoadBalancers(this);
- ListResponse response = new ListResponse();
- List lbDevicesResponse = new ArrayList();
-
- if (lbDevices != null && !lbDevices.isEmpty()) {
- for (ExternalLoadBalancerDeviceVO lbDeviceVO : lbDevices) {
- F5LoadBalancerResponse lbdeviceResponse = _f5DeviceManagerService.createF5LoadBalancerResponse(lbDeviceVO);
- lbDevicesResponse.add(lbdeviceResponse);
- }
- }
-
- response.setResponses(lbDevicesResponse);
- response.setResponseName(getCommandName());
- this.setResponseObject(response);
- } catch (InvalidParameterValueException invalidParamExcp) {
- throw new ServerApiException(ApiErrorCode.PARAM_ERROR, invalidParamExcp.getMessage());
- } catch (CloudRuntimeException runtimeExcp) {
- throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, runtimeExcp.getMessage());
- }
- }
-
- @Override
- public String getCommandName() {
- return s_name;
- }
-}
diff --git a/plugins/network-elements/f5/src/main/java/com/cloud/api/response/F5LoadBalancerResponse.java b/plugins/network-elements/f5/src/main/java/com/cloud/api/response/F5LoadBalancerResponse.java
deleted file mode 100644
index a378fd39c25..00000000000
--- a/plugins/network-elements/f5/src/main/java/com/cloud/api/response/F5LoadBalancerResponse.java
+++ /dev/null
@@ -1,109 +0,0 @@
-// 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.api.response;
-
-import com.google.gson.annotations.SerializedName;
-
-import org.apache.cloudstack.api.ApiConstants;
-import org.apache.cloudstack.api.BaseResponse;
-import org.apache.cloudstack.api.EntityReference;
-
-import com.cloud.network.dao.ExternalLoadBalancerDeviceVO;
-import com.cloud.serializer.Param;
-
-@EntityReference(value = ExternalLoadBalancerDeviceVO.class)
-public class F5LoadBalancerResponse extends BaseResponse {
- @SerializedName(ApiConstants.LOAD_BALANCER_DEVICE_ID)
- @Param(description = "device id of the F5 load balancer")
- private String id;
-
- @SerializedName(ApiConstants.PHYSICAL_NETWORK_ID)
- @Param(description = "the physical network to which this F5 device belongs to")
- private String physicalNetworkId;
-
- @SerializedName(ApiConstants.PROVIDER)
- @Param(description = "name of the provider")
- private String providerName;
-
- @SerializedName(ApiConstants.LOAD_BALANCER_DEVICE_NAME)
- @Param(description = "device name")
- private String deviceName;
-
- @SerializedName(ApiConstants.LOAD_BALANCER_DEVICE_STATE)
- @Param(description = "device state")
- private String deviceState;
-
- @SerializedName(ApiConstants.LOAD_BALANCER_DEVICE_CAPACITY)
- @Param(description = "device capacity")
- private Long deviceCapacity;
-
- @SerializedName(ApiConstants.LOAD_BALANCER_DEVICE_DEDICATED)
- @Param(description = "true if device is dedicated for an account")
- private Boolean dedicatedLoadBalancer;
-
- @SerializedName(ApiConstants.PUBLIC_INTERFACE)
- @Param(description = "the public interface of the load balancer")
- private String publicInterface;
-
- @SerializedName(ApiConstants.PRIVATE_INTERFACE)
- @Param(description = "the private interface of the load balancer")
- private String privateInterface;
-
- @SerializedName(ApiConstants.IP_ADDRESS)
- @Param(description = "the management IP address of the external load balancer")
- private String ipAddress;
-
- public void setId(String lbDeviceId) {
- this.id = lbDeviceId;
- }
-
- public void setPhysicalNetworkId(String physicalNetworkId) {
- this.physicalNetworkId = physicalNetworkId;
- }
-
- public void setProvider(String provider) {
- this.providerName = provider;
- }
-
- public void setDeviceName(String deviceName) {
- this.deviceName = deviceName;
- }
-
- public void setDeviceCapacity(long deviceCapacity) {
- this.deviceCapacity = deviceCapacity;
- }
-
- public void setDeviceState(String deviceState) {
- this.deviceState = deviceState;
- }
-
- public void setDedicatedLoadBalancer(boolean isDedicated) {
- this.dedicatedLoadBalancer = isDedicated;
- }
-
- public void setPublicInterface(String publicInterface) {
- this.publicInterface = publicInterface;
- }
-
- public void setPrivateInterface(String privateInterface) {
- this.privateInterface = privateInterface;
- }
-
- public void setIpAddress(String ipAddress) {
- this.ipAddress = ipAddress;
- }
-}
diff --git a/plugins/network-elements/f5/src/main/java/com/cloud/network/element/F5ExternalLoadBalancerElement.java b/plugins/network-elements/f5/src/main/java/com/cloud/network/element/F5ExternalLoadBalancerElement.java
deleted file mode 100644
index bd54d954b8d..00000000000
--- a/plugins/network-elements/f5/src/main/java/com/cloud/network/element/F5ExternalLoadBalancerElement.java
+++ /dev/null
@@ -1,538 +0,0 @@
-// 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.element;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-import javax.inject.Inject;
-
-import org.apache.log4j.Logger;
-
-import com.google.gson.Gson;
-
-import org.apache.cloudstack.api.response.ExternalLoadBalancerResponse;
-import org.apache.cloudstack.framework.config.dao.ConfigurationDao;
-import org.apache.cloudstack.network.ExternalNetworkDeviceManager.NetworkDevice;
-
-import com.cloud.agent.api.to.LoadBalancerTO;
-import com.cloud.api.ApiDBUtils;
-import com.cloud.api.commands.AddExternalLoadBalancerCmd;
-import com.cloud.api.commands.AddF5LoadBalancerCmd;
-import com.cloud.api.commands.ConfigureF5LoadBalancerCmd;
-import com.cloud.api.commands.DeleteExternalLoadBalancerCmd;
-import com.cloud.api.commands.DeleteF5LoadBalancerCmd;
-import com.cloud.api.commands.ListExternalLoadBalancersCmd;
-import com.cloud.api.commands.ListF5LoadBalancerNetworksCmd;
-import com.cloud.api.commands.ListF5LoadBalancersCmd;
-import com.cloud.api.response.F5LoadBalancerResponse;
-import com.cloud.configuration.Config;
-import com.cloud.configuration.ConfigurationManager;
-import com.cloud.dc.DataCenter;
-import com.cloud.dc.DataCenterVO;
-import com.cloud.dc.dao.DataCenterDao;
-import com.cloud.deploy.DeployDestination;
-import com.cloud.exception.ConcurrentOperationException;
-import com.cloud.exception.InsufficientCapacityException;
-import com.cloud.exception.InsufficientNetworkCapacityException;
-import com.cloud.exception.InvalidParameterValueException;
-import com.cloud.exception.ResourceUnavailableException;
-import com.cloud.host.Host;
-import com.cloud.host.HostVO;
-import com.cloud.host.dao.HostDao;
-import com.cloud.host.dao.HostDetailsDao;
-import com.cloud.network.ExternalLoadBalancerDeviceManager;
-import com.cloud.network.ExternalLoadBalancerDeviceManagerImpl;
-import com.cloud.network.Network;
-import com.cloud.network.Network.Capability;
-import com.cloud.network.Network.Provider;
-import com.cloud.network.Network.Service;
-import com.cloud.network.NetworkModel;
-import com.cloud.network.Networks.TrafficType;
-import com.cloud.network.PhysicalNetwork;
-import com.cloud.network.PhysicalNetworkServiceProvider;
-import com.cloud.network.PublicIpAddress;
-import com.cloud.network.dao.ExternalLoadBalancerDeviceDao;
-import com.cloud.network.dao.ExternalLoadBalancerDeviceVO;
-import com.cloud.network.dao.ExternalLoadBalancerDeviceVO.LBDeviceState;
-import com.cloud.network.dao.NetworkDao;
-import com.cloud.network.dao.NetworkExternalLoadBalancerDao;
-import com.cloud.network.dao.NetworkExternalLoadBalancerVO;
-import com.cloud.network.dao.NetworkServiceMapDao;
-import com.cloud.network.dao.NetworkVO;
-import com.cloud.network.dao.PhysicalNetworkDao;
-import com.cloud.network.dao.PhysicalNetworkVO;
-import com.cloud.network.lb.LoadBalancingRule;
-import com.cloud.network.resource.F5BigIpResource;
-import com.cloud.network.rules.LbStickinessMethod;
-import com.cloud.network.rules.LbStickinessMethod.StickinessMethodType;
-import com.cloud.network.rules.LoadBalancerContainer;
-import com.cloud.offering.NetworkOffering;
-import com.cloud.utils.NumbersUtil;
-import com.cloud.utils.exception.CloudRuntimeException;
-import com.cloud.vm.NicProfile;
-import com.cloud.vm.ReservationContext;
-import com.cloud.vm.VirtualMachineProfile;
-
-public class F5ExternalLoadBalancerElement extends ExternalLoadBalancerDeviceManagerImpl implements LoadBalancingServiceProvider, IpDeployer,
- F5ExternalLoadBalancerElementService, ExternalLoadBalancerDeviceManager {
-
- private static final Logger s_logger = Logger.getLogger(F5ExternalLoadBalancerElement.class);
-
- @Inject
- NetworkModel _networkManager;
- @Inject
- ConfigurationManager _configMgr;
- @Inject
- NetworkServiceMapDao _ntwkSrvcDao;
- @Inject
- DataCenterDao _dcDao;
- @Inject
- PhysicalNetworkDao _physicalNetworkDao;
- @Inject
- HostDao _hostDao;
- @Inject
- ExternalLoadBalancerDeviceDao _lbDeviceDao;
- @Inject
- NetworkExternalLoadBalancerDao _networkLBDao;
- @Inject
- NetworkDao _networkDao;
- @Inject
- HostDetailsDao _detailsDao;
- @Inject
- ConfigurationDao _configDao;
-
- private boolean canHandle(Network config, List rules) {
- if ((config.getGuestType() != Network.GuestType.Isolated && config.getGuestType() != Network.GuestType.Shared) || config.getTrafficType() != TrafficType.Guest) {
-
- s_logger.trace("Not handling network with Type " + config.getGuestType() + " and traffic type " + config.getTrafficType());
- return false;
- }
-
- Map lbCaps = this.getCapabilities().get(Service.Lb);
- if (!lbCaps.isEmpty()) {
- String schemeCaps = lbCaps.get(Capability.LbSchemes);
- if (schemeCaps != null && rules != null && !rules.isEmpty()) {
- for (LoadBalancingRule rule : rules) {
- if (!schemeCaps.contains(rule.getScheme().toString())) {
- s_logger.debug("Scheme " + rules.get(0).getScheme() + " is not supported by the provider " + this.getName());
- return false;
- }
- }
- }
- }
-
- return (_networkManager.isProviderForNetwork(getProvider(), config.getId()) && _ntwkSrvcDao.canProviderSupportServiceInNetwork(config.getId(), Service.Lb,
- Network.Provider.F5BigIp));
- }
-
- @Override
- public boolean implement(Network guestConfig, NetworkOffering offering, DeployDestination dest, ReservationContext context) throws ResourceUnavailableException,
- ConcurrentOperationException, InsufficientNetworkCapacityException {
-
- if (!canHandle(guestConfig, null)) {
- return false;
- }
-
- try {
- return manageGuestNetworkWithExternalLoadBalancer(true, guestConfig);
- } catch (InsufficientCapacityException capacityException) {
- throw new ResourceUnavailableException("There are no F5 load balancer devices with the free capacity for implementing this network", DataCenter.class,
- guestConfig.getDataCenterId());
- }
- }
-
- @Override
- public boolean prepare(Network config, NicProfile nic, VirtualMachineProfile vm, DeployDestination dest, ReservationContext context)
- throws ConcurrentOperationException, InsufficientNetworkCapacityException, ResourceUnavailableException {
- return true;
- }
-
- @Override
- public boolean release(Network config, NicProfile nic, VirtualMachineProfile vm, ReservationContext context) {
- return true;
- }
-
- @Override
- public boolean shutdown(Network guestConfig, ReservationContext context, boolean cleanup) throws ResourceUnavailableException, ConcurrentOperationException {
- if (!canHandle(guestConfig, null)) {
- return false;
- }
-
- try {
- return manageGuestNetworkWithExternalLoadBalancer(false, guestConfig);
- } catch (InsufficientCapacityException capacityException) {
- // TODO: handle out of capacity exception
- return false;
- }
- }
-
- @Override
- public boolean destroy(Network config, ReservationContext context) {
- return true;
- }
-
- @Override
- public boolean validateLBRule(Network network, LoadBalancingRule rule) {
- if (canHandle(network, new ArrayList(Arrays.asList(rule)))) {
- String algo = rule.getAlgorithm();
- return (algo.equals("roundrobin") || algo.equals("leastconn"));
- }
- return true;
- }
-
- @Override
- public boolean applyLBRules(Network config, List rules) throws ResourceUnavailableException {
- if (!canHandle(config, rules)) {
- return false;
- }
-
- return applyLoadBalancerRules(config, rules);
- }
-
- @Override
- public Map> getCapabilities() {
- Map> capabilities = new HashMap>();
-
- // Set capabilities for LB service
- Map lbCapabilities = new HashMap();
-
- // Specifies that the RoundRobin and Leastconn algorithms are supported for load balancing rules
- lbCapabilities.put(Capability.SupportedLBAlgorithms, "roundrobin,leastconn");
-
- // specifies that F5 BIG IP network element can provide shared mode only
- lbCapabilities.put(Capability.SupportedLBIsolation, "dedicated, shared");
-
- // Specifies that load balancing rules can be made for either TCP or UDP traffic
- lbCapabilities.put(Capability.SupportedProtocols, "tcp,udp");
-
- // Specifies that this element can measure network usage on a per public IP basis
- lbCapabilities.put(Capability.TrafficStatistics, "per public ip");
-
- // Specifies that load balancing rules can only be made with public IPs that aren't source NAT IPs
- lbCapabilities.put(Capability.LoadBalancingSupportedIps, "additional");
-
- // Support inline mode with firewall
- lbCapabilities.put(Capability.InlineMode, "true");
-
- //support only for public lb
- lbCapabilities.put(Capability.LbSchemes, LoadBalancerContainer.Scheme.Public.toString());
-
- LbStickinessMethod method;
- List methodList = new ArrayList();
- method = new LbStickinessMethod(StickinessMethodType.LBCookieBased, "This is cookie based sticky method, can be used only for http");
- methodList.add(method);
- method.addParam("holdtime", false, "time period (in seconds) for which persistence is in effect.", false);
-
- Gson gson = new Gson();
- String stickyMethodList = gson.toJson(methodList);
- lbCapabilities.put(Capability.SupportedStickinessMethods, stickyMethodList);
-
- capabilities.put(Service.Lb, lbCapabilities);
-
- return capabilities;
- }
-
- @Override
- public Provider getProvider() {
- return Provider.F5BigIp;
- }
-
- @Override
- public boolean isReady(PhysicalNetworkServiceProvider provider) {
- List lbDevices = _lbDeviceDao.listByPhysicalNetworkAndProvider(provider.getPhysicalNetworkId(), Provider.F5BigIp.getName());
-
- // true if at-least one F5 device is added in to physical network and is in configured (in enabled state) state
- if (lbDevices != null && !lbDevices.isEmpty()) {
- for (ExternalLoadBalancerDeviceVO lbDevice : lbDevices) {
- if (lbDevice.getState() == LBDeviceState.Enabled) {
- return true;
- }
- }
- }
- return false;
- }
-
- @Override
- public boolean shutdownProviderInstances(PhysicalNetworkServiceProvider provider, ReservationContext context) throws ConcurrentOperationException,
- ResourceUnavailableException {
- // TODO Auto-generated method stub
- return true;
- }
-
- @Override
- public boolean canEnableIndividualServices() {
- return false;
- }
-
- @Override
- public List> getCommands() {
- List> cmdList = new ArrayList>();
- cmdList.add(AddExternalLoadBalancerCmd.class);
- cmdList.add(AddF5LoadBalancerCmd.class);
- cmdList.add(ConfigureF5LoadBalancerCmd.class);
- cmdList.add(DeleteExternalLoadBalancerCmd.class);
- cmdList.add(DeleteF5LoadBalancerCmd.class);
- cmdList.add(ListExternalLoadBalancersCmd.class);
- cmdList.add(ListF5LoadBalancerNetworksCmd.class);
- cmdList.add(ListF5LoadBalancersCmd.class);
- return cmdList;
- }
-
- @Override
- @Deprecated
- public Host addExternalLoadBalancer(AddExternalLoadBalancerCmd cmd) {
- Long zoneId = cmd.getZoneId();
- DataCenterVO zone = null;
- PhysicalNetworkVO pNetwork = null;
- ExternalLoadBalancerDeviceVO lbDeviceVO = null;
- HostVO lbHost = null;
-
- zone = _dcDao.findById(zoneId);
- if (zone == null) {
- throw new InvalidParameterValueException("Could not find zone with ID: " + zoneId);
- }
-
- List physicalNetworks = _physicalNetworkDao.listByZone(zoneId);
- if ((physicalNetworks == null) || (physicalNetworks.size() > 1)) {
- throw new InvalidParameterValueException("There are no physical networks or multiple physical networks configured in zone with ID: " + zoneId +
- " to add this device.");
- }
- pNetwork = physicalNetworks.get(0);
-
- String deviceType = NetworkDevice.F5BigIpLoadBalancer.getName();
- lbDeviceVO = addExternalLoadBalancer(pNetwork.getId(), cmd.getUrl(), cmd.getUsername(), cmd.getPassword(),
- deviceType, new F5BigIpResource(), false, false, null, null);
-
- if (lbDeviceVO != null) {
- lbHost = _hostDao.findById(lbDeviceVO.getHostId());
- }
-
- return lbHost;
- }
-
- @Override
- @Deprecated
- public boolean deleteExternalLoadBalancer(DeleteExternalLoadBalancerCmd cmd) {
- return deleteExternalLoadBalancer(cmd.getId());
- }
-
- @Override
- @Deprecated
- public List listExternalLoadBalancers(ListExternalLoadBalancersCmd cmd) {
- Long zoneId = cmd.getZoneId();
- DataCenterVO zone = null;
- PhysicalNetworkVO pNetwork = null;
-
- if (zoneId != null) {
- zone = _dcDao.findById(zoneId);
- if (zone == null) {
- throw new InvalidParameterValueException("Could not find zone with ID: " + zoneId);
- }
-
- List physicalNetworks = _physicalNetworkDao.listByZone(zoneId);
- if ((physicalNetworks == null) || (physicalNetworks.size() > 1)) {
- throw new InvalidParameterValueException("There are no physical networks or multiple physical networks configured in zone with ID: " + zoneId +
- " to add this device.");
- }
- pNetwork = physicalNetworks.get(0);
- return listExternalLoadBalancers(pNetwork.getId(), NetworkDevice.F5BigIpLoadBalancer.getName());
- } else {
- throw new InvalidParameterValueException("Zone Id must be specified to list the external load balancers");
- }
- }
-
- @Override
- @Deprecated
- public ExternalLoadBalancerResponse createExternalLoadBalancerResponse(Host externalLb) {
- return super.createExternalLoadBalancerResponse(externalLb);
- }
-
- @Override
- public ExternalLoadBalancerDeviceVO addF5LoadBalancer(AddF5LoadBalancerCmd cmd) {
- String deviceName = cmd.getDeviceType();
- if (!deviceName.equalsIgnoreCase(NetworkDevice.F5BigIpLoadBalancer.getName())) {
- throw new InvalidParameterValueException("Invalid F5 load balancer device type");
- }
-
- return addExternalLoadBalancer(cmd.getPhysicalNetworkId(), cmd.getUrl(), cmd.getUsername(), cmd.getPassword(),
- deviceName, new F5BigIpResource(), false, false, null,
- null);
-
- }
-
- @Override
- public boolean deleteF5LoadBalancer(DeleteF5LoadBalancerCmd cmd) {
- Long lbDeviceId = cmd.getLoadBalancerDeviceId();
-
- ExternalLoadBalancerDeviceVO lbDeviceVo = _lbDeviceDao.findById(lbDeviceId);
- if ((lbDeviceVo == null) || !lbDeviceVo.getDeviceName().equalsIgnoreCase(NetworkDevice.F5BigIpLoadBalancer.getName())) {
- throw new InvalidParameterValueException("No F5 load balancer device found with ID: " + lbDeviceId);
- }
-
- return deleteExternalLoadBalancer(lbDeviceVo.getHostId());
- }
-
- @Override
- public ExternalLoadBalancerDeviceVO configureF5LoadBalancer(ConfigureF5LoadBalancerCmd cmd) {
- Long lbDeviceId = cmd.getLoadBalancerDeviceId();
- Long capacity = cmd.getLoadBalancerCapacity();
-
- ExternalLoadBalancerDeviceVO lbDeviceVo = _lbDeviceDao.findById(lbDeviceId);
- if ((lbDeviceVo == null) || !lbDeviceVo.getDeviceName().equalsIgnoreCase(NetworkDevice.F5BigIpLoadBalancer.getName())) {
- throw new InvalidParameterValueException("No F5 load balancer device found with ID: " + lbDeviceId);
- }
-
- if (capacity != null) {
- // check if any networks are using this F5 device
- List networks = _networkLBDao.listByLoadBalancerDeviceId(lbDeviceId);
- if ((networks != null) && !networks.isEmpty()) {
- if (capacity < networks.size()) {
- throw new CloudRuntimeException("There are more number of networks already using this F5 device than configured capacity");
- }
- }
- if (capacity != null) {
- lbDeviceVo.setCapacity(capacity);
- }
- }
-
- lbDeviceVo.setState(LBDeviceState.Enabled);
- _lbDeviceDao.update(lbDeviceId, lbDeviceVo);
- return lbDeviceVo;
- }
-
- @Override
- public List listF5LoadBalancers(ListF5LoadBalancersCmd cmd) {
- Long physcialNetworkId = cmd.getPhysicalNetworkId();
- Long lbDeviceId = cmd.getLoadBalancerDeviceId();
- PhysicalNetworkVO pNetwork = null;
- List lbDevices = new ArrayList();
-
- if (physcialNetworkId == null && lbDeviceId == null) {
- throw new InvalidParameterValueException("Either physical network Id or load balancer device Id must be specified");
- }
-
- if (lbDeviceId != null) {
- ExternalLoadBalancerDeviceVO lbDeviceVo = _lbDeviceDao.findById(lbDeviceId);
- if (lbDeviceVo == null || !lbDeviceVo.getDeviceName().equalsIgnoreCase(NetworkDevice.F5BigIpLoadBalancer.getName())) {
- throw new InvalidParameterValueException("Could not find F5 load balancer device with ID: " + lbDeviceId);
- }
- lbDevices.add(lbDeviceVo);
- return lbDevices;
- }
-
- if (physcialNetworkId != null) {
- pNetwork = _physicalNetworkDao.findById(physcialNetworkId);
- if (pNetwork == null) {
- throw new InvalidParameterValueException("Could not find phyical network with ID: " + physcialNetworkId);
- }
- lbDevices = _lbDeviceDao.listByPhysicalNetworkAndProvider(physcialNetworkId, Provider.F5BigIp.getName());
- return lbDevices;
- }
-
- return null;
- }
-
- @Override
- public List extends Network> listNetworks(ListF5LoadBalancerNetworksCmd cmd) {
- Long lbDeviceId = cmd.getLoadBalancerDeviceId();
- List networks = new ArrayList();
-
- ExternalLoadBalancerDeviceVO lbDeviceVo = _lbDeviceDao.findById(lbDeviceId);
- if (lbDeviceVo == null || !lbDeviceVo.getDeviceName().equalsIgnoreCase(NetworkDevice.F5BigIpLoadBalancer.getName())) {
- throw new InvalidParameterValueException("Could not find F5 load balancer device with ID " + lbDeviceId);
- }
-
- List networkLbMaps = _networkLBDao.listByLoadBalancerDeviceId(lbDeviceId);
- if (networkLbMaps != null && !networkLbMaps.isEmpty()) {
- for (NetworkExternalLoadBalancerVO networkLbMap : networkLbMaps) {
- NetworkVO network = _networkDao.findById(networkLbMap.getNetworkId());
- networks.add(network);
- }
- }
-
- return networks;
- }
-
- @Override
- public F5LoadBalancerResponse createF5LoadBalancerResponse(ExternalLoadBalancerDeviceVO lbDeviceVO) {
- F5LoadBalancerResponse response = new F5LoadBalancerResponse();
- Host lbHost = _hostDao.findById(lbDeviceVO.getHostId());
- Map lbDetails = _detailsDao.findDetails(lbDeviceVO.getHostId());
-
- response.setId(lbDeviceVO.getUuid());
- response.setIpAddress(lbHost.getPrivateIpAddress());
- PhysicalNetwork pnw = ApiDBUtils.findPhysicalNetworkById(lbDeviceVO.getPhysicalNetworkId());
- if (pnw != null) {
- response.setPhysicalNetworkId(pnw.getUuid());
- }
- response.setPublicInterface(lbDetails.get("publicInterface"));
- response.setPrivateInterface(lbDetails.get("privateInterface"));
- response.setDeviceName(lbDeviceVO.getDeviceName());
- if (lbDeviceVO.getCapacity() == 0) {
- long defaultLbCapacity = NumbersUtil.parseLong(_configDao.getValue(Config.DefaultExternalLoadBalancerCapacity.key()), 50);
- response.setDeviceCapacity(defaultLbCapacity);
- } else {
- response.setDeviceCapacity(lbDeviceVO.getCapacity());
- }
- response.setDedicatedLoadBalancer(lbDeviceVO.getIsDedicatedDevice());
- response.setProvider(lbDeviceVO.getProviderName());
- response.setDeviceState(lbDeviceVO.getState().name());
- response.setObjectName("f5loadbalancer");
- return response;
- }
-
- @Override
- public boolean verifyServicesCombination(Set services) {
- return true;
- }
-
- @Override
- public boolean applyIps(Network network, List extends PublicIpAddress> ipAddress, Set service) throws ResourceUnavailableException {
- // return true, as IP will be associated as part of LB rule configuration
- return true;
- }
-
- @Override
- public IpDeployer getIpDeployer(Network network) {
- ExternalLoadBalancerDeviceVO lbDevice = getExternalLoadBalancerForNetwork(network);
- if (lbDevice == null) {
- s_logger.error("Cannot find external load balanacer for network " + network.getName());
- s_logger.error("Make F5 as dummy ip deployer, since we likely met this when clean up resource after shutdown network");
- return this;
- }
- if (_networkManager.isNetworkInlineMode(network)) {
- return getIpDeployerForInlineMode(network);
- }
- return this;
- }
-
- @Override
- public List updateHealthChecks(Network network, List lbrules) {
- // TODO Auto-generated method stub
- return null;
- }
-
- @Override
- public boolean handlesOnlyRulesInTransitionState() {
- return true;
- }
-}
diff --git a/plugins/network-elements/f5/src/main/java/com/cloud/network/element/F5ExternalLoadBalancerElementService.java b/plugins/network-elements/f5/src/main/java/com/cloud/network/element/F5ExternalLoadBalancerElementService.java
deleted file mode 100644
index eacb7cffded..00000000000
--- a/plugins/network-elements/f5/src/main/java/com/cloud/network/element/F5ExternalLoadBalancerElementService.java
+++ /dev/null
@@ -1,97 +0,0 @@
-// 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.element;
-
-import java.util.List;
-
-import org.apache.cloudstack.api.response.ExternalLoadBalancerResponse;
-
-import com.cloud.api.commands.AddExternalLoadBalancerCmd;
-import com.cloud.api.commands.AddF5LoadBalancerCmd;
-import com.cloud.api.commands.ConfigureF5LoadBalancerCmd;
-import com.cloud.api.commands.DeleteExternalLoadBalancerCmd;
-import com.cloud.api.commands.DeleteF5LoadBalancerCmd;
-import com.cloud.api.commands.ListExternalLoadBalancersCmd;
-import com.cloud.api.commands.ListF5LoadBalancerNetworksCmd;
-import com.cloud.api.commands.ListF5LoadBalancersCmd;
-import com.cloud.api.response.F5LoadBalancerResponse;
-import com.cloud.host.Host;
-import com.cloud.network.Network;
-import com.cloud.network.dao.ExternalLoadBalancerDeviceVO;
-import com.cloud.utils.component.PluggableService;
-
-@SuppressWarnings("deprecation")
-public interface F5ExternalLoadBalancerElementService extends PluggableService {
-
- /**
- * adds a F5 load balancer device in to a physical network
- * @param AddF5LoadBalancerCmd
- * @return ExternalLoadBalancerDeviceVO object for the device added
- */
- public ExternalLoadBalancerDeviceVO addF5LoadBalancer(AddF5LoadBalancerCmd cmd);
-
- /**
- * removes a F5 load balancer device from a physical network
- * @param DeleteF5LoadBalancerCmd
- * @return true if F5 load balancer device is successfully deleted
- */
- public boolean deleteF5LoadBalancer(DeleteF5LoadBalancerCmd cmd);
-
- /**
- * configures a F5 load balancer device added in a physical network
- * @param ConfigureF5LoadBalancerCmd
- * @return ExternalLoadBalancerDeviceVO for the device configured
- */
- public ExternalLoadBalancerDeviceVO configureF5LoadBalancer(ConfigureF5LoadBalancerCmd cmd);
-
- /**
- * lists all the load balancer devices added in to a physical network
- * @param ListF5LoadBalancersCmd
- * @return list of ExternalLoadBalancerDeviceVO for the devices in the physical network.
- */
- public List listF5LoadBalancers(ListF5LoadBalancersCmd cmd);
-
- /**
- * lists all the guest networks using a F5 load balancer device
- * @param ListF5LoadBalancerNetworksCmd
- * @return list of the guest networks that are using this F5 load balancer
- */
- public List extends Network> listNetworks(ListF5LoadBalancerNetworksCmd cmd);
-
- public F5LoadBalancerResponse createF5LoadBalancerResponse(ExternalLoadBalancerDeviceVO lbDeviceVO);
-
- /* Deprecated API helper function */
- @Deprecated
- // API helper function supported for backward compatibility
- public
- Host addExternalLoadBalancer(AddExternalLoadBalancerCmd cmd);
-
- @Deprecated
- // API helper function supported for backward compatibility
- public
- boolean deleteExternalLoadBalancer(DeleteExternalLoadBalancerCmd cmd);
-
- @Deprecated
- // API helper function supported for backward compatibility
- public
- List listExternalLoadBalancers(ListExternalLoadBalancersCmd cmd);
-
- @Deprecated
- // API helper function supported for backward compatibility
- public
- ExternalLoadBalancerResponse createExternalLoadBalancerResponse(Host externalLb);
-}
diff --git a/plugins/network-elements/f5/src/main/java/com/cloud/network/resource/F5BigIpResource.java b/plugins/network-elements/f5/src/main/java/com/cloud/network/resource/F5BigIpResource.java
deleted file mode 100644
index c4e0fdfb4c1..00000000000
--- a/plugins/network-elements/f5/src/main/java/com/cloud/network/resource/F5BigIpResource.java
+++ /dev/null
@@ -1,1176 +0,0 @@
-// 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.resource;
-
-import iControl.CommonEnabledState;
-import iControl.CommonIPPortDefinition;
-import iControl.CommonStatistic;
-import iControl.CommonStatisticType;
-import iControl.CommonVirtualServerDefinition;
-import iControl.Interfaces;
-import iControl.LocalLBLBMethod;
-import iControl.LocalLBNodeAddressBindingStub;
-import iControl.LocalLBPersistenceMode;
-import iControl.LocalLBPoolBindingStub;
-import iControl.LocalLBProfileContextType;
-import iControl.LocalLBProfilePersistenceBindingStub;
-import iControl.LocalLBProfileULong;
-import iControl.LocalLBVirtualServerBindingStub;
-import iControl.LocalLBVirtualServerVirtualServerPersistence;
-import iControl.LocalLBVirtualServerVirtualServerProfile;
-import iControl.LocalLBVirtualServerVirtualServerResource;
-import iControl.LocalLBVirtualServerVirtualServerStatisticEntry;
-import iControl.LocalLBVirtualServerVirtualServerStatistics;
-import iControl.LocalLBVirtualServerVirtualServerType;
-import iControl.NetworkingMemberTagType;
-import iControl.NetworkingMemberType;
-import iControl.NetworkingRouteDomainBindingStub;
-import iControl.NetworkingSelfIPBindingStub;
-import iControl.NetworkingVLANBindingStub;
-import iControl.NetworkingVLANMemberEntry;
-import iControl.SystemConfigSyncBindingStub;
-import iControl.SystemConfigSyncSaveMode;
-
-import java.rmi.RemoteException;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-
-import javax.naming.ConfigurationException;
-
-import org.apache.log4j.Logger;
-
-import com.cloud.agent.IAgentControl;
-import com.cloud.agent.api.Answer;
-import com.cloud.agent.api.Command;
-import com.cloud.agent.api.ExternalNetworkResourceUsageAnswer;
-import com.cloud.agent.api.ExternalNetworkResourceUsageCommand;
-import com.cloud.agent.api.MaintainAnswer;
-import com.cloud.agent.api.MaintainCommand;
-import com.cloud.agent.api.PingCommand;
-import com.cloud.agent.api.ReadyAnswer;
-import com.cloud.agent.api.ReadyCommand;
-import com.cloud.agent.api.StartupCommand;
-import com.cloud.agent.api.StartupExternalLoadBalancerCommand;
-import com.cloud.agent.api.routing.IpAssocAnswer;
-import com.cloud.agent.api.routing.IpAssocCommand;
-import com.cloud.agent.api.routing.LoadBalancerConfigCommand;
-import com.cloud.agent.api.routing.NetworkElementCommand;
-import com.cloud.agent.api.to.IpAddressTO;
-import com.cloud.agent.api.to.LoadBalancerTO;
-import com.cloud.agent.api.to.LoadBalancerTO.DestinationTO;
-import com.cloud.agent.api.to.LoadBalancerTO.StickinessPolicyTO;
-import com.cloud.host.Host;
-import com.cloud.network.rules.LbStickinessMethod.StickinessMethodType;
-import com.cloud.resource.ServerResource;
-import com.cloud.utils.NumbersUtil;
-import com.cloud.utils.Pair;
-import com.cloud.utils.exception.ExecutionException;
-import com.cloud.utils.net.NetUtils;
-
-public class F5BigIpResource implements ServerResource {
-
- private enum LbAlgorithm {
- RoundRobin(null, LocalLBLBMethod.LB_METHOD_ROUND_ROBIN), LeastConn(null, LocalLBLBMethod.LB_METHOD_LEAST_CONNECTION_MEMBER);
-
- String persistenceProfileName;
- LocalLBLBMethod method;
-
- LbAlgorithm(String persistenceProfileName, LocalLBLBMethod method) {
- this.persistenceProfileName = persistenceProfileName;
- this.method = method;
- }
-
- public String getPersistenceProfileName() {
- return persistenceProfileName;
- }
-
- public LocalLBLBMethod getMethod() {
- return method;
- }
- }
-
- private enum LbProtocol {
- tcp, udp;
- }
-
- private String _name;
- private String _zoneId;
- private String _ip;
- private String _username;
- private String _password;
- private String _publicInterface;
- private String _privateInterface;
- private Integer _numRetries;
- private String _guid;
-
- private Interfaces _interfaces;
- private LocalLBVirtualServerBindingStub _virtualServerApi;
- private LocalLBPoolBindingStub _loadbalancerApi;
- private LocalLBNodeAddressBindingStub _nodeApi;
- private NetworkingVLANBindingStub _vlanApi;
- private NetworkingSelfIPBindingStub _selfIpApi;
- private NetworkingRouteDomainBindingStub _routeDomainApi;
- private SystemConfigSyncBindingStub _configSyncApi;
- private LocalLBProfilePersistenceBindingStub _persistenceProfileApi;
- private String _objectNamePathSep = "-";
- private String _routeDomainIdentifier = "%";
-
- private static final Logger s_logger = Logger.getLogger(F5BigIpResource.class);
-
- @Override
- public boolean configure(String name, Map params) throws ConfigurationException {
- try {
- _name = (String)params.get("name");
- if (_name == null) {
- throw new ConfigurationException("Unable to find name");
- }
-
- _zoneId = (String)params.get("zoneId");
- if (_zoneId == null) {
- throw new ConfigurationException("Unable to find zone");
- }
-
- _ip = (String)params.get("ip");
- if (_ip == null) {
- throw new ConfigurationException("Unable to find IP");
- }
-
- _username = (String)params.get("username");
- if (_username == null) {
- throw new ConfigurationException("Unable to find username");
- }
-
- _password = (String)params.get("password");
- if (_password == null) {
- throw new ConfigurationException("Unable to find password");
- }
-
- _publicInterface = (String)params.get("publicinterface");
- if (_publicInterface == null) {
- throw new ConfigurationException("Unable to find public interface");
- }
-
- _privateInterface = (String)params.get("privateinterface");
- if (_privateInterface == null) {
- throw new ConfigurationException("Unable to find private interface");
- }
-
- _numRetries = NumbersUtil.parseInt((String)params.get("numretries"), 1);
-
- _guid = (String)params.get("guid");
- if (_guid == null) {
- throw new ConfigurationException("Unable to find the guid");
- }
-
- login();
-
- return true;
- } catch (Exception e) {
- throw new ConfigurationException(e.getMessage());
- }
-
- }
-
- @Override
- public StartupCommand[] initialize() {
- StartupExternalLoadBalancerCommand cmd = new StartupExternalLoadBalancerCommand();
- cmd.setName(_name);
- cmd.setDataCenter(_zoneId);
- cmd.setPod("");
- cmd.setPrivateIpAddress(_ip);
- cmd.setStorageIpAddress("");
- cmd.setVersion(F5BigIpResource.class.getPackage().getImplementationVersion());
- cmd.setGuid(_guid);
- return new StartupCommand[] {cmd};
- }
-
- @Override
- public Host.Type getType() {
- return Host.Type.ExternalLoadBalancer;
- }
-
- @Override
- public String getName() {
- return _name;
- }
-
- @Override
- public PingCommand getCurrentStatus(final long id) {
- return new PingCommand(Host.Type.ExternalLoadBalancer, id);
- }
-
- @Override
- public boolean start() {
- return true;
- }
-
- @Override
- public boolean stop() {
- return true;
- }
-
- @Override
- public void disconnected() {
- return;
- }
-
- @Override
- public IAgentControl getAgentControl() {
- return null;
- }
-
- @Override
- public void setAgentControl(IAgentControl agentControl) {
- return;
- }
-
- @Override
- public Answer executeRequest(Command cmd) {
- return executeRequest(cmd, _numRetries);
- }
-
- private Answer executeRequest(Command cmd, int numRetries) {
- if (cmd instanceof ReadyCommand) {
- return execute((ReadyCommand)cmd);
- } else if (cmd instanceof MaintainCommand) {
- return execute((MaintainCommand)cmd);
- } else if (cmd instanceof IpAssocCommand) {
- return execute((IpAssocCommand)cmd, numRetries);
- } else if (cmd instanceof LoadBalancerConfigCommand) {
- return execute((LoadBalancerConfigCommand)cmd, numRetries);
- } else if (cmd instanceof ExternalNetworkResourceUsageCommand) {
- return execute((ExternalNetworkResourceUsageCommand)cmd);
- } else {
- return Answer.createUnsupportedCommandAnswer(cmd);
- }
- }
-
- private Answer retry(Command cmd, int numRetries) {
- int numRetriesRemaining = numRetries - 1;
- s_logger.error("Retrying " + cmd.getClass().getSimpleName() + ". Number of retries remaining: " + numRetriesRemaining);
- return executeRequest(cmd, numRetriesRemaining);
- }
-
- private boolean shouldRetry(int numRetries) {
- try {
- if (numRetries > 0) {
- login();
- return true;
- }
- } catch (Exception e) {
- s_logger.error("Failed to log in to F5 device at " + _ip + " due to " + e.getMessage());
- }
- return false;
- }
-
- private Answer execute(ReadyCommand cmd) {
- return new ReadyAnswer(cmd);
- }
-
- private Answer execute(MaintainCommand cmd) {
- return new MaintainAnswer(cmd);
- }
-
- private synchronized Answer execute(IpAssocCommand cmd, int numRetries) {
- String[] results = new String[cmd.getIpAddresses().length];
- int i = 0;
- try {
- IpAddressTO[] ips = cmd.getIpAddresses();
- for (IpAddressTO ip : ips) {
- // is it saver to use Long.valueOf(BroadcastDomain.getValue(ip.getBroadcastUri())) ???
- // i.o.w. can this contain vlan:// then change !!!
- long guestVlanTag = Long.parseLong(ip.getBroadcastUri());
- // It's a hack, using isOneToOneNat field for indicate if it's inline or not
- boolean inline = ip.isOneToOneNat();
- String vlanSelfIp = inline ? tagAddressWithRouteDomain(ip.getVlanGateway(), guestVlanTag) : ip.getVlanGateway();
- String vlanNetmask = ip.getVlanNetmask();
-
- // Delete any existing guest VLAN with this tag, self IP, and netmask
- deleteGuestVlan(guestVlanTag, vlanSelfIp, vlanNetmask, inline);
-
- if (ip.isAdd()) {
- // Add a new guest VLAN
- addGuestVlan(guestVlanTag, vlanSelfIp, vlanNetmask, inline);
- }
-
- saveConfiguration();
- results[i++] = ip.getPublicIp() + " - success";
- }
-
- } catch (ExecutionException e) {
- s_logger.error("Failed to execute IPAssocCommand due to " + e);
-
- if (shouldRetry(numRetries)) {
- return retry(cmd, numRetries);
- } else {
- results[i++] = IpAssocAnswer.errorResult;
- }
- }
-
- return new IpAssocAnswer(cmd, results);
- }
-
- private synchronized Answer execute(LoadBalancerConfigCommand cmd, int numRetries) {
- try {
- long guestVlanTag = Long.parseLong(cmd.getAccessDetail(NetworkElementCommand.GUEST_VLAN_TAG));
- LoadBalancerTO[] loadBalancers = cmd.getLoadBalancers();
- for (LoadBalancerTO loadBalancer : loadBalancers) {
- boolean inline = loadBalancer.isInline();
- LbProtocol lbProtocol;
- try {
- if (loadBalancer.getProtocol() == null) {
- lbProtocol = LbProtocol.tcp;
- } else {
- lbProtocol = LbProtocol.valueOf(loadBalancer.getProtocol());
- }
- } catch (IllegalArgumentException e) {
- throw new ExecutionException("Got invalid protocol: " + loadBalancer.getProtocol());
- }
-
- LbAlgorithm lbAlgorithm;
- if (loadBalancer.getAlgorithm().equals("roundrobin")) {
- lbAlgorithm = LbAlgorithm.RoundRobin;
- } else if (loadBalancer.getAlgorithm().equals("leastconn")) {
- lbAlgorithm = LbAlgorithm.LeastConn;
- } else {
- throw new ExecutionException("Got invalid algorithm: " + loadBalancer.getAlgorithm());
- }
-
- String srcIp = inline ? tagAddressWithRouteDomain(loadBalancer.getSrcIp(), guestVlanTag) : loadBalancer.getSrcIp();
- int srcPort = loadBalancer.getSrcPort();
- String virtualServerName = genVirtualServerName(lbProtocol, srcIp, srcPort);
-
- boolean destinationsToAdd = false;
- for (DestinationTO destination : loadBalancer.getDestinations()) {
- if (!destination.isRevoked()) {
- destinationsToAdd = true;
- break;
- }
- }
-
- // Delete the virtual server with this protocol, source IP, and source port, along with its default pool and all pool members
- deleteVirtualServerAndDefaultPool(virtualServerName);
- if (!loadBalancer.isRevoked() && destinationsToAdd) {
- // Add the pool
- addPool(virtualServerName, lbAlgorithm);
-
- // Add pool members
- List activePoolMembers = new ArrayList();
- for (DestinationTO destination : loadBalancer.getDestinations()) {
- if (!destination.isRevoked()) {
- String destIp = inline ? tagAddressWithRouteDomain(destination.getDestIp(), guestVlanTag) : destination.getDestIp();
- addPoolMember(virtualServerName, destIp, destination.getDestPort());
- activePoolMembers.add(destIp + "-" + destination.getDestPort());
- }
- }
-
- // Add the virtual server
- addVirtualServer(virtualServerName, lbProtocol, srcIp, srcPort, loadBalancer.getStickinessPolicies());
- }
- }
-
- saveConfiguration();
- return new Answer(cmd);
- } catch (ExecutionException e) {
- s_logger.error("Failed to execute LoadBalancerConfigCommand due to " + e);
-
- if (shouldRetry(numRetries)) {
- return retry(cmd, numRetries);
- } else {
- return new Answer(cmd, e);
- }
-
- }
- }
-
- private synchronized ExternalNetworkResourceUsageAnswer execute(ExternalNetworkResourceUsageCommand cmd) {
- try {
- return getIpBytesSentAndReceived(cmd);
- } catch (ExecutionException e) {
- return new ExternalNetworkResourceUsageAnswer(cmd, e);
- }
- }
-
- private void saveConfiguration() throws ExecutionException {
- try {
- _configSyncApi.save_configuration("", SystemConfigSyncSaveMode.SAVE_BASE_LEVEL_CONFIG);
- _configSyncApi.save_configuration("", SystemConfigSyncSaveMode.SAVE_HIGH_LEVEL_CONFIG);
- s_logger.debug("Successfully saved F5 BigIp configuration.");
- } catch (RemoteException e) {
- s_logger.error("Failed to save F5 BigIp configuration due to: " + e);
- throw new ExecutionException(e.getMessage());
- }
- }
-
- private void addGuestVlan(long vlanTag, String vlanSelfIp, String vlanNetmask, boolean inline) throws ExecutionException {
- try {
- String vlanName = genVlanName(vlanTag);
- List allVlans = getStrippedVlans();
- if (!allVlans.contains(vlanName)) {
- String[] vlanNames = genStringArray(vlanName);
- long[] vlanTags = genLongArray(vlanTag);
- CommonEnabledState[] commonEnabledState = {CommonEnabledState.STATE_DISABLED};
-
- // Create the interface name
- NetworkingVLANMemberEntry[][] vlanMemberEntries = {{new NetworkingVLANMemberEntry()}};
- vlanMemberEntries[0][0].setMember_type(NetworkingMemberType.MEMBER_INTERFACE);
- vlanMemberEntries[0][0].setTag_state(NetworkingMemberTagType.MEMBER_TAGGED);
- vlanMemberEntries[0][0].setMember_name(_privateInterface);
-
- s_logger.debug("Creating a guest VLAN with tag " + vlanTag);
- _vlanApi.create(vlanNames, vlanTags, vlanMemberEntries, commonEnabledState, new long[] {10L}, new String[] {"00:00:00:00:00:00"});
- s_logger.debug("vlanName " + vlanName);
- s_logger.debug("getStrippedVlans " + getStrippedVlans());
-
- if (!getStrippedVlans().contains(vlanName)) {
- throw new ExecutionException("Failed to create vlan with tag " + vlanTag);
- }
- }
-
- if (inline) {
- List allRouteDomains = getRouteDomains();
- if (!allRouteDomains.contains(vlanTag)) {
- long[] routeDomainIds = genLongArray(vlanTag);
- String[][] vlanNames = new String[][] {genStringArray(genVlanName(vlanTag))};
-
- s_logger.debug("Creating route domain " + vlanTag);
- _routeDomainApi.create(routeDomainIds, vlanNames);
-
- if (!getRouteDomains().contains(vlanTag)) {
- throw new ExecutionException("Failed to create route domain " + vlanTag);
- }
- }
- }
-
- List allSelfIps = getSelfIps();
- if (!allSelfIps.contains(vlanSelfIp)) {
- String[] selfIpsToCreate = genStringArray(vlanSelfIp);
- String[] vlans = genStringArray(vlanName);
- String[] netmasks = genStringArray(vlanNetmask);
- long[] unitIds = genLongArray(0L);
- CommonEnabledState[] enabledStates = new CommonEnabledState[] {CommonEnabledState.STATE_DISABLED};
-
- s_logger.debug("Creating self IP " + vlanSelfIp);
- _selfIpApi.create(selfIpsToCreate, vlans, netmasks, unitIds, enabledStates);
-
- if (!getSelfIps().contains(vlanSelfIp)) {
- throw new ExecutionException("Failed to create self IP " + vlanSelfIp);
- }
- }
- } catch (RemoteException e) {
- s_logger.error(e);
- throw new ExecutionException(e.getMessage());
- }
-
- }
-
- private void deleteGuestVlan(long vlanTag, String vlanSelfIp, String vlanNetmask, boolean inline) throws ExecutionException {
- try {
- // Delete all virtual servers and pools that use this guest VLAN
- deleteVirtualServersInGuestVlan(vlanSelfIp, vlanNetmask);
-
- List allSelfIps = getSelfIps();
- if (allSelfIps.contains(vlanSelfIp)) {
- s_logger.debug("Deleting self IP " + vlanSelfIp);
- _selfIpApi.delete_self_ip(genStringArray(vlanSelfIp));
-
- if (getSelfIps().contains(vlanSelfIp)) {
- throw new ExecutionException("Failed to delete self IP " + vlanSelfIp);
- }
- }
-
- if (inline) {
- List allRouteDomains = getRouteDomains();
- if (allRouteDomains.contains(vlanTag)) {
- s_logger.debug("Deleting route domain " + vlanTag);
- _routeDomainApi.delete_route_domain(genLongArray(vlanTag));
-
- if (getRouteDomains().contains(vlanTag)) {
- throw new ExecutionException("Failed to delete route domain " + vlanTag);
- }
- }
- }
-
- String vlanName = genVlanName(vlanTag);
- List allVlans = getStrippedVlans();
- if (allVlans.contains(vlanName)) {
- _vlanApi.delete_vlan(genStringArray(vlanName));
-
- if (getVlans().contains(vlanName)) {
- throw new ExecutionException("Failed to delete VLAN with tag: " + vlanTag);
- }
- }
- } catch (RemoteException e) {
- throw new ExecutionException(e.getMessage());
- }
- }
-
- private void deleteVirtualServersInGuestVlan(String vlanSelfIp, String vlanNetmask) throws ExecutionException {
- vlanSelfIp = stripRouteDomainFromAddress(vlanSelfIp);
- List virtualServersToDelete = new ArrayList();
-
- List allVirtualServers = getStrippedVirtualServers();
- for (String virtualServerName : allVirtualServers) {
- // Check if the virtual server's default pool has members in this guest VLAN
- List poolMembers = getMembers(virtualServerName);
- for (String poolMemberName : poolMembers) {
- String poolMemberIp = stripRouteDomainFromAddress(getIpAndPort(poolMemberName)[0]);
- if (NetUtils.sameSubnet(vlanSelfIp, poolMemberIp, vlanNetmask)) {
- virtualServersToDelete.add(virtualServerName);
- break;
- }
- }
- }
-
- for (String virtualServerName : virtualServersToDelete) {
- s_logger.debug("Found a virtual server (" + virtualServerName + ") for guest network with self IP " + vlanSelfIp +
- " that is active when the guest network is being destroyed.");
- deleteVirtualServerAndDefaultPool(virtualServerName);
- }
- }
-
- private String genVlanName(long vlanTag) {
- return "vlan-" + String.valueOf(vlanTag);
- }
-
- private List getRouteDomains() throws ExecutionException {
- try {
- List routeDomains = new ArrayList();
- long[] routeDomainsArray = _routeDomainApi.get_list();
-
- for (long routeDomainName : routeDomainsArray) {
- routeDomains.add(routeDomainName);
- }
-
- return routeDomains;
- } catch (RemoteException e) {
- throw new ExecutionException(e.getMessage());
- }
- }
-
- private List getSelfIps() throws ExecutionException {
- try {
- List selfIps = new ArrayList();
- String[] selfIpsArray = _selfIpApi.get_list();
-
- for (String selfIp : selfIpsArray) {
- selfIps.add(selfIp);
- }
-
- return selfIps;
- } catch (RemoteException e) {
- throw new ExecutionException(e.getMessage());
- }
- }
-
- //This was working with Big IP 10.x
- //getVlans retuns vlans with user partition information
- //ex: if vlanname is vlan-100 then the get_list() will return /Common/vlan-100
- private List getVlans() throws ExecutionException {
- try {
- List vlans = new ArrayList();
- String[] vlansArray = _vlanApi.get_list();
-
- for (String vlan : vlansArray) {
- vlans.add(vlan);
- }
-
- return vlans;
- } catch (RemoteException e) {
- throw new ExecutionException(e.getMessage());
- }
- }
-
- //getVlans retuns vlan names without user partition information
- //ex: if vlanname is vlan-100 then the get_list() will return /Common/vlan-100
- // This method will strip the partition information and only returns a list with vlan name (vlan-100)
- private List getStrippedVlans() throws ExecutionException {
- try {
- List vlans = new ArrayList();
- String[] vlansArray = _vlanApi.get_list();
-
- for (String vlan : vlansArray) {
- if(vlan.contains("/")){
- vlans.add(vlan.substring(vlan.lastIndexOf("/") + 1));
- }else{
- vlans.add(vlan);
- }
- }
-
- return vlans;
- } catch (RemoteException e) {
- throw new ExecutionException(e.getMessage());
- }
- }
- // Login
-
- private void login() throws ExecutionException {
- try {
- _interfaces = new Interfaces();
-
- if (!_interfaces.initialize(_ip, _username, _password)) {
- throw new ExecutionException("Failed to log in to BigIp appliance");
- }
-
- // iControl.Interfaces.initialize always return true so make a call to force connect to F5 to validate credentials
- _interfaces.getSystemSystemInfo().get_system_information();
-
- _virtualServerApi = _interfaces.getLocalLBVirtualServer();
- _loadbalancerApi = _interfaces.getLocalLBPool();
- _nodeApi = _interfaces.getLocalLBNodeAddress();
- _vlanApi = _interfaces.getNetworkingVLAN();
- _selfIpApi = _interfaces.getNetworkingSelfIP();
- _routeDomainApi = _interfaces.getNetworkingRouteDomain();
- _configSyncApi = _interfaces.getSystemConfigSync();
- _persistenceProfileApi = _interfaces.getLocalLBProfilePersistence();
- } catch (Exception e) {
- throw new ExecutionException("Failed to log in to BigIp appliance due to " + e.getMessage());
- }
- }
-
- // Virtual server methods
-
- private void addVirtualServer(String virtualServerName, LbProtocol protocol, String srcIp, int srcPort, StickinessPolicyTO[] stickyPolicies)
- throws ExecutionException {
- try {
- if (!virtualServerExists(virtualServerName)) {
- s_logger.debug("Adding virtual server " + virtualServerName);
- _virtualServerApi.create(genVirtualServerDefinition(virtualServerName, protocol, srcIp, srcPort), new String[] {"255.255.255.255"},
- genVirtualServerResource(virtualServerName), genVirtualServerProfile(protocol));
- _virtualServerApi.set_snat_automap(genStringArray(virtualServerName));
- if (!virtualServerExists(virtualServerName)) {
- throw new ExecutionException("Failed to add virtual server " + virtualServerName);
- }
- }
-
- if ((stickyPolicies != null) && (stickyPolicies.length > 0) && (stickyPolicies[0] != null)) {
- StickinessPolicyTO stickinessPolicy = stickyPolicies[0];
- if (StickinessMethodType.LBCookieBased.getName().equalsIgnoreCase(stickinessPolicy.getMethodName())) {
-
- String[] profileNames = genStringArray("Cookie-profile-" + virtualServerName);
- if (!persistenceProfileExists(profileNames[0])) {
- LocalLBPersistenceMode[] lbPersistenceMode = new iControl.LocalLBPersistenceMode[1];
- lbPersistenceMode[0] = iControl.LocalLBPersistenceMode.PERSISTENCE_MODE_COOKIE;
- _persistenceProfileApi.create(profileNames, lbPersistenceMode);
- _virtualServerApi.add_persistence_profile(genStringArray(virtualServerName), genPersistenceProfile(profileNames[0]));
- }
-
- List> paramsList = stickinessPolicy.getParams();
- for (Pair param : paramsList) {
- if ("holdtime".equalsIgnoreCase(param.first())) {
- long timeout = 180; //F5 default
- if (param.second() != null) {
- timeout = Long.parseLong(param.second());
- }
- LocalLBProfileULong[] cookieTimeout = new LocalLBProfileULong[1];
- cookieTimeout[0] = new LocalLBProfileULong();
- cookieTimeout[0].setValue(timeout);
- _persistenceProfileApi.set_cookie_expiration(profileNames, cookieTimeout);
- }
- }
- }
- } else {
- _virtualServerApi.remove_all_persistence_profiles(genStringArray(virtualServerName));
- }
-
- } catch (RemoteException e) {
- throw new ExecutionException(e.getMessage());
- }
- }
-
- private void deleteVirtualServerAndDefaultPool(String virtualServerName) throws ExecutionException {
- try {
- if (virtualServerExists(virtualServerName)) {
- // Delete the default pool's members
- List poolMembers = getMembers(virtualServerName);
- for (String poolMember : poolMembers) {
- String[] destIpAndPort = getIpAndPort(poolMember);
- deletePoolMember(virtualServerName, destIpAndPort[0], Integer.parseInt(destIpAndPort[1]));
- }
-
- // Delete the virtual server
- s_logger.debug("Deleting virtual server " + virtualServerName);
- _virtualServerApi.delete_virtual_server(genStringArray(virtualServerName));
-
- if (getStrippedVirtualServers().contains(virtualServerName)) {
- throw new ExecutionException("Failed to delete virtual server " + virtualServerName);
- }
-
- // Delete the default pool
- deletePool(virtualServerName);
- }
- } catch (RemoteException e) {
- throw new ExecutionException(e.getMessage());
- }
- }
-
- private String genVirtualServerName(LbProtocol protocol, String srcIp, long srcPort) {
- srcIp = stripRouteDomainFromAddress(srcIp);
- return genObjectName("vs", protocol, srcIp, srcPort);
- }
-
- private boolean virtualServerExists(String virtualServerName) throws ExecutionException {
- return getStrippedVirtualServers().contains(virtualServerName);
- }
-
- //This was working with Big IP 10.x
- //getVirtualServers retuns VirtualServers with user partition information
- //ex: if VirtualServers is vs-tcp-10.147.44.8-22 then the get_list() will return /Common/vs-tcp-10.147.44.8-22
- private List getVirtualServers() throws ExecutionException {
- try {
- List virtualServers = new ArrayList();
- String[] virtualServersArray = _virtualServerApi.get_list();
-
- for (String virtualServer : virtualServersArray) {
- virtualServers.add(virtualServer);
- }
-
- return virtualServers;
- } catch (RemoteException e) {
- throw new ExecutionException(e.getMessage());
- }
- }
-
-/* getStrippedVirtualServers retuns VirtualServers without user partition information
- ex: if VirtualServers is vs-tcp-10.147.44.8-22 then the get_list() will return /Common/vs-tcp-10.147.44.8-22
- This method will strip the partition information and only returns a list with VirtualServers (vs-tcp-10.147.44.8-22)*/
- private List getStrippedVirtualServers() throws ExecutionException {
- try {
- List virtualServers = new ArrayList();
- String[] virtualServersArray = _virtualServerApi.get_list();
-
- for (String virtualServer : virtualServersArray) {
- if(virtualServer.contains("/")){
- virtualServers.add(virtualServer.substring(virtualServer.lastIndexOf("/") + 1));
- }else{
- virtualServers.add(virtualServer);
- }
- }
-
- return virtualServers;
- } catch (RemoteException e) {
- throw new ExecutionException(e.getMessage());
- }
- }
-
- private boolean persistenceProfileExists(String profileName) throws ExecutionException {
- try {
- String[] persistenceProfileArray = _persistenceProfileApi.get_list();
- if (persistenceProfileArray == null) {
- return false;
- }
- for (String profile : persistenceProfileArray) {
- if (profile.equalsIgnoreCase(profileName)) {
- return true;
- }
- }
- return false;
- } catch (RemoteException e) {
- throw new ExecutionException(e.getMessage());
- }
- }
-
- private iControl.CommonVirtualServerDefinition[] genVirtualServerDefinition(String name, LbProtocol protocol, String srcIp, long srcPort) {
- CommonVirtualServerDefinition vsDefs[] = {new CommonVirtualServerDefinition()};
- vsDefs[0].setName(name);
- vsDefs[0].setAddress(srcIp);
- vsDefs[0].setPort(srcPort);
-
- if (protocol.equals(LbProtocol.tcp)) {
- vsDefs[0].setProtocol(iControl.CommonProtocolType.PROTOCOL_TCP);
- } else if (protocol.equals(LbProtocol.udp)) {
- vsDefs[0].setProtocol(iControl.CommonProtocolType.PROTOCOL_UDP);
- }
-
- return vsDefs;
- }
-
- private iControl.LocalLBVirtualServerVirtualServerResource[] genVirtualServerResource(String poolName) {
- LocalLBVirtualServerVirtualServerResource vsRes[] = {new LocalLBVirtualServerVirtualServerResource()};
- vsRes[0].setType(LocalLBVirtualServerVirtualServerType.RESOURCE_TYPE_POOL);
- vsRes[0].setDefault_pool_name(poolName);
- return vsRes;
- }
-
- private LocalLBVirtualServerVirtualServerProfile[][] genVirtualServerProfile(LbProtocol protocol) {
- LocalLBVirtualServerVirtualServerProfile vsProfs[][] = {{new LocalLBVirtualServerVirtualServerProfile()}};
- vsProfs[0][0].setProfile_context(LocalLBProfileContextType.PROFILE_CONTEXT_TYPE_ALL);
-
- if (protocol.equals(LbProtocol.tcp)) {
- vsProfs[0][0].setProfile_name("http");
- } else if (protocol.equals(LbProtocol.udp)) {
- vsProfs[0][0].setProfile_name("udp");
- }
-
- return vsProfs;
- }
-
- private LocalLBVirtualServerVirtualServerPersistence[][] genPersistenceProfile(String persistenceProfileName) {
- LocalLBVirtualServerVirtualServerPersistence[][] persistenceProfs = {{new LocalLBVirtualServerVirtualServerPersistence()}};
- persistenceProfs[0][0].setDefault_profile(true);
- persistenceProfs[0][0].setProfile_name(persistenceProfileName);
- return persistenceProfs;
- }
-
- // Load balancing pool methods
-
- private void addPool(String virtualServerName, LbAlgorithm algorithm) throws ExecutionException {
- try {
- if (!poolExists(virtualServerName)) {
- if (algorithm.getPersistenceProfileName() != null) {
- algorithm = LbAlgorithm.RoundRobin;
- }
-
- s_logger.debug("Adding pool for virtual server " + virtualServerName + " with algorithm " + algorithm);
- _loadbalancerApi.create(genStringArray(virtualServerName), genLbMethod(algorithm), genEmptyMembersArray());
-
- if (!poolExists(virtualServerName)) {
- throw new ExecutionException("Failed to create new pool for virtual server " + virtualServerName);
- }
- }
- } catch (RemoteException e) {
- throw new ExecutionException(e.getMessage());
- }
- }
-
- private void deletePool(String virtualServerName) throws ExecutionException {
- try {
- if (poolExists(virtualServerName) && getMembers(virtualServerName).size() == 0) {
- s_logger.debug("Deleting pool for virtual server " + virtualServerName);
- _loadbalancerApi.delete_pool(genStringArray(virtualServerName));
-
- if (poolExists(virtualServerName)) {
- throw new ExecutionException("Failed to delete pool for virtual server " + virtualServerName);
- }
- }
- } catch (RemoteException e) {
- throw new ExecutionException(e.getMessage());
- }
- }
-
- private void addPoolMember(String virtualServerName, String destIp, int destPort) throws ExecutionException {
- try {
- String memberIdentifier = destIp + "-" + destPort;
-
- if (poolExists(virtualServerName) && !memberExists(virtualServerName, memberIdentifier)) {
- s_logger.debug("Adding member " + memberIdentifier + " into pool for virtual server " + virtualServerName);
- _loadbalancerApi.add_member(genStringArray(virtualServerName), genMembers(destIp, destPort));
-
- if (!memberExists(virtualServerName, memberIdentifier)) {
- throw new ExecutionException("Failed to add new member " + memberIdentifier + " into pool for virtual server " + virtualServerName);
- }
- }
- } catch (RemoteException e) {
- throw new ExecutionException(e.getMessage());
- }
- }
-
- private void deleteInactivePoolMembers(String virtualServerName, List activePoolMembers) throws ExecutionException {
- List allPoolMembers = getMembers(virtualServerName);
-
- for (String member : allPoolMembers) {
- if (!activePoolMembers.contains(member)) {
- String[] ipAndPort = member.split("-");
- deletePoolMember(virtualServerName, ipAndPort[0], Integer.parseInt(ipAndPort[1]));
- }
- }
- }
-
- private void deletePoolMember(String virtualServerName, String destIp, int destPort) throws ExecutionException {
- try {
- String memberIdentifier = destIp + "-" + destPort;
- List lbPools = getAllStrippedLbPools();
-
- if (lbPools.contains(virtualServerName) && memberExists(virtualServerName, memberIdentifier)) {
- s_logger.debug("Deleting member " + memberIdentifier + " from pool for virtual server " + virtualServerName);
- _loadbalancerApi.remove_member(genStringArray(virtualServerName), genMembers(destIp, destPort));
-
- if (memberExists(virtualServerName, memberIdentifier)) {
- throw new ExecutionException("Failed to delete member " + memberIdentifier + " from pool for virtual server " + virtualServerName);
- }
-
- if (nodeExists(destIp)) {
- boolean nodeNeeded = false;
- done: for (String poolToCheck : lbPools) {
- for (String memberInPool : getMembers(poolToCheck)) {
- if (getIpAndPort(memberInPool)[0].equals(destIp)) {
- nodeNeeded = true;
- break done;
- }
- }
- }
-
- if (!nodeNeeded) {
- s_logger.debug("Deleting node " + destIp);
- _nodeApi.delete_node_address(genStringArray(destIp));
-
- if (nodeExists(destIp)) {
- throw new ExecutionException("Failed to delete node " + destIp);
- }
- }
- }
- }
- } catch (RemoteException e) {
- throw new ExecutionException(e.getMessage());
- }
- }
-
- private boolean poolExists(String poolName) throws ExecutionException {
- return getAllStrippedLbPools().contains(poolName);
- }
-
- private boolean memberExists(String poolName, String memberIdentifier) throws ExecutionException {
- return getMembers(poolName).contains(memberIdentifier);
- }
-
- private boolean nodeExists(String destIp) throws RemoteException {
- return getNodes().contains(destIp);
- }
-
- private String[] getIpAndPort(String memberIdentifier) {
- return memberIdentifier.split("-");
- }
-
- //This was working with Big IP 10.x
- //getAllLbPools retuns LbPools with user partition information
- //ex: if LbPools is vs-tcp-10.147.44.8-22 then the get_list() will return /Common/vs-tcp-10.147.44.8-22
- public List getAllLbPools() throws ExecutionException {
- try {
- List lbPools = new ArrayList();
- String[] pools = _loadbalancerApi.get_list();
-
- for (String pool : pools) {
- lbPools.add(pool);
- }
-
- return lbPools;
- } catch (RemoteException e) {
- throw new ExecutionException(e.getMessage());
- }
- }
-
- //Big IP 11.x
- //getAllLbPools retuns LbPools without user partition information
- //ex: if LbPools is vs-tcp-10.147.44.8-22 then the get_list() will return /Common/vs-tcp-10.147.44.8-22
- //This method will strip the partition information and only returns a list with LbPools (vs-tcp-10.147.44.8-22)
- public List getAllStrippedLbPools() throws ExecutionException {
- try {
- List lbPools = new ArrayList();
- String[] pools = _loadbalancerApi.get_list();
-
- for (String pool : pools) {
- if(pool.contains("/")){
- lbPools.add(pool.substring(pool.lastIndexOf("/") + 1));
- }else{
- lbPools.add(pool);
- }
- }
- return lbPools;
- } catch (RemoteException e) {
- throw new ExecutionException(e.getMessage());
- }
- }
-
- private List getMembers(String virtualServerName) throws ExecutionException {
- try {
- List members = new ArrayList();
- String[] virtualServerNames = genStringArray(virtualServerName);
- CommonIPPortDefinition[] membersArray = _loadbalancerApi.get_member(virtualServerNames)[0];
-
- for (CommonIPPortDefinition member : membersArray) {
- members.add(member.getAddress() + "-" + member.getPort());
- }
-
- return members;
- } catch (RemoteException e) {
- throw new ExecutionException(e.getMessage());
- }
- }
-
- private List getNodes() throws RemoteException {
- List nodes = new ArrayList();
- String[] nodesArray = _nodeApi.get_list();
-
- for (String node : nodesArray) {
- nodes.add(node);
- }
-
- return nodes;
- }
-
- private iControl.CommonIPPortDefinition[][] genMembers(String destIp, long destPort) {
- iControl.CommonIPPortDefinition[] membersInnerArray = new iControl.CommonIPPortDefinition[1];
- membersInnerArray[0] = new iControl.CommonIPPortDefinition(destIp, destPort);
- return new iControl.CommonIPPortDefinition[][] {membersInnerArray};
- }
-
- private iControl.CommonIPPortDefinition[][] genEmptyMembersArray() {
- iControl.CommonIPPortDefinition[] membersInnerArray = new iControl.CommonIPPortDefinition[0];
- return new iControl.CommonIPPortDefinition[][] {membersInnerArray};
- }
-
- private LocalLBLBMethod[] genLbMethod(LbAlgorithm algorithm) {
- if (algorithm.getMethod() != null) {
- return new LocalLBLBMethod[] {algorithm.getMethod()};
- } else {
- return new LocalLBLBMethod[] {LbAlgorithm.RoundRobin.getMethod()};
- }
- }
-
- // Stats methods
-
- private ExternalNetworkResourceUsageAnswer getIpBytesSentAndReceived(ExternalNetworkResourceUsageCommand cmd) throws ExecutionException {
- ExternalNetworkResourceUsageAnswer answer = new ExternalNetworkResourceUsageAnswer(cmd);
-
- try {
-
- LocalLBVirtualServerVirtualServerStatistics stats = _virtualServerApi.get_all_statistics();
- for (LocalLBVirtualServerVirtualServerStatisticEntry entry : stats.getStatistics()) {
- String virtualServerIp = entry.getVirtual_server().getAddress();
-
- virtualServerIp = stripRouteDomainFromAddress(virtualServerIp);
-
- long[] bytesSentAndReceived = answer.ipBytes.get(virtualServerIp);
-
- if (bytesSentAndReceived == null) {
- bytesSentAndReceived = new long[] {0, 0};
- }
-
- for (CommonStatistic stat : entry.getStatistics()) {
- int index;
- if (stat.getType().equals(CommonStatisticType.STATISTIC_CLIENT_SIDE_BYTES_OUT)) {
- // Add to the outgoing bytes
- index = 0;
- } else if (stat.getType().equals(CommonStatisticType.STATISTIC_CLIENT_SIDE_BYTES_IN)) {
- // Add to the incoming bytes
- index = 1;
- } else {
- continue;
- }
-
- long high = stat.getValue().getHigh();
- long low = stat.getValue().getLow();
- long full = getFullUsage(high, low);
-
- bytesSentAndReceived[index] += full;
- }
-
- if (bytesSentAndReceived[0] >= 0 && bytesSentAndReceived[1] >= 0) {
- answer.ipBytes.put(virtualServerIp, bytesSentAndReceived);
- }
- }
- } catch (Exception e) {
- s_logger.error(e);
- throw new ExecutionException(e.getMessage());
- }
-
- return answer;
- }
-
- private long getFullUsage(long high, long low) {
- Double full;
- Double rollOver = new Double(0x7fffffff);
- rollOver = new Double(rollOver.doubleValue() + 1.0);
-
- if (high >= 0) {
- // shift left 32 bits and mask off new bits to 0's
- full = new Double((high << 32 & 0xffff0000));
- } else {
- // mask off sign bits + shift left by 32 bits then add the sign bit back
- full = new Double(((high & 0x7fffffff) << 32) + (0x80000000 << 32));
- }
-
- if (low >= 0) {
- // add low to full and we're good
- full = new Double(full.doubleValue() + low);
- } else {
- // add full to low after masking off sign bits and adding 1 to the masked off low order value
- full = new Double(full.doubleValue() + ((low & 0x7fffffff)) + rollOver.doubleValue());
- }
-
- return full.longValue();
- }
-
- // Misc methods
-
- private String tagAddressWithRouteDomain(String address, long vlanTag) {
- return address + _routeDomainIdentifier + vlanTag;
- }
-
- private String stripRouteDomainFromAddress(String address) {
- int i = address.indexOf(_routeDomainIdentifier);
-
- if (i > 0) {
- address = address.substring(0, i);
- }
-
- return address;
- }
-
- private String genObjectName(Object... args) {
- String objectName = "";
-
- for (int i = 0; i < args.length; i++) {
- objectName += args[i];
- if (i != args.length - 1) {
- objectName += _objectNamePathSep;
- }
- }
-
- return objectName;
- }
-
- private long[] genLongArray(long l) {
- return new long[] {l};
- }
-
- private static String[] genStringArray(String s) {
- return new String[] {s};
- }
-
- @Override
- public void setName(String name) {
- // TODO Auto-generated method stub
-
- }
-
- @Override
- public void setConfigParams(Map params) {
- // TODO Auto-generated method stub
-
- }
-
- @Override
- public Map getConfigParams() {
- // TODO Auto-generated method stub
- return null;
- }
-
- @Override
- public int getRunLevel() {
- // TODO Auto-generated method stub
- return 0;
- }
-
- @Override
- public void setRunLevel(int level) {
- // TODO Auto-generated method stub
-
- }
-
-}
diff --git a/plugins/network-elements/f5/src/main/resources/META-INF/cloudstack/f5/module.properties b/plugins/network-elements/f5/src/main/resources/META-INF/cloudstack/f5/module.properties
deleted file mode 100644
index efdb64a89e7..00000000000
--- a/plugins/network-elements/f5/src/main/resources/META-INF/cloudstack/f5/module.properties
+++ /dev/null
@@ -1,18 +0,0 @@
-# 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.
-name=f5
-parent=network
\ No newline at end of file
diff --git a/plugins/network-elements/f5/src/main/resources/META-INF/cloudstack/f5/spring-f5-context.xml b/plugins/network-elements/f5/src/main/resources/META-INF/cloudstack/f5/spring-f5-context.xml
deleted file mode 100644
index 10af4625593..00000000000
--- a/plugins/network-elements/f5/src/main/resources/META-INF/cloudstack/f5/spring-f5-context.xml
+++ /dev/null
@@ -1,34 +0,0 @@
-
-
-
-
-
-
-
-
diff --git a/plugins/network-elements/juniper-srx/pom.xml b/plugins/network-elements/juniper-srx/pom.xml
deleted file mode 100644
index a167bb7bb2d..00000000000
--- a/plugins/network-elements/juniper-srx/pom.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-
-
- 4.0.0
- cloud-plugin-network-srx
- Apache CloudStack Plugin - Juniper SRX
-
- org.apache.cloudstack
- cloudstack-plugins
- 4.18.0.0-SNAPSHOT
- ../../pom.xml
-
-
-
- com.cloud.com.f5
- icontrol
- 1.0
-
-
-
diff --git a/plugins/network-elements/juniper-srx/src/main/java/com/cloud/api/commands/AddExternalFirewallCmd.java b/plugins/network-elements/juniper-srx/src/main/java/com/cloud/api/commands/AddExternalFirewallCmd.java
deleted file mode 100644
index 36d542afbe4..00000000000
--- a/plugins/network-elements/juniper-srx/src/main/java/com/cloud/api/commands/AddExternalFirewallCmd.java
+++ /dev/null
@@ -1,110 +0,0 @@
-// 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.api.commands;
-
-import javax.inject.Inject;
-
-import org.apache.log4j.Logger;
-
-import org.apache.cloudstack.api.APICommand;
-import org.apache.cloudstack.api.ApiConstants;
-import org.apache.cloudstack.api.ApiErrorCode;
-import org.apache.cloudstack.api.BaseCmd;
-import org.apache.cloudstack.api.Parameter;
-import org.apache.cloudstack.api.ServerApiException;
-import org.apache.cloudstack.api.response.ExternalFirewallResponse;
-import org.apache.cloudstack.api.response.ZoneResponse;
-
-import com.cloud.exception.InvalidParameterValueException;
-import com.cloud.host.Host;
-import com.cloud.network.element.JuniperSRXFirewallElementService;
-import com.cloud.user.Account;
-import com.cloud.utils.exception.CloudRuntimeException;
-
-@APICommand(name = "addExternalFirewall", description = "Adds an external firewall appliance", responseObject = ExternalFirewallResponse.class,
- requestHasSensitiveInfo = true, responseHasSensitiveInfo = false)
-public class AddExternalFirewallCmd extends BaseCmd {
- public static final Logger s_logger = Logger.getLogger(AddExternalFirewallCmd.class.getName());
-
- /////////////////////////////////////////////////////
- //////////////// API parameters /////////////////////
- /////////////////////////////////////////////////////
-
- @Parameter(name = ApiConstants.ZONE_ID,
- type = CommandType.UUID,
- entityType = ZoneResponse.class,
- required = true,
- description = "Zone in which to add the external firewall appliance.")
- private Long zoneId;
-
- @Parameter(name = ApiConstants.URL, type = CommandType.STRING, required = true, description = "URL of the external firewall appliance.")
- private String url;
-
- @Parameter(name = ApiConstants.USERNAME, type = CommandType.STRING, required = true, description = "Username of the external firewall appliance.")
- private String username;
-
- @Parameter(name = ApiConstants.PASSWORD, type = CommandType.STRING, required = true, description = "Password of the external firewall appliance.")
- private String password;
-
- ///////////////////////////////////////////////////
- /////////////////// Accessors ///////////////////////
- /////////////////////////////////////////////////////
-
- public Long getZoneId() {
- return zoneId;
- }
-
- public String getUrl() {
- return url;
- }
-
- public String getUsername() {
- return username;
- }
-
- public String getPassword() {
- return password;
- }
-
- /////////////////////////////////////////////////////
- /////////////// API Implementation///////////////////
- /////////////////////////////////////////////////////
-
- @Inject
- JuniperSRXFirewallElementService _srxElementService;
-
- @Override
- public long getEntityOwnerId() {
- return Account.ACCOUNT_ID_SYSTEM;
- }
-
- @SuppressWarnings("deprecation")
- @Override
- public void execute() {
- try {
- Host externalFirewall = _srxElementService.addExternalFirewall(this);
- ExternalFirewallResponse response = _srxElementService.createExternalFirewallResponse(externalFirewall);
- response.setObjectName("externalfirewall");
- response.setResponseName(getCommandName());
- this.setResponseObject(response);
- } catch (InvalidParameterValueException ipve) {
- throw new ServerApiException(ApiErrorCode.PARAM_ERROR, ipve.getMessage());
- } catch (CloudRuntimeException cre) {
- throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, cre.getMessage());
- }
- }
-}
diff --git a/plugins/network-elements/juniper-srx/src/main/java/com/cloud/api/commands/AddSrxFirewallCmd.java b/plugins/network-elements/juniper-srx/src/main/java/com/cloud/api/commands/AddSrxFirewallCmd.java
deleted file mode 100644
index db3fbf7fa45..00000000000
--- a/plugins/network-elements/juniper-srx/src/main/java/com/cloud/api/commands/AddSrxFirewallCmd.java
+++ /dev/null
@@ -1,135 +0,0 @@
-// 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.api.commands;
-
-import javax.inject.Inject;
-
-import org.apache.log4j.Logger;
-
-import org.apache.cloudstack.api.APICommand;
-import org.apache.cloudstack.api.ApiConstants;
-import org.apache.cloudstack.api.ApiErrorCode;
-import org.apache.cloudstack.api.BaseAsyncCmd;
-import org.apache.cloudstack.api.Parameter;
-import org.apache.cloudstack.api.ServerApiException;
-import org.apache.cloudstack.api.response.PhysicalNetworkResponse;
-import org.apache.cloudstack.context.CallContext;
-
-import com.cloud.api.response.SrxFirewallResponse;
-import com.cloud.event.EventTypes;
-import com.cloud.exception.ConcurrentOperationException;
-import com.cloud.exception.InsufficientCapacityException;
-import com.cloud.exception.InvalidParameterValueException;
-import com.cloud.exception.ResourceAllocationException;
-import com.cloud.exception.ResourceUnavailableException;
-import com.cloud.network.dao.ExternalFirewallDeviceVO;
-import com.cloud.network.element.JuniperSRXFirewallElementService;
-import com.cloud.utils.exception.CloudRuntimeException;
-
-@APICommand(name = "addSrxFirewall", responseObject = SrxFirewallResponse.class, description = "Adds a SRX firewall device",
- requestHasSensitiveInfo = true, responseHasSensitiveInfo = false)
-public class AddSrxFirewallCmd extends BaseAsyncCmd {
- public static final Logger s_logger = Logger.getLogger(AddSrxFirewallCmd.class.getName());
- @Inject
- JuniperSRXFirewallElementService _srxFwService;
-
- /////////////////////////////////////////////////////
- //////////////// API parameters /////////////////////
- /////////////////////////////////////////////////////
-
- @Parameter(name = ApiConstants.PHYSICAL_NETWORK_ID,
- type = CommandType.UUID,
- entityType = PhysicalNetworkResponse.class,
- required = true,
- description = "the Physical Network ID")
- private Long physicalNetworkId;
-
- @Parameter(name = ApiConstants.URL, type = CommandType.STRING, required = true, description = "URL of the SRX appliance.")
- private String url;
-
- @Parameter(name = ApiConstants.USERNAME, type = CommandType.STRING, required = true, description = "Credentials to reach SRX firewall device")
- private String username;
-
- @Parameter(name = ApiConstants.PASSWORD, type = CommandType.STRING, required = true, description = "Credentials to reach SRX firewall device")
- private String password;
-
- @Parameter(name = ApiConstants.NETWORK_DEVICE_TYPE, type = CommandType.STRING, required = true, description = "supports only JuniperSRXFirewall")
- private String deviceType;
-
- /////////////////////////////////////////////////////
- /////////////////// Accessors ///////////////////////
- /////////////////////////////////////////////////////
-
- public Long getPhysicalNetworkId() {
- return physicalNetworkId;
- }
-
- public String getUrl() {
- return url;
- }
-
- public String getUsername() {
- return username;
- }
-
- public String getPassword() {
- return password;
- }
-
- public String getDeviceType() {
- return deviceType;
- }
-
- /////////////////////////////////////////////////////
- /////////////// API Implementation///////////////////
- /////////////////////////////////////////////////////
-
- @Override
- public void execute() throws ResourceUnavailableException, InsufficientCapacityException, ServerApiException, ConcurrentOperationException,
- ResourceAllocationException {
- try {
- ExternalFirewallDeviceVO fwDeviceVO = _srxFwService.addSrxFirewall(this);
- if (fwDeviceVO != null) {
- SrxFirewallResponse response = _srxFwService.createSrxFirewallResponse(fwDeviceVO);
- response.setObjectName("srxfirewall");
- response.setResponseName(getCommandName());
- this.setResponseObject(response);
- } else {
- throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to add SRX firewall due to internal error.");
- }
- } catch (InvalidParameterValueException invalidParamExcp) {
- throw new ServerApiException(ApiErrorCode.PARAM_ERROR, invalidParamExcp.getMessage());
- } catch (CloudRuntimeException runtimeExcp) {
- throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, runtimeExcp.getMessage());
- }
- }
-
- @Override
- public String getEventDescription() {
- return "Adding a SRX firewall device";
- }
-
- @Override
- public String getEventType() {
- return EventTypes.EVENT_EXTERNAL_FIREWALL_DEVICE_ADD;
- }
-
- @Override
- public long getEntityOwnerId() {
- return CallContext.current().getCallingAccount().getId();
- }
-}
diff --git a/plugins/network-elements/juniper-srx/src/main/java/com/cloud/api/commands/ConfigureSrxFirewallCmd.java b/plugins/network-elements/juniper-srx/src/main/java/com/cloud/api/commands/ConfigureSrxFirewallCmd.java
deleted file mode 100644
index fcf1a2b3fa7..00000000000
--- a/plugins/network-elements/juniper-srx/src/main/java/com/cloud/api/commands/ConfigureSrxFirewallCmd.java
+++ /dev/null
@@ -1,117 +0,0 @@
-// 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.api.commands;
-
-import javax.inject.Inject;
-
-import org.apache.log4j.Logger;
-
-import org.apache.cloudstack.api.APICommand;
-import org.apache.cloudstack.api.ApiConstants;
-import org.apache.cloudstack.api.ApiErrorCode;
-import org.apache.cloudstack.api.BaseAsyncCmd;
-import org.apache.cloudstack.api.Parameter;
-import org.apache.cloudstack.api.ServerApiException;
-import org.apache.cloudstack.context.CallContext;
-
-import com.cloud.api.response.SrxFirewallResponse;
-import com.cloud.event.EventTypes;
-import com.cloud.exception.ConcurrentOperationException;
-import com.cloud.exception.InsufficientCapacityException;
-import com.cloud.exception.InvalidParameterValueException;
-import com.cloud.exception.ResourceAllocationException;
-import com.cloud.exception.ResourceUnavailableException;
-import com.cloud.network.dao.ExternalFirewallDeviceVO;
-import com.cloud.network.element.JuniperSRXFirewallElementService;
-import com.cloud.utils.exception.CloudRuntimeException;
-
-@APICommand(name = "configureSrxFirewall", responseObject = SrxFirewallResponse.class, description = "Configures a SRX firewall device",
- requestHasSensitiveInfo = false, responseHasSensitiveInfo = false)
-public class ConfigureSrxFirewallCmd extends BaseAsyncCmd {
-
- public static final Logger s_logger = Logger.getLogger(ConfigureSrxFirewallCmd.class.getName());
- @Inject
- JuniperSRXFirewallElementService _srxFwService;
-
- /////////////////////////////////////////////////////
- //////////////// API parameters /////////////////////
- /////////////////////////////////////////////////////
-
- @Parameter(name = ApiConstants.FIREWALL_DEVICE_ID,
- type = CommandType.UUID,
- entityType = SrxFirewallResponse.class,
- required = true,
- description = "SRX firewall device ID")
- private Long fwDeviceId;
-
- @Parameter(name = ApiConstants.FIREWALL_DEVICE_CAPACITY,
- type = CommandType.LONG,
- required = false,
- description = "capacity of the firewall device, Capacity will be interpreted as number of networks device can handle")
- private Long capacity;
-
- /////////////////////////////////////////////////////
- /////////////////// Accessors ///////////////////////
- /////////////////////////////////////////////////////
-
- public Long getFirewallDeviceId() {
- return fwDeviceId;
- }
-
- public Long getFirewallCapacity() {
- return capacity;
- }
-
- /////////////////////////////////////////////////////
- /////////////// API Implementation///////////////////
- /////////////////////////////////////////////////////
-
- @Override
- public void execute() throws ResourceUnavailableException, InsufficientCapacityException, ServerApiException, ConcurrentOperationException,
- ResourceAllocationException {
- try {
- ExternalFirewallDeviceVO fwDeviceVO = _srxFwService.configureSrxFirewall(this);
- if (fwDeviceVO != null) {
- SrxFirewallResponse response = _srxFwService.createSrxFirewallResponse(fwDeviceVO);
- response.setObjectName("srxfirewall");
- response.setResponseName(getCommandName());
- this.setResponseObject(response);
- } else {
- throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to configure SRX firewall device due to internal error.");
- }
- } catch (InvalidParameterValueException invalidParamExcp) {
- throw new ServerApiException(ApiErrorCode.PARAM_ERROR, invalidParamExcp.getMessage());
- } catch (CloudRuntimeException runtimeExcp) {
- throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, runtimeExcp.getMessage());
- }
- }
-
- @Override
- public String getEventDescription() {
- return "Configuring a SRX firewall device";
- }
-
- @Override
- public String getEventType() {
- return EventTypes.EVENT_EXTERNAL_FIREWALL_DEVICE_CONFIGURE;
- }
-
- @Override
- public long getEntityOwnerId() {
- return CallContext.current().getCallingAccount().getId();
- }
-}
diff --git a/plugins/network-elements/juniper-srx/src/main/java/com/cloud/api/commands/DeleteExternalFirewallCmd.java b/plugins/network-elements/juniper-srx/src/main/java/com/cloud/api/commands/DeleteExternalFirewallCmd.java
deleted file mode 100644
index d5a3619e399..00000000000
--- a/plugins/network-elements/juniper-srx/src/main/java/com/cloud/api/commands/DeleteExternalFirewallCmd.java
+++ /dev/null
@@ -1,84 +0,0 @@
-// 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.api.commands;
-
-import javax.inject.Inject;
-
-import org.apache.log4j.Logger;
-
-import org.apache.cloudstack.api.APICommand;
-import org.apache.cloudstack.api.ApiConstants;
-import org.apache.cloudstack.api.ApiErrorCode;
-import org.apache.cloudstack.api.BaseCmd;
-import org.apache.cloudstack.api.Parameter;
-import org.apache.cloudstack.api.ServerApiException;
-import org.apache.cloudstack.api.response.HostResponse;
-import org.apache.cloudstack.api.response.SuccessResponse;
-
-import com.cloud.exception.InvalidParameterValueException;
-import com.cloud.network.element.JuniperSRXFirewallElementService;
-import com.cloud.user.Account;
-
-@APICommand(name = "deleteExternalFirewall", description = "Deletes an external firewall appliance.", responseObject = SuccessResponse.class,
- requestHasSensitiveInfo = false, responseHasSensitiveInfo = false)
-public class DeleteExternalFirewallCmd extends BaseCmd {
- public static final Logger s_logger = Logger.getLogger(DeleteExternalFirewallCmd.class.getName());
-
- /////////////////////////////////////////////////////
- //////////////// API parameters /////////////////////
- /////////////////////////////////////////////////////
-
- @Parameter(name = ApiConstants.ID, type = CommandType.UUID, entityType = HostResponse.class, required = true, description = "Id of the external firewall appliance.")
- private Long id;
-
- ///////////////////////////////////////////////////
- /////////////////// Accessors ///////////////////////
- /////////////////////////////////////////////////////
-
- public Long getId() {
- return id;
- }
-
- /////////////////////////////////////////////////////
- /////////////// API Implementation///////////////////
- /////////////////////////////////////////////////////
-
- @Inject
- JuniperSRXFirewallElementService _srxElementService;
-
- @Override
- public long getEntityOwnerId() {
- return Account.ACCOUNT_ID_SYSTEM;
- }
-
- @SuppressWarnings("deprecation")
- @Override
- public void execute() {
- try {
- boolean result = _srxElementService.deleteExternalFirewall(this);
- if (result) {
- SuccessResponse response = new SuccessResponse(getCommandName());
- response.setResponseName(getCommandName());
- this.setResponseObject(response);
- } else {
- throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to delete external firewall.");
- }
- } catch (InvalidParameterValueException e) {
- throw new ServerApiException(ApiErrorCode.PARAM_ERROR, "Failed to delete external firewall.");
- }
- }
-}
diff --git a/plugins/network-elements/juniper-srx/src/main/java/com/cloud/api/commands/DeleteSrxFirewallCmd.java b/plugins/network-elements/juniper-srx/src/main/java/com/cloud/api/commands/DeleteSrxFirewallCmd.java
deleted file mode 100644
index b5964016ad1..00000000000
--- a/plugins/network-elements/juniper-srx/src/main/java/com/cloud/api/commands/DeleteSrxFirewallCmd.java
+++ /dev/null
@@ -1,105 +0,0 @@
-// 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.api.commands;
-
-import javax.inject.Inject;
-
-import org.apache.log4j.Logger;
-
-import org.apache.cloudstack.api.APICommand;
-import org.apache.cloudstack.api.ApiConstants;
-import org.apache.cloudstack.api.ApiErrorCode;
-import org.apache.cloudstack.api.BaseAsyncCmd;
-import org.apache.cloudstack.api.Parameter;
-import org.apache.cloudstack.api.ServerApiException;
-import org.apache.cloudstack.api.response.SuccessResponse;
-import org.apache.cloudstack.context.CallContext;
-
-import com.cloud.api.response.SrxFirewallResponse;
-import com.cloud.event.EventTypes;
-import com.cloud.exception.ConcurrentOperationException;
-import com.cloud.exception.InsufficientCapacityException;
-import com.cloud.exception.InvalidParameterValueException;
-import com.cloud.exception.ResourceAllocationException;
-import com.cloud.exception.ResourceUnavailableException;
-import com.cloud.network.element.JuniperSRXFirewallElementService;
-import com.cloud.utils.exception.CloudRuntimeException;
-
-@APICommand(name = "deleteSrxFirewall", responseObject = SuccessResponse.class, description = " delete a SRX firewall device",
- requestHasSensitiveInfo = false, responseHasSensitiveInfo = false)
-public class DeleteSrxFirewallCmd extends BaseAsyncCmd {
- public static final Logger s_logger = Logger.getLogger(DeleteSrxFirewallCmd.class.getName());
- @Inject
- JuniperSRXFirewallElementService _srxElementService;
-
- /////////////////////////////////////////////////////
- //////////////// API parameters /////////////////////
- /////////////////////////////////////////////////////
-
- @Parameter(name = ApiConstants.FIREWALL_DEVICE_ID,
- type = CommandType.UUID,
- entityType = SrxFirewallResponse.class,
- required = true,
- description = "srx firewall device ID")
- private Long fwDeviceId;
-
- /////////////////////////////////////////////////////
- /////////////////// Accessors ///////////////////////
- /////////////////////////////////////////////////////
-
- public Long getFirewallDeviceId() {
- return fwDeviceId;
- }
-
- /////////////////////////////////////////////////////
- /////////////// API Implementation///////////////////
- /////////////////////////////////////////////////////
-
- @Override
- public void execute() throws ResourceUnavailableException, InsufficientCapacityException, ServerApiException, ConcurrentOperationException,
- ResourceAllocationException {
- try {
- boolean result = _srxElementService.deleteSrxFirewall(this);
- if (result) {
- SuccessResponse response = new SuccessResponse(getCommandName());
- response.setResponseName(getCommandName());
- this.setResponseObject(response);
- } else {
- throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to delete SRX firewall device");
- }
- } catch (InvalidParameterValueException invalidParamExcp) {
- throw new ServerApiException(ApiErrorCode.PARAM_ERROR, invalidParamExcp.getMessage());
- } catch (CloudRuntimeException runtimeExcp) {
- throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, runtimeExcp.getMessage());
- }
- }
-
- @Override
- public String getEventDescription() {
- return "Deleting SRX firewall device";
- }
-
- @Override
- public String getEventType() {
- return EventTypes.EVENT_EXTERNAL_FIREWALL_DEVICE_DELETE;
- }
-
- @Override
- public long getEntityOwnerId() {
- return CallContext.current().getCallingAccount().getId();
- }
-}
diff --git a/plugins/network-elements/juniper-srx/src/main/java/com/cloud/api/commands/ListExternalFirewallsCmd.java b/plugins/network-elements/juniper-srx/src/main/java/com/cloud/api/commands/ListExternalFirewallsCmd.java
deleted file mode 100644
index 4e2c26e4b12..00000000000
--- a/plugins/network-elements/juniper-srx/src/main/java/com/cloud/api/commands/ListExternalFirewallsCmd.java
+++ /dev/null
@@ -1,83 +0,0 @@
-// 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.api.commands;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import javax.inject.Inject;
-
-import org.apache.log4j.Logger;
-
-import org.apache.cloudstack.api.APICommand;
-import org.apache.cloudstack.api.ApiConstants;
-import org.apache.cloudstack.api.BaseListCmd;
-import org.apache.cloudstack.api.Parameter;
-import org.apache.cloudstack.api.response.ExternalFirewallResponse;
-import org.apache.cloudstack.api.response.ListResponse;
-import org.apache.cloudstack.api.response.ZoneResponse;
-
-import com.cloud.host.Host;
-import com.cloud.network.element.JuniperSRXFirewallElementService;
-
-@APICommand(name = "listExternalFirewalls", description = "List external firewall appliances.", responseObject = ExternalFirewallResponse.class,
- requestHasSensitiveInfo = false, responseHasSensitiveInfo = false)
-public class ListExternalFirewallsCmd extends BaseListCmd {
- public static final Logger s_logger = Logger.getLogger(ListExternalFirewallsCmd.class.getName());
-
- /////////////////////////////////////////////////////
- //////////////// API parameters /////////////////////
- /////////////////////////////////////////////////////
-
- @Parameter(name = ApiConstants.ZONE_ID, type = CommandType.UUID, entityType = ZoneResponse.class, required = true, description = "zone Id")
- private long zoneId;
-
- /////////////////////////////////////////////////////
- /////////////////// Accessors ///////////////////////
- /////////////////////////////////////////////////////
-
- public long getZoneId() {
- return zoneId;
- }
-
- /////////////////////////////////////////////////////
- /////////////// API Implementation///////////////////
- /////////////////////////////////////////////////////
-
- @Inject
- JuniperSRXFirewallElementService _srxElementService;
-
- @SuppressWarnings("deprecation")
- @Override
- public void execute() {
-
- List extends Host> externalFirewalls = _srxElementService.listExternalFirewalls(this);
-
- ListResponse listResponse = new ListResponse();
- List responses = new ArrayList();
- for (Host externalFirewall : externalFirewalls) {
- ExternalFirewallResponse response = _srxElementService.createExternalFirewallResponse(externalFirewall);
- response.setObjectName("externalfirewall");
- response.setResponseName(getCommandName());
- responses.add(response);
- }
-
- listResponse.setResponses(responses);
- listResponse.setResponseName(getCommandName());
- this.setResponseObject(listResponse);
- }
-}
diff --git a/plugins/network-elements/juniper-srx/src/main/java/com/cloud/api/commands/ListSrxFirewallNetworksCmd.java b/plugins/network-elements/juniper-srx/src/main/java/com/cloud/api/commands/ListSrxFirewallNetworksCmd.java
deleted file mode 100644
index f8d3f8f63dc..00000000000
--- a/plugins/network-elements/juniper-srx/src/main/java/com/cloud/api/commands/ListSrxFirewallNetworksCmd.java
+++ /dev/null
@@ -1,102 +0,0 @@
-// 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.api.commands;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import javax.inject.Inject;
-
-import org.apache.log4j.Logger;
-
-import org.apache.cloudstack.api.APICommand;
-import org.apache.cloudstack.api.ApiConstants;
-import org.apache.cloudstack.api.ApiErrorCode;
-import org.apache.cloudstack.api.BaseListCmd;
-import org.apache.cloudstack.api.Parameter;
-import org.apache.cloudstack.api.ResponseObject.ResponseView;
-import org.apache.cloudstack.api.ServerApiException;
-import org.apache.cloudstack.api.response.ListResponse;
-import org.apache.cloudstack.api.response.NetworkResponse;
-
-import com.cloud.api.response.SrxFirewallResponse;
-import com.cloud.exception.ConcurrentOperationException;
-import com.cloud.exception.InsufficientCapacityException;
-import com.cloud.exception.InvalidParameterValueException;
-import com.cloud.exception.ResourceAllocationException;
-import com.cloud.exception.ResourceUnavailableException;
-import com.cloud.network.Network;
-import com.cloud.network.element.JuniperSRXFirewallElementService;
-import com.cloud.utils.exception.CloudRuntimeException;
-
-@APICommand(name = "listSrxFirewallNetworks", responseObject = NetworkResponse.class, description = "lists network that are using SRX firewall device",
- requestHasSensitiveInfo = false, responseHasSensitiveInfo = false)
-public class ListSrxFirewallNetworksCmd extends BaseListCmd {
-
- public static final Logger s_logger = Logger.getLogger(ListSrxFirewallNetworksCmd.class.getName());
- @Inject
- JuniperSRXFirewallElementService _srxFwService;
-
- /////////////////////////////////////////////////////
- //////////////// API parameters /////////////////////
- /////////////////////////////////////////////////////
-
- @Parameter(name = ApiConstants.LOAD_BALANCER_DEVICE_ID,
- type = CommandType.UUID,
- entityType = SrxFirewallResponse.class,
- required = true,
- description = "netscaler load balancer device ID")
- private Long fwDeviceId;
-
- /////////////////////////////////////////////////////
- /////////////////// Accessors ///////////////////////
- /////////////////////////////////////////////////////
-
- public Long getFirewallDeviceId() {
- return fwDeviceId;
- }
-
- /////////////////////////////////////////////////////
- /////////////// API Implementation///////////////////
- /////////////////////////////////////////////////////
-
- @Override
- public void execute() throws ResourceUnavailableException, InsufficientCapacityException, ServerApiException, ConcurrentOperationException,
- ResourceAllocationException {
- try {
- List extends Network> networks = _srxFwService.listNetworks(this);
- ListResponse response = new ListResponse();
- List networkResponses = new ArrayList();
-
- if (networks != null && !networks.isEmpty()) {
- for (Network network : networks) {
- NetworkResponse networkResponse = _responseGenerator.createNetworkResponse(ResponseView.Full, network);
- networkResponses.add(networkResponse);
- }
- }
-
- response.setResponses(networkResponses);
- response.setResponseName(getCommandName());
- setResponseObject(response);
- } catch (InvalidParameterValueException invalidParamExcp) {
- throw new ServerApiException(ApiErrorCode.PARAM_ERROR, invalidParamExcp.getMessage());
- } catch (CloudRuntimeException runtimeExcp) {
- throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, runtimeExcp.getMessage());
- }
- }
-
- }
diff --git a/plugins/network-elements/juniper-srx/src/main/java/com/cloud/api/commands/ListSrxFirewallsCmd.java b/plugins/network-elements/juniper-srx/src/main/java/com/cloud/api/commands/ListSrxFirewallsCmd.java
deleted file mode 100644
index 244da1bb632..00000000000
--- a/plugins/network-elements/juniper-srx/src/main/java/com/cloud/api/commands/ListSrxFirewallsCmd.java
+++ /dev/null
@@ -1,109 +0,0 @@
-// 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.api.commands;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import javax.inject.Inject;
-
-import org.apache.log4j.Logger;
-
-import org.apache.cloudstack.api.APICommand;
-import org.apache.cloudstack.api.ApiConstants;
-import org.apache.cloudstack.api.ApiErrorCode;
-import org.apache.cloudstack.api.BaseListCmd;
-import org.apache.cloudstack.api.Parameter;
-import org.apache.cloudstack.api.ServerApiException;
-import org.apache.cloudstack.api.response.ListResponse;
-import org.apache.cloudstack.api.response.PhysicalNetworkResponse;
-
-import com.cloud.api.response.SrxFirewallResponse;
-import com.cloud.exception.ConcurrentOperationException;
-import com.cloud.exception.InsufficientCapacityException;
-import com.cloud.exception.InvalidParameterValueException;
-import com.cloud.exception.ResourceAllocationException;
-import com.cloud.exception.ResourceUnavailableException;
-import com.cloud.network.dao.ExternalFirewallDeviceVO;
-import com.cloud.network.element.JuniperSRXFirewallElementService;
-import com.cloud.utils.exception.CloudRuntimeException;
-
-@APICommand(name = "listSrxFirewalls", responseObject = SrxFirewallResponse.class, description = "lists SRX firewall devices in a physical network",
- requestHasSensitiveInfo = false, responseHasSensitiveInfo = false)
-public class ListSrxFirewallsCmd extends BaseListCmd {
-
- public static final Logger s_logger = Logger.getLogger(ListSrxFirewallsCmd.class.getName());
- private static final String s_name = "listsrxfirewallresponse";
- @Inject
- JuniperSRXFirewallElementService _srxFwService;
-
- /////////////////////////////////////////////////////
- //////////////// API parameters /////////////////////
- /////////////////////////////////////////////////////
-
- @Parameter(name = ApiConstants.PHYSICAL_NETWORK_ID, type = CommandType.UUID, entityType = PhysicalNetworkResponse.class, description = "the Physical Network ID")
- private Long physicalNetworkId;
-
- @Parameter(name = ApiConstants.FIREWALL_DEVICE_ID, type = CommandType.UUID, entityType = SrxFirewallResponse.class, description = "SRX firewall device ID")
- private Long fwDeviceId;
-
- /////////////////////////////////////////////////////
- /////////////////// Accessors ///////////////////////
- /////////////////////////////////////////////////////
-
- public Long getFirewallDeviceId() {
- return fwDeviceId;
- }
-
- public Long getPhysicalNetworkId() {
- return physicalNetworkId;
- }
-
- /////////////////////////////////////////////////////
- /////////////// API Implementation///////////////////
- /////////////////////////////////////////////////////
-
- @Override
- public void execute() throws ResourceUnavailableException, InsufficientCapacityException, ServerApiException, ConcurrentOperationException,
- ResourceAllocationException {
- try {
- List fwDevices = _srxFwService.listSrxFirewalls(this);
- ListResponse response = new ListResponse();
- List fwDevicesResponse = new ArrayList();
-
- if (fwDevices != null && !fwDevices.isEmpty()) {
- for (ExternalFirewallDeviceVO fwDeviceVO : fwDevices) {
- SrxFirewallResponse lbdeviceResponse = _srxFwService.createSrxFirewallResponse(fwDeviceVO);
- fwDevicesResponse.add(lbdeviceResponse);
- }
- }
-
- response.setResponses(fwDevicesResponse);
- response.setResponseName(getCommandName());
- this.setResponseObject(response);
- } catch (InvalidParameterValueException invalidParamExcp) {
- throw new ServerApiException(ApiErrorCode.PARAM_ERROR, invalidParamExcp.getMessage());
- } catch (CloudRuntimeException runtimeExcp) {
- throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, runtimeExcp.getMessage());
- }
- }
-
- @Override
- public String getCommandName() {
- return s_name;
- }
-}
diff --git a/plugins/network-elements/juniper-srx/src/main/java/com/cloud/api/response/SrxFirewallResponse.java b/plugins/network-elements/juniper-srx/src/main/java/com/cloud/api/response/SrxFirewallResponse.java
deleted file mode 100644
index 21c5721811d..00000000000
--- a/plugins/network-elements/juniper-srx/src/main/java/com/cloud/api/response/SrxFirewallResponse.java
+++ /dev/null
@@ -1,159 +0,0 @@
-// 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.api.response;
-
-import com.google.gson.annotations.SerializedName;
-
-import org.apache.cloudstack.api.ApiConstants;
-import org.apache.cloudstack.api.BaseResponse;
-import org.apache.cloudstack.api.EntityReference;
-
-import com.cloud.network.dao.ExternalFirewallDeviceVO;
-import com.cloud.serializer.Param;
-
-@EntityReference(value = ExternalFirewallDeviceVO.class)
-@SuppressWarnings("unused")
-public class SrxFirewallResponse extends BaseResponse {
-
- @SerializedName(ApiConstants.FIREWALL_DEVICE_ID)
- @Param(description = "device id of the SRX firewall")
- private String id;
-
- @SerializedName(ApiConstants.PHYSICAL_NETWORK_ID)
- @Param(description = "the physical network to which this SRX firewall belongs to")
- private String physicalNetworkId;
-
- @SerializedName(ApiConstants.PROVIDER)
- @Param(description = "name of the provider")
- private String providerName;
-
- @SerializedName(ApiConstants.FIREWALL_DEVICE_NAME)
- @Param(description = "device name")
- private String deviceName;
-
- @SerializedName(ApiConstants.FIREWALL_DEVICE_STATE)
- @Param(description = "device state")
- private String deviceState;
-
- @SerializedName(ApiConstants.FIREWALL_DEVICE_CAPACITY)
- @Param(description = "device capacity")
- private Long deviceCapacity;
-
- @SerializedName(ApiConstants.ZONE_ID)
- @Param(description = "the zone ID of the external firewall")
- private String zoneId;
-
- @SerializedName(ApiConstants.IP_ADDRESS)
- @Param(description = "the management IP address of the external firewall")
- private String ipAddress;
-
- @SerializedName(ApiConstants.USERNAME)
- @Param(description = "the username that's used to log in to the external firewall")
- private String username;
-
- @SerializedName(ApiConstants.PUBLIC_INTERFACE)
- @Param(description = "the public interface of the external firewall")
- private String publicInterface;
-
- @SerializedName(ApiConstants.USAGE_INTERFACE)
- @Param(description = "the usage interface of the external firewall")
- private String usageInterface;
-
- @SerializedName(ApiConstants.PRIVATE_INTERFACE)
- @Param(description = "the private interface of the external firewall")
- private String privateInterface;
-
- @SerializedName(ApiConstants.PUBLIC_ZONE)
- @Param(description = "the public security zone of the external firewall")
- private String publicZone;
-
- @SerializedName(ApiConstants.PRIVATE_ZONE)
- @Param(description = "the private security zone of the external firewall")
- private String privateZone;
-
- @SerializedName(ApiConstants.NUM_RETRIES)
- @Param(description = "the number of times to retry requests to the external firewall")
- private String numRetries;
-
- @SerializedName(ApiConstants.TIMEOUT)
- @Param(description = "the timeout (in seconds) for requests to the external firewall")
- private String timeout;
-
- public void setId(String lbDeviceId) {
- this.id = lbDeviceId;
- }
-
- public void setPhysicalNetworkId(String physicalNetworkId) {
- this.physicalNetworkId = physicalNetworkId;
- }
-
- public void setProvider(String provider) {
- this.providerName = provider;
- }
-
- public void setDeviceName(String deviceName) {
- this.deviceName = deviceName;
- }
-
- public void setDeviceCapacity(long deviceCapacity) {
- this.deviceCapacity = deviceCapacity;
- }
-
- public void setDeviceState(String deviceState) {
- this.deviceState = deviceState;
- }
-
- public void setIpAddress(String ipAddress) {
- this.ipAddress = ipAddress;
- }
-
- public void setPublicInterface(String publicInterface) {
- this.publicInterface = publicInterface;
- }
-
- public void setUsageInterface(String usageInterface) {
- this.usageInterface = usageInterface;
- }
-
- public void setPrivateInterface(String privateInterface) {
- this.privateInterface = privateInterface;
- }
-
- public void setPublicZone(String publicZone) {
- this.publicZone = publicZone;
- }
-
- public void setPrivateZone(String privateZone) {
- this.privateZone = privateZone;
- }
-
- public String getNumRetries() {
- return numRetries;
- }
-
- public void setNumRetries(String numRetries) {
- this.numRetries = numRetries;
- }
-
- public String getTimeout() {
- return timeout;
- }
-
- public void setTimeout(String timeout) {
- this.timeout = timeout;
- }
-}
diff --git a/plugins/network-elements/juniper-srx/src/main/java/com/cloud/network/element/JuniperSRXExternalFirewallElement.java b/plugins/network-elements/juniper-srx/src/main/java/com/cloud/network/element/JuniperSRXExternalFirewallElement.java
deleted file mode 100644
index baa05124983..00000000000
--- a/plugins/network-elements/juniper-srx/src/main/java/com/cloud/network/element/JuniperSRXExternalFirewallElement.java
+++ /dev/null
@@ -1,551 +0,0 @@
-// 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.element;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-import javax.inject.Inject;
-
-import org.apache.log4j.Logger;
-
-import org.apache.cloudstack.api.response.ExternalFirewallResponse;
-import org.apache.cloudstack.framework.config.dao.ConfigurationDao;
-import org.apache.cloudstack.network.ExternalNetworkDeviceManager.NetworkDevice;
-
-import com.cloud.api.ApiDBUtils;
-import com.cloud.api.commands.AddExternalFirewallCmd;
-import com.cloud.api.commands.AddSrxFirewallCmd;
-import com.cloud.api.commands.ConfigureSrxFirewallCmd;
-import com.cloud.api.commands.DeleteExternalFirewallCmd;
-import com.cloud.api.commands.DeleteSrxFirewallCmd;
-import com.cloud.api.commands.ListExternalFirewallsCmd;
-import com.cloud.api.commands.ListSrxFirewallNetworksCmd;
-import com.cloud.api.commands.ListSrxFirewallsCmd;
-import com.cloud.api.response.SrxFirewallResponse;
-import com.cloud.configuration.Config;
-import com.cloud.configuration.ConfigurationManager;
-import com.cloud.dc.DataCenter;
-import com.cloud.dc.DataCenter.NetworkType;
-import com.cloud.dc.DataCenterVO;
-import com.cloud.dc.dao.DataCenterDao;
-import com.cloud.deploy.DeployDestination;
-import com.cloud.exception.ConcurrentOperationException;
-import com.cloud.exception.InsufficientCapacityException;
-import com.cloud.exception.InsufficientNetworkCapacityException;
-import com.cloud.exception.InvalidParameterValueException;
-import com.cloud.exception.ResourceUnavailableException;
-import com.cloud.host.Host;
-import com.cloud.host.HostVO;
-import com.cloud.host.dao.HostDao;
-import com.cloud.host.dao.HostDetailsDao;
-import com.cloud.network.ExternalFirewallDeviceManagerImpl;
-import com.cloud.network.Network;
-import com.cloud.network.Network.Capability;
-import com.cloud.network.Network.Provider;
-import com.cloud.network.Network.Service;
-import com.cloud.network.NetworkModel;
-import com.cloud.network.PhysicalNetwork;
-import com.cloud.network.PhysicalNetworkServiceProvider;
-import com.cloud.network.PublicIpAddress;
-import com.cloud.network.dao.ExternalFirewallDeviceDao;
-import com.cloud.network.dao.ExternalFirewallDeviceVO;
-import com.cloud.network.dao.ExternalFirewallDeviceVO.FirewallDeviceState;
-import com.cloud.network.dao.NetworkDao;
-import com.cloud.network.dao.NetworkExternalFirewallDao;
-import com.cloud.network.dao.NetworkExternalFirewallVO;
-import com.cloud.network.dao.NetworkServiceMapDao;
-import com.cloud.network.dao.NetworkVO;
-import com.cloud.network.dao.PhysicalNetworkDao;
-import com.cloud.network.dao.PhysicalNetworkVO;
-import com.cloud.network.resource.JuniperSrxResource;
-import com.cloud.network.rules.FirewallRule;
-import com.cloud.network.rules.PortForwardingRule;
-import com.cloud.network.rules.StaticNat;
-import com.cloud.offering.NetworkOffering;
-import com.cloud.offerings.dao.NetworkOfferingDao;
-import com.cloud.utils.NumbersUtil;
-import com.cloud.utils.db.EntityManager;
-import com.cloud.utils.exception.CloudRuntimeException;
-import com.cloud.vm.NicProfile;
-import com.cloud.vm.ReservationContext;
-import com.cloud.vm.VirtualMachineProfile;
-
-public class JuniperSRXExternalFirewallElement extends ExternalFirewallDeviceManagerImpl implements SourceNatServiceProvider, FirewallServiceProvider,
- PortForwardingServiceProvider, IpDeployer, JuniperSRXFirewallElementService, StaticNatServiceProvider {
-
- private static final Logger s_logger = Logger.getLogger(JuniperSRXExternalFirewallElement.class);
-
- private static final Map> capabilities = setCapabilities();
-
- @Inject
- NetworkModel _networkManager;
- @Inject
- HostDao _hostDao;
- @Inject
- ConfigurationManager _configMgr;
- @Inject
- NetworkOfferingDao _networkOfferingDao;
- @Inject
- NetworkDao _networksDao;
- @Inject
- DataCenterDao _dcDao;
- @Inject
- PhysicalNetworkDao _physicalNetworkDao;
- @Inject
- ExternalFirewallDeviceDao _fwDevicesDao;
- @Inject
- NetworkExternalFirewallDao _networkFirewallDao;
- @Inject
- NetworkDao _networkDao;
- @Inject
- NetworkServiceMapDao _ntwkSrvcDao;
- @Inject
- HostDetailsDao _hostDetailDao;
- @Inject
- ConfigurationDao _configDao;
- @Inject
- EntityManager _entityMgr;
-
- private boolean canHandle(Network network, Service service) {
- DataCenter zone = _entityMgr.findById(DataCenter.class, network.getDataCenterId());
- if ((zone.getNetworkType() == NetworkType.Advanced && !(network.getGuestType() == Network.GuestType.Isolated || network.getGuestType() == Network.GuestType.Shared)) ||
- (zone.getNetworkType() == NetworkType.Basic && network.getGuestType() != Network.GuestType.Shared)) {
- s_logger.trace("Element " + getProvider().getName() + "is not handling network type = " + network.getGuestType());
- return false;
- }
-
- if (service == null) {
- if (!_networkManager.isProviderForNetwork(getProvider(), network.getId())) {
- s_logger.trace("Element " + getProvider().getName() + " is not a provider for the network " + network);
- return false;
- }
- } else {
- if (!_networkManager.isProviderSupportServiceInNetwork(network.getId(), service, getProvider())) {
- s_logger.trace("Element " + getProvider().getName() + " doesn't support service " + service.getName() + " in the network " + network);
- return false;
- }
- }
-
- return true;
- }
-
- @Override
- public boolean implement(Network network, NetworkOffering offering, DeployDestination dest, ReservationContext context) throws ResourceUnavailableException,
- ConcurrentOperationException, InsufficientNetworkCapacityException {
- DataCenter zone = _entityMgr.findById(DataCenter.class, network.getDataCenterId());
-
- // don't have to implement network is Basic zone
- if (zone.getNetworkType() == NetworkType.Basic) {
- s_logger.debug("Not handling network implement in zone of type " + NetworkType.Basic);
- return false;
- }
-
- if (!canHandle(network, null)) {
- return false;
- }
-
- try {
- return manageGuestNetworkWithExternalFirewall(true, network);
- } catch (InsufficientCapacityException capacityException) {
- // TODO: handle out of capacity exception in more gracefule manner when multiple providers are present for
- // the network
- s_logger.error("Fail to implement the JuniperSRX for network " + network, capacityException);
- return false;
- }
- }
-
- @Override
- public boolean prepare(Network config, NicProfile nic, VirtualMachineProfile vm, DeployDestination dest, ReservationContext context)
- throws ConcurrentOperationException, InsufficientNetworkCapacityException, ResourceUnavailableException {
- return true;
- }
-
- @Override
- public boolean release(Network config, NicProfile nic, VirtualMachineProfile vm, ReservationContext context) {
- return true;
- }
-
- @Override
- public boolean shutdown(Network network, ReservationContext context, boolean cleanup) throws ResourceUnavailableException, ConcurrentOperationException {
- DataCenter zone = _entityMgr.findById(DataCenter.class, network.getDataCenterId());
-
- // don't have to implement network is Basic zone
- if (zone.getNetworkType() == NetworkType.Basic) {
- s_logger.debug("Not handling network shutdown in zone of type " + NetworkType.Basic);
- return false;
- }
-
- if (!canHandle(network, null)) {
- return false;
- }
- try {
- return manageGuestNetworkWithExternalFirewall(false, network);
- } catch (InsufficientCapacityException capacityException) {
- // TODO: handle out of capacity exception
- return false;
- }
- }
-
- @Override
- public boolean destroy(Network config, ReservationContext context) {
- return true;
- }
-
- @Override
- public boolean applyFWRules(Network config, List extends FirewallRule> rules) throws ResourceUnavailableException {
- if (!canHandle(config, Service.Firewall)) {
- return false;
- }
-
- if (rules != null && rules.size() == 1) {
- // for SRX no need to add default egress rule to DENY traffic
- if (rules.get(0).getTrafficType() == FirewallRule.TrafficType.Egress && rules.get(0).getType() == FirewallRule.FirewallRuleType.System &&
- !_networkManager.getNetworkEgressDefaultPolicy(config.getId()))
- return true;
- }
-
- return applyFirewallRules(config, rules);
- }
-
- @Override
- public Provider getProvider() {
- return Provider.JuniperSRX;
- }
-
- @Override
- public Map> getCapabilities() {
- return capabilities;
- }
-
- private static Map> setCapabilities() {
- Map> capabilities = new HashMap>();
-
- // Set capabilities for Firewall service
- Map firewallCapabilities = new HashMap();
- firewallCapabilities.put(Capability.SupportedProtocols, "tcp,udp,icmp");
- firewallCapabilities.put(Capability.SupportedEgressProtocols, "tcp,udp,icmp,all");
- firewallCapabilities.put(Capability.MultipleIps, "true");
- firewallCapabilities.put(Capability.TrafficStatistics, "per public ip");
- firewallCapabilities.put(Capability.SupportedTrafficDirection, "ingress, egress");
- capabilities.put(Service.Firewall, firewallCapabilities);
-
- // Disabling VPN for Juniper in Acton as it 1) Was never tested 2) probably just doesn't work
-// // Set VPN capabilities
-// Map vpnCapabilities = new HashMap();
-// vpnCapabilities.put(Capability.SupportedVpnTypes, "ipsec");
-// capabilities.put(Service.Vpn, vpnCapabilities);
-
- capabilities.put(Service.Gateway, null);
-
- Map sourceNatCapabilities = new HashMap();
- // Specifies that this element supports either one source NAT rule per account, or no source NAT rules at all;
- // in the latter case a shared interface NAT rule will be used
- sourceNatCapabilities.put(Capability.SupportedSourceNatTypes, "peraccount, perzone");
- capabilities.put(Service.SourceNat, sourceNatCapabilities);
-
- // Specifies that port forwarding rules are supported by this element
- capabilities.put(Service.PortForwarding, null);
-
- // Specifies that static NAT rules are supported by this element
- capabilities.put(Service.StaticNat, null);
-
- return capabilities;
- }
-
- @Override
- public boolean applyPFRules(Network network, List rules) throws ResourceUnavailableException {
- if (!canHandle(network, Service.PortForwarding)) {
- return false;
- }
-
- return applyPortForwardingRules(network, rules);
- }
-
- @Override
- public boolean isReady(PhysicalNetworkServiceProvider provider) {
-
- List fwDevices = _fwDevicesDao.listByPhysicalNetworkAndProvider(provider.getPhysicalNetworkId(), Provider.JuniperSRX.getName());
- // true if at-least one SRX device is added in to physical network and is in configured (in enabled state) state
- if (fwDevices != null && !fwDevices.isEmpty()) {
- for (ExternalFirewallDeviceVO fwDevice : fwDevices) {
- if (fwDevice.getDeviceState() == FirewallDeviceState.Enabled) {
- return true;
- }
- }
- }
- return false;
- }
-
- @Override
- public boolean shutdownProviderInstances(PhysicalNetworkServiceProvider provider, ReservationContext context) throws ConcurrentOperationException,
- ResourceUnavailableException {
- // TODO Auto-generated method stub
- return true;
- }
-
- @Override
- public boolean canEnableIndividualServices() {
- return true;
- }
-
- @Override
- @Deprecated
- // should use more generic addNetworkDevice command to add firewall
- public
- Host addExternalFirewall(AddExternalFirewallCmd cmd) {
- Long zoneId = cmd.getZoneId();
- DataCenterVO zone = null;
- PhysicalNetworkVO pNetwork = null;
- HostVO fwHost = null;
-
- zone = _dcDao.findById(zoneId);
- if (zone == null) {
- throw new InvalidParameterValueException("Could not find zone with ID: " + zoneId);
- }
-
- List physicalNetworks = _physicalNetworkDao.listByZone(zoneId);
- if ((physicalNetworks == null) || (physicalNetworks.size() > 1)) {
- throw new InvalidParameterValueException("There are no physical networks or multiple physical networks configured in zone with ID: " + zoneId +
- " to add this device.");
- }
- pNetwork = physicalNetworks.get(0);
-
- String deviceType = NetworkDevice.JuniperSRXFirewall.getName();
- ExternalFirewallDeviceVO fwDeviceVO =
- addExternalFirewall(pNetwork.getId(), cmd.getUrl(), cmd.getUsername(), cmd.getPassword(), deviceType, new JuniperSrxResource());
- if (fwDeviceVO != null) {
- fwHost = _hostDao.findById(fwDeviceVO.getHostId());
- }
-
- return fwHost;
- }
-
- @Override
- public boolean deleteExternalFirewall(DeleteExternalFirewallCmd cmd) {
- return deleteExternalFirewall(cmd.getId());
- }
-
- @Override
- @Deprecated
- // should use more generic listNetworkDevice command
- public
- List listExternalFirewalls(ListExternalFirewallsCmd cmd) {
- List firewallHosts = new ArrayList();
- Long zoneId = cmd.getZoneId();
- DataCenterVO zone = null;
- PhysicalNetworkVO pNetwork = null;
-
- if (zoneId != null) {
- zone = _dcDao.findById(zoneId);
- if (zone == null) {
- throw new InvalidParameterValueException("Could not find zone with ID: " + zoneId);
- }
-
- List physicalNetworks = _physicalNetworkDao.listByZone(zoneId);
- if ((physicalNetworks == null) || (physicalNetworks.size() > 1)) {
- throw new InvalidParameterValueException("There are no physical networks or multiple physical networks configured in zone with ID: " + zoneId +
- " to add this device.");
- }
- pNetwork = physicalNetworks.get(0);
- }
-
- firewallHosts.addAll(listExternalFirewalls(pNetwork.getId(), NetworkDevice.JuniperSRXFirewall.getName()));
- return firewallHosts;
- }
-
- @Override
- public ExternalFirewallResponse createExternalFirewallResponse(Host externalFirewall) {
- return super.createExternalFirewallResponse(externalFirewall);
- }
-
- @Override
- public List> getCommands() {
- List> cmdList = new ArrayList>();
- cmdList.add(AddExternalFirewallCmd.class);
- cmdList.add(AddSrxFirewallCmd.class);
- cmdList.add(ConfigureSrxFirewallCmd.class);
- cmdList.add(DeleteExternalFirewallCmd.class);
- cmdList.add(DeleteSrxFirewallCmd.class);
- cmdList.add(ListExternalFirewallsCmd.class);
- cmdList.add(ListSrxFirewallNetworksCmd.class);
- cmdList.add(ListSrxFirewallsCmd.class);
- return cmdList;
- }
-
- @Override
- public ExternalFirewallDeviceVO addSrxFirewall(AddSrxFirewallCmd cmd) {
- String deviceName = cmd.getDeviceType();
- if (!deviceName.equalsIgnoreCase(NetworkDevice.JuniperSRXFirewall.getName())) {
- throw new InvalidParameterValueException("Invalid SRX firewall device type");
- }
- return addExternalFirewall(cmd.getPhysicalNetworkId(), cmd.getUrl(), cmd.getUsername(), cmd.getPassword(), deviceName, new JuniperSrxResource());
- }
-
- @Override
- public boolean deleteSrxFirewall(DeleteSrxFirewallCmd cmd) {
- Long fwDeviceId = cmd.getFirewallDeviceId();
-
- ExternalFirewallDeviceVO fwDeviceVO = _fwDevicesDao.findById(fwDeviceId);
- if (fwDeviceVO == null || !fwDeviceVO.getDeviceName().equalsIgnoreCase(NetworkDevice.JuniperSRXFirewall.getName())) {
- throw new InvalidParameterValueException("No SRX firewall device found with ID: " + fwDeviceId);
- }
- return deleteExternalFirewall(fwDeviceVO.getHostId());
- }
-
- @Override
- public ExternalFirewallDeviceVO configureSrxFirewall(ConfigureSrxFirewallCmd cmd) {
- Long fwDeviceId = cmd.getFirewallDeviceId();
- Long deviceCapacity = cmd.getFirewallCapacity();
-
- ExternalFirewallDeviceVO fwDeviceVO = _fwDevicesDao.findById(fwDeviceId);
- if (fwDeviceVO == null || !fwDeviceVO.getDeviceName().equalsIgnoreCase(NetworkDevice.JuniperSRXFirewall.getName())) {
- throw new InvalidParameterValueException("No SRX firewall device found with ID: " + fwDeviceId);
- }
-
- if (deviceCapacity != null) {
- // check if any networks are using this SRX device
- List networks = _networkFirewallDao.listByFirewallDeviceId(fwDeviceId);
- if ((networks != null) && !networks.isEmpty()) {
- if (deviceCapacity < networks.size()) {
- throw new CloudRuntimeException("There are more number of networks already using this SRX firewall device than configured capacity");
- }
- }
- if (deviceCapacity != null) {
- fwDeviceVO.setCapacity(deviceCapacity);
- }
- }
-
- fwDeviceVO.setDeviceState(FirewallDeviceState.Enabled);
- _fwDevicesDao.update(fwDeviceId, fwDeviceVO);
- return fwDeviceVO;
- }
-
- @Override
- public List listSrxFirewalls(ListSrxFirewallsCmd cmd) {
- Long physcialNetworkId = cmd.getPhysicalNetworkId();
- Long fwDeviceId = cmd.getFirewallDeviceId();
- PhysicalNetworkVO pNetwork = null;
- List fwDevices = new ArrayList();
-
- if (physcialNetworkId == null && fwDeviceId == null) {
- throw new InvalidParameterValueException("Either physical network Id or load balancer device Id must be specified");
- }
-
- if (fwDeviceId != null) {
- ExternalFirewallDeviceVO fwDeviceVo = _fwDevicesDao.findById(fwDeviceId);
- if (fwDeviceVo == null || !fwDeviceVo.getDeviceName().equalsIgnoreCase(NetworkDevice.JuniperSRXFirewall.getName())) {
- throw new InvalidParameterValueException("Could not find SRX firewall device with ID: " + fwDeviceId);
- }
- fwDevices.add(fwDeviceVo);
- }
-
- if (physcialNetworkId != null) {
- pNetwork = _physicalNetworkDao.findById(physcialNetworkId);
- if (pNetwork == null) {
- throw new InvalidParameterValueException("Could not find phyical network with ID: " + physcialNetworkId);
- }
- fwDevices = _fwDevicesDao.listByPhysicalNetworkAndProvider(physcialNetworkId, Provider.JuniperSRX.getName());
- }
-
- return fwDevices;
- }
-
- @Override
- public List extends Network> listNetworks(ListSrxFirewallNetworksCmd cmd) {
- Long fwDeviceId = cmd.getFirewallDeviceId();
- List networks = new ArrayList();
-
- ExternalFirewallDeviceVO fwDeviceVo = _fwDevicesDao.findById(fwDeviceId);
- if (fwDeviceVo == null || !fwDeviceVo.getDeviceName().equalsIgnoreCase(NetworkDevice.JuniperSRXFirewall.getName())) {
- throw new InvalidParameterValueException("Could not find SRX firewall device with ID " + fwDeviceId);
- }
-
- List networkFirewallMaps = _networkFirewallDao.listByFirewallDeviceId(fwDeviceId);
- if (networkFirewallMaps != null && !networkFirewallMaps.isEmpty()) {
- for (NetworkExternalFirewallVO networkFirewallMap : networkFirewallMaps) {
- NetworkVO network = _networkDao.findById(networkFirewallMap.getNetworkId());
- networks.add(network);
- }
- }
-
- return networks;
- }
-
- @Override
- public SrxFirewallResponse createSrxFirewallResponse(ExternalFirewallDeviceVO fwDeviceVO) {
- SrxFirewallResponse response = new SrxFirewallResponse();
- Map fwDetails = _hostDetailDao.findDetails(fwDeviceVO.getHostId());
- Host fwHost = _hostDao.findById(fwDeviceVO.getHostId());
-
- response.setId(fwDeviceVO.getUuid());
- PhysicalNetwork pnw = ApiDBUtils.findPhysicalNetworkById(fwDeviceVO.getPhysicalNetworkId());
- if (pnw != null) {
- response.setPhysicalNetworkId(pnw.getUuid());
- }
- response.setDeviceName(fwDeviceVO.getDeviceName());
- if (fwDeviceVO.getCapacity() == 0) {
- long defaultFwCapacity = NumbersUtil.parseLong(_configDao.getValue(Config.DefaultExternalFirewallCapacity.key()), 50);
- response.setDeviceCapacity(defaultFwCapacity);
- } else {
- response.setDeviceCapacity(fwDeviceVO.getCapacity());
- }
- response.setProvider(fwDeviceVO.getProviderName());
- response.setDeviceState(fwDeviceVO.getDeviceState().name());
- response.setIpAddress(fwHost.getPrivateIpAddress());
- response.setPublicInterface(fwDetails.get("publicInterface"));
- response.setUsageInterface(fwDetails.get("usageInterface"));
- response.setPrivateInterface(fwDetails.get("privateInterface"));
- response.setPublicZone(fwDetails.get("publicZone"));
- response.setPrivateZone(fwDetails.get("privateZone"));
- response.setNumRetries(fwDetails.get("numRetries"));
- response.setTimeout(fwDetails.get("timeout"));
- response.setObjectName("srxfirewall");
- return response;
- }
-
- @Override
- public boolean verifyServicesCombination(Set services) {
- if (!services.contains(Service.Firewall)) {
- s_logger.warn("SRX must be used as Firewall Service Provider in the network");
- return false;
- }
- return true;
- }
-
- @Override
- public IpDeployer getIpDeployer(Network network) {
- return this;
- }
-
- @Override
- public boolean applyIps(Network network, List extends PublicIpAddress> ipAddress, Set service) throws ResourceUnavailableException {
- // return true, as IP will be associated as part of static NAT/port forwarding rule configuration
- return true;
- }
-
- @Override
- public boolean applyStaticNats(Network config, List extends StaticNat> rules) throws ResourceUnavailableException {
- if (!canHandle(config, Service.StaticNat)) {
- return false;
- }
- return applyStaticNatRules(config, rules);
- }
-}
diff --git a/plugins/network-elements/juniper-srx/src/main/java/com/cloud/network/element/JuniperSRXFirewallElementService.java b/plugins/network-elements/juniper-srx/src/main/java/com/cloud/network/element/JuniperSRXFirewallElementService.java
deleted file mode 100644
index 8ee756acc0c..00000000000
--- a/plugins/network-elements/juniper-srx/src/main/java/com/cloud/network/element/JuniperSRXFirewallElementService.java
+++ /dev/null
@@ -1,95 +0,0 @@
-// 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.element;
-
-import java.util.List;
-
-import org.apache.cloudstack.api.response.ExternalFirewallResponse;
-
-import com.cloud.api.commands.AddExternalFirewallCmd;
-import com.cloud.api.commands.AddSrxFirewallCmd;
-import com.cloud.api.commands.ConfigureSrxFirewallCmd;
-import com.cloud.api.commands.DeleteExternalFirewallCmd;
-import com.cloud.api.commands.DeleteSrxFirewallCmd;
-import com.cloud.api.commands.ListExternalFirewallsCmd;
-import com.cloud.api.commands.ListSrxFirewallNetworksCmd;
-import com.cloud.api.commands.ListSrxFirewallsCmd;
-import com.cloud.api.response.SrxFirewallResponse;
-import com.cloud.host.Host;
-import com.cloud.network.Network;
-import com.cloud.network.dao.ExternalFirewallDeviceVO;
-import com.cloud.utils.component.PluggableService;
-
-public interface JuniperSRXFirewallElementService extends PluggableService {
-
- /**
- * adds a SRX firewall device in to a physical network
- * @param AddSrxFirewallCmd
- * @return ExternalFirewallDeviceVO object for the firewall added
- */
- public ExternalFirewallDeviceVO addSrxFirewall(AddSrxFirewallCmd cmd);
-
- /**
- * removes SRX firewall device from a physical network
- * @param DeleteSrxFirewallCmd
- * @return true if firewall device successfully deleted
- */
- public boolean deleteSrxFirewall(DeleteSrxFirewallCmd cmd);
-
- /**
- * configures a SRX firewal device added in a physical network
- * @param ConfigureSrxFirewallCmd
- * @return ExternalFirewallDeviceVO for the device configured
- */
- public ExternalFirewallDeviceVO configureSrxFirewall(ConfigureSrxFirewallCmd cmd);
-
- /**
- * lists all the SRX firewall devices added in to a physical network
- * @param ListSrxFirewallsCmd
- * @return list of ExternalFirewallDeviceVO for the devices in the physical network.
- */
- public List listSrxFirewalls(ListSrxFirewallsCmd cmd);
-
- /**
- * lists all the guest networks using a SRX firewall device
- * @param ListSrxFirewallNetworksCmd
- * @return list of the guest networks that are using this F5 load balancer
- */
- public List extends Network> listNetworks(ListSrxFirewallNetworksCmd cmd);
-
- public SrxFirewallResponse createSrxFirewallResponse(ExternalFirewallDeviceVO fwDeviceVO);
-
- @Deprecated
- // API helper function supported for backward compatibility
- public
- Host addExternalFirewall(AddExternalFirewallCmd cmd);
-
- @Deprecated
- // API helper function supported for backward compatibility
- public
- boolean deleteExternalFirewall(DeleteExternalFirewallCmd cmd);
-
- @Deprecated
- // API helper function supported for backward compatibility
- public
- List listExternalFirewalls(ListExternalFirewallsCmd cmd);
-
- @Deprecated
- // API helper function supported for backward compatibility
- public
- ExternalFirewallResponse createExternalFirewallResponse(Host externalFirewall);
-}
diff --git a/plugins/network-elements/juniper-srx/src/main/java/com/cloud/network/resource/JuniperSrxResource.java b/plugins/network-elements/juniper-srx/src/main/java/com/cloud/network/resource/JuniperSrxResource.java
deleted file mode 100644
index e97706491f0..00000000000
--- a/plugins/network-elements/juniper-srx/src/main/java/com/cloud/network/resource/JuniperSrxResource.java
+++ /dev/null
@@ -1,3795 +0,0 @@
-// 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.resource;
-
-import java.io.BufferedReader;
-import java.io.BufferedWriter;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.io.InputStreamReader;
-import java.io.OutputStreamWriter;
-import java.io.StringReader;
-import java.net.Socket;
-import java.net.SocketTimeoutException;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-import javax.naming.ConfigurationException;
-
-import org.apache.cloudstack.utils.security.ParserUtils;
-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.agent.IAgentControl;
-import com.cloud.agent.api.Answer;
-import com.cloud.agent.api.Command;
-import com.cloud.agent.api.ExternalNetworkResourceUsageAnswer;
-import com.cloud.agent.api.ExternalNetworkResourceUsageCommand;
-import com.cloud.agent.api.MaintainAnswer;
-import com.cloud.agent.api.MaintainCommand;
-import com.cloud.agent.api.PingCommand;
-import com.cloud.agent.api.ReadyAnswer;
-import com.cloud.agent.api.ReadyCommand;
-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.RemoteAccessVpnCfgCommand;
-import com.cloud.agent.api.routing.SetFirewallRulesCommand;
-import com.cloud.agent.api.routing.SetPortForwardingRulesCommand;
-import com.cloud.agent.api.routing.SetStaticNatRulesCommand;
-import com.cloud.agent.api.routing.VpnUsersCfgCommand;
-import com.cloud.agent.api.routing.VpnUsersCfgCommand.UsernamePassword;
-import com.cloud.agent.api.to.FirewallRuleTO;
-import com.cloud.agent.api.to.IpAddressTO;
-import com.cloud.agent.api.to.PortForwardingRuleTO;
-import com.cloud.agent.api.to.StaticNatRuleTO;
-import com.cloud.host.Host;
-import com.cloud.network.Networks.BroadcastDomainType;
-import com.cloud.network.rules.FirewallRule;
-import com.cloud.network.rules.FirewallRule.Purpose;
-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 JuniperSrxResource implements ServerResource {
-
- private String _name;
- private String _zoneId;
- private String _ip;
- private String _username;
- private String _password;
- private String _guid;
- private String _objectNameWordSep;
- private BufferedWriter _toSrx;
- private BufferedReader _fromSrx;
- private BufferedWriter _UsagetoSrx;
- private BufferedReader _UsagefromSrx;
- private Integer _numRetries;
- private Integer _timeoutInSeconds;
- private String _publicZone;
- private String _privateZone;
- private String _publicZoneInputFilterName;
- private String _publicInterface;
- private String _usageInterface;
- private String _privateInterface;
- private String _ikeProposalName;
- private String _ipsecPolicyName;
- private String _primaryDnsAddress;
- private String _ikeGatewayHostname;
- private String _vpnObjectPrefix;
- private UsageFilter _usageFilterVlanInput;
- private UsageFilter _usageFilterVlanOutput;
- private UsageFilter _usageFilterIPInput;
- private UsageFilter _usageFilterIPOutput;
- private static final Logger s_logger = Logger.getLogger(JuniperSrxResource.class);
-
- private enum SrxXml {
- LOGIN("login.xml"),
- PRIVATE_INTERFACE_ADD("private-interface-add.xml"),
- PRIVATE_INTERFACE_WITH_FILTERS_ADD("private-interface-with-filters-add.xml"),
- PRIVATE_INTERFACE_GETONE("private-interface-getone.xml"),
- PROXY_ARP_ADD("proxy-arp-add.xml"),
- PROXY_ARP_GETONE("proxy-arp-getone.xml"),
- PROXY_ARP_GETALL("proxy-arp-getall.xml"),
- ZONE_INTERFACE_ADD("zone-interface-add.xml"),
- ZONE_INTERFACE_GETONE("zone-interface-getone.xml"),
- SRC_NAT_POOL_ADD("src-nat-pool-add.xml"),
- SRC_NAT_POOL_GETONE("src-nat-pool-getone.xml"),
- SRC_NAT_RULE_ADD("src-nat-rule-add.xml"),
- SRC_NAT_RULE_GETONE("src-nat-rule-getone.xml"),
- SRC_NAT_RULE_GETALL("src-nat-rule-getall.xml"),
- DEST_NAT_POOL_ADD("dest-nat-pool-add.xml"),
- DEST_NAT_POOL_GETONE("dest-nat-pool-getone.xml"),
- DEST_NAT_POOL_GETALL("dest-nat-pool-getall.xml"),
- DEST_NAT_RULE_ADD("dest-nat-rule-add.xml"),
- DEST_NAT_RULE_GETONE("dest-nat-rule-getone.xml"),
- DEST_NAT_RULE_GETALL("dest-nat-rule-getall.xml"),
- STATIC_NAT_RULE_ADD("static-nat-rule-add.xml"),
- STATIC_NAT_RULE_GETONE("static-nat-rule-getone.xml"),
- STATIC_NAT_RULE_GETALL("static-nat-rule-getall.xml"),
- ADDRESS_BOOK_ENTRY_ADD("address-book-entry-add.xml"),
- ADDRESS_BOOK_ENTRY_GETONE("address-book-entry-getone.xml"),
- ADDRESS_BOOK_ENTRY_GETALL("address-book-entry-getall.xml"),
- APPLICATION_ADD("application-add.xml"),
- APPLICATION_GETONE("application-getone.xml"),
- SECURITY_POLICY_ADD("security-policy-add.xml"),
- SECURITY_POLICY_GETONE("security-policy-getone.xml"),
- SECURITY_POLICY_GETALL("security-policy-getall.xml"),
- SECURITY_POLICY_GROUP("security-policy-group.xml"),
- GUEST_VLAN_FILTER_TERM_ADD("guest-vlan-filter-term-add.xml"),
- PUBLIC_IP_FILTER_TERM_ADD("public-ip-filter-term-add.xml"),
- FILTER_TERM_GETONE("filter-term-getone.xml"),
- FILTER_GETONE("filter-getone.xml"),
- FIREWALL_FILTER_BYTES_GETALL("firewall-filter-bytes-getall.xml"),
- IKE_POLICY_ADD("ike-policy-add.xml"),
- IKE_POLICY_GETONE("ike-policy-getone.xml"),
- IKE_POLICY_GETALL("ike-policy-getall.xml"),
- IKE_GATEWAY_ADD("ike-gateway-add.xml"),
- IKE_GATEWAY_GETONE("ike-gateway-getone.xml"),
- IKE_GATEWAY_GETALL("ike-gateway-getall.xml"),
- IPSEC_VPN_ADD("ipsec-vpn-add.xml"),
- IPSEC_VPN_GETONE("ipsec-vpn-getone.xml"),
- IPSEC_VPN_GETALL("ipsec-vpn-getall.xml"),
- DYNAMIC_VPN_CLIENT_ADD("dynamic-vpn-client-add.xml"),
- DYNAMIC_VPN_CLIENT_GETONE("dynamic-vpn-client-getone.xml"),
- DYNAMIC_VPN_CLIENT_GETALL("dynamic-vpn-client-getall.xml"),
- ADDRESS_POOL_ADD("address-pool-add.xml"),
- ADDRESS_POOL_GETONE("address-pool-getone.xml"),
- ADDRESS_POOL_GETALL("address-pool-getall.xml"),
- ACCESS_PROFILE_ADD("access-profile-add.xml"),
- ACCESS_PROFILE_GETONE("access-profile-getone.xml"),
- ACCESS_PROFILE_GETALL("access-profile-getall.xml"),
- FIREWALL_FILTER_TERM_ADD("firewall-filter-term-add.xml"),
- FIREWALL_FILTER_TERM_GETONE("firewall-filter-term-getone.xml"),
- TEMPLATE_ENTRY("template-entry.xml"),
- OPEN_CONFIGURATION("open-configuration.xml"),
- CLOSE_CONFIGURATION("close-configuration.xml"),
- COMMIT("commit.xml"),
- ROLLBACK("rollback.xml"),
- TEST("test.xml");
-
- private final String scriptsDir = "scripts/network/juniper";
- private final String xml;
- private static final Logger s_logger = Logger.getLogger(JuniperSrxResource.class);
-
- private SrxXml(String filename) {
- String contents = getXml(filename);
-
- // Strip the apache header and add the filename as a header to aid debugging
- contents = contents.replaceAll( "(?s)", "" ).trim();
- if (!contents.startsWith("")) {
- contents = "" + contents;
- }
-
- xml = contents;
- }
-
- 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 Juniper SRX XML file: " + filename);
- }
-
- try(InputStreamReader fr = new InputStreamReader(new FileInputStream(xmlFilePath),"UTF-8");
- BufferedReader br = new BufferedReader(fr);) {
- String xml = "";
- String line;
- while ((line = br.readLine()) != null) {
- xml += line.trim();
- }
- return xml;
- }catch (Exception e) {
- s_logger.debug(e);
- return null;
- }
- } catch (Exception e) {
- s_logger.debug(e);
- return null;
- }
- }
- }
-
- public class UsageFilter {
- private final String name;
- private final String counterIdentifier;
- private final String addressType;
-
- private UsageFilter(String name, String addressType, String counterIdentifier) {
- this.name = name;
- this.addressType = addressType;
-
- if (_usageInterface != null) {
- counterIdentifier = _usageInterface + counterIdentifier;
- }
-
- this.counterIdentifier = counterIdentifier;
- }
-
- public String getName() {
- return name;
- }
-
- public String getCounterIdentifier() {
- return counterIdentifier;
- }
-
- public String getAddressType() {
- return addressType;
- }
- }
-
- public class FirewallFilterTerm {
- private final String name;
- private final List sourceCidrs;
- private final String destIp;
- private String portRange;
- private final String protocol;
- private String icmpType;
- private String icmpCode;
- private final String countName;
-
- private FirewallFilterTerm(String name, List sourceCidrs, String destIp, String protocol, Integer startPort, Integer endPort, Integer icmpType,
- Integer icmpCode, String countName) {
- this.name = name;
- this.sourceCidrs = sourceCidrs;
- this.destIp = destIp;
- this.protocol = protocol;
-
- if (protocol.equals("tcp") || protocol.equals("udp")) {
- portRange = String.valueOf(startPort) + "-" + String.valueOf(endPort);
- } else if (protocol.equals("icmp")) {
- this.icmpType = String.valueOf(icmpType);
- this.icmpCode = String.valueOf(icmpCode);
- } else {
- assert protocol.equals("any");
- }
- this.countName = countName;
-
- }
-
- public String getName() {
- return name;
- }
-
- public List getSourceCidrs() {
- return sourceCidrs;
- }
-
- public String getDestIp() {
- return destIp;
- }
-
- public String getPortRange() {
- return portRange;
- }
-
- public String getProtocol() {
- return protocol;
- }
-
- public String getIcmpType() {
- return icmpType;
- }
-
- public String getIcmpCode() {
- return icmpCode;
- }
-
- public String getCountName() {
- return countName;
- }
- }
-
- private enum SrxCommand {
- LOGIN, OPEN_CONFIGURATION, CLOSE_CONFIGURATION, COMMIT, ROLLBACK, CHECK_IF_EXISTS, CHECK_IF_IN_USE, ADD, DELETE, GET_ALL, CHECK_PRIVATE_IF_EXISTS;
- }
-
- private enum Protocol {
- tcp, udp, icmp, all, any;
- }
-
- private enum RuleMatchCondition {
- ALL, PUBLIC_PRIVATE_IPS, PRIVATE_SUBNET;
- }
-
- private enum GuestNetworkType {
- SOURCE_NAT, INTERFACE_NAT;
- }
-
- private enum SecurityPolicyType {
- STATIC_NAT("staticnat"), DESTINATION_NAT("destnat"), VPN("vpn"), SECURITYPOLICY_EGRESS("egress"), SECURITYPOLICY_EGRESS_DEFAULT("egress-default");
-
- private final String identifier;
-
- private SecurityPolicyType(String identifier) {
- this.identifier = identifier;
- }
-
- private String getIdentifier() {
- return identifier;
- }
- }
-
- @Override
- public Answer executeRequest(Command cmd) {
- if (cmd instanceof ReadyCommand) {
- return execute((ReadyCommand)cmd);
- } else if (cmd instanceof MaintainCommand) {
- return execute((MaintainCommand)cmd);
- } else if (cmd instanceof IpAssocCommand) {
- return execute((IpAssocCommand)cmd);
- } else if (cmd instanceof SetStaticNatRulesCommand) {
- return execute((SetStaticNatRulesCommand)cmd);
- } else if (cmd instanceof SetPortForwardingRulesCommand) {
- return execute((SetPortForwardingRulesCommand)cmd);
- } else if (cmd instanceof SetFirewallRulesCommand) {
- return execute((SetFirewallRulesCommand)cmd);
- } else if (cmd instanceof ExternalNetworkResourceUsageCommand) {
- return execute((ExternalNetworkResourceUsageCommand)cmd);
- } else if (cmd instanceof RemoteAccessVpnCfgCommand) {
- return execute((RemoteAccessVpnCfgCommand)cmd);
- } else if (cmd instanceof VpnUsersCfgCommand) {
- return execute((VpnUsersCfgCommand)cmd);
- } else {
- return Answer.createUnsupportedCommandAnswer(cmd);
- }
- }
-
- @Override
- public boolean configure(String name, Map params) throws ConfigurationException {
- try {
- _name = (String)params.get("name");
- if (_name == null) {
- throw new ConfigurationException("Unable to find name");
- }
-
- _zoneId = (String)params.get("zoneId");
- if (_zoneId == null) {
- throw new ConfigurationException("Unable to find zone");
- }
-
- _ip = (String)params.get("ip");
- if (_ip == null) {
- throw new ConfigurationException("Unable to find IP");
- }
-
- _username = (String)params.get("username");
- if (_username == null) {
- throw new ConfigurationException("Unable to find username");
- }
-
- _password = (String)params.get("password");
- if (_password == null) {
- throw new ConfigurationException("Unable to find password");
- }
-
- _publicInterface = (String)params.get("publicinterface");
- if (_publicInterface == null) {
- throw new ConfigurationException("Unable to find public interface.");
- }
-
- _privateInterface = (String)params.get("privateinterface");
- if (_privateInterface == null) {
- throw new ConfigurationException("Unable to find private interface.");
- }
-
- _publicZone = (String)params.get("publiczone");
- if (_publicZone == null) {
- _publicZone = "untrust";
- }
-
- _privateZone = (String)params.get("privatezone");
- if (_privateZone == null) {
- _privateZone = "trust";
- }
-
- _guid = (String)params.get("guid");
- if (_guid == null) {
- throw new ConfigurationException("Unable to find the guid");
- }
-
- _numRetries = NumbersUtil.parseInt((String)params.get("numretries"), 1);
-
- _timeoutInSeconds = NumbersUtil.parseInt((String)params.get("timeout"), 300);
-
- _objectNameWordSep = "-";
-
- _ikeProposalName = "cloud-ike-proposal";
- _ipsecPolicyName = "cloud-ipsec-policy";
- _ikeGatewayHostname = "cloud";
- _vpnObjectPrefix = "vpn-a";
- _primaryDnsAddress = "4.2.2.2";
-
- // Open a socket and login
- if (!refreshSrxConnection()) {
- throw new ConfigurationException("Unable to open a connection to the SRX.");
- }
-
- _publicZoneInputFilterName = _publicZone;
-
- _usageFilterVlanInput = new UsageFilter("vlan-input", null, "vlan-input");
- _usageFilterVlanOutput = new UsageFilter("vlan-output", null, "vlan-output");
- _usageFilterIPInput = new UsageFilter(_publicZone, "destination-address", "-i");
- _usageFilterIPOutput = new UsageFilter(_privateZone, "source-address", "-o");
-
- return true;
- } catch (Exception e) {
- throw new ConfigurationException(e.getMessage());
- }
-
- }
-
- @Override
- public StartupCommand[] initialize() {
- StartupExternalFirewallCommand cmd = new StartupExternalFirewallCommand();
- cmd.setName(_name);
- cmd.setDataCenter(_zoneId);
- cmd.setPod("");
- cmd.setPrivateIpAddress(_ip);
- cmd.setStorageIpAddress("");
- cmd.setVersion(JuniperSrxResource.class.getPackage().getImplementationVersion());
- cmd.setGuid(_guid);
- return new StartupCommand[] {cmd};
- }
-
- @Override
- public Host.Type getType() {
- return Host.Type.ExternalFirewall;
- }
-
- @Override
- public String getName() {
- return _name;
- }
-
- @Override
- public boolean start() {
- return true;
- }
-
- @Override
- public boolean stop() {
- return true;
- }
-
- @Override
- public PingCommand getCurrentStatus(final long id) {
- return new PingCommand(Host.Type.ExternalFirewall, id);
- }
-
- @Override
- public void disconnected() {
- closeSocket();
- }
-
- @Override
- public IAgentControl getAgentControl() {
- return null;
- }
-
- @Override
- public void setAgentControl(IAgentControl agentControl) {
- return;
- }
-
- private Answer execute(ReadyCommand cmd) {
- return new ReadyAnswer(cmd);
- }
-
- private Answer execute(MaintainCommand cmd) {
- return new MaintainAnswer(cmd);
- }
-
- private ExternalNetworkResourceUsageAnswer execute(ExternalNetworkResourceUsageCommand cmd) {
- try {
- return getUsageAnswer(cmd);
- } catch (ExecutionException e) {
- return new ExternalNetworkResourceUsageAnswer(cmd, e);
- }
- }
-
- /*
- * Login
- */
-
- private boolean refreshSrxConnection() {
- if (!(closeSocket() && openSocket())) {
- return false;
- }
-
- try {
- return login();
- } catch (ExecutionException e) {
- s_logger.error("Failed to login due to " + e.getMessage());
- return false;
- }
- }
-
- private boolean login() throws ExecutionException {
- String xml = SrxXml.LOGIN.getXml();
- xml = replaceXmlValue(xml, "username", _username);
- xml = replaceXmlValue(xml, "password", _password);
- return sendRequestAndCheckResponse(SrxCommand.LOGIN, xml);
- }
-
- private boolean openSocket() {
- try {
- Socket s = new Socket(_ip, 3221);
- s.setKeepAlive(true);
- s.setSoTimeout(_timeoutInSeconds * 1000);
- _toSrx = new BufferedWriter(new OutputStreamWriter(s.getOutputStream(),"UTF-8"));
- _fromSrx = new BufferedReader(new InputStreamReader(s.getInputStream(),"UTF-8"));
- return true;
- } catch (IOException e) {
- s_logger.error(e);
- return false;
- }
- }
-
- private boolean closeSocket() {
- try {
- if (_toSrx != null) {
- _toSrx.close();
- }
-
- if (_fromSrx != null) {
- _fromSrx.close();
- }
-
- return true;
- } catch (IOException e) {
- s_logger.error(e);
- return false;
- }
- }
-
- /*
- * The usage data will be handled on it's own socket, so usage
- * commands will use the following methods...
- */
- private boolean usageLogin() throws ExecutionException {
- String xml = SrxXml.LOGIN.getXml();
- xml = replaceXmlValue(xml, "username", _username);
- xml = replaceXmlValue(xml, "password", _password);
- return sendUsageRequestAndCheckResponse(SrxCommand.LOGIN, xml);
- }
-
- private boolean openUsageSocket() throws ExecutionException {
- try {
- Socket s = new Socket(_ip, 3221);
- s.setKeepAlive(true);
- s.setSoTimeout(_timeoutInSeconds * 1000);
- _UsagetoSrx = new BufferedWriter(new OutputStreamWriter(s.getOutputStream(),"UTF-8"));
- _UsagefromSrx = new BufferedReader(new InputStreamReader(s.getInputStream(),"UTF-8"));
- return usageLogin();
- } catch (IOException e) {
- s_logger.error(e);
- return false;
- }
- }
-
- private boolean closeUsageSocket() {
- try {
- if (_UsagetoSrx != null) {
- _UsagetoSrx.close();
- }
-
- if (_UsagefromSrx != null) {
- _UsagefromSrx.close();
- }
-
- return true;
- } catch (IOException e) {
- s_logger.error(e);
- return false;
- }
- }
-
- /*
- * Commit/rollback
- */
-
- private void openConfiguration() throws ExecutionException {
- String xml = SrxXml.OPEN_CONFIGURATION.getXml();
- String successMsg = "Opened a private configuration.";
- String errorMsg = "Failed to open a private configuration.";
-
- if (!sendRequestAndCheckResponse(SrxCommand.OPEN_CONFIGURATION, xml)) {
- throw new ExecutionException(errorMsg);
- } else {
- s_logger.debug(successMsg);
- }
- }
-
- private void closeConfiguration() {
- String xml = SrxXml.CLOSE_CONFIGURATION.getXml();
- String successMsg = "Closed private configuration.";
- String errorMsg = "Failed to close private configuration.";
-
- try {
- if (!sendRequestAndCheckResponse(SrxCommand.CLOSE_CONFIGURATION, xml)) {
- s_logger.error(errorMsg);
- }
- } catch (ExecutionException e) {
- s_logger.error(errorMsg);
- }
-
- s_logger.debug(successMsg);
- }
-
- private void commitConfiguration() throws ExecutionException {
- String xml = SrxXml.COMMIT.getXml();
- String successMsg = "Committed to global configuration.";
- String errorMsg = "Failed to commit to global configuration.";
-
- if (!sendRequestAndCheckResponse(SrxCommand.COMMIT, xml)) {
- throw new ExecutionException(errorMsg);
- } else {
- s_logger.debug(successMsg);
- closeConfiguration();
- }
- }
-
- /*
- * Guest networks
- */
-
- private synchronized Answer execute(IpAssocCommand cmd) {
- refreshSrxConnection();
- return execute(cmd, _numRetries);
- }
-
- private Answer execute(IpAssocCommand cmd, int numRetries) {
- String[] results = new String[cmd.getIpAddresses().length];
- int i = 0;
- try {
- IpAddressTO ip;
- if (cmd.getIpAddresses().length != 1) {
- throw new ExecutionException("Received an invalid number of guest IPs to associate.");
- } else {
- ip = cmd.getIpAddresses()[0];
- }
-
- String sourceNatIpAddress = null;
- GuestNetworkType type = GuestNetworkType.INTERFACE_NAT;
-
- if (ip.isSourceNat()) {
- type = GuestNetworkType.SOURCE_NAT;
-
- if (ip.getPublicIp() == null) {
- throw new ExecutionException("Source NAT IP address must not be null.");
- } else {
- sourceNatIpAddress = ip.getPublicIp();
- }
- }
-
- long guestVlanTag = Long.parseLong(cmd.getAccessDetail(NetworkElementCommand.GUEST_VLAN_TAG));
- String guestVlanGateway = cmd.getAccessDetail(NetworkElementCommand.GUEST_NETWORK_GATEWAY);
- String cidr = cmd.getAccessDetail(NetworkElementCommand.GUEST_NETWORK_CIDR);
- long cidrSize = NetUtils.cidrToLong(cidr)[1];
- String guestVlanSubnet = NetUtils.getCidrSubNet(guestVlanGateway, cidrSize);
-
- Long publicVlanTag = null;
- if (ip.getBroadcastUri() != null && !ip.getBroadcastUri().equals("untagged")) {
- try {
- publicVlanTag = Long.parseLong(BroadcastDomainType.getValue(ip.getBroadcastUri()));
- } catch (Exception e) {
- throw new ExecutionException("Could not parse public VLAN tag: " + ip.getBroadcastUri());
- }
- }
-
- openConfiguration();
-
- // Remove the guest network:
- // Remove source, static, and destination NAT rules
- // Remove VPN
- shutdownGuestNetwork(type, ip.getAccountId(), publicVlanTag, sourceNatIpAddress, guestVlanTag, guestVlanGateway, guestVlanSubnet, cidrSize);
-
- if (ip.isAdd()) {
- // Implement the guest network for this VLAN
- implementGuestNetwork(type, publicVlanTag, sourceNatIpAddress, guestVlanTag, guestVlanGateway, guestVlanSubnet, cidrSize);
- }
-
- commitConfiguration();
- results[i++] = ip.getPublicIp() + " - success";
- } catch (ExecutionException e) {
- s_logger.error(e);
- closeConfiguration();
-
- if (numRetries > 0 && refreshSrxConnection()) {
- int numRetriesRemaining = numRetries - 1;
- s_logger.debug("Retrying IPAssocCommand. Number of retries remaining: " + numRetriesRemaining);
- return execute(cmd, numRetriesRemaining);
- } else {
- results[i++] = IpAssocAnswer.errorResult;
- }
- }
-
- return new IpAssocAnswer(cmd, results);
- }
-
- private void implementGuestNetwork(GuestNetworkType type, Long publicVlanTag, String publicIp, long privateVlanTag, String privateGateway, String privateSubnet,
- long privateCidrNumber) throws ExecutionException {
- privateGateway = privateGateway + "/" + privateCidrNumber;
- privateSubnet = privateSubnet + "/" + privateCidrNumber;
-
- managePrivateInterface(SrxCommand.ADD, !type.equals(GuestNetworkType.SOURCE_NAT), privateVlanTag, privateGateway);
- manageZoneInterface(SrxCommand.ADD, privateVlanTag);
-
- if (type.equals(GuestNetworkType.SOURCE_NAT)) {
- manageSourceNatPool(SrxCommand.ADD, publicIp);
- manageSourceNatRule(SrxCommand.ADD, publicIp, privateSubnet);
- manageProxyArp(SrxCommand.ADD, publicVlanTag, publicIp);
- manageUsageFilter(SrxCommand.ADD, _usageFilterIPOutput, privateSubnet, null, genIpFilterTermName(publicIp));
- manageUsageFilter(SrxCommand.ADD, _usageFilterIPInput, publicIp, null, genIpFilterTermName(publicIp));
- } else if (type.equals(GuestNetworkType.INTERFACE_NAT)) {
- manageUsageFilter(SrxCommand.ADD, _usageFilterVlanOutput, null, privateVlanTag, null);
- manageUsageFilter(SrxCommand.ADD, _usageFilterVlanInput, null, privateVlanTag, null);
- }
-
- String msg = "Implemented guest network with type " + type + ". Guest VLAN tag: " + privateVlanTag + ", guest gateway: " + privateGateway;
- msg += type.equals(GuestNetworkType.SOURCE_NAT) ? ", source NAT IP: " + publicIp : "";
- s_logger.debug(msg);
- }
-
- private void shutdownGuestNetwork(GuestNetworkType type, long accountId, Long publicVlanTag, String sourceNatIpAddress, long privateVlanTag, String privateGateway,
- String privateSubnet, long privateCidrSize) throws ExecutionException {
- // Remove static and destination NAT rules for the guest network
- removeStaticAndDestNatRulesInPrivateVlan(privateVlanTag, privateGateway, privateCidrSize);
-
- privateGateway = privateGateway + "/" + privateCidrSize;
- privateSubnet = privateSubnet + "/" + privateCidrSize;
-
- managePrivateInterface(SrxCommand.DELETE, false, privateVlanTag, privateGateway);
- manageZoneInterface(SrxCommand.DELETE, privateVlanTag);
- deleteVpnObjectsForAccount(accountId);
-
- if (type.equals(GuestNetworkType.SOURCE_NAT)) {
- manageSourceNatRule(SrxCommand.DELETE, sourceNatIpAddress, privateSubnet);
- manageSourceNatPool(SrxCommand.DELETE, sourceNatIpAddress);
- manageProxyArp(SrxCommand.DELETE, publicVlanTag, sourceNatIpAddress);
- manageUsageFilter(SrxCommand.DELETE, _usageFilterIPOutput, privateSubnet, null, genIpFilterTermName(sourceNatIpAddress));
- manageUsageFilter(SrxCommand.DELETE, _usageFilterIPInput, sourceNatIpAddress, null, genIpFilterTermName(sourceNatIpAddress));
- } else if (type.equals(GuestNetworkType.INTERFACE_NAT)) {
- manageUsageFilter(SrxCommand.DELETE, _usageFilterVlanOutput, null, privateVlanTag, null);
- manageUsageFilter(SrxCommand.DELETE, _usageFilterVlanInput, null, privateVlanTag, null);
- }
-
- String msg = "Shut down guest network with type " + type + ". Guest VLAN tag: " + privateVlanTag + ", guest gateway: " + privateGateway;
- msg += type.equals(GuestNetworkType.SOURCE_NAT) ? ", source NAT IP: " + sourceNatIpAddress : "";
- s_logger.debug(msg);
- }
-
- private Map> getActiveFirewallEgressRules(FirewallRuleTO[] allRules) {
- Map> activeRules = new HashMap>();
-
- for (FirewallRuleTO rule : allRules) {
- String guestVlan;
- guestVlan = rule.getSrcVlanTag();
-
- ArrayList activeRulesForNetwork = activeRules.get(guestVlan);
-
- if (activeRulesForNetwork == null) {
- activeRulesForNetwork = new ArrayList();
- }
-
- if (!rule.revoked() || rule.isAlreadyAdded()) {
- activeRulesForNetwork.add(rule);
- }
-
- activeRules.put(guestVlan, activeRulesForNetwork);
- }
-
- return activeRules;
- }
-
- private List extractCidrs(List rules) throws ExecutionException {
- List allCidrs = new ArrayList();
- List cidrs = new ArrayList();
-
- for (FirewallRuleTO rule : rules) {
- cidrs = (rule.getSourceCidrList());
- for (String cidr : cidrs) {
- if (!allCidrs.contains(cidr)) {
- allCidrs.add(cidr);
- }
- }
- }
- return allCidrs;
- }
-
- /* security policies */
- private synchronized Answer execute(SetFirewallRulesCommand cmd) {
- refreshSrxConnection();
- return execute(cmd, _numRetries);
- }
-
- private Answer execute(SetFirewallRulesCommand cmd, int numRetries) {
- FirewallRuleTO[] rules = cmd.getRules();
- try {
- openConfiguration();
- if (rules[0].getTrafficType() == FirewallRule.TrafficType.Egress) {
- Map> activeRules = getActiveFirewallEgressRules(rules);
- Set guestVlans = activeRules.keySet();
- // List cidrs = new ArrayList();
- boolean defaultEgressPolicy = rules[0].isDefaultEgressPolicy();
- FirewallRule.FirewallRuleType type = rules[0].getType();
- //getting
- String guestCidr = rules[0].getGuestCidr();
- List cidrs = new ArrayList();
- cidrs.add(guestCidr);
-
- List