diff options
author | Kiril Vladimiroff <kiril.vladimiroff@cloudsigma.com> | 2014-05-30 14:19:10 +0300 |
---|---|---|
committer | Kiril Vladimiroff <kiril.vladimiroff@cloudsigma.com> | 2014-05-30 14:19:10 +0300 |
commit | 71d817c427f06e9e1f5d547d5db191e541963d31 (patch) | |
tree | 5ec59777a294f28f866e2000cc7ab1d4ee0f3cf6 /cloudinit | |
parent | 882f7186143c337e0f30f4ed2c0415f238ed5c83 (diff) | |
download | vyos-cloud-init-71d817c427f06e9e1f5d547d5db191e541963d31.tar.gz vyos-cloud-init-71d817c427f06e9e1f5d547d5db191e541963d31.zip |
Use dmidecode to detect if cloud-init runs in CloudSigma's infrastructure
Diffstat (limited to 'cloudinit')
-rw-r--r-- | cloudinit/sources/DataSourceCloudSigma.py | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/cloudinit/sources/DataSourceCloudSigma.py b/cloudinit/sources/DataSourceCloudSigma.py index e1c7e566..fffff91e 100644 --- a/cloudinit/sources/DataSourceCloudSigma.py +++ b/cloudinit/sources/DataSourceCloudSigma.py @@ -20,6 +20,7 @@ import re from cloudinit import log as logging from cloudinit import sources +from cloudinit import util from cloudinit.cs_utils import Cepko LOG = logging.getLogger(__name__) @@ -40,12 +41,33 @@ class DataSourceCloudSigma(sources.DataSource): self.ssh_public_key = '' sources.DataSource.__init__(self, sys_cfg, distro, paths) + def is_running_in_cloudsigma(self): + """ + Uses dmidecode to detect if this instance of cloud-init is running + in the CloudSigma's infrastructure. + """ + dmidecode_path = util.which('dmidecode') + if not dmidecode_path: + return False + + LOG.debug("Determining hypervisor product name via dmidecode") + try: + system_product_name, _ = util.subp([dmidecode_path, "-s", "system-product-name"]) + return 'cloudsigma' in system_product_name.lower() + except: + LOG.exception("Failed to get hypervisor product name") + + return False + def get_data(self): """ Metadata is the whole server context and /meta/cloud-config is used as userdata. """ dsmode = None + if not self.is_running_in_cloudsigma(): + return False + try: server_context = self.cepko.all().result server_meta = server_context['meta'] |