GIF89; GIF89; %PDF- %PDF-
__ __ __ __ _____ _ _ _____ _ _ _ | \/ | \ \ / / | __ \ (_) | | / ____| | | | | | \ / |_ __\ V / | |__) | __ ___ ____ _| |_ ___ | (___ | |__ ___| | | | |\/| | '__|> < | ___/ '__| \ \ / / _` | __/ _ \ \___ \| '_ \ / _ \ | | | | | | |_ / . \ | | | | | |\ V / (_| | || __/ ____) | | | | __/ | | |_| |_|_(_)_/ \_\ |_| |_| |_| \_/ \__,_|\__\___| |_____/|_| |_|\___V 2.1 if you need WebShell for Seo everyday contact me on Telegram Telegram Address : @jackleetFor_More_Tools:
# 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 logging
from typing import Tuple
import cloudinit.sources.helpers.vultr as vultr
from cloudinit import sources, stages, util, version
LOG = logging.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"
sensitive_metadata_keys: Tuple[str, ...] = (
sources.DataSource.sensitive_metadata_keys + ("startup-script",)
)
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,
]
)
self.netcfg = None
@staticmethod
def ds_detect():
return vultr.is_vultr()
# Initiate data and check if Vultr
def _get_data(self):
LOG.debug("Machine is a Vultr instance")
# Fetch metadata
self.metadata = self.get_metadata()
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("SUBID: %s", self.metadata["instance-id"])
LOG.debug("Hostname: %s", self.metadata["local-hostname"])
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.
vultr.add_interface_names(md["cloud_interfaces"])
self.netcfg = 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.distro,
self.ds_cfg["url"],
self.ds_cfg["timeout"],
self.ds_cfg["retries"],
self.ds_cfg["wait"],
self.ds_cfg["user-agent"],
tmp_dir=self.distro.get_tmp_exec_path(),
)
# 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)
# It should probably be safe to try to detect distro via stages.Init(),
# which will fall back to Ubuntu if no distro config is found.
# this distro object is only used for dhcp fallback. Feedback from user(s)
# of __main__ would help determine if a better approach exists.
#
# we don't needReportEventStack, so reporter=True
distro = stages.Init(reporter=True).distro
md = vultr.get_metadata(
distro,
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()
| Name | Type | Size | Permission | Actions |
|---|---|---|---|---|
| __pycache__ | Folder | 0755 |
|
|
| azure | Folder | 0755 |
|
|
| helpers | Folder | 0755 |
|
|
| DataSourceAkamai.py | File | 12.66 KB | 0644 |
|
| DataSourceAliYun.py | File | 15.23 KB | 0644 |
|
| DataSourceAltCloud.py | File | 8.42 KB | 0644 |
|
| DataSourceAzure.py | File | 77.4 KB | 0644 |
|
| DataSourceBigstep.py | File | 1.9 KB | 0644 |
|
| DataSourceCloudCIX.py | File | 5.19 KB | 0644 |
|
| DataSourceCloudSigma.py | File | 3.86 KB | 0644 |
|
| DataSourceCloudStack.py | File | 12.87 KB | 0644 |
|
| DataSourceConfigDrive.py | File | 11.23 KB | 0644 |
|
| DataSourceDigitalOcean.py | File | 4.2 KB | 0644 |
|
| DataSourceEc2.py | File | 42.67 KB | 0644 |
|
| DataSourceExoscale.py | File | 8.62 KB | 0644 |
|
| DataSourceGCE.py | File | 13.65 KB | 0644 |
|
| DataSourceHetzner.py | File | 5.69 KB | 0644 |
|
| DataSourceIBMCloud.py | File | 14.65 KB | 0644 |
|
| DataSourceLXD.py | File | 17.24 KB | 0644 |
|
| DataSourceMAAS.py | File | 14.85 KB | 0644 |
|
| DataSourceNWCS.py | File | 4.41 KB | 0644 |
|
| DataSourceNoCloud.py | File | 15.65 KB | 0644 |
|
| DataSourceNone.py | File | 1.27 KB | 0644 |
|
| DataSourceOVF.py | File | 12.83 KB | 0644 |
|
| DataSourceOpenNebula.py | File | 15.67 KB | 0644 |
|
| DataSourceOpenStack.py | File | 10.2 KB | 0644 |
|
| DataSourceOracle.py | File | 20.13 KB | 0644 |
|
| DataSourceRbxCloud.py | File | 7.85 KB | 0644 |
|
| DataSourceScaleway.py | File | 14.73 KB | 0644 |
|
| DataSourceSmartOS.py | File | 34.25 KB | 0644 |
|
| DataSourceUpCloud.py | File | 5.2 KB | 0644 |
|
| DataSourceVMware.py | File | 41.78 KB | 0644 |
|
| DataSourceVultr.py | File | 4.51 KB | 0644 |
|
| DataSourceWSL.py | File | 16.93 KB | 0644 |
|
| __init__.py | File | 44.46 KB | 0644 |
|