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 + + This option create a Prometheus listerner for you. + +

diff --git a/octavia_dashboard/static/dashboard/project/lbaasv2/workflow/loadbalancer/loadbalancer.html b/octavia_dashboard/static/dashboard/project/lbaasv2/workflow/loadbalancer/loadbalancer.html index a364ea70..e8a3a024 100644 --- a/octavia_dashboard/static/dashboard/project/lbaasv2/workflow/loadbalancer/loadbalancer.html +++ b/octavia_dashboard/static/dashboard/project/lbaasv2/workflow/loadbalancer/loadbalancer.html @@ -117,6 +117,30 @@ +
+
+ +
+
+ +
+
+
+
+ + +
+
+
+ + +
+
diff --git a/octavia_dashboard/static/dashboard/project/lbaasv2/workflow/model.service.js b/octavia_dashboard/static/dashboard/project/lbaasv2/workflow/model.service.js index bd97cfd6..8b05e614 100644 --- a/octavia_dashboard/static/dashboard/project/lbaasv2/workflow/model.service.js +++ b/octavia_dashboard/static/dashboard/project/lbaasv2/workflow/model.service.js @@ -86,7 +86,7 @@ members: [], networks: {}, flavors: {}, - listenerProtocols: ['HTTP', 'TCP', 'TERMINATED_HTTPS', 'HTTPS', 'UDP', 'SCTP'], + listenerProtocols: ['HTTP', 'TCP', 'TERMINATED_HTTPS', 'HTTPS', 'UDP', 'SCTP', 'PROMETHEUS'], availability_zones: {}, l7policyActions: ['REJECT', 'REDIRECT_TO_URL', 'REDIRECT_TO_POOL'], l7ruleTypes: ['HOST_NAME', 'PATH', 'FILE_TYPE', 'HEADER', 'COOKIE'], @@ -156,7 +156,9 @@ vip_subnet_id: null, flavor_id: null, availability_zone: null, - admin_state_up: true + admin_state_up: true, + prometheus: false, + prometheus_port: null, }, listener: { id: null, diff --git a/octavia_dashboard/static/dashboard/project/lbaasv2/workflow/model.service.spec.js b/octavia_dashboard/static/dashboard/project/lbaasv2/workflow/model.service.spec.js index a0e2a8b3..7b0bb3b0 100644 --- a/octavia_dashboard/static/dashboard/project/lbaasv2/workflow/model.service.spec.js +++ b/octavia_dashboard/static/dashboard/project/lbaasv2/workflow/model.service.spec.js @@ -495,7 +495,7 @@ it('has array of listener protocols', function() { expect(model.listenerProtocols).toEqual(['HTTP', 'TCP', 'TERMINATED_HTTPS', 'HTTPS', - 'UDP', 'SCTP']); + 'UDP', 'SCTP', 'PROMETHEUS']); }); it('has array of pool lb_algorithms', function() { @@ -866,8 +866,9 @@ }); it('should initialize listener protocols', function() { - expect(model.listenerProtocols.length).toBe(6); + expect(model.listenerProtocols.length).toBe(7); expect(model.listenerProtocols.indexOf('TERMINATED_HTTPS')).toBe(2); + expect(model.listenerProtocols.indexOf('PROMETHEUS')).toBe(6); }); }); @@ -917,7 +918,7 @@ }); it('should initialize listener protocols', function() { - expect(model.listenerProtocols.length).toBe(5); + expect(model.listenerProtocols.length).toBe(6); expect(model.listenerProtocols.indexOf('TERMINATED_HTTPS')).toBe(-1); }); }); @@ -1358,7 +1359,7 @@ // to implement tests for them. it('has the right number of properties', function() { expect(Object.keys(model.spec).length).toBe(11); - expect(Object.keys(model.spec.loadbalancer).length).toBe(7); + expect(Object.keys(model.spec.loadbalancer).length).toBe(9); expect(Object.keys(model.spec.listener).length).toBe(16); expect(Object.keys(model.spec.l7policy).length).toBe(8); expect(Object.keys(model.spec.l7rule).length).toBe(7); diff --git a/releasenotes/notes/add-ability-to-create-Prometheus-listener-42c22822637119ca.yaml b/releasenotes/notes/add-ability-to-create-Prometheus-listener-42c22822637119ca.yaml new file mode 100644 index 00000000..8e41de8d --- /dev/null +++ b/releasenotes/notes/add-ability-to-create-Prometheus-listener-42c22822637119ca.yaml @@ -0,0 +1,4 @@ +--- +features: + - | + Add the ability to create a Prometheus listener. \ No newline at end of file