From 96a5739d120b6e299a481c018811ee4dce784ac3 Mon Sep 17 00:00:00 2001
From: Pierre-Yves Jourel
Date: Thu, 15 Sep 2022 19:11:43 +0000
Subject: [PATCH] Add ability to create Prometheus listener
This changes allows the user to create a Prometheus listener through Horizon.
Story 2010300
Task 46296
Change-Id: I34cd06054c9eecde8f4938786de1d52dc7c78614
---
octavia_dashboard/api/rest/lbaasv2.py | 25 +++++++++++++++++++
.../workflow/listener/listener.controller.js | 15 ++++++++++-
.../listener/listener.controller.spec.js | 5 ++++
.../lbaasv2/workflow/listener/listener.html | 2 +-
.../loadbalancer/loadbalancer.help.html | 6 +++++
.../workflow/loadbalancer/loadbalancer.html | 24 ++++++++++++++++++
.../project/lbaasv2/workflow/model.service.js | 6 +++--
.../lbaasv2/workflow/model.service.spec.js | 9 ++++---
...-Prometheus-listener-42c22822637119ca.yaml | 4 +++
9 files changed, 88 insertions(+), 8 deletions(-)
create mode 100644 releasenotes/notes/add-ability-to-create-Prometheus-listener-42c22822637119ca.yaml
diff --git a/octavia_dashboard/api/rest/lbaasv2.py b/octavia_dashboard/api/rest/lbaasv2.py
index 73ed77ea..83fca183 100644
--- a/octavia_dashboard/api/rest/lbaasv2.py
+++ b/octavia_dashboard/api/rest/lbaasv2.py
@@ -216,6 +216,11 @@ def create_loadbalancer(request):
kwargs = {'from_state': 'PENDING_CREATE'}
thread.start_new_thread(poll_loadbalancer_status, args, kwargs)
+ if data['loadbalancer'].get('prometheus'):
+ args = (request, loadbalancer.id, create_prometheus_listener)
+ kwargs = {'from_state': 'PENDING_CREATE'}
+ thread.start_new_thread(poll_loadbalancer_status, args, kwargs)
+
return _get_sdk_object_dict(loadbalancer)
@@ -261,6 +266,26 @@ def create_listener(request, **kwargs):
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)
+
+
def create_l7_policy(request, **kwargs):
"""Create a new l7 policy.
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..722e3a16 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