diff --git a/octavia_dashboard/api/rest/lbaasv2.py b/octavia_dashboard/api/rest/lbaasv2.py index 73ed77ea..5114f95d 100644 --- a/octavia_dashboard/api/rest/lbaasv2.py +++ b/octavia_dashboard/api/rest/lbaasv2.py @@ -258,6 +258,35 @@ def create_listener(request, **kwargs): kwargs = {'callback_kwargs': {'listener_id': listener.id}} thread.start_new_thread(poll_loadbalancer_status, args, kwargs) + try: + if data['loadbalancer'].get('prometheus'): + args = (request, kwargs['loadbalancer_id'], + create_prometheus_listener) + kwargs = {'from_state': 'PENDING_UPDATE'} + thread.start_new_thread(poll_loadbalancer_status, args, kwargs) + except (KeyError, IndexError): + pass + + return _get_sdk_object_dict(listener) + + +def create_prometheus_listener(request, **kwargs): + """Create a Prometheus listener + + """ + + data = request.DATA + + conn = _get_sdk_connection(request) + + listener = conn.load_balancer.create_listener( + protocol="PROMETHEUS", + protocol_port=data['loadbalancer'].get('prometheus_port'), + load_balancer_id=kwargs['loadbalancer_id'], + connection_limit=-1, + name="Prometheus" + ) + return _get_sdk_object_dict(listener) diff --git a/octavia_dashboard/static/dashboard/project/lbaasv2/workflow/listener/listener.controller.js b/octavia_dashboard/static/dashboard/project/lbaasv2/workflow/listener/listener.controller.js index ad219f54..8f93db8a 100644 --- a/octavia_dashboard/static/dashboard/project/lbaasv2/workflow/listener/listener.controller.js +++ b/octavia_dashboard/static/dashboard/project/lbaasv2/workflow/listener/listener.controller.js @@ -54,7 +54,8 @@ //////////// function protocolChange(protocol) { - var defaultPort = { HTTP: 80, TERMINATED_HTTPS: 443 }[protocol]; + var defaultPort = { HTTP: 80, TERMINATED_HTTPS: 443, PROMETHEUS: 9100 }[protocol]; + var nextButtonSelector = "div.modal-footer button:nth-last-of-type(2)"; while (listenerPortExists(defaultPort)) { defaultPort += 1; } @@ -65,6 +66,18 @@ member.port = { HTTP: 80, TERMINATED_HTTPS: 80 }[protocol]; }); + if (protocol === 'PROMETHEUS') { + $('#wizard-side-nav ul').children().slice(-4).hide(); + $scope.model.context.create_pool = false; + $scope.model.context.create_monitor = false; + $(nextButtonSelector).attr("disabled", ""); + } else { + $('#wizard-side-nav ul').children().slice(-4).show(); + $scope.model.context.create_pool = true; + $scope.model.context.create_monitor = true; + $(nextButtonSelector).removeAttr("disabled"); + } + if (protocol === 'TERMINATED_HTTPS') { $('#wizard-side-nav ul li:last').show(); } else { diff --git a/octavia_dashboard/static/dashboard/project/lbaasv2/workflow/listener/listener.controller.spec.js b/octavia_dashboard/static/dashboard/project/lbaasv2/workflow/listener/listener.controller.spec.js index aca2d4ab..86d451cd 100644 --- a/octavia_dashboard/static/dashboard/project/lbaasv2/workflow/listener/listener.controller.spec.js +++ b/octavia_dashboard/static/dashboard/project/lbaasv2/workflow/listener/listener.controller.spec.js @@ -68,6 +68,11 @@ expect(listener.protocol_port).toBe(443); }); + it('should update port on protocol change to PROMETHEUS', function() { + ctrl.protocolChange('PROMETHEUS'); + expect(listener.protocol_port).toBe(9100); + }); + it('should update port on protocol change to TCP', function() { ctrl.protocolChange('TCP'); expect(listener.protocol_port).toBeUndefined(); diff --git a/octavia_dashboard/static/dashboard/project/lbaasv2/workflow/listener/listener.html b/octavia_dashboard/static/dashboard/project/lbaasv2/workflow/listener/listener.html index 37de5ef3..9cfa9179 100644 --- a/octavia_dashboard/static/dashboard/project/lbaasv2/workflow/listener/listener.html +++ b/octavia_dashboard/static/dashboard/project/lbaasv2/workflow/listener/listener.html @@ -54,7 +54,7 @@ ng-change="ctrl.protocolChange(model.spec.listener.protocol)" ng-disabled="model.context.id"> + ng-disabled="(protocol==='TERMINATED_HTTPS' && model.certificatesError) || (protocol==='PROMETHEUS' && model.spec.loadbalancer.prometheus)">{$ protocol $} diff --git a/octavia_dashboard/static/dashboard/project/lbaasv2/workflow/loadbalancer/loadbalancer.help.html b/octavia_dashboard/static/dashboard/project/lbaasv2/workflow/loadbalancer/loadbalancer.help.html index 6f5d5226..03529f19 100644 --- a/octavia_dashboard/static/dashboard/project/lbaasv2/workflow/loadbalancer/loadbalancer.help.html +++ b/octavia_dashboard/static/dashboard/project/lbaasv2/workflow/loadbalancer/loadbalancer.help.html @@ -15,3 +15,9 @@ The network on which to allocate the load balancer's IP address.
+
+ Prometheus
+