From f44671ca0ef4db010ff7e3ba01438fa82b90669f Mon Sep 17 00:00:00 2001 From: Justin Pomeroy Date: Fri, 4 Mar 2016 18:15:22 -0600 Subject: [PATCH] Handle missing key-manager service in workflow This updates the LBaaS v2 workflow so that it does not trip over itself if the key-manager service is not available. It will also ignore servers (available members) that are in a state where they do not have any IP addresses. Partially-Implements: blueprint horizon-lbaas-v2-ui Change-Id: Ia3373653f651e273d021ffedf9c2909810e9ecb9 --- .../project/lbaasv2/workflow/model.service.js | 19 ++++++++++++------- .../lbaasv2/workflow/model.service.spec.js | 5 +++-- 2 files changed, 15 insertions(+), 9 deletions(-) diff --git a/neutron_lbaas_dashboard/static/dashboard/project/lbaasv2/workflow/model.service.js b/neutron_lbaas_dashboard/static/dashboard/project/lbaasv2/workflow/model.service.js index 77a00cf3..fc33ea37 100644 --- a/neutron_lbaas_dashboard/static/dashboard/project/lbaasv2/workflow/model.service.js +++ b/neutron_lbaas_dashboard/static/dashboard/project/lbaasv2/workflow/model.service.js @@ -190,7 +190,9 @@ neutronAPI.getSubnets().then(onGetSubnets), neutronAPI.getPorts().then(onGetPorts), novaAPI.getServers().then(onGetServers), - keymanagerPromise.then(prepareCertificates) + // The noop errback prevents this from tripping up $q.all since this is a case + // where we don't care if it fails, i.e. key-manager service doesn't exist. + keymanagerPromise.then(prepareCertificates, angular.noop) ]).then(initMemberAddresses); model.context.submit = createLoadBalancer; break; @@ -200,7 +202,7 @@ neutronAPI.getSubnets().then(onGetSubnets), neutronAPI.getPorts().then(onGetPorts), novaAPI.getServers().then(onGetServers), - keymanagerPromise.then(prepareCertificates) + keymanagerPromise.then(prepareCertificates, angular.noop) ]).then(initMemberAddresses); model.context.submit = createListener; break; @@ -419,11 +421,14 @@ model.members.length = 0; var members = []; angular.forEach(response.data.items, function addMember(server) { - members.push({ - id: server.id, - name: server.name, - weight: 1 - }); + // If the server is in a state where it does not have an IP address then we can't use it + if (server.addresses && !angular.equals({}, server.addresses)) { + members.push({ + id: server.id, + name: server.name, + weight: 1 + }); + } }); push.apply(model.members, members); } diff --git a/neutron_lbaas_dashboard/static/dashboard/project/lbaasv2/workflow/model.service.spec.js b/neutron_lbaas_dashboard/static/dashboard/project/lbaasv2/workflow/model.service.spec.js index 2e2b80cb..9dcec7b7 100644 --- a/neutron_lbaas_dashboard/static/dashboard/project/lbaasv2/workflow/model.service.spec.js +++ b/neutron_lbaas_dashboard/static/dashboard/project/lbaasv2/workflow/model.service.spec.js @@ -258,8 +258,9 @@ $provide.value('horizon.app.core.openstack-service-api.nova', { getServers: function() { - var servers = [ { id: '1', name: 'server-1' }, - { id: '2', name: 'server-2' } ]; + var servers = [ { id: '1', name: 'server-1', addresses: { foo: 'bar' } }, + { id: '2', name: 'server-2', addresses: { foo: 'bar' } }, + { id: '3', name: 'server-3' }]; var deferred = $q.defer(); deferred.resolve({ data: { items: servers } });