From 18ff23c8396566ea8857e5d1de76aafc5455e891 Mon Sep 17 00:00:00 2001 From: abhishek Date: Thu, 18 Nov 2010 11:11:03 -0800 Subject: [PATCH] added a list method to list ip forwarding rules, optionally list a rule based on its public ip address --- .../src/com/cloud/api/ApiResponseHelper.java | 17 +++ .../commands/ListIpForwardingRulesCmd.java | 8 +- .../api/response/FirewallRuleResponse.java | 4 +- .../response/IpForwardingRuleResponse.java | 112 ++++++++++++++++++ 4 files changed, 135 insertions(+), 6 deletions(-) create mode 100644 server/src/com/cloud/api/response/IpForwardingRuleResponse.java diff --git a/server/src/com/cloud/api/ApiResponseHelper.java b/server/src/com/cloud/api/ApiResponseHelper.java index f33545255cc..7f99cf268b6 100644 --- a/server/src/com/cloud/api/ApiResponseHelper.java +++ b/server/src/com/cloud/api/ApiResponseHelper.java @@ -35,6 +35,7 @@ import com.cloud.api.response.FirewallRuleResponse; import com.cloud.api.response.HostResponse; import com.cloud.api.response.IPAddressResponse; import com.cloud.api.response.InstanceGroupResponse; +import com.cloud.api.response.IpForwardingRuleResponse; import com.cloud.api.response.LoadBalancerResponse; import com.cloud.api.response.PodResponse; import com.cloud.api.response.PreallocatedLunResponse; @@ -1013,6 +1014,22 @@ public class ApiResponseHelper { return response; } + public static IpForwardingRuleResponse createIpForwardingRuleResponse(FirewallRuleVO fwRule) { + IpForwardingRuleResponse response = new IpForwardingRuleResponse(); + response.setId(fwRule.getId()); + response.setPrivatePort(fwRule.getPrivatePort()); + response.setProtocol(fwRule.getProtocol()); + response.setPublicPort(fwRule.getPublicPort()); + response.setPublicIpAddress(fwRule.getPublicIpAddress()); + if (fwRule.getPublicIpAddress() != null && fwRule.getPrivateIpAddress() != null) { + UserVm vm = ApiDBUtils.findUserVmByPublicIpAndGuestIp(fwRule.getPublicIpAddress(), fwRule.getPrivateIpAddress()); + response.setVirtualMachineId(vm.getId()); + response.setVirtualMachineName(vm.getHostName()); + response.setVirtualMachineDisplayName(vm.getDisplayName()); + } + response.setObjectName("ipforwardingrule"); + return response; + } public static UserVmResponse createUserVm2Response (UserVm userVm) { diff --git a/server/src/com/cloud/api/commands/ListIpForwardingRulesCmd.java b/server/src/com/cloud/api/commands/ListIpForwardingRulesCmd.java index 9ba1cd6c092..5f8466f77c1 100644 --- a/server/src/com/cloud/api/commands/ListIpForwardingRulesCmd.java +++ b/server/src/com/cloud/api/commands/ListIpForwardingRulesCmd.java @@ -28,6 +28,7 @@ import com.cloud.api.BaseListCmd; import com.cloud.api.Implementation; import com.cloud.api.Parameter; import com.cloud.api.response.FirewallRuleResponse; +import com.cloud.api.response.IpForwardingRuleResponse; import com.cloud.api.response.ListResponse; import com.cloud.network.FirewallRuleVO; @@ -68,12 +69,11 @@ public class ListIpForwardingRulesCmd extends BaseListCmd { @Override public void execute(){ List result = _mgr.searchForIpForwardingRules(this); - ListResponse response = new ListResponse(); - List fwResponses = new ArrayList(); + ListResponse response = new ListResponse(); + List fwResponses = new ArrayList(); for (FirewallRuleVO rule : result) { - FirewallRuleResponse resp = ApiResponseHelper.createFirewallRuleResponse(rule); + IpForwardingRuleResponse resp = ApiResponseHelper.createIpForwardingRuleResponse(rule); if (resp != null) { - resp.setObjectName("firewallrule"); fwResponses.add(resp); } } diff --git a/server/src/com/cloud/api/response/FirewallRuleResponse.java b/server/src/com/cloud/api/response/FirewallRuleResponse.java index d945f2eefed..1c98d3d5d90 100644 --- a/server/src/com/cloud/api/response/FirewallRuleResponse.java +++ b/server/src/com/cloud/api/response/FirewallRuleResponse.java @@ -37,10 +37,10 @@ public class FirewallRuleResponse extends BaseResponse { @SerializedName(ApiConstants.VIRTUAL_MACHINE_ID) @Param(description="the VM ID for the port forwarding rule") private Long virtualMachineId; - @SerializedName("vmname") @Param(description="the VM name for the port forwarding rule") + @SerializedName("virtualmachinename") @Param(description="the VM name for the port forwarding rule") private String virtualMachineName; - @SerializedName("vmdisplayname") @Param(description="the VM display name for the port forwarding rule") + @SerializedName("virtualmachinedisplayname") @Param(description="the VM display name for the port forwarding rule") private String virtualMachineDisplayName; @SerializedName("publicipaddress") @Param(description="the public ip address for the port forwarding rule") diff --git a/server/src/com/cloud/api/response/IpForwardingRuleResponse.java b/server/src/com/cloud/api/response/IpForwardingRuleResponse.java new file mode 100644 index 00000000000..648562b219a --- /dev/null +++ b/server/src/com/cloud/api/response/IpForwardingRuleResponse.java @@ -0,0 +1,112 @@ +/** + * Copyright (C) 2010 Cloud.com, Inc. All rights reserved. + * + * This software is licensed under the GNU General Public License v3 or later. + * + * It is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ +package com.cloud.api.response; + +import com.cloud.api.ApiConstants; +import com.cloud.serializer.Param; +import com.google.gson.annotations.SerializedName; + +public class IpForwardingRuleResponse extends BaseResponse { + @SerializedName(ApiConstants.ID) @Param(description="the ID of the port forwarding rule") + private Long id; + + @SerializedName(ApiConstants.PRIVATE_PORT) @Param(description="the private port for the port forwarding rule") + private String privatePort; + + @SerializedName(ApiConstants.PROTOCOL) @Param(description="the protocol of the port forwarding rule") + private String protocol; + + @SerializedName(ApiConstants.PUBLIC_PORT) @Param(description="the public port for the port forwarding rule") + private String publicPort; + + @SerializedName(ApiConstants.VIRTUAL_MACHINE_ID) @Param(description="the VM ID for the port forwarding rule") + private Long virtualMachineId; + + @SerializedName("virtualmachinename") @Param(description="the VM name for the port forwarding rule") + private String virtualMachineName; + + @SerializedName("virtualmachinedisplayname") @Param(description="the VM display name for the port forwarding rule") + private String virtualMachineDisplayName; + + @SerializedName("publicipaddress") @Param(description="the public ip address for the port forwarding rule") + private String publicIpAddress; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getPrivatePort() { + return privatePort; + } + + public void setPrivatePort(String privatePort) { + this.privatePort = privatePort; + } + + public String getProtocol() { + return protocol; + } + + public void setProtocol(String protocol) { + this.protocol = protocol; + } + + public String getPublicPort() { + return publicPort; + } + + public void setPublicPort(String publicPort) { + this.publicPort = publicPort; + } + + public Long getVirtualMachineId() { + return virtualMachineId; + } + + public void setVirtualMachineId(Long virtualMachineId) { + this.virtualMachineId = virtualMachineId; + } + + public String getVirtualMachineName() { + return virtualMachineName; + } + + public void setVirtualMachineName(String virtualMachineName) { + this.virtualMachineName = virtualMachineName; + } + + public String getVirtualMachineDisplayName() { + return virtualMachineDisplayName; + } + + public void setVirtualMachineDisplayName(String virtualMachineDisplayName) { + this.virtualMachineDisplayName = virtualMachineDisplayName; + } + + public String getPublicIpAddress() { + return publicIpAddress; + } + + public void setPublicIpAddress(String publicIpAddress) { + this.publicIpAddress = publicIpAddress; + } +}