diff --git a/requirements.txt b/requirements.txt index 9deb54a..b93a3e3 100644 --- a/requirements.txt +++ b/requirements.txt @@ -27,6 +27,7 @@ python-heatclient python-keystoneclient python-neutronclient python-novaclient +python-octaviaclient python-swiftclient tenacity distro-info diff --git a/setup.py b/setup.py index 97b1fdf..8b96bf7 100644 --- a/setup.py +++ b/setup.py @@ -38,6 +38,7 @@ install_require = [ 'python-keystoneclient', 'python-novaclient', 'python-neutronclient', + 'python-octaviaclient', 'python-cinderclient', ] diff --git a/zaza/utilities/openstack.py b/zaza/utilities/openstack.py index fdf3c1e..ddefcaa 100644 --- a/zaza/utilities/openstack.py +++ b/zaza/utilities/openstack.py @@ -37,6 +37,7 @@ import zaza.utilities.cert as cert from novaclient import client as novaclient_client from neutronclient.v2_0 import client as neutronclient from neutronclient.common import exceptions as neutronexceptions +from octaviaclient.api.v2 import octavia as octaviaclient import io import juju_wait @@ -200,6 +201,31 @@ def get_neutron_session_client(session): return neutronclient.Client(session=session) +def get_octavia_session_client(session, service_type='load-balancer', + interface='internal'): + """Return neutronclient authenticated by keystone session. + + :param session: Keystone session object + :type session: keystoneauth1.session.Session object + :param service_type: Service type to look for in catalog + :type service_type: str + :param interface: Interface to look for in catalog + :type interface: str + :returns: Authenticated octaviaclient + :rtype: octaviaclient.OctaviaAPI object + """ + keystone_client = get_keystone_session_client(session) + lbaas_service = keystone_client.services.list(type=service_type) + for service in lbaas_service: + lbaas_endpoint = keystone_client.endpoints.list(service=service, + interface='internal') + for endpoint in lbaas_endpoint: + break + return octaviaclient.OctaviaAPI(session=session, + service_type=service_type, + endpoint=endpoint.url) + + def get_cinder_session_client(session): """Return cinderclient authenticated by keystone session.