This is an automated email from the ASF dual-hosted git repository.
nvazquez pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/cloudstack.git
The following commit(s) were added to refs/heads/main by this push:
new e3d0ce9 Improve default network offering setting for egress policy
(#5970)
e3d0ce9 is described below
commit e3d0ce9304e959b5afba916fa8dbcd89cceb1638
Author: Pearl Dsilva <[email protected]>
AuthorDate: Tue Feb 22 04:12:35 2022 +0530
Improve default network offering setting for egress policy (#5970)
* Improve default network offering setting for egress policy
* descriptive info + restrict to only isolated n/ws
* add translation
---
.../org/apache/cloudstack/api/response/NetworkResponse.java | 12 ++++++++++++
server/src/main/java/com/cloud/api/ApiResponseHelper.java | 3 +++
ui/public/locales/en.json | 5 +++++
ui/src/components/view/DetailsTab.vue | 3 +++
ui/src/config/section/network.js | 2 +-
ui/src/views/network/EgressRulesTab.vue | 4 ++++
ui/src/views/offering/AddNetworkOffering.vue | 2 +-
7 files changed, 29 insertions(+), 2 deletions(-)
diff --git
a/api/src/main/java/org/apache/cloudstack/api/response/NetworkResponse.java
b/api/src/main/java/org/apache/cloudstack/api/response/NetworkResponse.java
index 4b41610..b673788 100644
--- a/api/src/main/java/org/apache/cloudstack/api/response/NetworkResponse.java
+++ b/api/src/main/java/org/apache/cloudstack/api/response/NetworkResponse.java
@@ -263,6 +263,10 @@ public class NetworkResponse extends
BaseResponseWithAnnotations implements Cont
@Param(description = "the total number of network traffic bytes sent")
private Long bytesSent;
+ @SerializedName((ApiConstants.EGRESS_DEFAULT_POLICY))
+ @Param(description = "true if guest network default egress policy is
allow; false if default egress policy is deny")
+ private Boolean egressDefaultPolicy;
+
public Boolean getDisplayNetwork() {
return displayNetwork;
}
@@ -528,4 +532,12 @@ public class NetworkResponse extends
BaseResponseWithAnnotations implements Cont
public void setBytesSent(final Long bytesSent) {
this.bytesSent = bytesSent;
}
+
+ public boolean getEgressDefaultPolicy() {
+ return egressDefaultPolicy;
+ }
+
+ public void setEgressDefaultPolicy(Boolean egressDefaultPolicy) {
+ this.egressDefaultPolicy = egressDefaultPolicy;
+ }
}
diff --git a/server/src/main/java/com/cloud/api/ApiResponseHelper.java
b/server/src/main/java/com/cloud/api/ApiResponseHelper.java
index 60530c2..5df3c17 100644
--- a/server/src/main/java/com/cloud/api/ApiResponseHelper.java
+++ b/server/src/main/java/com/cloud/api/ApiResponseHelper.java
@@ -2302,6 +2302,9 @@ public class ApiResponseHelper implements
ResponseGenerator {
response.setIsSystem(networkOffering.isSystemOnly());
response.setNetworkOfferingAvailability(networkOffering.getAvailability().toString());
response.setIsPersistent(networkOffering.isPersistent());
+ if (Network.GuestType.Isolated.equals(network.getGuestType())) {
+
response.setEgressDefaultPolicy(networkOffering.isEgressDefaultPolicy());
+ }
}
if (network.getAclType() != null) {
diff --git a/ui/public/locales/en.json b/ui/public/locales/en.json
index 9253ae3..c3ee434 100644
--- a/ui/public/locales/en.json
+++ b/ui/public/locales/en.json
@@ -2669,6 +2669,7 @@
"message.after.enable.s3": "S3-backed Secondary Storage configured. Note: When
you leave this page, you will not be able to re-configure S3 again.",
"message.after.enable.swift": "Swift configured. Note: When you leave this
page, you will not be able to re-configure Swift again.",
"message.alert.state.detected": "Alert state detected",
+"message.allowed": "Allowed",
"message.allow.vpn.access": "Please enter a username and password of the user
that you want to allow VPN access.",
"message.apply.snapshot.policy": "You have successfully updated your current
snapshot policy.",
"message.apply.success": "Apply Successfully",
@@ -2838,6 +2839,7 @@
"message.delete.vpn.gateway": "Please confirm that you want to delete this VPN
Gateway",
"message.deleting.node": "Deleting Node",
"message.deleting.vm": "Deleting VM",
+"message.denied": "Denied",
"message.deployasis": "Selected template is Deploy As-Is i.e., the VM is
deployed by importing an OVA with vApps directly into vCenter. Root disk(s)
resize is allowed only on stopped VMs for such templates.",
"message.desc.add.new.lb.sticky.rule": "Add new LB sticky rule",
"message.desc.advanced.zone": "This is recommended and allows more
sophisticated network topologies. This network model provides the most
flexibility in defining guest networks and providing custom network offerings
such as firewall, VPN, or load balancer support.",
@@ -2881,6 +2883,9 @@
"message.edit.rule.failed": "Failed to edit rule",
"message.edit.rule.processing": "Updating rule...",
"message.edit.traffic.type": "Please specify the traffic label you want
associated with this traffic type.",
+"message.egress.rules.allow": "Allow (traffic matching the egress rules added
will be denied)",
+"message.egress.rules.deny": "Deny (traffic matching the egress rules added
will be allowed)",
+"message.egress.rules.info.for.network": "The default egress policy of this
network is %x. <br><br> Outgoing traffic matching the following rules will be
%y",
"message.enable.account": "Please confirm that you want to enable this
account.",
"message.enable.netsacler.provider.failed": "failed to enable Netscaler
provider",
"message.enable.securitygroup.provider.failed": "failed to enable security
group provider",
diff --git a/ui/src/components/view/DetailsTab.vue
b/ui/src/components/view/DetailsTab.vue
index 14508ba..b23f589 100644
--- a/ui/src/components/view/DetailsTab.vue
+++ b/ui/src/components/view/DetailsTab.vue
@@ -45,6 +45,9 @@
<div v-else-if="['created', 'sent', 'lastannotated'].includes(item)">
{{ $toLocaleDate(resource[item]) }}
</div>
+ <div v-else-if="$route.meta.name === 'guestnetwork' && item ===
'egressdefaultpolicy'">
+ {{ resource[item]? $t('message.egress.rules.allow') :
$t('message.egress.rules.deny') }}
+ </div>
<div v-else>{{ resource[item] }}</div>
</div>
</a-list-item>
diff --git a/ui/src/config/section/network.js b/ui/src/config/section/network.js
index 43992e8..b55312d 100644
--- a/ui/src/config/section/network.js
+++ b/ui/src/config/section/network.js
@@ -38,7 +38,7 @@ export default {
return fields
},
details: () => {
- var fields = ['name', 'id', 'description', 'type', 'traffictype',
'vpcid', 'vlan', 'broadcasturi', 'cidr', 'ip6cidr', 'netmask', 'gateway',
'aclname', 'ispersistent', 'restartrequired', 'reservediprange',
'redundantrouter', 'networkdomain', 'zonename', 'account', 'domain']
+ var fields = ['name', 'id', 'description', 'type', 'traffictype',
'vpcid', 'vlan', 'broadcasturi', 'cidr', 'ip6cidr', 'netmask', 'gateway',
'aclname', 'ispersistent', 'restartrequired', 'reservediprange',
'redundantrouter', 'networkdomain', 'egressdefaultpolicy', 'zonename',
'account', 'domain']
if (!isAdmin()) {
fields = fields.filter(function (e) { return e !== 'broadcasturi' })
}
diff --git a/ui/src/views/network/EgressRulesTab.vue
b/ui/src/views/network/EgressRulesTab.vue
index a935f4c..ba76ee9 100644
--- a/ui/src/views/network/EgressRulesTab.vue
+++ b/ui/src/views/network/EgressRulesTab.vue
@@ -18,6 +18,10 @@
<template>
<div>
<div>
+ <div
+ v-html="$t('message.egress.rules.info.for.network').replace('%x',
resource.egressdefaultpolicy ? '<b>' + $t('label.allow') + '</b>' :
+ '<b>' + $t('label.deny') + '</b>').replace('%y',
resource.egressdefaultpolicy ? '<b>' + $t('message.denied') + '</b>' : '<b>' +
$t('message.allowed') + '</b>')"> </div>
+ <a-divider />
<div class="form" v-ctrl-enter="addRule">
<div class="form__item">
<div class="form__label">{{ $t('label.sourcecidr') }}</div>
diff --git a/ui/src/views/offering/AddNetworkOffering.vue
b/ui/src/views/offering/AddNetworkOffering.vue
index d114ceb..c01a940 100644
--- a/ui/src/views/offering/AddNetworkOffering.vue
+++ b/ui/src/views/offering/AddNetworkOffering.vue
@@ -342,7 +342,7 @@
<tooltip-label slot="label" :title="$t('label.egressdefaultpolicy')"
:tooltip="apiParams.egressdefaultpolicy.description"/>
<a-radio-group
v-decorator="['egressdefaultpolicy', {
- initialValue: 'allow'
+ initialValue: 'deny'
}]"
buttonStyle="solid">
<a-radio-button value="allow">