# Copyright 2014 Huawei Technologies Co. Ltd # # 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. """Compass api client library. """ import json import logging import requests class Client(object): """compass restful api wrapper""" def __init__(self, url, headers=None, proxies=None, stream=None): logging.info('create api client %s', url) self.url_ = url self.session_ = requests.Session() if headers: self.session_.headers.update(headers) self.session_.headers.update({ 'Accept': 'application/json' }) if proxies is not None: self.session_.proxies = proxies if stream is not None: self.session_.stream = stream def __del__(self): self.session_.close() @classmethod def _get_response(cls, resp): response_object = {} try: response_object = resp.json() except Exception as error: logging.error('failed to load object from %s: %s', resp.url, resp.content) logging.exception(error) response_object['status'] = 'Json Parsing Failed' response_object['message'] = resp.content return resp.status_code, response_object def _get(self, req_url, data=None): url = '%s%s' % (self.url_, req_url) logging.debug('get %s with data %s', url, data) if data: resp = self.session_.get(url, params=data) else: resp = self.session_.get(url) return self._get_response(resp) def _post(self, req_url, data=None): url = '%s%s' % (self.url_, req_url) logging.debug('post %s with data %s', url, data) if data: resp = self.session_.post(url, json.dumps(data)) else: resp = self.session_.post(url) return self._get_response(resp) def _put(self, req_url, data=None): """encapsulate put method.""" url = '%s%s' % (self.url_, req_url) logging.debug('put %s with data %s', url, data) if data: resp = self.session_.put(url, json.dumps(data)) else: resp = self.session_.put(url) return self._get_response(resp) def _patch(self, req_url, data=None): url = '%s%s' % (self.url_, req_url) logging.debug('patch %s with data %s', url, data) if data: resp = self.session_.patch(url, json.dumps(data)) else: resp = self.session_.patch(url) return self._get_response(resp) def _delete(self, req_url): url = '%s%s' % (self.url_, req_url) logging.debug('delete %s', url) return self._get_response(self.session_.delete(url)) def login(self, email, password): credential = {} credential['email'] = email credential['password'] = password return self._post('/users/login', data=credential) def get_token(self, email, password): credential = {} credential['email'] = email credential['password'] = password status, resp = self._post('/users/token', data=credential) if status < 400: self.session_.headers.update({'X-Auth-Token': resp['token']}) return status, resp def get_users(self): users = self._get('/users') return users def list_switches( self, switch_ips=None, switch_ip_networks=None): """list switches.""" params = {} if switch_ips: params['switchIp'] = switch_ips if switch_ip_networks: params['switchIpNetwork'] = switch_ip_networks switchlist = self._get('/switches', data=params) return switchlist def get_switch(self, switch_id): return self._get('/switches/%s' % switch_id) def add_switch( self, switch_ip, version=None, community=None, raw_data=None): data = {} if raw_data: data = raw_data else: data['ip'] = switch_ip data['credentials'] = {} if version: data['credentials']['version'] = version if community: data['credentials']['community'] = community return self._post('/switches', data=data) def update_switch(self, switch_id, state='initialized', version='2c', community='public', raw_data={}): data = {} if raw_data: data = raw_data else: data['credentials'] = {} if version: data['credentials']['version'] = version if community: data['credentials']['community'] = community if state: data['state'] = state return self._put('/switches/%s' % switch_id, data=data) def delete_switch(self, switch_id): return self._delete('/switches/%s' % switch_id) def list_switch_machines(self, switch_id, port=None, vlans=None,
/*
 * QFloat Module
 *
 * Copyright IBM, Corp. 2009
 *
 * Authors:
 *  Anthony Liguori   <aliguori@us.ibm.com>
 *
 * This work is licensed under the terms of the GNU LGPL, version 2.1 or later.
 * See the COPYING.LIB file in the top-level directory.
 *
 */

#include "qapi/qmp/qfloat.h"
#include "qapi/qmp/qobject.h"
#include "qemu-common.h"

static void qfloat_destroy_obj(QObject *obj);

static const QType qfloat_type = {
    .code = QTYPE_QFLOAT,
    .destroy = qfloat_destroy_obj,
};

/**
 * qfloat_from_int(): Create a new QFloat from a float
 *
 * Return strong reference.
 */
QFloat *qfloat_from_double(double value)
{
    QFloat *qf;

    qf = g_malloc(sizeof(*qf));
    qf->value = value;
    QOBJECT_INIT(qf, &qfloat_type);

    return qf;
}

/**
 * qfloat_get_double(): Get the stored float
 */
double qfloat_get_double(const QFloat *qf)
{
    return qf->value;
}

/**
 * qobject_to_qfloat(): Convert a QObject into a QFloat
 */
