diff --git a/requirements.txt b/requirements.txt index 51340da6e..c36aff235 100644 --- a/requirements.txt +++ b/requirements.txt @@ -7,6 +7,7 @@ oslo.config>=5.2.0 # Apache-2.0 keystoneauth1>=3.4.0 # Apache-2.0 python-novaclient>=9.1.0 # Apache-2.0 python-heatclient>=1.10.0 # Apache-2.0 +python-glanceclient>=2.9.1 # Apache-2.0 python-ironicclient>=2.3.0 # Apache-2.0 os-net-config>=7.1.0 # Apache-2.0 six>=1.10.0 # MIT diff --git a/scripts/tripleo-ansible-inventory b/scripts/tripleo-ansible-inventory index eb5fe85e6..29002271a 100755 --- a/scripts/tripleo-ansible-inventory +++ b/scripts/tripleo-ansible-inventory @@ -26,12 +26,11 @@ import sys import json import traceback -from heatclient import client as heat_client from oslo_config import cfg from six.moves import configparser from tripleo_common.inventory import TripleoInventory -from tripleo_validations.utils import get_auth_session +from tripleo_validations import utils opts = [ @@ -121,16 +120,18 @@ def write_static_inventory(inventory_file_path, inventory): def main(): configs = _parse_config() - session = get_auth_session(configs.auth_url, - configs.username, - configs.project_name, - configs.password, - configs.auth_token, - configs.cacert) - hclient = heat_client.Client('1', session=session) + auth_variables = { + 'auth_url': configs.auth_url, + 'username': configs.username, + 'project_name': configs.project_name, + 'os_auth_token': configs.auth_token, + 'password': configs.password, + 'cacert': configs.cacert + } + inventory = TripleoInventory( - session=session, - hclient=hclient, + session=utils.get_auth_session(auth_variables), + hclient=utils.get_heat_client(auth_variables), auth_url=configs.auth_url, cacert=configs.cacert, project_name=configs.project_name, diff --git a/tripleo_validations/utils.py b/tripleo_validations/utils.py index 14a552986..787950b19 100644 --- a/tripleo_validations/utils.py +++ b/tripleo_validations/utils.py @@ -20,14 +20,23 @@ from six import string_types import collections +from glanceclient import client as glance_client +from heatclient import client as heat_client +from ironicclient import client as ironic_client from keystoneauth1.identity import generic as ks_id -from keystoneauth1 import session +from keystoneauth1 import session as ks_session from novaclient import client as nova_client from swiftclient.client import Connection -def get_auth_session(auth_url, username, project_name, password=None, - auth_token=None, cacert=None): +def get_auth_session(auth_variables): + auth_url = auth_variables.get('auth_url') + username = auth_variables.get('username') + project_name = auth_variables.get('project_name') + auth_token = auth_variables.get('os_auth_token') + password = auth_variables.get('password') + cacert = auth_variables.get('cacert') + if auth_token: auth = ks_id.Token(auth_url=auth_url, token=auth_token, @@ -40,26 +49,38 @@ def get_auth_session(auth_url, username, project_name, password=None, project_name=project_name, user_domain_id='default', project_domain_id='default') - return session.Session(auth=auth, verify=cacert) + return ks_session.Session(auth=auth, verify=cacert) -def get_swift_client(preauthurl, preauthtoken): - return Connection(preauthurl=preauthurl, - preauthtoken=preauthtoken, +def get_swift_client(auth_variables): + return Connection(preauthurl=auth_variables.get('undercloud_swift_url'), + preauthtoken=auth_variables.get('os_auth_token'), retries=10, starting_backoff=3, max_backoff=120) def get_nova_client(auth_variables): - auth_url = auth_variables.get('auth_url') - username = auth_variables.get('username') - project_name = auth_variables.get('project_name') - token = auth_variables.get('os_auth_token') - session = get_auth_session(auth_url, username, project_name, - auth_token=token) + return nova_client.Client(2, session=get_auth_session(auth_variables)) - return nova_client.Client(2, session=session) + +def get_glance_client(auth_variables): + return glance_client.Client(2, session=get_auth_session(auth_variables)) + + +def get_heat_client(auth_variables): + return heat_client.Client('1', session=get_auth_session(auth_variables)) + + +def get_ironic_client(auth_variables): + session = get_auth_session(auth_variables) + ironic_url = session.get_endpoint(service_type='baremetal', + interface='public') + return ironic_client.get_client( + 1, + ironic_url=ironic_url, + os_auth_token=auth_variables.get('os_auth_token') + ) def filtered(obj): diff --git a/validations/lookup_plugins/glance_images.py b/validations/lookup_plugins/glance_images.py index d5f97e2ec..0160c820f 100644 --- a/validations/lookup_plugins/glance_images.py +++ b/validations/lookup_plugins/glance_images.py @@ -16,10 +16,10 @@ # under the License. from ansible.plugins.lookup import LookupBase -from glanceclient import client as glance_client + from glanceclient.exc import HTTPNotFound -from tripleo_validations.utils import get_auth_session +from tripleo_validations import utils DOCUMENTATION = """ @@ -57,13 +57,7 @@ class LookupModule(LookupBase): def run(self, terms, variables=None, **kwargs): """Returns server information from nova.""" - auth_url = variables.get('auth_url') - username = variables.get('username') - project_name = variables.get('project_name') - token = variables.get('os_auth_token') - session = get_auth_session(auth_url, username, project_name, - auth_token=token) - glance = glance_client.Client(2, session=session) + glance = utils.get_glance_client(variables) images = [] if len(terms) > 0: diff --git a/validations/lookup_plugins/introspection_data.py b/validations/lookup_plugins/introspection_data.py index e0f78a2dc..0cd0a8cfa 100644 --- a/validations/lookup_plugins/introspection_data.py +++ b/validations/lookup_plugins/introspection_data.py @@ -17,8 +17,7 @@ from ansible.plugins.lookup import LookupBase -from swiftclient.client import Connection -from tripleo_validations.utils import get_auth_session +from tripleo_validations import utils class LookupModule(LookupBase): @@ -32,18 +31,13 @@ class LookupModule(LookupBase): """ ret = [] - session = get_auth_session(kwargs.get('auth_url'), - "ironic", - "service", - kwargs.get('password')) - - swift_client = Connection(session=session) - container = swift_client.get_container("ironic-inspector") + swift = utils.get_swift_client(variables) + container = swift.get_container("ironic-inspector") for item in container[1]: if item['name'].startswith('inspector_data') and \ not item['name'].endswith("UNPROCESSED"): - obj = swift_client.get_object("ironic-inspector", item['name']) + obj = swift.get_object("ironic-inspector", item['name']) ret.append((item['name'], obj)) return ret diff --git a/validations/lookup_plugins/ironic_nodes.py b/validations/lookup_plugins/ironic_nodes.py index ac0ed7683..96362bfd0 100644 --- a/validations/lookup_plugins/ironic_nodes.py +++ b/validations/lookup_plugins/ironic_nodes.py @@ -66,7 +66,6 @@ _raw: """ from ansible.plugins.lookup import LookupBase -from ironicclient import client as ironic_client from tripleo_validations import utils @@ -75,16 +74,7 @@ class LookupModule(LookupBase): def run(self, terms, variables=None, **kwargs): """Returns node information from ironic.""" - auth_url = variables.get('auth_url') - username = variables.get('username') - project_name = variables.get('project_name') - token = variables.get('os_auth_token') - session = utils.get_auth_session(auth_url, username, project_name, - auth_token=token) - ironic_url = session.get_endpoint(service_type='baremetal', - interface='public') - ironic = ironic_client.get_client(1, ironic_url=ironic_url, - os_auth_token=token) + ironic = utils.get_ironic_client(variables) if len(terms) > 0: if terms[0] == 'id': diff --git a/validations/lookup_plugins/nova_flavors.py b/validations/lookup_plugins/nova_flavors.py index 4b68da854..86a1aebc8 100644 --- a/validations/lookup_plugins/nova_flavors.py +++ b/validations/lookup_plugins/nova_flavors.py @@ -16,9 +16,8 @@ # under the License. from ansible.plugins.lookup import LookupBase -from novaclient import client as nova_client -from tripleo_validations.utils import get_auth_session +from tripleo_validations import utils DOCUMENTATION = """ @@ -46,15 +45,7 @@ class LookupModule(LookupBase): def run(self, terms, variables=None, **kwargs): """Returns server information from nova.""" - auth_url = variables.get('auth_url') - username = variables.get('username') - project_name = variables.get('project_name') - token = variables.get('os_auth_token') - session = get_auth_session(auth_url, username, project_name, - auth_token=token) - nova = nova_client.Client(2, session=session) - + nova = utils.get_nova_client(variables) flavors = nova.flavors.list() - return {f.name: {'name': f.name, 'keys': f.get_keys()} for f in flavors} diff --git a/validations/lookup_plugins/nova_hypervisor_statistics.py b/validations/lookup_plugins/nova_hypervisor_statistics.py index c83d11716..6f2e3e774 100644 --- a/validations/lookup_plugins/nova_hypervisor_statistics.py +++ b/validations/lookup_plugins/nova_hypervisor_statistics.py @@ -46,7 +46,5 @@ class LookupModule(LookupBase): def run(self, terms, variables=None, **kwargs): """Returns server information from nova.""" nova = utils.get_nova_client(variables) - statistics = nova.hypervisor_stats.statistics() - return utils.filtered(statistics) diff --git a/validations/lookup_plugins/nova_servers.py b/validations/lookup_plugins/nova_servers.py index 5e4f87b26..31507d9f1 100644 --- a/validations/lookup_plugins/nova_servers.py +++ b/validations/lookup_plugins/nova_servers.py @@ -52,7 +52,6 @@ _raw: """ from ansible.plugins.lookup import LookupBase -from novaclient import client as nova_client from novaclient.exceptions import NotFound from tripleo_validations import utils @@ -62,13 +61,7 @@ class LookupModule(LookupBase): def run(self, terms, variables=None, **kwargs): """Returns server information from nova.""" - auth_url = variables.get('auth_url') - username = variables.get('username') - project_name = variables.get('project_name') - token = variables.get('os_auth_token') - session = utils.get_auth_session(auth_url, username, project_name, - auth_token=token) - nova = nova_client.Client(2, session=session) + nova = utils.get_nova_client(variables) servers = [] if len(terms) > 0: diff --git a/validations/lookup_plugins/roles_info.py b/validations/lookup_plugins/roles_info.py index 50abb9e6c..8a3acd455 100644 --- a/validations/lookup_plugins/roles_info.py +++ b/validations/lookup_plugins/roles_info.py @@ -19,7 +19,7 @@ import yaml from ansible.plugins.lookup import LookupBase -from tripleo_validations.utils import get_swift_client +from tripleo_validations import utils DOCUMENTATION = """ @@ -54,16 +54,10 @@ class LookupModule(LookupBase): def run(self, terms, variables=None, **kwargs): """Returns server information from nova.""" - swiftclient = get_swift_client(variables['undercloud_swift_url'], - variables['os_auth_token']) - + swift = utils.get_swift_client(variables) plan = variables.get('plan') - - plan_env = self._get_object_yaml( - swiftclient, plan, 'plan-environment.yaml') - - roles_data = self._get_object_yaml( - swiftclient, plan, 'roles_data.yaml') + plan_env = self._get_object_yaml(swift, plan, 'plan-environment.yaml') + roles_data = self._get_object_yaml(swift, plan, 'roles_data.yaml') def default_role_data(role): return { diff --git a/validations/lookup_plugins/stack_resources.py b/validations/lookup_plugins/stack_resources.py index 813b77ca6..9f26fa95f 100644 --- a/validations/lookup_plugins/stack_resources.py +++ b/validations/lookup_plugins/stack_resources.py @@ -17,9 +17,9 @@ from ansible.plugins.lookup import LookupBase -from heatclient import client as heat_client -from tripleo_validations.utils import get_auth_session + +from tripleo_validations import utils class LookupModule(LookupBase): @@ -30,14 +30,8 @@ class LookupModule(LookupBase): :return: A list of dicts """ ret = [] - session = get_auth_session(variables['auth_url'], - variables['username'], - variables['project_name'], - auth_token=variables['os_auth_token'], - cacert=variables['cacert']) - - hclient = heat_client.Client('1', session=session) - resource_list = hclient.resources.list(variables['plan']) + heat = utils.get_heat_client(variables) + resource_list = heat.resources.list(variables['plan']) for resource in resource_list: ret.append(dict( resource_name=resource.resource_name, diff --git a/validations/lookup_plugins/tht.py b/validations/lookup_plugins/tht.py index 5a6204532..845c9f30f 100644 --- a/validations/lookup_plugins/tht.py +++ b/validations/lookup_plugins/tht.py @@ -19,7 +19,7 @@ import os from ansible.plugins.lookup import LookupBase -from tripleo_validations.utils import get_swift_client +from tripleo_validations import utils EXCLUDED_EXT = ( @@ -37,11 +37,10 @@ class LookupModule(LookupBase): containing the template path and the template content. """ ret = [] - swift_client = get_swift_client(variables['undercloud_swift_url'], - variables['os_auth_token']) - container = swift_client.get_container(variables['plan']) + swift = utils.get_swift_client(variables) + container = swift.get_container(variables['plan']) for item in container[1]: - obj = swift_client.get_object(variables['plan'], item['name']) + obj = swift.get_object(variables['plan'], item['name']) if os.path.splitext(item['name'])[-1] not in EXCLUDED_EXT: ret.append((item['name'], obj))