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; }