summaryrefslogtreecommitdiff
path: root/cloudinit/filters
diff options
context:
space:
mode:
authorJoshua Harlow <harlowja@yahoo-inc.com>2012-08-27 20:51:00 -0700
committerJoshua Harlow <harlowja@yahoo-inc.com>2012-08-27 20:51:00 -0700
commit2e51e2efc292870479a7b972c7ebc9ceac85da6f (patch)
tree7ae5688835309fa24c9f0ffe3f6876cbe964591e /cloudinit/filters
parent92b99b325b2d437825cc87253e76c756a136ff28 (diff)
downloadvyos-cloud-init-2e51e2efc292870479a7b972c7ebc9ceac85da6f.tar.gz
vyos-cloud-init-2e51e2efc292870479a7b972c7ebc9ceac85da6f.zip
For the userdata 'post-filtering' add in a new folder that
can contain filters that serve this purpose only and add in the initial launch-index filter and replace the code in the datasource class that previously did this.
Diffstat (limited to 'cloudinit/filters')
-rw-r--r--cloudinit/filters/__init__.py21
-rw-r--r--cloudinit/filters/launch_index.py63
2 files changed, 84 insertions, 0 deletions
diff --git a/cloudinit/filters/__init__.py b/cloudinit/filters/__init__.py
new file mode 100644
index 00000000..da124641
--- /dev/null
+++ b/cloudinit/filters/__init__.py
@@ -0,0 +1,21 @@
+# vi: ts=4 expandtab
+#
+# Copyright (C) 2012 Canonical Ltd.
+# Copyright (C) 2012 Hewlett-Packard Development Company, L.P.
+# Copyright (C) 2012 Yahoo! Inc.
+#
+# Author: Scott Moser <scott.moser@canonical.com>
+# Author: Juerg Haefliger <juerg.haefliger@hp.com>
+# Author: Joshua Harlow <harlowja@yahoo-inc.com>
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License version 3, as
+# published by the Free Software Foundation.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
diff --git a/cloudinit/filters/launch_index.py b/cloudinit/filters/launch_index.py
new file mode 100644
index 00000000..b9e108c4
--- /dev/null
+++ b/cloudinit/filters/launch_index.py
@@ -0,0 +1,63 @@
+# vi: ts=4 expandtab
+#
+# Copyright (C) 2012 Canonical Ltd.
+# Copyright (C) 2012 Hewlett-Packard Development Company, L.P.
+# Copyright (C) 2012 Yahoo! Inc.
+#
+# Author: Scott Moser <scott.moser@canonical.com>
+# Author: Juerg Haefliger <juerg.haefliger@hp.com>
+# Author: Joshua Harlow <harlowja@yahoo-inc.com>
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License version 3, as
+# published by the Free Software Foundation.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+import copy
+
+from cloudinit import log as logging
+from cloudinit import user_data as ud
+from cloudinit import util
+
+LOG = logging.getLogger(__name__)
+
+
+class Filter(object):
+ def __init__(self, wanted_idx, allow_none=True):
+ self.wanted_idx = wanted_idx
+ self.allow_none = allow_none
+
+ def _select(self, message):
+ if ud.is_skippable(message):
+ return False
+ msg_idx = message.get('Launch-Index', None)
+ if self.allow_none and msg_idx is None:
+ return True
+ msg_idx = util.safe_int(msg_idx)
+ if msg_idx != self.wanted_idx:
+ return False
+ return True
+
+ def apply(self, base_message):
+ if not base_message.is_multipart() or self.wanted_idx is None:
+ return base_message
+ prev_msgs = base_message.get_payload(decode=False)
+ to_attach = []
+ for sub_msg in base_message.walk():
+ if self._select(sub_msg):
+ to_attach.append(sub_msg)
+ if len(prev_msgs) != len(to_attach):
+ LOG.debug(("Discarding %s multipart messages "
+ "which do not match launch index %s"),
+ (len(prev_msgs) - len(to_attach)), self.wanted_idx)
+ filtered_msg = copy.deepcopy(base_message)
+ filtered_msg.set_payload(to_attach)
+ filtered_msg[ud.ATTACHMENT_FIELD] = str(len(to_attach))
+ return filtered_msg