235 lines
11 KiB
Python
235 lines
11 KiB
Python
#
|
|
# Copyright 2012, Red Hat, Inc.
|
|
#
|
|
# 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.
|
|
|
|
"""
|
|
Client side of the bilean engine RPC API.
|
|
"""
|
|
|
|
from bilean.common import consts
|
|
from bilean.common import messaging
|
|
|
|
from oslo_config import cfg
|
|
|
|
|
|
class EngineClient(object):
|
|
'''Client side of the bilean engine rpc API.'''
|
|
|
|
BASE_RPC_API_VERSION = '1.0'
|
|
|
|
def __init__(self):
|
|
cfg.CONF.import_opt('host', 'bilean.common.config')
|
|
self._client = messaging.get_rpc_client(
|
|
topic=consts.ENGINE_TOPIC,
|
|
server=cfg.CONF.host,
|
|
version=self.BASE_RPC_API_VERSION)
|
|
|
|
@staticmethod
|
|
def make_msg(method, **kwargs):
|
|
return method, kwargs
|
|
|
|
def call(self, ctxt, msg, version=None):
|
|
method, kwargs = msg
|
|
if version is not None:
|
|
client = self._client.prepare(version=version)
|
|
else:
|
|
client = self._client
|
|
return client.call(ctxt, method, **kwargs)
|
|
|
|
def cast(self, ctxt, msg, version=None):
|
|
method, kwargs = msg
|
|
if version is not None:
|
|
client = self._client.prepare(version=version)
|
|
else:
|
|
client = self._client
|
|
return client.cast(ctxt, method, **kwargs)
|
|
|
|
# users
|
|
def user_list(self, ctxt, show_deleted=False, limit=None,
|
|
marker=None, sort_keys=None, sort_dir=None,
|
|
filters=None):
|
|
return self.call(ctxt,
|
|
self.make_msg('user_list',
|
|
show_deleted=show_deleted,
|
|
limit=limit, marker=marker,
|
|
sort_keys=sort_keys, sort_dir=sort_dir,
|
|
filters=filters))
|
|
|
|
def user_get(self, ctxt, user_id):
|
|
return self.call(ctxt, self.make_msg('user_get',
|
|
user_id=user_id))
|
|
|
|
def user_create(self, ctxt, user_id, balance=None, credit=None,
|
|
status=None):
|
|
return self.call(ctxt, self.make_msg('user_create', user_id=user_id,
|
|
balance=balance, credit=credit,
|
|
status=status))
|
|
|
|
def user_recharge(self, ctxt, user_id, value):
|
|
return self.call(ctxt, self.make_msg('user_recharge',
|
|
user_id=user_id,
|
|
value=value))
|
|
|
|
def user_delete(self, ctxt, user_id):
|
|
return self.call(ctxt, self.make_msg('user_delete',
|
|
user_id=user_id))
|
|
|
|
def user_attach_policy(self, ctxt, user_id, policy_id):
|
|
return self.call(ctxt, self.make_msg('user_attach_policy',
|
|
user_id=user_id,
|
|
policy_id=policy_id))
|
|
|
|
# rules
|
|
def rule_list(self, ctxt, limit=None, marker=None, sort_keys=None,
|
|
sort_dir=None, filters=None, show_deleted=False):
|
|
return self.call(ctxt, self.make_msg('rule_list', limit=limit,
|
|
marker=marker,
|
|
sort_keys=sort_keys,
|
|
sort_dir=sort_dir,
|
|
filters=filters,
|
|
show_deleted=show_deleted))
|
|
|
|
def rule_get(self, ctxt, rule_id):
|
|
return self.call(ctxt, self.make_msg('rule_get',
|
|
rule_id=rule_id))
|
|
|
|
def rule_create(self, ctxt, name, spec, metadata):
|
|
return self.call(ctxt, self.make_msg('rule_create', name=name,
|
|
spec=spec, metadata=metadata))
|
|
|
|
def rule_update(self, ctxt, values):
|
|
return self.call(ctxt, self.make_msg('rule_update',
|
|
values=values))
|
|
|
|
def rule_delete(self, ctxt, rule_id):
|
|
return self.call(ctxt, self.make_msg('rule_delete',
|
|
rule_id=rule_id))
|
|
|
|
# resources
|
|
def resource_list(self, ctxt, user_id=None, limit=None, marker=None,
|
|
sort_keys=None, sort_dir=None, filters=None,
|
|
project_safe=True, show_deleted=False):
|
|
return self.call(ctxt, self.make_msg('resource_list', user_id=user_id,
|
|
limit=limit, marker=marker,
|
|
sort_keys=sort_keys,
|
|
sort_dir=sort_dir,
|
|
filters=filters,
|
|
project_safe=project_safe,
|
|
show_deleted=show_deleted))
|
|
|
|
def resource_get(self, ctxt, resource_id):
|
|
return self.call(ctxt, self.make_msg('resource_get',
|
|
resource_id=resource_id))
|
|
|
|
def resource_create(self, ctxt, resource_id, user_id,
|
|
resource_type, properties):
|
|
return self.call(ctxt, self.make_msg('resource_create',
|
|
resource_id=resource_id,
|
|
user_id=user_id,
|
|
resource_type=resource_type,
|
|
properties=properties))
|
|
|
|
def resource_update(self, ctxt, user_id, resource):
|
|
return self.call(ctxt, self.make_msg('resource_update',
|
|
user_id=user_id,
|
|
resource=resource))
|
|
|
|
def resource_delete(self, ctxt, user_id, resource_id):
|
|
return self.call(ctxt, self.make_msg('resource_delete',
|
|
user_id=user_id,
|
|
resource_id=resource_id))
|
|
|
|
# events
|
|
def event_list(self, ctxt, user_id=None, limit=None, marker=None,
|
|
sort_keys=None, sort_dir=None, filters=None,
|
|
start_time=None, end_time=None, project_safe=True,
|
|
show_deleted=False):
|
|
return self.call(ctxt, self.make_msg('event_list', user_id=user_id,
|
|
limit=limit, marker=marker,
|
|
sort_keys=sort_keys,
|
|
sort_dir=sort_dir,
|
|
filters=filters,
|
|
start_time=start_time,
|
|
end_time=end_time,
|
|
project_safe=project_safe,
|
|
show_deleted=show_deleted))
|
|
|
|
def validate_creation(self, cnxt, resources):
|
|
return self.call(cnxt, self.make_msg('validate_creation',
|
|
resources=resources))
|
|
|
|
# policies
|
|
def policy_list(self, ctxt, limit=None, marker=None, sort_keys=None,
|
|
sort_dir=None, filters=None, show_deleted=False):
|
|
return self.call(ctxt, self.make_msg('policy_list', limit=limit,
|
|
marker=marker,
|
|
sort_keys=sort_keys,
|
|
sort_dir=sort_dir,
|
|
filters=filters,
|
|
show_deleted=show_deleted))
|
|
|
|
def policy_get(self, ctxt, policy_id):
|
|
return self.call(ctxt, self.make_msg('policy_get',
|
|
policy_id=policy_id))
|
|
|
|
def policy_create(self, ctxt, name, rules=None, metadata=None):
|
|
return self.call(ctxt, self.make_msg('policy_create',
|
|
name=name,
|
|
rule_ids=rules,
|
|
metadata=metadata))
|
|
|
|
def policy_update(self, ctxt, policy_id, name=None, metadata=None,
|
|
is_default=None):
|
|
return self.call(ctxt, self.make_msg('policy_update',
|
|
policy_id=policy_id,
|
|
name=name,
|
|
metadata=metadata,
|
|
is_default=is_default))
|
|
|
|
def policy_delete(self, ctxt, policy_id):
|
|
return self.call(ctxt, self.make_msg('policy_delete',
|
|
policy_id=policy_id))
|
|
|
|
def policy_add_rules(self, ctxt, policy_id, rules):
|
|
return self.call(ctxt, self.make_msg('policy_add_rules',
|
|
policy_id=policy_id,
|
|
rules=rules))
|
|
|
|
def settle_account(self, ctxt, user_id, task=None):
|
|
return self.call(ctxt, self.make_msg('settle_account',
|
|
user_id=user_id,
|
|
task=task))
|
|
|
|
# consumptions
|
|
def consumption_list(self, ctxt, user_id=None, limit=None, marker=None,
|
|
sort_keys=None, sort_dir=None, filters=None,
|
|
project_safe=True):
|
|
return self.call(ctxt, self.make_msg('consumption_list',
|
|
user_id=user_id,
|
|
limit=limit, marker=marker,
|
|
sort_keys=sort_keys,
|
|
sort_dir=sort_dir,
|
|
filters=filters,
|
|
project_safe=project_safe))
|
|
|
|
def consumption_statistics(self, ctxt, user_id=None, filters=None,
|
|
start_time=None, end_time=None,
|
|
project_safe=True):
|
|
return self.call(ctxt, self.make_msg('consumption_statistics',
|
|
user_id=user_id,
|
|
filters=filters,
|
|
start_time=start_time,
|
|
end_time=end_time,
|
|
project_safe=project_safe))
|