Skip to content

Commit cc98d44

Browse files
author
Jayapal
committed
CLOUDSTACK-6922: Updated events for firewall ingress and egress
1 parent 2be26e0 commit cc98d44

10 files changed

Lines changed: 83 additions & 24 deletions

File tree

api/src/com/cloud/event/EventTypes.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,10 @@ public class EventTypes {
128128
public static final String EVENT_FIREWALL_CLOSE = "FIREWALL.CLOSE";
129129
public static final String EVENT_FIREWALL_UPDATE = "FIREWALL.UPDATE";
130130

131+
public static final String EVENT_FIREWALL_EGRESS_OPEN = "FIREWALL.EGRESS.OPEN";
132+
public static final String EVENT_FIREWALL_EGRESS_CLOSE = "FIREWALL.EGRESS.CLOSE";
133+
public static final String EVENT_FIREWALL_EGRESS_UPDATE = "FIREWALL.EGRESS.UPDATE";
134+
131135
//NIC Events
132136
public static final String EVENT_NIC_CREATE = "NIC.CREATE";
133137
public static final String EVENT_NIC_DELETE = "NIC.DELETE";
@@ -556,6 +560,10 @@ public class EventTypes {
556560
entityEventDetails.put(EVENT_NET_RULE_MODIFY, FirewallRule.class);
557561
entityEventDetails.put(EVENT_FIREWALL_OPEN, FirewallRule.class);
558562
entityEventDetails.put(EVENT_FIREWALL_CLOSE, FirewallRule.class);
563+
entityEventDetails.put(EVENT_FIREWALL_EGRESS_OPEN, FirewallRule.class);
564+
entityEventDetails.put(EVENT_FIREWALL_EGRESS_CLOSE, FirewallRule.class);
565+
entityEventDetails.put(EVENT_FIREWALL_EGRESS_UPDATE, FirewallRule.class);
566+
559567

560568
// Load Balancers
561569
entityEventDetails.put(EVENT_ASSIGN_TO_LOAD_BALANCER_RULE, FirewallRule.class);

api/src/com/cloud/network/firewall/FirewallService.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,8 @@ public interface FirewallService {
4040
* the id of the rule to revoke.
4141
* @return
4242
*/
43-
boolean revokeFirewallRule(long ruleId, boolean apply);
43+
boolean revokeIngressFirewallRule(long ruleId, boolean apply);
44+
boolean revokeEgressFirewallRule(long ruleId, boolean apply);
4445

4546
boolean applyEgressFirewallRules(FirewallRule rule, Account caller) throws ResourceUnavailableException;
4647

@@ -50,6 +51,9 @@ public interface FirewallService {
5051

5152
boolean revokeRelatedFirewallRule(long ruleId, boolean apply);
5253

53-
FirewallRule updateFirewallRule(long ruleId, String customId, Boolean forDisplay);
54+
FirewallRule updateIngressFirewallRule(long ruleId, String customId, Boolean forDisplay);
55+
FirewallRule updateEgressFirewallRule(long ruleId, String customId, Boolean forDisplay);
5456

57+
boolean applyIngressFwRules(long ipId, Account caller) throws ResourceUnavailableException;
58+
boolean revokeIngressFwRule(long ruleId, boolean apply);
5559
}

api/src/org/apache/cloudstack/api/command/user/firewall/CreateEgressFirewallRuleCmd.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -154,7 +154,7 @@ public void execute() throws ResourceUnavailableException {
154154
fwResponse.setResponseName(getCommandName());
155155
} finally {
156156
if (!success || rule == null) {
157-
_firewallService.revokeFirewallRule(getEntityId(), true);
157+
_firewallService.revokeEgressFirewallRule(getEntityId(), true);
158158
throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to create firewall rule");
159159
}
160160
}
@@ -270,7 +270,7 @@ public void create() {
270270

271271
@Override
272272
public String getEventType() {
273-
return EventTypes.EVENT_FIREWALL_OPEN;
273+
return EventTypes.EVENT_FIREWALL_EGRESS_OPEN;
274274
}
275275

276276
@Override

api/src/org/apache/cloudstack/api/command/user/firewall/CreateFirewallRuleCmd.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,7 @@ public void execute() throws ResourceUnavailableException {
134134
FirewallRule rule = _entityMgr.findById(FirewallRule.class, getEntityId());
135135
try {
136136
CallContext.current().setEventDetails("Rule Id: " + getEntityId());
137-
success = _firewallService.applyIngressFirewallRules(rule.getSourceIpAddressId(), callerContext.getCallingAccount());
137+
success = _firewallService.applyIngressFwRules(rule.getSourceIpAddressId(), callerContext.getCallingAccount());
138138

139139
// State is different after the rule is applied, so get new object here
140140
rule = _entityMgr.findById(FirewallRule.class, getEntityId());
@@ -146,7 +146,7 @@ public void execute() throws ResourceUnavailableException {
146146
fwResponse.setResponseName(getCommandName());
147147
} finally {
148148
if (!success || rule == null) {
149-
_firewallService.revokeFirewallRule(getEntityId(), true);
149+
_firewallService.revokeIngressFwRule(getEntityId(), true);
150150
throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to create firewall rule");
151151
}
152152
}

api/src/org/apache/cloudstack/api/command/user/firewall/DeleteEgressFirewallRuleCmd.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ public String getCommandName() {
7474

7575
@Override
7676
public String getEventType() {
77-
return EventTypes.EVENT_FIREWALL_CLOSE;
77+
return EventTypes.EVENT_FIREWALL_EGRESS_CLOSE;
7878
}
7979

8080
@Override
@@ -98,7 +98,7 @@ public long getEntityOwnerId() {
9898
@Override
9999
public void execute() throws ResourceUnavailableException {
100100
CallContext.current().setEventDetails("Rule Id: " + id);
101-
boolean result = _firewallService.revokeFirewallRule(id, true);
101+
boolean result = _firewallService.revokeEgressFirewallRule(id, true);
102102

103103
if (result) {
104104
SuccessResponse response = new SuccessResponse(getCommandName());

api/src/org/apache/cloudstack/api/command/user/firewall/DeleteFirewallRuleCmd.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@ public long getEntityOwnerId() {
9696
@Override
9797
public void execute() throws ResourceUnavailableException {
9898
CallContext.current().setEventDetails("Rule Id: " + id);
99-
boolean result = _firewallService.revokeFirewallRule(id, true);
99+
boolean result = _firewallService.revokeIngressFwRule(id, true);
100100

101101
if (result) {
102102
SuccessResponse response = new SuccessResponse(getCommandName());

api/src/org/apache/cloudstack/api/command/user/firewall/UpdateEgressFirewallRuleCmd.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ public String getCommandName() {
7878
@Override
7979
public void execute() throws ResourceUnavailableException {
8080
CallContext.current().setEventDetails("Rule Id: " + id);
81-
FirewallRule rule = _firewallService.updateFirewallRule(id, this.getCustomId(), getDisplay());
81+
FirewallRule rule = _firewallService.updateEgressFirewallRule(id, this.getCustomId(), getDisplay());
8282

8383
FirewallResponse fwResponse = new FirewallResponse();
8484
if (rule != null) {
@@ -97,7 +97,7 @@ public void checkUuid() {
9797

9898
@Override
9999
public String getEventType() {
100-
return EventTypes.EVENT_FIREWALL_UPDATE;
100+
return EventTypes.EVENT_FIREWALL_EGRESS_UPDATE;
101101

102102
}
103103

api/src/org/apache/cloudstack/api/command/user/firewall/UpdateFirewallRuleCmd.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ public String getCommandName() {
7979
@Override
8080
public void execute() throws ResourceUnavailableException {
8181
CallContext.current().setEventDetails("Rule Id: " + id);
82-
FirewallRule rule = _firewallService.updateFirewallRule(id, this.getCustomId(), getDisplay());
82+
FirewallRule rule = _firewallService.updateIngressFirewallRule(id, this.getCustomId(), getDisplay());
8383

8484
FirewallResponse fwResponse = new FirewallResponse();
8585
if (rule != null) {

server/src/com/cloud/network/firewall/FirewallManagerImpl.java

Lines changed: 32 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -161,7 +161,7 @@ public boolean start() {
161161
}
162162

163163
@Override
164-
@ActionEvent(eventType = EventTypes.EVENT_FIREWALL_OPEN, eventDescription = "creating firewall rule", create = true)
164+
@ActionEvent(eventType = EventTypes.EVENT_FIREWALL_EGRESS_OPEN, eventDescription = "creating egress firewall rule for network", create = true)
165165
public FirewallRule createEgressFirewallRule(FirewallRule rule) throws NetworkRuleConflictException {
166166
Account caller = CallContext.current().getCallingAccount();
167167

@@ -612,13 +612,20 @@ public void removeRule(FirewallRule rule) {
612612
_firewallDao.remove(rule.getId());
613613
}
614614

615+
@Override
616+
@ActionEvent(eventType = EventTypes.EVENT_FIREWALL_OPEN, eventDescription = "creating firewall rule", async = true)
617+
public boolean applyIngressFwRules(long ipId, Account caller) throws ResourceUnavailableException {
618+
return applyIngressFirewallRules(ipId, caller);
619+
}
620+
615621
@Override
616622
public boolean applyIngressFirewallRules(long ipId, Account caller) throws ResourceUnavailableException {
617623
List<FirewallRuleVO> rules = _firewallDao.listByIpAndPurpose(ipId, Purpose.Firewall);
618624
return applyFirewallRules(rules, false, caller);
619625
}
620626

621627
@Override
628+
@ActionEvent(eventType = EventTypes.EVENT_FIREWALL_EGRESS_OPEN, eventDescription = "creating egress firewall rule", async = true)
622629
public boolean applyEgressFirewallRules(FirewallRule rule, Account caller) throws ResourceUnavailableException {
623630
List<FirewallRuleVO> rules = _firewallDao.listByNetworkPurposeTrafficType(rule.getNetworkId(), Purpose.Firewall, FirewallRule.TrafficType.Egress);
624631
return applyFirewallRules(rules, false, caller);
@@ -719,15 +726,36 @@ protected boolean revokeFirewallRule(long ruleId, boolean apply, Account caller,
719726

720727
@Override
721728
@ActionEvent(eventType = EventTypes.EVENT_FIREWALL_CLOSE, eventDescription = "revoking firewall rule", async = true)
722-
public boolean revokeFirewallRule(long ruleId, boolean apply) {
729+
public boolean revokeIngressFwRule(long ruleId, boolean apply) {
730+
return revokeIngressFirewallRule(ruleId, apply);
731+
}
732+
733+
734+
@Override
735+
public boolean revokeIngressFirewallRule(long ruleId, boolean apply) {
736+
Account caller = CallContext.current().getCallingAccount();
737+
long userId = CallContext.current().getCallingUserId();
738+
return revokeFirewallRule(ruleId, apply, caller, userId);
739+
}
740+
741+
@Override
742+
@ActionEvent(eventType = EventTypes.EVENT_FIREWALL_EGRESS_CLOSE, eventDescription = "revoking egress firewall rule", async = true)
743+
public boolean revokeEgressFirewallRule(long ruleId, boolean apply) {
723744
Account caller = CallContext.current().getCallingAccount();
724745
long userId = CallContext.current().getCallingUserId();
725746
return revokeFirewallRule(ruleId, apply, caller, userId);
726747
}
727748

728749
@Override
729750
@ActionEvent(eventType = EventTypes.EVENT_FIREWALL_UPDATE, eventDescription = "updating firewall rule", async = true)
730-
public FirewallRule updateFirewallRule(long ruleId, String customId, Boolean forDisplay) {
751+
public FirewallRule updateIngressFirewallRule(long ruleId, String customId, Boolean forDisplay) {
752+
Account caller = CallContext.current().getCallingAccount();
753+
return updateFirewallRule(ruleId, customId, caller, forDisplay);
754+
}
755+
756+
@Override
757+
@ActionEvent(eventType = EventTypes.EVENT_FIREWALL_EGRESS_UPDATE, eventDescription = "updating egress firewall rule", async = true)
758+
public FirewallRule updateEgressFirewallRule(long ruleId, String customId, Boolean forDisplay) {
731759
Account caller = CallContext.current().getCallingAccount();
732760
return updateFirewallRule(ruleId, customId, caller, forDisplay);
733761
}
@@ -881,7 +909,7 @@ public boolean revokeRelatedFirewallRule(long ruleId, boolean apply) {
881909
}
882910

883911
s_logger.debug("Revoking Firewall rule id=" + fwRule.getId() + " as a part of rule delete id=" + ruleId + " with apply=" + apply);
884-
return revokeFirewallRule(fwRule.getId(), apply);
912+
return revokeIngressFirewallRule(fwRule.getId(), apply);
885913

886914
}
887915

server/test/com/cloud/network/MockFirewallManagerImpl.java

Lines changed: 27 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -70,9 +70,13 @@ public Pair<List<? extends FirewallRule>, Integer> listFirewallRules(ListFirewal
7070
}
7171

7272
@Override
73-
public boolean revokeFirewallRule(long ruleId, boolean apply) {
74-
// TODO Auto-generated method stub
75-
return false;
73+
public boolean revokeIngressFirewallRule(long ruleId, boolean apply) {
74+
return false; //To change body of implemented methods use File | Settings | File Templates.
75+
}
76+
77+
@Override
78+
public boolean revokeEgressFirewallRule(long ruleId, boolean apply) {
79+
return false; //To change body of implemented methods use File | Settings | File Templates.
7680
}
7781

7882
@Override
@@ -87,6 +91,26 @@ public boolean revokeRelatedFirewallRule(long ruleId, boolean apply) {
8791
return false;
8892
}
8993

94+
@Override
95+
public FirewallRule updateIngressFirewallRule(long ruleId, String customId, Boolean forDisplay) {
96+
return null; //To change body of implemented methods use File | Settings | File Templates.
97+
}
98+
99+
@Override
100+
public FirewallRule updateEgressFirewallRule(long ruleId, String customId, Boolean forDisplay) {
101+
return null; //To change body of implemented methods use File | Settings | File Templates.
102+
}
103+
104+
@Override
105+
public boolean applyIngressFwRules(long ipId, Account caller) throws ResourceUnavailableException {
106+
return false; //To change body of implemented methods use File | Settings | File Templates.
107+
}
108+
109+
@Override
110+
public boolean revokeIngressFwRule(long ruleId, boolean apply) {
111+
return false; //To change body of implemented methods use File | Settings | File Templates.
112+
}
113+
90114
@Override
91115
public void detectRulesConflict(FirewallRule newRule) throws NetworkRuleConflictException {
92116
// TODO Auto-generated method stub
@@ -184,10 +208,5 @@ public FirewallRule createIngressFirewallRule(FirewallRule rule) throws NetworkR
184208
return null;
185209
}
186210

187-
@Override
188-
public FirewallRule updateFirewallRule(long ruleId, String customId, Boolean forDisplay) {
189-
// TODO Auto-generated method stub
190-
return null;
191-
}
192211

193212
}

0 commit comments

Comments
 (0)