class UserDataPlugin(): def __init__(self, cfg=CONF): self.cfg = cfg self.msg = None self.plugin_set = PluginSet(self.get_plugin_path()) self.plugin_set.reload() return def get_plugin_path(self): #gokrokve: It is possible to add more logic here to load path from configuration for example. return os.path.join(os.path.dirname(os.path.dirname(os.path.realpath(__file__))), "windows/userdata-plugins") def execute(self, service): user_data = service.get_user_data('openstack') if not user_data: return False self.process_userdata(user_data) return def process_userdata(self, user_data): LOG.debug('User data content:\n%s' % user_data) if user_data.startswith('Content-Type: multipart'): for part in self.parse_MIME(user_data): self.process_part(part) else: self.handle(user_data) def process_part(self, part): part_handler = self.get_part_handler(part) if part_handler is not None: try: self.begin_part_process_event(part) LOG.info("Processing part %s filename: %s with handler: %s", part.get_content_type(), part.get_filename(), part_handler.name) part_handler.process(part) self.end_part_process_event(part) except Exception,e: LOG.error('Exception during multipart part handling: %s %s \n %s' , part.get_content_type(), part.get_filename(), e) return
def __init__(self, cfg=CONF): self.cfg = cfg self.msg = None self.plugin_set = PluginSet(self.get_plugin_path()) self.plugin_set.reload() return