def build_configdrive(node, configdrive): """Build a configdrive from provided meta_data, network_data and user_data. If uuid or name are not provided in the meta_data, they're defauled to the node's uuid and name accordingly. :param node: an Ironic node object. :param configdrive: A configdrive as a dict with keys ``meta_data``, ``network_data``, ``user_data`` and ``vendor_data`` (all optional). :returns: A gzipped and base64 encoded configdrive as a string. """ meta_data = configdrive.setdefault('meta_data', {}) meta_data.setdefault('uuid', node.uuid) if node.name: meta_data.setdefault('name', node.name) user_data = configdrive.get('user_data') if isinstance(user_data, (dict, list)): user_data = jsonutils.dump_as_bytes(user_data) elif user_data: user_data = user_data.encode('utf-8') LOG.debug('Building a configdrive for node %s', node.uuid) return os_configdrive.build(meta_data, user_data=user_data, network_data=configdrive.get('network_data'), vendor_data=configdrive.get('vendor_data'))
def build_configdrive(node, configdrive): """Build a configdrive from provided meta_data, network_data and user_data. If uuid or name are not provided in the meta_data, they're defauled to the node's uuid and name accordingly. :param node: an Ironic node object. :param configdrive: A configdrive as a dict with keys ``meta_data``, ``network_data`` and ``user_data`` (all optional). :returns: A gzipped and base64 encoded configdrive as a string. """ meta_data = configdrive.setdefault('meta_data', {}) meta_data.setdefault('uuid', node.uuid) if node.name: meta_data.setdefault('name', node.name) user_data = configdrive.get('user_data') if isinstance(user_data, (dict, list)): user_data = jsonutils.dump_as_bytes(user_data) elif user_data: user_data = user_data.encode('utf-8') LOG.debug('Building a configdrive for node %s', node.uuid) return os_configdrive.build(meta_data, user_data=user_data, network_data=configdrive.get('network_data'))