Ejemplo n.º 1
0
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())