diff --git a/octavia_dashboard/api/rest/lbaasv2.py b/octavia_dashboard/api/rest/lbaasv2.py
index e0f7ae8c..6200ac2b 100644
--- a/octavia_dashboard/api/rest/lbaasv2.py
+++ b/octavia_dashboard/api/rest/lbaasv2.py
@@ -169,7 +169,8 @@ def create_listener(request, **kwargs):
connection_limit=data['listener'].get('connection_limit'),
default_tls_container_ref=default_tls_ref,
sni_container_refs=None,
- admin_state_up=data['listener'].get('admin_state_up')
+ admin_state_up=data['listener'].get('admin_state_up'),
+ insert_headers=data['listener'].get('insert_headers'),
)
if data.get('pool'):
@@ -394,6 +395,7 @@ def update_listener(request, **kwargs):
connection_limit=data['listener'].get('connection_limit'),
admin_state_up=data['listener'].get('admin_state_up'),
default_pool_id=default_pool_id,
+ insert_headers=data['listener'].get('insert_headers'),
)
if data.get('pool'):
diff --git a/octavia_dashboard/static/dashboard/project/lbaasv2/listeners/details/detail.html b/octavia_dashboard/static/dashboard/project/lbaasv2/listeners/details/detail.html
index f810dde1..1c09cc59 100644
--- a/octavia_dashboard/static/dashboard/project/lbaasv2/listeners/details/detail.html
+++ b/octavia_dashboard/static/dashboard/project/lbaasv2/listeners/details/detail.html
@@ -51,7 +51,7 @@
item="ctrl.listener"
property-groups="[[
'id', 'name', 'description', 'project_id', 'created_at', 'updated_at',
- 'connection_limit', 'default_pool_id']]">
+ 'connection_limit', 'insert_headers', 'default_pool_id']]">
diff --git a/octavia_dashboard/static/dashboard/project/lbaasv2/listeners/details/drawer.html b/octavia_dashboard/static/dashboard/project/lbaasv2/listeners/details/drawer.html
index cec0fec1..faf42c80 100644
--- a/octavia_dashboard/static/dashboard/project/lbaasv2/listeners/details/drawer.html
+++ b/octavia_dashboard/static/dashboard/project/lbaasv2/listeners/details/drawer.html
@@ -5,5 +5,5 @@
['name', 'id', 'project_id'],
['created_at', 'updated_at', 'description'],
['protocol', 'protocol_port', 'connection_limit'],
- ['default_pool_id']]">
+ ['insert_headers', 'default_pool_id']]">
diff --git a/octavia_dashboard/static/dashboard/project/lbaasv2/listeners/listeners.module.js b/octavia_dashboard/static/dashboard/project/lbaasv2/listeners/listeners.module.js
index 07515593..6ff8fd77 100644
--- a/octavia_dashboard/static/dashboard/project/lbaasv2/listeners/listeners.module.js
+++ b/octavia_dashboard/static/dashboard/project/lbaasv2/listeners/listeners.module.js
@@ -170,7 +170,13 @@
filters: ['noName']
},
l7_policies: gettext('L7 Policies'),
- insert_headers: gettext('Insert Headers'),
+ insert_headers: {
+ label: gettext('Insert Headers'),
+ filters: [
+ 'json',
+ loadBalancerService.nullFilter
+ ]
+ },
load_balancers: gettext('Load Balancers')
};
}
diff --git a/octavia_dashboard/static/dashboard/project/lbaasv2/workflow/listener/listener.help.html b/octavia_dashboard/static/dashboard/project/lbaasv2/workflow/listener/listener.help.html
index d8ae8d79..e28699b2 100644
--- a/octavia_dashboard/static/dashboard/project/lbaasv2/workflow/listener/listener.help.html
+++ b/octavia_dashboard/static/dashboard/project/lbaasv2/workflow/listener/listener.help.html
@@ -30,3 +30,10 @@
The ID of the pool used by the listener if no L7 policies match.
+
+ Insert Headers:
+
+ Additional headers insertion into HTTP header,
+ only "X-Forwarded-For" and "X-Forwarded-Port" are supported.
+
+
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 1a26d935..31c8e317 100644
--- a/octavia_dashboard/static/dashboard/project/lbaasv2/workflow/listener/listener.html
+++ b/octavia_dashboard/static/dashboard/project/lbaasv2/workflow/listener/listener.html
@@ -96,6 +96,42 @@
+ Insert Headers
+
+
+
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 175da853..88177699 100644
--- a/octavia_dashboard/static/dashboard/project/lbaasv2/workflow/model.service.js
+++ b/octavia_dashboard/static/dashboard/project/lbaasv2/workflow/model.service.js
@@ -152,7 +152,8 @@
connection_limit: -1,
admin_state_up: true,
default_pool: null,
- default_pool_id: null
+ default_pool_id: null,
+ insert_headers: {}
},
l7policy: {
id: null,
@@ -455,15 +456,22 @@
// Listener requires protocol and port
delete finalSpec.listener;
delete finalSpec.certificates;
- } else if (finalSpec.listener.protocol !== 'TERMINATED_HTTPS') {
- // Remove certificate containers if not using TERMINATED_HTTPS
- delete finalSpec.certificates;
} else {
- var containers = [];
- angular.forEach(finalSpec.certificates, function(cert) {
- containers.push(cert.id);
- });
- finalSpec.certificates = containers;
+ for (var header in finalSpec.listener.insert_headers) {
+ if (!finalSpec.listener.insert_headers[header]) {
+ delete finalSpec.listener.insert_headers[header];
+ }
+ }
+ if (finalSpec.listener.protocol !== 'TERMINATED_HTTPS') {
+ // Remove certificate containers if not using TERMINATED_HTTPS
+ delete finalSpec.certificates;
+ } else {
+ var containers = [];
+ angular.forEach(finalSpec.certificates, function(cert) {
+ containers.push(cert.id);
+ });
+ finalSpec.certificates = containers;
+ }
}
}
@@ -735,6 +743,7 @@
spec.connection_limit = listener.connection_limit;
spec.admin_state_up = listener.admin_state_up;
spec.default_pool_id = listener.default_pool_id;
+ spec.insert_headers = listener.insert_headers;
}
function setL7PolicySpec(l7policy) {
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 5a5c3aee..e9904bc2 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
@@ -34,7 +34,11 @@
protocol_port: 80,
connection_limit: 999,
load_balancers: [ { id: '1234' } ],
- sni_container_refs: ['container2']
+ sni_container_refs: ['container2'],
+ insert_headers: {
+ 'X-Forwarded-For': 'True',
+ 'X-Forwarded-Port': 'True'
+ }
},
pool: {
admin_state_up: true,
@@ -1173,7 +1177,7 @@
it('has the right number of properties', function() {
expect(Object.keys(model.spec).length).toBe(11);
expect(Object.keys(model.spec.loadbalancer).length).toBe(5);
- expect(Object.keys(model.spec.listener).length).toBe(9);
+ expect(Object.keys(model.spec.listener).length).toBe(10);
expect(Object.keys(model.spec.l7policy).length).toBe(8);
expect(Object.keys(model.spec.l7rule).length).toBe(7);
expect(Object.keys(model.spec.pool).length).toBe(7);
@@ -2442,6 +2446,49 @@
});
+ describe('Model visible resources (edit listener, no insert headers)', function() {
+
+ beforeEach(function() {
+ delete listenerResources.listener.insert_headers;
+ delete listenerResources.pool;
+ model.initialize('listener', '1234');
+ scope.$apply();
+ });
+
+ it('should only show listener details', function() {
+ expect(model.context.resource).toEqual('listener');
+ });
+ });
+
+ describe('Model visible resources (edit listener, no x forwared for)', function() {
+
+ beforeEach(function() {
+ listenerResources.listener.insert_headers['X-Forwarded-For'] = '';
+ delete listenerResources.pool;
+ model.initialize('listener', '1234');
+ scope.$apply();
+ });
+
+ it('should only show listener details', function() {
+ model.submit();
+ expect(model.context.resource).toEqual('listener');
+ });
+ });
+
+ describe('Model visible resources (edit listener, no x forwared port)', function() {
+
+ beforeEach(function() {
+ delete listenerResources.listener.insert_headers['X-Forwarded-Port'];
+ delete listenerResources.pool;
+ model.initialize('listener', '1234');
+ scope.$apply();
+ });
+
+ it('should only show listener details', function() {
+ expect(model.context.resource).toEqual('listener');
+ });
+ });
+
describe('Model visible resources (edit listener, no pool)', function() {
beforeEach(function() {
diff --git a/package.json b/package.json
index b31cab34..7db8375a 100644
--- a/package.json
+++ b/package.json
@@ -8,10 +8,12 @@
"OpenStack",
"octavia",
"octavia-dashboard",
- "load-balancer"],
+ "load-balancer"
+ ],
"repository": {
"type": "git",
- "url": "https://git.openstack.org/openstack/octavia-dashboard"},
+ "url": "https://git.openstack.org/openstack/octavia-dashboard"
+ },
"bugs": "https://storyboard.openstack.org/#!/project/909",
"license": "Apache 2.0",
"devDependencies": {
diff --git a/releasenotes/notes/add-insert-headers-a6fd80c837a89536.yaml b/releasenotes/notes/add-insert-headers-a6fd80c837a89536.yaml
new file mode 100644
index 00000000..17a551c5
--- /dev/null
+++ b/releasenotes/notes/add-insert-headers-a6fd80c837a89536.yaml
@@ -0,0 +1,4 @@
+---
+features:
+ - |
+ Adds the ability to set the insertion headers on listeners.