OXIESEC PANEL
- Current Dir:
/
/
usr
/
lib
/
python3
/
dist-packages
/
cloudinit
/
sources
Server IP: 10.0.0.4
Upload:
Create Dir:
Name
Size
Modified
Perms
📁
..
-
07/01/2022 06:30:50 AM
rwxr-xr-x
📄
DataSourceAliYun.py
1.76 KB
05/18/2022 04:04:36 PM
rw-r--r--
📄
DataSourceAltCloud.py
8.29 KB
05/18/2022 04:04:36 PM
rw-r--r--
📄
DataSourceAzure.py
84.96 KB
05/18/2022 04:04:36 PM
rw-r--r--
📄
DataSourceBigstep.py
1.76 KB
05/18/2022 04:04:36 PM
rw-r--r--
📄
DataSourceCloudSigma.py
3.91 KB
05/18/2022 04:04:36 PM
rw-r--r--
📄
DataSourceCloudStack.py
9.86 KB
05/18/2022 04:04:36 PM
rw-r--r--
📄
DataSourceConfigDrive.py
11.01 KB
05/18/2022 04:04:36 PM
rw-r--r--
📄
DataSourceDigitalOcean.py
3.81 KB
05/18/2022 04:04:36 PM
rw-r--r--
📄
DataSourceEc2.py
34.06 KB
06/15/2022 04:38:21 PM
rw-r--r--
📄
DataSourceExoscale.py
8.89 KB
05/18/2022 04:04:36 PM
rw-r--r--
📄
DataSourceGCE.py
11.79 KB
05/18/2022 04:04:36 PM
rw-r--r--
📄
DataSourceHetzner.py
5.32 KB
05/18/2022 04:04:36 PM
rw-r--r--
📄
DataSourceIBMCloud.py
14.06 KB
05/18/2022 04:04:36 PM
rw-r--r--
📄
DataSourceLXD.py
13.19 KB
05/18/2022 04:04:36 PM
rw-r--r--
📄
DataSourceMAAS.py
14.39 KB
05/18/2022 04:04:36 PM
rw-r--r--
📄
DataSourceNoCloud.py
12.2 KB
05/18/2022 04:04:36 PM
rw-r--r--
📄
DataSourceNone.py
1.36 KB
05/18/2022 04:04:36 PM
rw-r--r--
📄
DataSourceOVF.py
30.56 KB
05/18/2022 04:04:36 PM
rw-r--r--
📄
DataSourceOpenNebula.py
15.99 KB
05/18/2022 04:04:36 PM
rw-r--r--
📄
DataSourceOpenStack.py
10.23 KB
06/15/2022 04:38:21 PM
rw-r--r--
📄
DataSourceOracle.py
13.4 KB
05/18/2022 04:04:36 PM
rw-r--r--
📄
DataSourceRbxCloud.py
7.81 KB
05/18/2022 04:04:36 PM
rw-r--r--
📄
DataSourceScaleway.py
9.71 KB
05/18/2022 04:04:36 PM
rw-r--r--
📄
DataSourceSmartOS.py
34.17 KB
05/18/2022 04:04:36 PM
rw-r--r--
📄
DataSourceUpCloud.py
5.44 KB
05/18/2022 04:04:36 PM
rw-r--r--
📄
DataSourceVMware.py
28.36 KB
05/18/2022 04:04:36 PM
rw-r--r--
📄
DataSourceVultr.py
4.58 KB
05/18/2022 04:04:36 PM
rw-r--r--
📄
__init__.py
36.8 KB
05/18/2022 04:04:36 PM
rw-r--r--
📁
__pycache__
-
07/01/2022 06:30:50 AM
rwxr-xr-x
📁
helpers
-
07/01/2022 06:30:50 AM
rwxr-xr-x
Editing: DataSourceVultr.py
Close
# Author: Eric Benner <ebenner@vultr.com> # # This file is part of cloud-init. See LICENSE file for license information. # Vultr Metadata API: # https://www.vultr.com/metadata/ import cloudinit.sources.helpers.vultr as vultr from cloudinit import log as log from cloudinit import sources, util, version LOG = log.getLogger(__name__) BUILTIN_DS_CONFIG = { "url": "http://169.254.169.254", "retries": 30, "timeout": 10, "wait": 5, "user-agent": "Cloud-Init/%s - OS: %s Variant: %s" % ( version.version_string(), util.system_info()["system"], util.system_info()["variant"], ), } class DataSourceVultr(sources.DataSource): dsname = "Vultr" def __init__(self, sys_cfg, distro, paths): super(DataSourceVultr, self).__init__(sys_cfg, distro, paths) self.ds_cfg = util.mergemanydict( [ util.get_cfg_by_path(sys_cfg, ["datasource", "Vultr"], {}), BUILTIN_DS_CONFIG, ] ) # Initiate data and check if Vultr def _get_data(self): LOG.debug("Detecting if machine is a Vultr instance") if not vultr.is_vultr(): LOG.debug("Machine is not a Vultr instance") return False LOG.debug("Machine is a Vultr instance") # Fetch metadata self.metadata = self.get_metadata() self.metadata["instance-id"] = self.metadata["instance-v2-id"] self.metadata["local-hostname"] = self.metadata["hostname"] region = self.metadata["region"]["regioncode"] if "countrycode" in self.metadata["region"]: region = self.metadata["region"]["countrycode"] self.metadata["region"] = region.lower() self.userdata_raw = self.metadata["user-data"] # Generate config and process data self.get_datasource_data(self.metadata) # Dump some data so diagnosing failures is manageable LOG.debug("Vultr Vendor Config:") LOG.debug(util.json_dumps(self.metadata["vendor-data"])) LOG.debug("SUBID: %s", self.metadata["instance-id"]) LOG.debug("Hostname: %s", self.metadata["local-hostname"]) if self.userdata_raw is not None: LOG.debug("User-Data:") LOG.debug(self.userdata_raw) return True # Process metadata def get_datasource_data(self, md): # Generate network config if "cloud_interfaces" in md: # In the future we will just drop pre-configured # network configs into the array. They need names though. self.netcfg = vultr.add_interface_names(md["cloud_interfaces"]) else: self.netcfg = vultr.generate_network_config(md["interfaces"]) # Grab vendordata self.vendordata_raw = md["vendor-data"] # Default hostname is "guest" for whitelabel if self.metadata["local-hostname"] == "": self.metadata["local-hostname"] = "guest" self.userdata_raw = md["user-data"] if self.userdata_raw == "": self.userdata_raw = None # Get the metadata by flag def get_metadata(self): return vultr.get_metadata( self.ds_cfg["url"], self.ds_cfg["timeout"], self.ds_cfg["retries"], self.ds_cfg["wait"], self.ds_cfg["user-agent"], ) # Compare subid as instance id def check_instance_id(self, sys_cfg): if not vultr.is_vultr(): return False # Baremetal has no way to implement this in local if vultr.is_baremetal(): return False subid = vultr.get_sysinfo()["subid"] return sources.instance_id_matches_system_uuid(subid) # Currently unsupported @property def launch_index(self): return None @property def network_config(self): return self.netcfg # Used to match classes to dependencies datasources = [ (DataSourceVultr, (sources.DEP_FILESYSTEM,)), ] # Return a list of data sources that match this set of dependencies def get_datasource_list(depends): return sources.list_from_depends(depends, datasources) if __name__ == "__main__": import sys if not vultr.is_vultr(): print("Machine is not a Vultr instance") sys.exit(1) md = vultr.get_metadata( BUILTIN_DS_CONFIG["url"], BUILTIN_DS_CONFIG["timeout"], BUILTIN_DS_CONFIG["retries"], BUILTIN_DS_CONFIG["wait"], BUILTIN_DS_CONFIG["user-agent"], ) config = md["vendor-data"] sysinfo = vultr.get_sysinfo() print(util.json_dumps(sysinfo)) print(util.json_dumps(config)) # vi: ts=4 expandtab