예제 #1
0
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
예제 #2
0
 def __init__(self, cfg=CONF):
     self.cfg = cfg
     self.msg = None
     self.plugin_set = PluginSet(self.get_plugin_path())
     self.plugin_set.reload()
     return