Submit
Path:
~
/
/
lib
/
python3.9
/
site-packages
/
cloudinit
/
sources
/
File Content:
DataSourceCloudSigma.py
# Copyright (C) 2014 CloudSigma # # Author: Kiril Vladimiroff <kiril.vladimiroff@cloudsigma.com> # # This file is part of cloud-init. See LICENSE file for license information. import logging import re from base64 import b64decode from cloudinit import dmi, sources from cloudinit.sources import DataSourceHostname from cloudinit.sources.helpers.cloudsigma import SERIAL_PORT, Cepko LOG = logging.getLogger(__name__) class DataSourceCloudSigma(sources.DataSource): """ Uses cepko in order to gather the server context from the VM. For more information about CloudSigma's Server Context: http://cloudsigma-docs.readthedocs.org/en/latest/server_context.html """ dsname = "CloudSigma" def __init__(self, sys_cfg, distro, paths): self.cepko = Cepko() self.ssh_public_key = "" sources.DataSource.__init__(self, sys_cfg, distro, paths) @staticmethod def ds_detect(): """ Uses dmi data to detect if this instance of cloud-init is running in the CloudSigma's infrastructure. """ LOG.debug("determining hypervisor product name via dmi data") sys_product_name = dmi.read_dmi_data("system-product-name") if not sys_product_name: LOG.debug("system-product-name not available in dmi data") return False LOG.debug("detected hypervisor as %s", sys_product_name) return "cloudsigma" in sys_product_name.lower() def _get_data(self): """ Metadata is the whole server context and /meta/cloud-config is used as userdata. """ dsmode = None try: server_context = self.cepko.all().result server_meta = server_context["meta"] except Exception: # TODO: check for explicit "config on", and then warn # but since no explicit config is available now, just debug. LOG.debug("CloudSigma: Unable to read from serial port") return False self.dsmode = self._determine_dsmode( [server_meta.get("cloudinit-dsmode")] ) if dsmode == sources.DSMODE_DISABLED: return False base64_fields = server_meta.get("base64_fields", "").split(",") self.userdata_raw = server_meta.get("cloudinit-user-data", "") if "cloudinit-user-data" in base64_fields: self.userdata_raw = b64decode(self.userdata_raw) if "cloudinit" in server_context.get("vendor_data", {}): self.vendordata_raw = server_context["vendor_data"]["cloudinit"] self.metadata = server_context self.ssh_public_key = server_meta["ssh_public_key"] return True def _get_subplatform(self): """Return the subplatform metadata source details.""" return "cepko (%s)" % SERIAL_PORT def get_hostname(self, fqdn=False, resolve_ip=False, metadata_only=False): """ Cleans up and uses the server's name if the latter is set. Otherwise the first part from uuid is being used. """ if re.match(r"^[A-Za-z0-9 -_\.]+$", self.metadata["name"]): ret = self.metadata["name"][:61] else: ret = self.metadata["uuid"].split("-")[0] return DataSourceHostname(ret, False) def get_public_ssh_keys(self): return [self.ssh_public_key] def get_instance_id(self): return self.metadata["uuid"] # Legacy: Must be present in case we load an old pkl object DataSourceCloudSigmaNet = DataSourceCloudSigma # Used to match classes to dependencies. Since this datasource uses the serial # port network is not really required, so it's okay to load without it, too. datasources = [ (DataSourceCloudSigma, (sources.DEP_FILESYSTEM,)), ] def get_datasource_list(depends): """ Return a list of data sources that match this set of dependencies """ return sources.list_from_depends(depends, datasources)
Edit
Rename
Chmod
Delete
FILE
FOLDER
Name
Size
Permission
Action
__pycache__
---
0755
azure
---
0755
helpers
---
0755
DataSourceAkamai.py
12960 bytes
0644
DataSourceAliYun.py
15578 bytes
0644
DataSourceAltCloud.py
8622 bytes
0644
DataSourceAzure.py
77321 bytes
0644
DataSourceBigstep.py
1946 bytes
0644
DataSourceCloudCIX.py
5311 bytes
0644
DataSourceCloudSigma.py
3956 bytes
0644
DataSourceCloudStack.py
11481 bytes
0644
DataSourceConfigDrive.py
11498 bytes
0644
DataSourceDigitalOcean.py
4300 bytes
0644
DataSourceEc2.py
42764 bytes
0644
DataSourceExoscale.py
8760 bytes
0644
DataSourceGCE.py
13646 bytes
0644
DataSourceHetzner.py
5520 bytes
0644
DataSourceIBMCloud.py
14999 bytes
0644
DataSourceLXD.py
17617 bytes
0644
DataSourceMAAS.py
15209 bytes
0644
DataSourceNWCS.py
4513 bytes
0644
DataSourceNoCloud.py
16366 bytes
0644
DataSourceNone.py
1304 bytes
0644
DataSourceOVF.py
13003 bytes
0644
DataSourceOpenNebula.py
16042 bytes
0644
DataSourceOpenStack.py
10343 bytes
0644
DataSourceOracle.py
21580 bytes
0644
DataSourceRbxCloud.py
8066 bytes
0644
DataSourceScaleway.py
15082 bytes
0644
DataSourceSmartOS.py
35081 bytes
0644
DataSourceUpCloud.py
5321 bytes
0644
DataSourceVMware.py
36157 bytes
0644
DataSourceVultr.py
4614 bytes
0644
DataSourceWSL.py
14716 bytes
0644
__init__.py
44674 bytes
0644
N4ST4R_ID | Naxtarrr