summaryrefslogtreecommitdiff
path: root/cloudinit
diff options
context:
space:
mode:
authorJoshua Harlow <harlowja@gmail.com>2013-07-21 10:45:29 -0700
committerJoshua Harlow <harlowja@gmail.com>2013-07-21 10:45:29 -0700
commit971c2b2366c6e58921e1d2dd3ba18e597cbc20e8 (patch)
treea1169ea5937ea9543e4a7e9b26a5d27479ad5a97 /cloudinit
parentbbfc76fb74595881b25acc1bbbd426314c2390ed (diff)
downloadvyos-cloud-init-971c2b2366c6e58921e1d2dd3ba18e597cbc20e8.tar.gz
vyos-cloud-init-971c2b2366c6e58921e1d2dd3ba18e597cbc20e8.zip
Just use an initialized array.
Diffstat (limited to 'cloudinit')
-rw-r--r--cloudinit/handlers/__init__.py5
-rw-r--r--cloudinit/helpers.py7
-rw-r--r--cloudinit/stages.py13
3 files changed, 9 insertions, 16 deletions
diff --git a/cloudinit/handlers/__init__.py b/cloudinit/handlers/__init__.py
index f9b90323..1d450061 100644
--- a/cloudinit/handlers/__init__.py
+++ b/cloudinit/handlers/__init__.py
@@ -153,10 +153,7 @@ def walker_handle_handler(pdata, _ctype, _filename, payload):
call_begin(mod, pdata['data'], frequency)
# Only register and increment after the above have worked, so we don't
# register if it fails starting.
- handlers.register(mod)
- # Ensure that it gets finalized by marking said module as having been
- # initialized correctly.
- handlers.markings[mod].append('initialized')
+ handlers.register(mod, initialized=True)
pdata['handlercount'] = curcount + 1
except:
util.logexc(LOG, "Failed at registering python file: %s (part "
diff --git a/cloudinit/helpers.py b/cloudinit/helpers.py
index bd37b8a3..1c46efde 100644
--- a/cloudinit/helpers.py
+++ b/cloudinit/helpers.py
@@ -22,7 +22,6 @@
from time import time
-import collections
import contextlib
import io
import os
@@ -282,7 +281,7 @@ class ContentHandlers(object):
def __init__(self):
self.registered = {}
- self.markings = collections.defaultdict(list)
+ self.initialized = []
def __contains__(self, item):
return self.is_registered(item)
@@ -293,11 +292,13 @@ class ContentHandlers(object):
def is_registered(self, content_type):
return content_type in self.registered
- def register(self, mod):
+ def register(self, mod, initialized=False):
types = set()
for t in mod.list_types():
self.registered[t] = mod
types.add(t)
+ if initialized and mod not in self.initialized:
+ self.initialized.append(mod)
return types
def _get_handler(self, content_type):
diff --git a/cloudinit/stages.py b/cloudinit/stages.py
index ba974a3e..fade1182 100644
--- a/cloudinit/stages.py
+++ b/cloudinit/stages.py
@@ -386,12 +386,12 @@ class Init(object):
def init_handlers():
# Init the handlers first
for (_ctype, mod) in c_handlers.iteritems():
- if 'initialized' in c_handlers.markings[mod]:
+ if mod in c_handlers.initialized:
# Avoid initing the same module twice (if said module
# is registered to more than one content-type).
continue
handlers.call_begin(mod, data, frequency)
- c_handlers.markings[mod].append('initialized')
+ c_handlers.initialized.append(mod)
def walk_handlers():
# Walk the user data
@@ -413,16 +413,11 @@ class Init(object):
def finalize_handlers():
# Give callbacks opportunity to finalize
for (_ctype, mod) in c_handlers.iteritems():
- mod_markings = c_handlers.markings[mod]
- if 'initialized' not in mod_markings:
+ if mod not in c_handlers.initialized:
# Said module was never inited in the first place, so lets
# not attempt to finalize those that never got called.
continue
- if 'finalized' in mod_markings:
- # Avoid finalizing the same module twice (if said module
- # is registered to more than one content-type).
- continue
- c_handlers.markings[mod].append('finalized')
+ c_handlers.initialized.remove(mod)
try:
handlers.call_end(mod, data, frequency)
except: