Blame cloudinit/sources/DataSourceBigstep.py

Packit Service a04d08
# Copyright (C) 2015-2016 Bigstep Cloud Ltd.
Packit Service a04d08
#
Packit Service a04d08
# Author: Alexandru Sirbu <alexandru.sirbu@bigstep.com>
Packit Service a04d08
#
Packit Service a04d08
# This file is part of cloud-init. See LICENSE file for license information.
Packit Service a04d08
Packit Service a04d08
import errno
Packit Service a04d08
import json
Packit Service a04d08
Packit Service a04d08
from cloudinit import log as logging
Packit Service a04d08
from cloudinit import sources
Packit Service a04d08
from cloudinit import url_helper
Packit Service a04d08
from cloudinit import util
Packit Service a04d08
Packit Service a04d08
LOG = logging.getLogger(__name__)
Packit Service a04d08
Packit Service a04d08
Packit Service a04d08
class DataSourceBigstep(sources.DataSource):
Packit Service a04d08
Packit Service a04d08
    dsname = 'Bigstep'
Packit Service a04d08
Packit Service a04d08
    def __init__(self, sys_cfg, distro, paths):
Packit Service a04d08
        sources.DataSource.__init__(self, sys_cfg, distro, paths)
Packit Service a04d08
        self.metadata = {}
Packit Service a04d08
        self.vendordata_raw = ""
Packit Service a04d08
        self.userdata_raw = ""
Packit Service a04d08
Packit Service a04d08
    def _get_data(self, apply_filter=False):
Packit Service a04d08
        url = get_url_from_file()
Packit Service a04d08
        if url is None:
Packit Service a04d08
            return False
Packit Service a04d08
        response = url_helper.readurl(url)
Packit Service a04d08
        decoded = json.loads(response.contents.decode())
Packit Service a04d08
        self.metadata = decoded["metadata"]
Packit Service a04d08
        self.vendordata_raw = decoded["vendordata_raw"]
Packit Service a04d08
        self.userdata_raw = decoded["userdata_raw"]
Packit Service a04d08
        return True
Packit Service a04d08
Packit Service a04d08
    def _get_subplatform(self):
Packit Service a04d08
        """Return the subplatform metadata source details."""
Packit Service a04d08
        return 'metadata (%s)' % get_url_from_file()
Packit Service a04d08
Packit Service a04d08
Packit Service a04d08
def get_url_from_file():
Packit Service a04d08
    try:
Packit Service a04d08
        content = util.load_file("/var/lib/cloud/data/seed/bigstep/url")
Packit Service a04d08
    except IOError as e:
Packit Service a04d08
        # If the file doesn't exist, then the server probably isn't a Bigstep
Packit Service a04d08
        # instance; otherwise, another problem exists which needs investigation
Packit Service a04d08
        if e.errno == errno.ENOENT:
Packit Service a04d08
            return None
Packit Service a04d08
        else:
Packit Service a04d08
            raise
Packit Service a04d08
    return content
Packit Service a04d08
Packit Service a04d08
Packit Service a04d08
# Used to match classes to dependencies
Packit Service a04d08
datasources = [
Packit Service a04d08
    (DataSourceBigstep, (sources.DEP_FILESYSTEM, sources.DEP_NETWORK)),
Packit Service a04d08
]
Packit Service a04d08
Packit Service a04d08
Packit Service a04d08
# Return a list of data sources that match this set of dependencies
Packit Service a04d08
def get_datasource_list(depends):
Packit Service a04d08
    return sources.list_from_depends(depends, datasources)
Packit Service a04d08
Packit Service a04d08
# vi: ts=4 expandtab