diff options
author | Scott Moser <smoser@ubuntu.com> | 2010-01-28 17:16:11 -0500 |
---|---|---|
committer | Scott Moser <smoser@ubuntu.com> | 2010-01-28 17:16:11 -0500 |
commit | e6e30d8c8f72b904b34e93d2b9c4aef39b965b59 (patch) | |
tree | a419a39f1654574f27f778f4947931adf2e2b048 /ec2init/__init__.py | |
parent | 124d9e1dfe34e5f71e45f49dac1b1435f4a51114 (diff) | |
download | vyos-cloud-init-e6e30d8c8f72b904b34e93d2b9c4aef39b965b59.tar.gz vyos-cloud-init-e6e30d8c8f72b904b34e93d2b9c4aef39b965b59.zip |
add the part-handler plugin
If a part of a multipart file is 'text/part-handler' then it is
expected to be python code that implements 2 methods
- list_types()
list the types that this part-handler supports, return
a list. ie: return(['text/plain'])
- handle_parts(data,ctype,filename,payload)
this method will be called:
once, when loaded, with ctype == '__begin__'
once per part
once, at the end, with ctype == '__end__'
- ctype is the content type ('text/plain')
- filename is the filename portion of the mime data
- payload is the content of the part
- data is currently the cloud object, but this could change
Diffstat (limited to 'ec2init/__init__.py')
-rw-r--r-- | ec2init/__init__.py | 33 |
1 files changed, 29 insertions, 4 deletions
diff --git a/ec2init/__init__.py b/ec2init/__init__.py index 5405b5e4..b88e3ddd 100644 --- a/ec2init/__init__.py +++ b/ec2init/__init__.py @@ -30,6 +30,7 @@ import yaml datadir = '/var/lib/cloud/data' semdir = '/var/lib/cloud/sem' +pluginsdir = datadir + '/plugins' cachedir = datadir + '/cache' userdata_raw = datadir + '/user-data.txt' userdata = datadir + '/user-data.txt.i' @@ -228,13 +229,37 @@ class EC2Init: func(data,"__end__",None,None) def handle_handler(self,data,ctype,filename,payload): - if ctype == "__begin__" or ctype == "__end__": return + if ctype == "__end__": return + if ctype == "__begin__" : + self.handlercount = 0 + return + + # add the path to the plugins dir to the top of our list for import + if self.handlercount == 0: + sys.path.insert(0,pluginsdir) + + self.handlercount=self.handlercount+1 + + # write content to pluginsdir + modname = 'part-handler-%03d' % self.handlercount + modfname = modname + ".py" + util.write_file("%s/%s" % (pluginsdir,modfname), payload, 0600) + + try: + mod = __import__(modname) + lister = getattr(mod, "list_types") + handler = getattr(mod, "handle_part") + except: + import traceback + traceback.print_exc(file=sys.stderr) + return - # - do something to include the handler, ie, eval it or something # - call it with '__begin__' + handler(data, "__begin__", None, None) + # - add it self.part_handlers - # self.part_handlers['new_type']=handler - print "Do not know what to do with a handler yet, sorry" + for mtype in lister(): + self.part_handlers[mtype]=handler def handle_user_script(self,data,ctype,filename,payload): if ctype == "__end__": return |