summaryrefslogtreecommitdiff
path: root/cloudinit
diff options
context:
space:
mode:
authorScott Moser <smoser@ubuntu.com>2014-03-27 10:06:57 -0400
committerScott Moser <smoser@ubuntu.com>2014-03-27 10:06:57 -0400
commit2f9b47be819e4aa90d0cfd940557b90cbd6912de (patch)
treef39e6f00ddb1b744321c3d4072bd74ac88189759 /cloudinit
parent11d6dbfad89e3f9a56925f7671fa7ee3e86af918 (diff)
parent2ecefdf51cd93b593bea450b4d751021da91e748 (diff)
downloadvyos-cloud-init-2f9b47be819e4aa90d0cfd940557b90cbd6912de.tar.gz
vyos-cloud-init-2f9b47be819e4aa90d0cfd940557b90cbd6912de.zip
OpenNebula: support base64 encoded user-data
This change adds the possibility to have base64 encoded userdata in OpenNebula source. OpenNebula uses a text file with shell variables for storing the configuration variables (including user provided data). Some user data may not be renderable into this format, so using base64 encoding alleviates the problem. The change here allows the user to provide a second variable USERDATA_ENCODING (or USER_DATA_ENCODING) and set that value to 'base64' to indicate that USERDATA is base64 encoded.
Diffstat (limited to 'cloudinit')
-rw-r--r--cloudinit/sources/DataSourceOpenNebula.py13
1 files changed, 13 insertions, 0 deletions
diff --git a/cloudinit/sources/DataSourceOpenNebula.py b/cloudinit/sources/DataSourceOpenNebula.py
index b0464cbb..34557f8b 100644
--- a/cloudinit/sources/DataSourceOpenNebula.py
+++ b/cloudinit/sources/DataSourceOpenNebula.py
@@ -4,11 +4,13 @@
# Copyright (C) 2012 Yahoo! Inc.
# Copyright (C) 2012-2013 CERIT Scientific Cloud
# Copyright (C) 2012-2013 OpenNebula.org
+# Copyright (C) 2014 Consejo Superior de Investigaciones Cientificas
#
# Author: Scott Moser <scott.moser@canonical.com>
# Author: Joshua Harlow <harlowja@yahoo-inc.com>
# Author: Vlastimil Holer <xholer@mail.muni.cz>
# Author: Javier Fontan <jfontan@opennebula.org>
+# Author: Enol Fernandez <enolfc@ifca.unican.es>
#
# 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
@@ -22,6 +24,7 @@
# 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 base64
import os
import pwd
import re
@@ -417,6 +420,16 @@ def read_context_disk_dir(source_dir, asuser=None):
elif "USERDATA" in context:
results['userdata'] = context["USERDATA"]
+ # b64decode user data if necessary (default)
+ if 'userdata' in results:
+ encoding = context.get('USERDATA_ENCODING',
+ context.get('USER_DATA_ENCODING'))
+ if encoding == "base64":
+ try:
+ results['userdata'] = base64.b64decode(results['userdata'])
+ except TypeError:
+ LOG.warn("Failed base64 decoding of userdata")
+
# generate static /etc/network/interfaces
# only if there are any required context variables
# http://opennebula.org/documentation:rel3.8:cong#network_configuration