¡@

Home 

OpenStack Study: huawei_utils.py

OpenStack Index

**** CubicPower OpenStack Study ****

def parse_xml_file(filepath):

    """Get root of xml file."""

    try:

        tree = ET.parse(filepath)

        root = tree.getroot()

        return root

    except IOError as err:

        LOG.error(_('parse_xml_file: %s') % err)

        raise err

**** CubicPower OpenStack Study ****

def get_xml_item(xml_root, item):

    """Get the given item details.

    :param xml_root: The root of xml tree

    :param item: The tag need to get

    :return: A dict contains all the config info of the given item.

    """

    items_list = []

    items = xml_root.findall(item)

    for item in items:

        tmp_dict = {'text': None, 'attrib': {}}

        if item.text:

            tmp_dict['text'] = item.text.strip()

        for key, val in item.attrib.items():

            if val:

                item.attrib[key] = val.strip()

        tmp_dict['attrib'] = item.attrib

        items_list.append(tmp_dict)

    return items_list

**** CubicPower OpenStack Study ****

def is_xml_item_exist(xml_root, item, attrib_key=None):

    """Check if the given item exits in xml config file.

    :param xml_root: The root of xml tree

    :param item: The xml tag to check

    :param attrib_key: The xml attrib to check

    :return: True of False

    """

    items_list = get_xml_item(xml_root, item)

    value = []

    if attrib_key:

        for tmp_dict in items_list:

            if tmp_dict['attrib'].get(attrib_key, None):

                return True

    else:

        if items_list and items_list[0]['text']:

            return True

    return False

**** CubicPower OpenStack Study ****

def is_xml_item_valid(xml_root, item, valid_list, attrib_key=None):

    """Check if the given item is valid in xml config file.

    :param xml_root: The root of xml tree

    :param item: The xml tag to check

    :param valid_list: The valid item value

    :param attrib_key: The xml attrib to check

    :return: True of False

    """

    items_list = get_xml_item(xml_root, item)

    if attrib_key:

        for tmp_dict in items_list:

            value = tmp_dict['attrib'].get(attrib_key, None)

            if value not in valid_list:

                return False

    else:

        value = items_list[0]['text']

        if value not in valid_list:

            return False

    return True

**** CubicPower OpenStack Study ****

def get_conf_host_os_type(host_ip, config):

    """Get host OS type from xml config file.

    :param host_ip: The IP of Nova host

    :param config: xml config file

    :return: host OS type

    """

    os_conf = {}

    root = parse_xml_file(config)

    hosts_list = get_xml_item(root, 'Host')

    for host in hosts_list:

        os = host['attrib']['OSType'].strip()

        ips = [ip.strip() for ip in host['attrib']['HostIP'].split(',')]

        os_conf[os] = ips

    host_os = None

    for k, v in os_conf.items():

        if host_ip in v:

            host_os = os_type.get(k, None)

    if not host_os:

        host_os = os_type['Linux']  # default os type

    LOG.debug(_('_get_host_os_type: Host %(ip)s OS type is %(os)s.')

              % {'ip': host_ip, 'os': host_os})

    return host_os