diff --git a/openstack_dashboard/dashboards/project/network_topology/templates/network_topology/client_side/_balloon_container.html b/openstack_dashboard/dashboards/project/network_topology/templates/network_topology/client_side/_balloon_container.html
index 4ba7d42975..aef07abacc 100644
--- a/openstack_dashboard/dashboards/project/network_topology/templates/network_topology/client_side/_balloon_container.html
+++ b/openstack_dashboard/dashboards/project/network_topology/templates/network_topology/client_side/_balloon_container.html
@@ -22,6 +22,7 @@
[[/console]]
[[#type]]
+ [[#allow_delete]]
+ [[/allow_delete]]
[[/type]]
diff --git a/openstack_dashboard/dashboards/project/network_topology/tests.py b/openstack_dashboard/dashboards/project/network_topology/tests.py
index 665ef66267..b231ed27dd 100644
--- a/openstack_dashboard/dashboards/project/network_topology/tests.py
+++ b/openstack_dashboard/dashboards/project/network_topology/tests.py
@@ -83,12 +83,13 @@ class NetworkTopologyTests(test.TestCase):
expect_server_urls = []
for server in self.servers.list():
expect_server = {
- 'id': server.id,
'name': server.name,
'status': server.status.title(),
+ 'allow_delete_server': True,
'original_status': server.status,
'task': None,
- 'url': '/project/instances/%s/' % server.id
+ 'id': server.id,
+ 'url': '/project/instances/%s/' % server.id,
}
if server.status != 'BUILD' and with_console:
expect_server['console'] = 'auto_console'
@@ -133,6 +134,7 @@ class NetworkTopologyTests(test.TestCase):
'router:external': net.is_router_external,
'status': net.status.title(),
'allow_delete_subnet': True,
+ 'allow_delete_network': True,
'original_status': net.status,
'subnets': [{
'cidr': subnet.cidr,
diff --git a/openstack_dashboard/dashboards/project/network_topology/views.py b/openstack_dashboard/dashboards/project/network_topology/views.py
index 442dab68ff..2e3615dd74 100644
--- a/openstack_dashboard/dashboards/project/network_topology/views.py
+++ b/openstack_dashboard/dashboards/project/network_topology/views.py
@@ -233,9 +233,12 @@ class JSONView(View):
console_type = settings.CONSOLE_TYPE
# lowercase of the keys will be used at the end of the console URL.
for server in servers:
+ allow_delete_server = policy.check(
+ (("compute", "os_compute_api:servers:delete"),), request)
server_data = {'name': server.name,
'status': self.trans.instance[server.status],
'original_status': server.status,
+ 'allow_delete_server': allow_delete_server,
'task': getattr(server, 'OS-EXT-STS:task_state'),
'id': server.id}
# Avoid doing extra calls for console if the server is in
@@ -276,6 +279,12 @@ class JSONView(View):
target={'network:tenant_id': getattr(network,
'tenant_id', None)}
)
+ allow_delete_network = policy.check(
+ (("network", "delete_network"),),
+ request,
+ target={'network:tenant_id': getattr(network,
+ 'tenant_id', None)}
+ )
obj = {'name': network.name_or_id,
'id': network.id,
'subnets': [{'id': subnet.id,
@@ -283,6 +292,7 @@ class JSONView(View):
for subnet in network.subnets],
'status': self.trans.network[network.status],
'allow_delete_subnet': allow_delete_subnet,
+ 'allow_delete_network': allow_delete_network,
'original_status': network.status,
'router:external': network['is_router_external']}
self.add_resource_url('horizon:project:networks:subnets:detail',
diff --git a/openstack_dashboard/static/js/horizon.networktopology.js b/openstack_dashboard/static/js/horizon.networktopology.js
index 6a8f6b1e2b..d147bc1b3b 100644
--- a/openstack_dashboard/static/js/horizon.networktopology.js
+++ b/openstack_dashboard/static/js/horizon.networktopology.js
@@ -1056,6 +1056,7 @@ horizon.network_topology = {
htmlData.console_id = d.id;
htmlData.ips = d.ip_addresses;
htmlData.console = d.console;
+ htmlData.allow_delete = d.allow_delete_server;
html = balloonTmpl.render(htmlData,{
table1:deviceTmpl,
table2:instanceTmpl
@@ -1067,6 +1068,7 @@ horizon.network_topology = {
htmlData.subnet = subnets;
if (d instanceof Network) {
htmlData.delete_label = gettext('Delete Network');
+ htmlData.allow_delete = d.allow_delete_network;
if (d.allow_delete_subnet){
htmlData.allow_delete_subnet = d.allow_delete_subnet;
}