Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
Size: Mime:
#!/usr/bin/python
# -*- coding: utf-8 -*-

import json
import traceback
import requests
import ssl

from ansible.module_utils.basic import AnsibleModule

from keystoneauth1 import session
from keystoneclient import client
from keystoneauth1.identity import v3


DOCUMENTATION = '''
---
module: trilio_os_user_facts
short_description: Returns user info
options:
  auth_url:
    description:
        - keystone endpoint
    required: yes
  username:
    description:
        - keystone user name
    required: yes
  password:
    description:
        - keystone user password
    required: yes
  domain_id:
    description:
        - keystone domain id that user belongs to
    required: no
    default: default
  name:
    description:
        - name of the user to be created/deleted
    required: yes
requirements: [ python-keystoneclient ]
author: Abhijeet Patra
'''

EXAMPLES = '''
examples:
trilio_os_user_facts:
    auth_url: http://192.182.0.1:5000/v3
    username: admin
    password: password
    domain_id: default
    name: triliovault
'''


def _validate_keystone_client_and_version(auth_url, username, password,
                                          domain_id, endpoint_type,
                                          insecure, cacert, default_project):
    auth = v3.Password(auth_url=auth_url,
                       username=username,
                       password=password,
                       user_domain_id=domain_id,
                       project_id=default_project)
    sess = session.Session(auth=auth, verify=cacert)
    keystone = client.Client(session=sess,
                             auth_url=auth_url,
                             interface=endpoint_type,
                             insecure=insecure,
                             cacert=cacert)
    domains = keystone.domains.list()
    return (keystone, domains)


def authenticate(keystone_auth_url, username, password, domain_id,
                 endpoint_type, verify, cacert, default_project):
    """Return a keystone client object"""
    insecure = not verify
    keystone, domains = _validate_keystone_client_and_version(
        keystone_auth_url, username, password, domain_id,
        endpoint_type, insecure, cacert, default_project)

    return (keystone, domains)


def get_users(keystone, domains, user_name):
    """ Retrieve list of user details from each domain"""
    users = {
                'openstack_users': []
            }

    for domain in domains:
        try:
            os_users = keystone.users.list(domain=domain, name=user_name)
            for u in os_users:
                tmpusr = {
                    'domain_id': u.domain_id,
                    'id': u.id,
                    'name': u.name
                }
                users['openstack_users'].append(tmpusr)
        except Exception:
            continue

    return users


def dispatch(keystone, domains, user_name):
    return dict(changed=False,
                ansible_facts=get_users(keystone, domains, user_name))


def main():
    module = AnsibleModule(
        argument_spec=dict(
            auth_url=dict(required=False,
                          default="http://127.0.0.1:5000/v3",
                          aliases=['auth_url']),
            username=dict(required=False),
            password=dict(required=False, no_log=True),
            domain_id=dict(required=False, default='default'),
            verify =dict(required=False, default=True, type='bool',
                          aliases=['validate_certs']),
            cacert=dict(required=False,
                        default='/etc/workloadmgr/ca-chain.pem'),
            name = dict(required=False, default=None),
            endpoint_type = dict(default='public',
                                 choices=["admin", "internal", "public"]),
            default_project=dict(required=False, default='default'),
        ),
    )

    auth_url = module.params['auth_url']
    username = module.params['username']
    password = module.params['password']
    domain_id = module.params['domain_id']
    user_name = module.params['name']
    verify = module.boolean(module.params['verify'])
    cacert = module.params['cacert']
    endpoint_type = module.params['endpoint_type']
    default_project = module.params['default_project']

    keystone, domains = authenticate(auth_url, username, password, domain_id,
                                     endpoint_type, verify,
                                     cacert, default_project)

    try:
        d = dispatch(keystone, domains, user_name)
    except Exception:
        module.fail_json(msg=traceback.format_exc())
    else:
        module.exit_json(**d)


# this is magic, see lib/ansible/module_common.py
# <<INCLUDE_ANSIBLE_MODULE_COMMON>>
if __name__ == '__main__':
    main()