212 lines
7.8 KiB
Python
212 lines
7.8 KiB
Python
# Copyright 2014 VMWare.
|
|
#
|
|
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
|
# not use this file except in compliance with the License. You may obtain
|
|
# a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
|
# License for the specific language governing permissions and limitations
|
|
# under the License.
|
|
|
|
from keystoneauth1 import adapter
|
|
|
|
|
|
class Client(object):
|
|
"""Client for the Congress v1 API.
|
|
|
|
Example::
|
|
from keystoneauth1.identity import v2
|
|
from keystoneauth1 import session
|
|
from congressclient.v1 import client
|
|
auth = v2.Password(auth_url=AUTH_URL, username=USERNAME,
|
|
password=PASSWORD, tenant_name=TENANT_NAME)
|
|
sess = session.Session(auth=auth)
|
|
congress = client.Client(session=sess,
|
|
auth=None,
|
|
interface='publicURL',
|
|
service_type='policy',
|
|
region_name='RegionOne')
|
|
congress.create_policy_rule(..)
|
|
|
|
"""
|
|
policy = '/v1/policies'
|
|
policy_path = '/v1/policies/%s'
|
|
policy_rules = '/v1/policies/%s/rules'
|
|
policy_rules_path = '/v1/policies/%s/rules/%s'
|
|
policy_tables = '/v1/policies/%s/tables'
|
|
policy_table_path = '/v1/policies/%s/tables/%s'
|
|
policy_rows = '/v1/policies/%s/tables/%s/rows'
|
|
policy_rows_trace = '/v1/policies/%s/tables/%s/rows?trace=True'
|
|
policies = '/v1/policies'
|
|
policy_action = '/v1/policies/%s?%s'
|
|
datasources = '/v1/data-sources'
|
|
datasource_path = '/v1/data-sources/%s'
|
|
datasource_tables = '/v1/data-sources/%s/tables'
|
|
datasource_table_path = '/v1/data-sources/%s/tables/%s'
|
|
datasource_status = '/v1/data-sources/%s/status'
|
|
datasource_actions = '/v1/data-sources/%s/actions'
|
|
datasource_schema = '/v1/data-sources/%s/schema'
|
|
datasource_table_schema = '/v1/data-sources/%s/tables/%s/spec'
|
|
datasource_rows = '/v1/data-sources/%s/tables/%s/rows'
|
|
driver = '/v1/system/drivers'
|
|
driver_path = '/v1/system/drivers/%s'
|
|
policy_api_versions = '/'
|
|
|
|
def __init__(self, **kwargs):
|
|
super(Client, self).__init__()
|
|
|
|
kwargs.setdefault('user_agent', 'python-congressclient')
|
|
self.httpclient = adapter.LegacyJsonAdapter(**kwargs)
|
|
|
|
def create_policy(self, body):
|
|
resp, body = self.httpclient.post(
|
|
self.policy, body=body)
|
|
return body
|
|
|
|
def delete_policy(self, policy):
|
|
resp, body = self.httpclient.delete(
|
|
self.policy_path % policy)
|
|
return body
|
|
|
|
def show_policy(self, policy):
|
|
resp, body = self.httpclient.get(
|
|
self.policy_path % policy)
|
|
return body
|
|
|
|
def create_policy_rule(self, policy_name, body=None):
|
|
resp, body = self.httpclient.post(
|
|
self.policy_rules % policy_name, body=body)
|
|
return body
|
|
|
|
def delete_policy_rule(self, policy_name, rule_id):
|
|
resp, body = self.httpclient.delete(
|
|
self.policy_rules_path % (policy_name, rule_id))
|
|
return body
|
|
|
|
def show_policy_rule(self, policy_name, rule_id):
|
|
resp, body = self.httpclient.get(
|
|
self.policy_rules_path % (policy_name, rule_id))
|
|
return body
|
|
|
|
def list_policy_rows(self, policy_name, table, trace=None):
|
|
if trace:
|
|
query = self.policy_rows_trace
|
|
else:
|
|
query = self.policy_rows
|
|
resp, body = self.httpclient.get(query % (policy_name, table))
|
|
return body
|
|
|
|
def list_policy_rules(self, policy_name):
|
|
resp, body = self.httpclient.get(self.policy_rules % (policy_name))
|
|
return body
|
|
|
|
def list_policy(self):
|
|
resp, body = self.httpclient.get(self.policies)
|
|
return body
|
|
|
|
def list_policy_tables(self, policy_name):
|
|
resp, body = self.httpclient.get(self.policy_tables % (policy_name))
|
|
return body
|
|
|
|
def execute_policy_action(self, policy_name, action, trace, delta, body):
|
|
uri = "?action=%s&trace=%s&delta=%s" % (action, trace, delta)
|
|
resp, body = self.httpclient.post(
|
|
(self.policy_path % policy_name) + str(uri), body=body)
|
|
return body
|
|
|
|
def show_policy_table(self, policy_name, table_id):
|
|
resp, body = self.httpclient.get(self.policy_table_path %
|
|
(policy_name, table_id))
|
|
return body
|
|
|
|
def list_datasources(self):
|
|
resp, body = self.httpclient.get(self.datasources)
|
|
return body
|
|
|
|
def list_datasource_tables(self, datasource_name):
|
|
resp, body = self.httpclient.get(self.datasource_tables %
|
|
(datasource_name))
|
|
return body
|
|
|
|
def list_datasource_rows(self, datasource_name, table_name):
|
|
resp, body = self.httpclient.get(self.datasource_rows %
|
|
(datasource_name, table_name))
|
|
return body
|
|
|
|
def update_datasource_rows(self, datasource_name, table_name, body=None):
|
|
"""Update rows in a table of a datasource.
|
|
|
|
Args:
|
|
datasource_name: Name or id of the datasource
|
|
table_name: Table name for updating
|
|
body: Rows for update.
|
|
"""
|
|
resp, body = self.httpclient.put(self.datasource_rows %
|
|
(datasource_name, table_name),
|
|
body=body)
|
|
return body
|
|
|
|
def list_datasource_status(self, datasource_name):
|
|
resp, body = self.httpclient.get(self.datasource_status %
|
|
datasource_name)
|
|
return body
|
|
|
|
def list_datasource_actions(self, datasource_name):
|
|
resp, body = self.httpclient.get(self.datasource_actions %
|
|
datasource_name)
|
|
return body
|
|
|
|
def show_datasource_schema(self, datasource_name):
|
|
resp, body = self.httpclient.get(self.datasource_schema %
|
|
datasource_name)
|
|
return body
|
|
|
|
def show_datasource_table_schema(self, datasource_name, table_name):
|
|
resp, body = self.httpclient.get(self.datasource_table_schema %
|
|
(datasource_name, table_name))
|
|
return body
|
|
|
|
def show_datasource_table(self, datasource_name, table_id):
|
|
resp, body = self.httpclient.get(self.datasource_table_path %
|
|
(datasource_name, table_id))
|
|
return body
|
|
|
|
def create_datasource(self, body=None):
|
|
resp, body = self.httpclient.post(
|
|
self.datasources, body=body)
|
|
return body
|
|
|
|
def delete_datasource(self, datasource):
|
|
resp, body = self.httpclient.delete(
|
|
self.datasource_path % datasource)
|
|
return body
|
|
|
|
def execute_datasource_action(self, service_name, action, body):
|
|
uri = "?action=%s" % (action)
|
|
resp, body = self.httpclient.post(
|
|
(self.datasource_path % service_name) + str(uri), body=body)
|
|
return body
|
|
|
|
def list_drivers(self):
|
|
resp, body = self.httpclient.get(self.driver)
|
|
return body
|
|
|
|
def show_driver(self, driver):
|
|
resp, body = self.httpclient.get(self.driver_path %
|
|
(driver))
|
|
return body
|
|
|
|
def request_refresh(self, driver, body=None):
|
|
resp, body = self.httpclient.post(self.datasource_path %
|
|
(driver) + "?action=request-refresh",
|
|
body=body)
|
|
return body
|
|
|
|
def list_api_versions(self):
|
|
resp, body = self.httpclient.get(self.policy_api_versions)
|
|
return body
|