diff --git a/ui/public/locales/en.json b/ui/public/locales/en.json
index 3ff927b578ab..8c5e8ee7ca77 100644
--- a/ui/public/locales/en.json
+++ b/ui/public/locales/en.json
@@ -71,6 +71,13 @@
"label.action.attach.disk.processing": "Attaching Disk....",
"label.action.attach.iso": "Attach ISO",
"label.action.attach.iso.processing": "Attaching ISO....",
+"label.action.bulk.delete.egress.firewall.rules": "Bulk delete egress firewall rules",
+"label.action.bulk.delete.firewall.rules": "Bulk delete firewall rules",
+"label.action.bulk.delete.load.balancer.rules": "Bulk delete load balancer rules",
+"label.action.bulk.delete.templates": "Bulk delete templates",
+"label.action.bulk.delete.isos": "Bulk delete ISOs",
+"label.action.bulk.delete.portforward.rules": "Bulk delete Port Forward rules",
+"label.action.bulk.release.public.ip.address": "Bulk release Public IP Addresses",
"label.action.cancel.maintenance.mode": "Cancel Maintenance Mode",
"label.action.cancel.maintenance.mode.processing": "Cancelling Maintenance Mode....",
"label.action.change.password": "Change Password",
@@ -99,6 +106,7 @@
"label.action.delete.disk.offering.processing": "Deleting Disk Offering....",
"label.action.delete.domain": "Delete Domain",
"label.action.delete.domain.processing": "Deleting Domain....",
+"label.action.delete.egress.firewall": "Delete egress firewall rule",
"label.action.delete.firewall": "Delete firewall rule",
"label.action.delete.firewall.processing": "Deleting Firewall....",
"label.action.delete.ingress.rule": "Delete Ingress Rule",
@@ -586,6 +594,13 @@
"label.confirmdeclineinvitation": "Are you sure you want to decline this project invitation?",
"label.confirmpassword": "Confirm Password",
"label.confirmpassword.description": "Please type the same password again",
+"label.confirm.delete.egress.firewall.rules": "Please confirm you wish to delete the selected egress firewall rules",
+"label.confirm.delete.firewall.rules": "Please confirm you wish to delete the selected firewall rules",
+"label.confirm.delete.loadbalancer.rules": "Please confirm you wish to delete the selected load balancing rules",
+"label.confirm.delete.portforward.rules": "Please confirm you wish to delete the selected port-forward rules",
+"label.confirm.delete.templates": "Please confirm you wish to delete the selected templates",
+"label.confirm.delete.isos": "Please confirm you wish to delete the selected isos",
+"label.confirm.release.public.ip.addresses": "Please confirm you wish to release the selected public IP addresses",
"label.congratulations": "Congratulations!",
"label.connectiontimeout": "Connection Timeout",
"label.conservemode": "Conserve mode",
@@ -693,6 +708,7 @@
"label.delete.opendaylight.device": "Delete OpenDaylight Controller",
"label.delete.pa": "Delete Palo Alto",
"label.delete.portable.ip.range": "Delete Portable IP Range",
+"label.delete.portforward.rules": "Delete Port Forward Rules",
"label.delete.project": "Delete project",
"label.delete.project.role": "Delete Project Role",
"label.delete.role": "Delete Role",
@@ -902,6 +918,7 @@
"label.filterby": "Filter by",
"label.fingerprint": "FingerPrint",
"label.firewall": "Firewall",
+"label.firewallrule": "Firewall Rule",
"label.firstname": "First Name",
"label.firstname.lower": "firstname",
"label.fix.errors": "Fix errors",
@@ -1169,6 +1186,7 @@
"label.isvolatile": "Volatile",
"label.item.listing": "Item listing",
"label.items": "items",
+"label.items.selected": "item(s) selected",
"label.japanese.keyboard": "Japanese keyboard",
"label.keep": "Keep",
"label.keep.colon": "Keep:",
@@ -1520,6 +1538,7 @@
"label.opendaylight.controllerdetail": "OpenDaylight Controller Details",
"label.opendaylight.controllers": "OpenDaylight Controllers",
"label.operation": "Operation",
+"label.operation.status": "Operation Status",
"label.optional": "Optional",
"label.order": "Order",
"label.oscategoryid": "OS Preference",
@@ -1605,6 +1624,7 @@
"label.portable.ip.ranges": "Portable IP Ranges",
"label.portableipaddress": "Portable IPs",
"label.portforwarding": "Port Forwarding",
+"label.portforwarding.rule": "Port Forwarding Rule",
"label.powerflex.gateway": "Gateway",
"label.powerflex.gateway.username": "Gateway Username",
"label.powerflex.gateway.password": "Gateway Password",
@@ -2399,6 +2419,7 @@
"message.action.delete.external.firewall": "Please confirm that you would like to remove this external firewall. Warning: If you are planning to add back the same external firewall, you must reset usage data on the device.",
"message.action.delete.external.load.balancer": "Please confirm that you would like to remove this external load balancer. Warning: If you are planning to add back the same external load balancer, you must reset usage data on the device.",
"message.action.delete.ingress.rule": "Please confirm that you want to delete this ingress rule.",
+"message.action.delete.instance.group": "Please confirm that you want to delete the instance group",
"message.action.delete.iso": "Please confirm that you want to delete this ISO.",
"message.action.delete.iso.for.all.zones": "The ISO is used by all zones. Please confirm that you want to delete it from all zones.",
"message.action.delete.network": "Please confirm that you want to delete this network.",
@@ -3323,6 +3344,8 @@
"state.error": "Error",
"state.expired": "Expired",
"state.expunging": "Expunging",
+"state.failed": "Failed",
+"state.inprogress": "In Progress",
"state.migrating": "Migrating",
"state.pending": "Pending",
"state.readonly": "Read-Only",
diff --git a/ui/src/components/header/HeaderNotice.vue b/ui/src/components/header/HeaderNotice.vue
index 03a5acd2017a..07d9936a55d3 100644
--- a/ui/src/components/header/HeaderNotice.vue
+++ b/ui/src/components/header/HeaderNotice.vue
@@ -33,8 +33,11 @@
-
-
+
+
+ {{ getResourceName(job.description, "name") + ' - ' }}
+ {{ getResourceName(job.description, "msg") }}
+ {{ job.description }}
@@ -80,6 +83,16 @@ export default {
this.pollJobs()
}, 4000)
},
+ getResourceName (description, data) {
+ if (description) {
+ if (data === 'name') {
+ const name = description.match(/\(([^)]+)\)/)
+ return name ? name[1] : null
+ }
+ const msg = description.substring(description.indexOf(')') + 1)
+ return msg
+ }
+ },
async pollJobs () {
var hasUpdated = false
for (var i in this.jobs) {
@@ -102,12 +115,14 @@ export default {
if (result.jobresult.errortext !== null) {
this.jobs[i].description = '(' + this.jobs[i].description + ') ' + result.jobresult.errortext
}
- this.$notification.error({
- message: this.jobs[i].title,
- description: this.jobs[i].description,
- key: this.jobs[i].jobid,
- duration: 0
- })
+ if (!this.jobs[i].bulkAction) {
+ this.$notification.error({
+ message: this.jobs[i].title,
+ description: this.jobs[i].description,
+ key: this.jobs[i].jobid,
+ duration: 0
+ })
+ }
}
}).catch(function (e) {
console.log(this.$t('error.fetching.async.job.result') + e)
diff --git a/ui/src/components/view/BulkActionProgress.vue b/ui/src/components/view/BulkActionProgress.vue
new file mode 100644
index 000000000000..73a6a3419e9c
--- /dev/null
+++ b/ui/src/components/view/BulkActionProgress.vue
@@ -0,0 +1,191 @@
+// 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.
+
+
+
+ {{ $t(message.title) }}
+
+
+
+
+
+ {{ $t('label.close') }}
+
+
+
+
+
+
diff --git a/ui/src/components/view/BulkActionView.vue b/ui/src/components/view/BulkActionView.vue
new file mode 100644
index 000000000000..acdc79961515
--- /dev/null
+++ b/ui/src/components/view/BulkActionView.vue
@@ -0,0 +1,192 @@
+// 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.
+
+
+