Beispiel #1
0
class Host(object):
    def __init__(self, hypervisor):
        self.hypervisor = hypervisor
        self.ovsclient = OVSClient()
        self.cloud = Cloud()

    def list_interfaces_hypervisor(self, hypervisors):
        interfaces = {}
        for k, v in hypervisors.items():
            if k == self.hypervisor:
                for k_inner, v_inner in v.items():
                    if k_inner == 'ip':
                        ip = v_inner
                        interfaces = self.ovsclient.list_interfaces(ip)
        logging.info('Getting OVS interfaces %s :', interfaces)
        return interfaces

    def list_ports_hypervisor(self, hypervisor_ip):
        ports = self.ovsclient.list_ports(hypervisor_ip)
        logging.info('Getting OVS ports: %s for Hypervisor IP: %s', ports,
                     hypervisor_ip)
        return ports

    def list_qos_hypervisor(self, hypervisor_ip):
        qos_raw = json.loads(self.ovsclient.list_qos(hypervisor_ip))
        hypervisor_qos = []

        for q in qos_raw.get('data'):
            hypervisor_qos.append(q)

        logging.info('Getting final OVS QoS %s for IP %s', hypervisor_qos,
                     hypervisor_ip)
        return hypervisor_qos

    def list_queues_hypervisor(self, hypervisor_ip):
        queues = []
        queues_raw = json.loads(self.ovsclient.list_queue(hypervisor_ip))
        logging.info('Queues for comparison for %s : %s ... ', hypervisor_ip,
                     queues_raw)

        for q in queues_raw.get('data'):
            queues.append(q)
        logging.info('Queues from queue list: %s', queues)
        return queues

    def get_port_qos(self, hypervisor_ip, ovs_port):
        ports_raw = json.loads(self.list_ports_hypervisor(hypervisor_ip))
        logging.info('Ports for %s: %s', hypervisor_ip, ports_raw)
        qos_id = '0'
        for port in ports_raw.get('data'):
            isvm = 0
            for port_key in port:
                if type(port_key) == unicode and port_key == ovs_port:
                    isvm = 1
                if type(port_key) == list and isvm:
                    isvm = 0
                    for pv in port_key:
                        if pv != 'uuid':
                            qos_id = pv
                            logging.info('QoS ID for port: %s is: %s',
                                         ovs_port, qos_id)
        return qos_id

    def set_qos_vm(self, hypervisor_ip, interfaces, vm_id, qos_rates):
        qos_status = {}
        found_match = 0
        server_ips = self.cloud.get_server_ips()

        for ks, vs in server_ips.items():
            if ks == vm_id:
                found_match = 1
                neutron_port = self.cloud.get_neutron_port(vs[0])
                ovs_port_id = self.cloud.get_port_id(interfaces,
                                                     neutron_port)[0]
                logging.info('OVS port ID for Server %s: %s', ks, ovs_port_id)
                logging.info('Server %s gets Min-rate %s Max-rate %s', ks,
                             qos_rates.get('min-rate'),
                             qos_rates.get('max-rate'))
                queue_id = self.ovsclient.create_queue(
                    hypervisor_ip, int(qos_rates.get('min-rate')),
                    int(qos_rates.get('max-rate')))
                logging.info('Queue ID for Server %s: %s', ks, queue_id)
                qos_id = self.ovsclient.create_qos(hypervisor_ip, queue_id)
                qos_status = self.ovsclient.set_port(hypervisor_ip,
                                                     ovs_port_id, 'qos',
                                                     qos_id)
                if not qos_status:
                    qos_status = qos_rates
                logging.info('QoS status for Server %s: %s', ks, qos_status)
        if not found_match:
            return 0
        else:
            return qos_status
class Host(object):
    def __init__(self, hypervisor):
        self.hypervisor = hypervisor
        self.ovsclient = OVSClient()
        self.cloud = Cloud()

    def list_interfaces_hypervisor(self, hypervisors):
        interfaces = {}
        for k, v in hypervisors.items():
            if k == self.hypervisor:
                for k_inner, v_inner in v.items():
                    if k_inner == 'ip':
                        ip = v_inner
                        interfaces = self.ovsclient.list_interfaces(ip)
        logging.info('Getting OVS interfaces %s :', interfaces)
        return interfaces

    def list_ports_hypervisor(self, hypervisor_ip):
        ports = self.ovsclient.list_ports(hypervisor_ip)
        logging.info('Getting OVS ports: %s for Hypervisor IP: %s', ports, hypervisor_ip)
        return ports

    def list_qos_hypervisor(self, hypervisor_ip):
        qos_raw = json.loads(self.ovsclient.list_qos(hypervisor_ip))
        hypervisor_qos = []

        for q in qos_raw.get('data'):
            hypervisor_qos.append(q)

        logging.info('Getting final OVS QoS %s for IP %s', hypervisor_qos, hypervisor_ip)
        return hypervisor_qos

    def list_queues_hypervisor(self, hypervisor_ip):
        queues = []
        queues_raw = json.loads(self.ovsclient.list_queue(hypervisor_ip))
        logging.info('Queues for comparison for %s : %s ... ', hypervisor_ip, queues_raw)

        for q in queues_raw.get('data'):
            queues.append(q)
        logging.info('Queues from queue list: %s', queues)
        return queues

    def get_port_qos(self, hypervisor_ip, ovs_port):
        ports_raw = json.loads(self.list_ports_hypervisor(hypervisor_ip))
        logging.info('Ports for %s: %s', hypervisor_ip, ports_raw)
        qos_id = '0'
        for port in ports_raw.get('data'):
            isvm = 0
            for port_key in port:
                if type(port_key) == unicode and port_key == ovs_port:
                    isvm = 1
                if type(port_key) == list and isvm:
                    isvm = 0
                    for pv in port_key:
                        if pv != 'uuid':
                            qos_id = pv
                            logging.info('QoS ID for port: %s is: %s', ovs_port, qos_id)
        return qos_id

    def set_qos_vm(self, hypervisor_ip, interfaces, vm_id, qos_rates):
        qos_status = {}
        found_match = 0
        server_ips = self.cloud.get_server_ips()

        for ks, vs in server_ips.items():
            if ks == vm_id:
                found_match = 1
                neutron_port = self.cloud.get_neutron_port(vs[0])
                ovs_port_id = self.cloud.get_port_id(interfaces, neutron_port)[0]
                logging.info('OVS port ID for Server %s: %s', ks, ovs_port_id)
                logging.info('Server %s gets Min-rate %s Max-rate %s', ks, qos_rates.get('min-rate'), qos_rates.get('max-rate'))
                queue_id = self.ovsclient.create_queue(hypervisor_ip, int(qos_rates.get('min-rate')), int(qos_rates.get('max-rate')))
                logging.info('Queue ID for Server %s: %s', ks, queue_id)
                qos_id = self.ovsclient.create_qos(hypervisor_ip, queue_id)
                qos_status = self.ovsclient.set_port(hypervisor_ip, ovs_port_id, 'qos', qos_id)
                if not qos_status:
                    qos_status = qos_rates
                logging.info('QoS status for Server %s: %s', ks, qos_status)
        if not found_match:
            return 0
        else:
            return qos_status