mirror of
https://github.com/apache/cloudstack.git
synced 2025-10-26 08:42:29 +01:00
CLOUDSTACK-7308 - Adds tagging support for security group rules
This commit is contained in:
parent
3bcd22bdaf
commit
6978c18c3a
@ -35,6 +35,7 @@ public interface ResourceTag extends ControlledEntity, Identity, InternalIdentit
|
|||||||
PortForwardingRule(true, true),
|
PortForwardingRule(true, true),
|
||||||
FirewallRule(true, true),
|
FirewallRule(true, true),
|
||||||
SecurityGroup(true, false),
|
SecurityGroup(true, false),
|
||||||
|
SecurityGroupRule(true, false),
|
||||||
PublicIpAddress(true, true),
|
PublicIpAddress(true, true),
|
||||||
Project(true, false),
|
Project(true, false),
|
||||||
Vpc(true, true),
|
Vpc(true, true),
|
||||||
|
|||||||
@ -25,6 +25,8 @@ import org.apache.cloudstack.api.EntityReference;
|
|||||||
import com.cloud.network.security.SecurityRule;
|
import com.cloud.network.security.SecurityRule;
|
||||||
import com.cloud.serializer.Param;
|
import com.cloud.serializer.Param;
|
||||||
|
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
@EntityReference(value = SecurityRule.class)
|
@EntityReference(value = SecurityRule.class)
|
||||||
public class SecurityGroupRuleResponse extends BaseResponse {
|
public class SecurityGroupRuleResponse extends BaseResponse {
|
||||||
@SerializedName("ruleid")
|
@SerializedName("ruleid")
|
||||||
@ -63,6 +65,10 @@ public class SecurityGroupRuleResponse extends BaseResponse {
|
|||||||
@Param(description = "the CIDR notation for the base IP address of the security group rule")
|
@Param(description = "the CIDR notation for the base IP address of the security group rule")
|
||||||
private String cidr;
|
private String cidr;
|
||||||
|
|
||||||
|
@SerializedName(ApiConstants.TAGS)
|
||||||
|
@Param(description = "the list of resource tags associated with the rule", responseObject = ResourceTagResponse.class)
|
||||||
|
private java.util.Set<ResourceTagResponse> tags;
|
||||||
|
|
||||||
public String getRuleId() {
|
public String getRuleId() {
|
||||||
return ruleId;
|
return ruleId;
|
||||||
}
|
}
|
||||||
@ -161,4 +167,12 @@ public class SecurityGroupRuleResponse extends BaseResponse {
|
|||||||
return false;
|
return false;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void setTags(Set<ResourceTagResponse> tags) {
|
||||||
|
this.tags = tags;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void addTag(ResourceTagResponse tag) {
|
||||||
|
this.tags.add(tag);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -17,11 +17,15 @@
|
|||||||
package com.cloud.api.query.dao;
|
package com.cloud.api.query.dao;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.HashSet;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
import javax.ejb.Local;
|
import javax.ejb.Local;
|
||||||
import javax.inject.Inject;
|
import javax.inject.Inject;
|
||||||
|
|
||||||
|
import com.cloud.server.ResourceTag;
|
||||||
|
import org.apache.cloudstack.api.response.ResourceTagResponse;
|
||||||
import org.apache.log4j.Logger;
|
import org.apache.log4j.Logger;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
@ -48,6 +52,9 @@ public class SecurityGroupJoinDaoImpl extends GenericDaoBase<SecurityGroupJoinVO
|
|||||||
@Inject
|
@Inject
|
||||||
private ConfigurationDao _configDao;
|
private ConfigurationDao _configDao;
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
private ResourceTagJoinDao _resourceTagJoinDao;
|
||||||
|
|
||||||
private final SearchBuilder<SecurityGroupJoinVO> sgSearch;
|
private final SearchBuilder<SecurityGroupJoinVO> sgSearch;
|
||||||
|
|
||||||
private final SearchBuilder<SecurityGroupJoinVO> sgIdSearch;
|
private final SearchBuilder<SecurityGroupJoinVO> sgIdSearch;
|
||||||
@ -99,6 +106,16 @@ public class SecurityGroupJoinDaoImpl extends GenericDaoBase<SecurityGroupJoinVO
|
|||||||
ruleData.setCidr(vsg.getRuleAllowedSourceIpCidr());
|
ruleData.setCidr(vsg.getRuleAllowedSourceIpCidr());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// list the tags by rule uuid
|
||||||
|
List<ResourceTagJoinVO> tags = _resourceTagJoinDao.listBy(vsg.getRuleUuid(), ResourceTag.ResourceObjectType.SecurityGroupRule);
|
||||||
|
Set<ResourceTagResponse> tagResponse = new HashSet<ResourceTagResponse>();
|
||||||
|
for (ResourceTagJoinVO tag: tags) {
|
||||||
|
tagResponse.add(ApiDBUtils.newResourceTagResponse(tag, false));
|
||||||
|
}
|
||||||
|
|
||||||
|
// add the tags to the rule data
|
||||||
|
ruleData.setTags(tagResponse);
|
||||||
|
|
||||||
if (vsg.getRuleType() == SecurityRuleType.IngressRule) {
|
if (vsg.getRuleType() == SecurityRuleType.IngressRule) {
|
||||||
ruleData.setObjectName("ingressrule");
|
ruleData.setObjectName("ingressrule");
|
||||||
sgResponse.addSecurityGroupIngressRule(ruleData);
|
sgResponse.addSecurityGroupIngressRule(ruleData);
|
||||||
|
|||||||
@ -55,6 +55,7 @@ import com.cloud.network.dao.Site2SiteVpnGatewayVO;
|
|||||||
import com.cloud.network.rules.FirewallRuleVO;
|
import com.cloud.network.rules.FirewallRuleVO;
|
||||||
import com.cloud.network.rules.PortForwardingRuleVO;
|
import com.cloud.network.rules.PortForwardingRuleVO;
|
||||||
import com.cloud.network.security.SecurityGroupVO;
|
import com.cloud.network.security.SecurityGroupVO;
|
||||||
|
import com.cloud.network.security.SecurityGroupRuleVO;
|
||||||
import com.cloud.network.vpc.NetworkACLItemVO;
|
import com.cloud.network.vpc.NetworkACLItemVO;
|
||||||
import com.cloud.network.vpc.NetworkACLVO;
|
import com.cloud.network.vpc.NetworkACLVO;
|
||||||
import com.cloud.network.vpc.StaticRouteVO;
|
import com.cloud.network.vpc.StaticRouteVO;
|
||||||
@ -103,6 +104,7 @@ public class TaggedResourceManagerImpl extends ManagerBase implements TaggedReso
|
|||||||
s_typeMap.put(ResourceObjectType.PortForwardingRule, PortForwardingRuleVO.class);
|
s_typeMap.put(ResourceObjectType.PortForwardingRule, PortForwardingRuleVO.class);
|
||||||
s_typeMap.put(ResourceObjectType.FirewallRule, FirewallRuleVO.class);
|
s_typeMap.put(ResourceObjectType.FirewallRule, FirewallRuleVO.class);
|
||||||
s_typeMap.put(ResourceObjectType.SecurityGroup, SecurityGroupVO.class);
|
s_typeMap.put(ResourceObjectType.SecurityGroup, SecurityGroupVO.class);
|
||||||
|
s_typeMap.put(ResourceObjectType.SecurityGroupRule, SecurityGroupRuleVO.class);
|
||||||
s_typeMap.put(ResourceObjectType.PublicIpAddress, IPAddressVO.class);
|
s_typeMap.put(ResourceObjectType.PublicIpAddress, IPAddressVO.class);
|
||||||
s_typeMap.put(ResourceObjectType.Project, ProjectVO.class);
|
s_typeMap.put(ResourceObjectType.Project, ProjectVO.class);
|
||||||
s_typeMap.put(ResourceObjectType.Vpc, VpcVO.class);
|
s_typeMap.put(ResourceObjectType.Vpc, VpcVO.class);
|
||||||
@ -178,6 +180,16 @@ public class TaggedResourceManagerImpl extends ManagerBase implements TaggedReso
|
|||||||
Object entity = _entityMgr.findById(clazz, resourceId);
|
Object entity = _entityMgr.findById(clazz, resourceId);
|
||||||
Long accountId = null;
|
Long accountId = null;
|
||||||
Long domainId = null;
|
Long domainId = null;
|
||||||
|
|
||||||
|
// if the resource type is a security group rule, get the accountId and domainId from the security group itself
|
||||||
|
if (resourceType == ResourceObjectType.SecurityGroupRule) {
|
||||||
|
SecurityGroupRuleVO rule = (SecurityGroupRuleVO)entity;
|
||||||
|
Object SecurityGroup = _entityMgr.findById(s_typeMap.get(ResourceObjectType.SecurityGroup), rule.getSecurityGroupId());
|
||||||
|
|
||||||
|
accountId = ((SecurityGroupVO)SecurityGroup).getAccountId();
|
||||||
|
domainId = ((SecurityGroupVO)SecurityGroup).getDomainId();
|
||||||
|
}
|
||||||
|
|
||||||
if (entity instanceof OwnedBy) {
|
if (entity instanceof OwnedBy) {
|
||||||
accountId = ((OwnedBy)entity).getAccountId();
|
accountId = ((OwnedBy)entity).getAccountId();
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user