← Back to team overview

cloud-init-dev team mailing list archive

[Merge] lp:~alexandru-sirbu/cloud-init/bigstep-datasource into lp:cloud-init

 

Alex Sirbu has proposed merging lp:~alexandru-sirbu/cloud-init/bigstep-datasource into lp:cloud-init.

Requested reviews:
  cloud init development team (cloud-init-dev)

For more details, see:
https://code.launchpad.net/~alexandru-sirbu/cloud-init/bigstep-datasource/+merge/287752

The Bigstep datasource, which looks inside the /var/lib/cloud/data/seed/bigstep/url file to get an URL which to call to obtain the cloud-init scripts, has been added.

This datasource will be used by Bigstep in provisioning its templates, by using cloudinit.
-- 
Your team cloud init development team is requested to review the proposed merge of lp:~alexandru-sirbu/cloud-init/bigstep-datasource into lp:cloud-init.
=== added file 'cloudinit/sources/DataSourceBigstep.py'
--- cloudinit/sources/DataSourceBigstep.py	1970-01-01 00:00:00 +0000
+++ cloudinit/sources/DataSourceBigstep.py	2016-03-02 08:58:50 +0000
@@ -0,0 +1,46 @@
+#
+#    Copyright (C) 2015-2016 Bigstep Cloud Ltd.
+#
+#    Author: Alexandru Sirbu <alexandru.sirbu@xxxxxxxxxxx>
+#
+
+import json
+
+from cloudinit import log as logging
+from cloudinit import sources
+from cloudinit import util
+from cloudinit import url_helper
+
+LOG = logging.getLogger(__name__)
+
+
+class DataSourceBigstep(sources.DataSource):
+    def __init__(self, sys_cfg, distro, paths):
+        sources.DataSource.__init__(self, sys_cfg, distro, paths)
+        self.metadata = {}
+        self.vendordata_raw = ""
+        self.userdata_raw = ""
+
+    def get_data(self, apply_filter=False):
+        url = get_url_from_file()
+        response = url_helper.readurl(url)
+        decoded = json.loads(response.contents)
+        self.metadata = decoded["metadata"]
+        self.vendordata_raw = decoded["vendordata_raw"]
+        self.userdata_raw = decoded["userdata_raw"]
+        return True
+
+
+def get_url_from_file():
+    content = util.load_file("/var/lib/cloud/data/seed/bigstep/url")
+    return content
+
+# Used to match classes to dependencies
+datasources = [
+    (DataSourceBigstep, (sources.DEP_FILESYSTEM, sources.DEP_NETWORK)),
+]
+
+
+# Return a list of data sources that match this set of dependencies
+def get_datasource_list(depends):
+    return sources.list_from_depends(depends, datasources)