QFloat *qobject_to_qfloat(const QObject *obj)
{
    if (qobject_type(obj) != QTYPE_QFLOAT)
        return NULL;

    return container_of(obj, QFloat, base);
}

/**
 * qfloat_destroy_obj(): Free all memory allocated by a
 * QFloat object
 */
static void qfloat_destroy_obj(QObject *obj)
{
    assert(obj != NULL);
    g_free(qobject_to_qfloat(obj));
}
fig=None, package_config=None, raw_data=None): data = {} if raw_data: data = raw_data else: if os_config: data['os_config'] = os_config if package_config: data['package_config'] = package_config return self._put('/clusters/%s/hosts/%s/config' % (cluster_id, host_id), data=data) def update_clusterhost_config(self, clusterhost_id, os_config=None, package_config=None, raw_data=None): data = {} if raw_data: data = raw_data else: if os_config: data['os_config'] = os_config if package_config: data['package_config'] = package_config return self._put('/clusterhosts/%s/config' % clusterhost_id, data=data) def patch_cluster_host_config(self, cluster_id, host_id, os_config=None, package_config=None, raw_data=None): data = {} if raw_data: data = raw_data else: if os_config: data['os_config'] = os_config if package_config: data['package_config'] = package_config return self._patch('/clusters/%s/hosts/%s/config' % (cluster_id, host_id), data=data) def patch_clusterhost_config(self, clusterhost_id, os_config=None, package_config=None, raw_data=None): data = {} if raw_data: data = raw_data else: if os_config: data['os_config'] = os_config if package_config: data['package_config'] = package_config return self._patch('/clusterhosts/%s' % clusterhost_id, data=data) def delete_cluster_host_config(self, cluster_id, host_id): return self._delete('/clusters/%s/hosts/%s/config' % (cluster_id, host_id)) def delete_clusterhost_config(self, clusterhost_id): return self._delete('/clusterhosts/%s/config' % clusterhost_id) def get_cluster_host_state(self, cluster_id, host_id): return self._get('/clusters/%s/hosts/%s/state' % (cluster_id, host_id)) def update_cluster_host(self, cluster_id, host_id, roles=None, raw_data=None): data = {} if raw_data: data = raw_data else: if roles: data['roles'] = roles return self._put('/clusters/%s/hosts/%s' % (cluster_id, host_id), data=data) def update_clusterhost(self, clusterhost_id, roles=None, raw_data=None): data = {} if raw_data: data = raw_data else: if roles: data['roles'] = roles return self._put('/clusterhosts/%s' % clusterhost_id, data=data) def patch_cluster_host(self, cluster_id, host_id, roles=None, raw_data=None): data = {} if raw_data: data = raw_data else: if roles: data['roles'] = roles return self._patch('/clusters/%s/hosts/%s' % (cluster_id, host_id), data=data) def patch_clusterhost(self, clusterhost_id, roles=None, raw_data=None): data = {} if raw_data: data = raw_data else: if roles: data['roles'] = roles return self._patch('/clusterhosts/%s' % clusterhost_id, data=data) def get_clusterhost_state(self, clusterhost_id): return self._get('/clusterhosts/%s/state' % clusterhost_id) def update_cluster_host_state(self, cluster_id, host_id, state=None, percentage=None, message=None, raw_data=None): data = {} if raw_data: data = raw_data else: if state: data['state'] = state if percentage: data['percentage'] = percentage if message: data['message'] = message return self._put('/clusters/%s/hosts/%s/state' % (cluster_id, host_id), data=data) def update_clusterhost_state(self, clusterhost_id, state=None, percentage=None, message=None, raw_data=None): data = {} if raw_data: data = raw_data else: if state: data['state'] = state if percentage: data['percentage'] = percentage if message: data['message'] = message return self._put('/clusterhosts/%s/state' % clusterhost_id, data=data) def list_hosts(self, name=None, os_name=None, owner=None, mac=None): data = {} if name: data['name'] = name if os_name: data['os_name'] = os_name if owner: data['owner'] = owner if mac: data['mac'] = mac return self._get('/hosts', data=data) def get_host(self, host_id): return self._get('/hosts/%s' % host_id) def list_machines_or_hosts(self, mac=None, tag=None, location=None, os_name=None, os_id=None): data = {} if mac: data['mac'] = mac if tag: data['tag'] = tag if location: data['location'] = location if os_name: data['os_name'] = os_name if os_id: data['os_id'] = os_id return self._get('/machines-hosts', data=data) def get_machine_or_host(self, host_id): return self._get('/machines-hosts/%s' % host_id) def update_host(self, host_id, name=None, reinstall_os=None, raw_data=None): data = {} if raw_data: data = raw_data else: if name: data['name'] = name if reinstall_os: data['reinstall_os'] = reinstall_os return self._put('/hosts/%s' % host_id, data=data) def delete_host(self, host_id): return self._delete('/hosts/%s' % host_id) def get_host_clusters(self, host_id): return self._get('/hosts/%s/clusters' % host_id) def get_host_config(self, host_id): return self._get('/hosts/%s/config' % host_id) def update_host_config(self, host_id, os_config, raw_data=None): data = {} data['os_config'] = os_config if raw_data: data.update(raw_data) return self._put('/hosts/%s/config' % host_id, data=data) def patch_host_config(self, host_id, os_config, raw_data=None): data = {} data['os_config'] = os_config if raw_data: data.update(raw_data) return self._patch('/hosts/%s/config' % host_id, data=data) def delete_host_config(self, host_id): return self._delete('/hosts/%s/config' % host_id) def list_host_networks(self, host_id, interface=None, ip=None, subnet=None, is_mgmt=None, is_promiscuous=None): data = {} if interface: data['interface'] = interface if ip: data['ip'] = ip if subnet: data['subnet'] = subnet if is_mgmt: data['is_mgmt'] = is_mgmt if is_promiscuous: data['is_promiscuous'] = is_promiscuous return self._get('/hosts/%s/networks' % host_id, data=data) def list_all_host_networks(self, interface=None, ip=None, subnet=None, is_mgmt=None, is_promiscuous=None): data = {} if interface: data['interface'] = interface if ip: data['ip'] = ip if subnet: data['subnet'] = subnet if is_mgmt: data['is_mgmt'] = is_mgmt if is_promiscuous: data['is_promiscuous'] = is_promiscuous return self._get('/host-networks', data=data) def get_host_network(self, host_id, host_network_id): return self._get('/hosts/%s/networks/%s' % (host_id, host_network_id)) def get_network_for_all_hosts(self, host_network_id): return self._get('/host-networks/%s' % host_network_id) def add_host_network(self, host_id, interface, ip, subnet_id, is_mgmt=None, is_promiscuous=None, raw_data=None): data = {} data['interface'] = interface data['ip'] = ip data['subnet_id'] = subnet_id if raw_data: data.update(raw_data) else: if is_mgmt: data['is_mgmt'] = is_mgmt if is_promiscuous: data['is_promiscuous'] = is_promiscuous return self._post('/hosts/%s/networks' % host_id, data=data) def update_host_network(self, host_id, host_network_id, ip=None, subnet_id=None, subnet=None, is_mgmt=None, is_promiscuous=None, raw_data=None): data = {} if raw_data: data = raw_data else: if ip: data['ip'] = ip if subnet_id: data['subnet_id'] = subnet_id if subnet: data['subnet'] = subnet if is_mgmt: data['is_mgmt'] = is_mgmt if is_promiscuous: data['is_promiscuous'] = is_promiscuous return self._put('/hosts/%s/networks/%s' % (host_id, host_network_id), data=data) def update_hostnetwork(self, host_network_id, ip=None, subnet_id=None, subnet=None, is_mgmt=None, is_promiscuous=None, raw_data=None): data = {} if raw_data: data = raw_data else: if ip: data['ip'] = ip if subnet_id: data['subnet_id'] = subnet_id if subnet: data['subnet'] = subnet if is_mgmt: data['is_mgmt'] = is_mgmt if is_promiscuous: data['is_promiscuous'] = is_promiscuous return self._put('/host-networks/%s' % host_network_id, data=data) def delete_host_network(self, host_id, host_network_id): return self._delete('/hosts/%s/networks/%s', (host_id, host_network_id)) def delete_hostnetwork(self, host_network_id): return self._delete('/host-networks/%s' % host_network_id) def get_host_state(self, host_id): return self._get('/hosts/%s/state' % host_id) def update_host_state(self, host_id, state=None, percentage=None, message=None, raw_data=None): data = {} if raw_data: data = raw_data else: if state: data['state'] = state if percentage: data['percentage'] = percentage if message: data['message'] = message return self._put('/hosts/%s/state' % host_id, date=data) def poweron_host(self, host_id): data = {} data['poweron'] = True return self._post('/hosts/%s/action' % host_id, data=data) def poweroff_host(self, host_id): data = {} data['poweroff'] = True return self._post('/hosts/%s/action' % host_id, data=data) def reset_host(self, host_id): data = {} data['reset'] = True return self._post('/hosts/%s/action' % host_id, data=data) def clusterhost_ready(self, clusterhost_name): data = {} data['ready'] = True return self._post('/clusterhosts/%s/state_internal' % clusterhost_name, data=data)