Introduce separate module,state to work with v3 only

This patch introduce new keystonev3 module and state that uses
os_client_config library for authenticaion and raw client to send
requests directly to API.

Since v3 resource structure/resource relation are completely different
we introduce new pillar keystone:client:resources:v3 which will contain
all resources we manage via v3 client.

The module,state implements basic functionality to manage:
  * users
  * projects
  * services
  * endpoints
  * roles

Other resources will be added in separate patches when needed.

Bootstrap of keystone is done via bootstrap script in server.sls in
Queens as admin token is removed.

Related-Prod: PROD-19148

Change-Id: I10a7cf720955437e3757a1c9699e4a60e1327ba3
diff --git a/_modules/keystonev3/__init__.py b/_modules/keystonev3/__init__.py
new file mode 100644
index 0000000..9581cb1
--- /dev/null
+++ b/_modules/keystonev3/__init__.py
@@ -0,0 +1,88 @@
+try:
+    import os_client_config  # noqa
+    from keystoneauth1 import exceptions as ka_exceptions  # noqa
+    REQUIREMENTS_MET = True
+except ImportError:
+    REQUIREMENTS_MET = False
+
+from keystonev3 import endpoints
+from keystonev3 import roles
+from keystonev3 import services
+from keystonev3 import projects
+from keystonev3 import users
+
+endpoint_get_details = endpoints.endpoint_get_details
+endpoint_update = endpoints.endpoint_update
+endpoint_delete = endpoints.endpoint_delete
+endpoint_list = endpoints.endpoint_list
+endpoint_create = endpoints.endpoint_create
+
+role_assignment_list = roles.role_assignment_list
+role_assignment_check = roles.role_assignment_check
+role_add = roles.role_add
+role_delete = roles.role_delete
+role_get_details = roles.role_get_details
+role_update = roles.role_update
+role_delete = roles.role_delete
+role_list = roles.role_list
+role_create = roles.role_create
+
+service_get_details = services.service_get_details
+service_update = services.service_update
+service_delete = services.service_delete
+service_list = services.service_list
+service_create = services.service_create
+
+project_get_details = projects.project_get_details
+project_update = projects.project_update
+project_delete = projects.project_delete
+project_list = projects.project_list
+project_create = projects.project_create
+
+user_get_details = users.user_get_details
+user_update = users.user_update
+user_delete = users.user_delete
+user_list = users.user_list
+user_create = users.user_create
+
+
+__all__ = (
+    'endpoint_get_details',
+    'endpoint_update',
+    'endpoint_delete',
+    'endpoint_list',
+    'endpoint_create',
+    'role_assignment_list',
+    'role_assignment_check',
+    'role_add',
+    'role_delete',
+    'role_get_details',
+    'role_update',
+    'role_delete',
+    'role_list',
+    'role_create',
+    'service_get_details',
+    'service_update',
+    'service_delete',
+    'service_list',
+    'service_create',
+    'project_get_details',
+    'project_update',
+    'project_delete',
+    'project_list',
+    'project_create',
+    'user_get_details',
+    'user_update',
+    'user_delete',
+    'user_list',
+    'user_create'
+)
+
+
+def __virtual__():
+    """Only load keystonev3 if requirements are available."""
+    if REQUIREMENTS_MET:
+        return 'keystonev3'
+    else:
+        return False, ("The keystonev3 execution module cannot be loaded: "
+                       "os_client_config or keystoneauth are unavailable.")