def update_controller_ip_port_list(): """Load state from Neutron and update ``controller-ip-port-list``.""" identity_service = reactive.endpoint_from_flag( 'identity-service.available') leader_ip_list = leadership.leader_get('controller-ip-port-list') or [] try: neutron_ip_list = sorted(api_crud.get_port_ips(identity_service)) except api_crud.APIUnavailable as e: ch_core.hookenv.log('Neutron API not available yet, deferring ' 'port discovery. ("{}")'.format(e), level=ch_core.hookenv.DEBUG) return if neutron_ip_list != sorted(leader_ip_list): leadership.leader_set( {'controller-ip-port-list': json.dumps(neutron_ip_list)})
def test_get_port_ips(self): self.patch_object(api_crud, 'session_from_identity_service') self.patch_object(api_crud, 'init_neutron_client') nc = mock.MagicMock() self.init_neutron_client.return_value = nc nc.list_ports.return_value = { 'ports': [ { 'fixed_ips': [{ 'ip_address': '2001:db8:42::42' }] }, { 'fixed_ips': [{ 'ip_address': '2001:db8:42::51' }] }, ], } identity_service = mock.MagicMock() self.assertEquals(api_crud.get_port_ips(identity_service), ['2001:db8:42::42', '2001:db8:42::51']) self.init_neutron_client.assert_called_once_with( self.session_from_identity_service())