Resolve astara admin. API via keystone
This fetches the astara administrative API endpoint via keystone instead of creating one from a pre-configured networking prefix. Partial-bug: #1516787 Partially-implements: blueprint astara-horizon-mitaka Depends-on: I2b96137c05b832a68ad01a11ec0cfb2371111c3c Change-Id: I5879a2fb9e93c981196f55d1f298c137f315590d
This commit is contained in:
parent
5e03ad32ac
commit
3e83c1553c
@ -15,30 +15,13 @@
|
||||
from datetime import datetime
|
||||
from django.conf import settings
|
||||
from horizon.utils import functions as utils
|
||||
import netaddr
|
||||
import requests as r
|
||||
from openstack_dashboard.api import base
|
||||
from openstack_dashboard.api.nova import novaclient
|
||||
from openstack_dashboard.api.neutron import neutronclient
|
||||
|
||||
|
||||
def _mgt_url(host, port, path):
|
||||
if ':' in host:
|
||||
host = '[%s]' % host
|
||||
return 'http://%s:%s%s' % (host, port, path)
|
||||
|
||||
|
||||
def _make_request(url):
|
||||
try:
|
||||
return r.put(url).ok
|
||||
except r.RequestException:
|
||||
return False
|
||||
|
||||
|
||||
def _get_local_service_ip(management_prefix):
|
||||
mgt_net = netaddr.IPNetwork(management_prefix)
|
||||
rug_ip = '%s/%s' % (netaddr.IPAddress(mgt_net.first + 1),
|
||||
mgt_net.prefixlen)
|
||||
return rug_ip
|
||||
KEYSTONE_SERVICE_NAME = 'astara'
|
||||
|
||||
|
||||
class Router(object):
|
||||
@ -57,39 +40,41 @@ class Router(object):
|
||||
|
||||
class AstaraClient(object):
|
||||
def __init__(self):
|
||||
self.host = (
|
||||
_get_local_service_ip(settings.RUG_MANAGEMENT_PREFIX)
|
||||
.split('/')[0]
|
||||
)
|
||||
self.port = settings.RUG_API_PORT
|
||||
self.image_uuid = settings.ROUTER_IMAGE_UUID
|
||||
self.api_limit = getattr(settings, 'API_RESULT_LIMIT', 1000)
|
||||
|
||||
def poll(self):
|
||||
def _make_request(self, request, path):
|
||||
url = base.url_for(request, KEYSTONE_SERVICE_NAME) + path
|
||||
try:
|
||||
return r.put(url).ok
|
||||
except r.RequestException:
|
||||
return False
|
||||
|
||||
def poll(self, request):
|
||||
path = '/poll'
|
||||
return _make_request(_mgt_url(self.host, self.port, path))
|
||||
return self._make_request(request, path)
|
||||
|
||||
def config_reload(self):
|
||||
def config_reload(self, request):
|
||||
path = '/config/reload'
|
||||
return _make_request(_mgt_url(self.host, self.port, path))
|
||||
return self._make_request(request, path)
|
||||
|
||||
def workers_debug(self):
|
||||
def workers_debug(self, request):
|
||||
path = '/workers/debug'
|
||||
return _make_request(_mgt_url(self.host, self.port, path))
|
||||
return self._make_request(request, path)
|
||||
|
||||
def router_debug(self, router_id):
|
||||
def router_debug(self, request, router_id):
|
||||
path = '/router/debug/{router_id}'.format(router_id=router_id)
|
||||
return _make_request(_mgt_url(self.host, self.port, path))
|
||||
return self._make_request(request, path)
|
||||
|
||||
def router_manage(self, router_id):
|
||||
def router_manage(self, request, router_id):
|
||||
path = '/router/manage/{router_id}'.format(router_id=router_id)
|
||||
return _make_request(_mgt_url(self.host, self.port, path))
|
||||
return self._make_request(request, path)
|
||||
|
||||
def router_update(self, router_id):
|
||||
def router_update(self, request, router_id):
|
||||
path = '/router/update/{router_id}'.format(router_id=router_id)
|
||||
return _make_request(_mgt_url(self.host, self.port, path))
|
||||
return self._make_request(request, path)
|
||||
|
||||
def router_rebuild(self, router_id, router_image_uuid=None):
|
||||
def router_rebuild(self, request, router_id, router_image_uuid=None):
|
||||
if router_image_uuid:
|
||||
path = ('/router/rebuild/{router_id}/--router_image_uuid/' +
|
||||
'{router_image_uuid}').format(
|
||||
@ -98,15 +83,15 @@ class AstaraClient(object):
|
||||
)
|
||||
else:
|
||||
path = '/router/rebuild/{router_id}/'.format(router_id=router_id)
|
||||
return _make_request(_mgt_url(self.host, self.port, path))
|
||||
return self._make_request(request, path)
|
||||
|
||||
def tenant_debug(self, tenant_id):
|
||||
def tenant_debug(self, request, tenant_id):
|
||||
path = '/tenant/debug/{tenant_id}'.format(tenant_id=tenant_id)
|
||||
return _make_request(_mgt_url(self.host, self.port, path))
|
||||
return self._make_request(request, path)
|
||||
|
||||
def tenant_manage(self, tenant_id):
|
||||
def tenant_manage(self, request, tenant_id):
|
||||
path = '/tenant/manage/{tenant_id}'.format(tenant_id=tenant_id)
|
||||
return _make_request(_mgt_url(self.host, self.port, path))
|
||||
return self._make_request(request, path)
|
||||
|
||||
def get_routers(self, request, **search_opts):
|
||||
page_size = utils.get_page_size(request)
|
||||
|
@ -35,7 +35,7 @@ def _image_choice_title(img):
|
||||
class PollForm(forms.SelfHandlingForm):
|
||||
def handle(self, request, data):
|
||||
try:
|
||||
rc.poll()
|
||||
rc.poll(request)
|
||||
messages.success(request, _('Routers were polled'))
|
||||
except Exception:
|
||||
exceptions.handle(request, _('Unable to poll routers.'))
|
||||
@ -69,9 +69,9 @@ class RebuildForm(forms.SelfHandlingForm):
|
||||
def handle(self, request, data):
|
||||
try:
|
||||
if data['image']:
|
||||
rc.router_rebuild(data['router_id'], data['image'])
|
||||
rc.router_rebuild(request, data['router_id'], data['image'])
|
||||
else:
|
||||
rc.router_rebuild(data['router_id'])
|
||||
rc.router_rebuild(request, data['router_id'])
|
||||
messages.success(request,
|
||||
_('Rebuilt Router: %s.') % data['router_name'])
|
||||
except Exception:
|
||||
|
@ -50,7 +50,7 @@ class ManageAction(tables.BatchAction):
|
||||
|
||||
def action(self, request, obj_id):
|
||||
try:
|
||||
rc.router_manage(obj_id)
|
||||
rc.router_manage(request, obj_id)
|
||||
except Exception:
|
||||
msg = _('Failed to manage route %s') % obj_id
|
||||
exceptions.handle(request, msg)
|
||||
@ -82,7 +82,7 @@ class DebugAction(tables.BatchAction):
|
||||
|
||||
def action(self, request, obj_id):
|
||||
try:
|
||||
rc.router_debug(obj_id)
|
||||
rc.router_debug(request, obj_id)
|
||||
except Exception:
|
||||
msg = _('Failed to manage route %s') % obj_id
|
||||
exceptions.handle(request, msg)
|
||||
@ -114,7 +114,7 @@ class UpdateAction(tables.BatchAction):
|
||||
|
||||
def action(self, request, obj_id):
|
||||
try:
|
||||
rc.router_update(obj_id)
|
||||
rc.router_update(request, obj_id)
|
||||
except Exception:
|
||||
msg = _('Failed to manage route %s') % obj_id
|
||||
exceptions.handle(request, msg)
|
||||
|
@ -63,7 +63,7 @@ class TenantManageAction(tables.BatchAction):
|
||||
|
||||
def action(self, request, obj_id):
|
||||
try:
|
||||
rc.tenant_manage(obj_id)
|
||||
rc.tenant_manage(request, obj_id)
|
||||
except Exception:
|
||||
msg = _('Failed to manage route %s') % obj_id
|
||||
exceptions.handle(request, msg)
|
||||
@ -95,7 +95,7 @@ class TenantDebugAction(tables.BatchAction):
|
||||
|
||||
def action(self, request, obj_id):
|
||||
try:
|
||||
rc.tenant_debug(obj_id)
|
||||
rc.tenant_debug(request, obj_id)
|
||||
except Exception:
|
||||
msg = _('Failed to manage route %s') % obj_id
|
||||
exceptions.handle(request, msg)
|
||||
@ -143,7 +143,7 @@ class RouterManageAction(tables.BatchAction):
|
||||
|
||||
def action(self, request, obj_id):
|
||||
try:
|
||||
rc.router_manage(obj_id)
|
||||
rc.router_manage(request, obj_id)
|
||||
except Exception:
|
||||
msg = _('Failed to manage route %s') % obj_id
|
||||
exceptions.handle(request, msg)
|
||||
@ -175,7 +175,7 @@ class RouterDebugAction(tables.BatchAction):
|
||||
|
||||
def action(self, request, obj_id):
|
||||
try:
|
||||
rc.router_debug(obj_id)
|
||||
rc.router_debug(request, obj_id)
|
||||
except Exception:
|
||||
msg = _('Failed to manage route %s') % obj_id
|
||||
exceptions.handle(request, msg)
|
||||
@ -207,7 +207,7 @@ class RouterUpdateAction(tables.BatchAction):
|
||||
|
||||
def action(self, request, obj_id):
|
||||
try:
|
||||
rc.router_update(obj_id)
|
||||
rc.router_update(request, obj_id)
|
||||
except Exception:
|
||||
msg = _('Failed to manage route %s') % obj_id
|
||||
exceptions.handle(request, msg)
|
||||
|
Loading…
Reference in New Issue
Block a user