Blame cloudinit/sources/DataSourceAliYun.py

Packit Service a04d08
# This file is part of cloud-init. See LICENSE file for license information.
Packit Service a04d08
Packit Service a04d08
from cloudinit import sources
Packit Service a04d08
from cloudinit.sources import DataSourceEc2 as EC2
Packit Service a04d08
from cloudinit import util
Packit Service a04d08
Packit Service a04d08
ALIYUN_PRODUCT = "Alibaba Cloud ECS"
Packit Service a04d08
Packit Service a04d08
Packit Service a04d08
class DataSourceAliYun(EC2.DataSourceEc2):
Packit Service a04d08
Packit Service a04d08
    dsname = 'AliYun'
Packit Service a04d08
    metadata_urls = ['http://100.100.100.200']
Packit Service a04d08
Packit Service a04d08
    # The minimum supported metadata_version from the ec2 metadata apis
Packit Service a04d08
    min_metadata_version = '2016-01-01'
Packit Service a04d08
    extended_metadata_versions = []
Packit Service a04d08
Packit Service a04d08
    def get_hostname(self, fqdn=False, resolve_ip=False, metadata_only=False):
Packit Service a04d08
        return self.metadata.get('hostname', 'localhost.localdomain')
Packit Service a04d08
Packit Service a04d08
    def get_public_ssh_keys(self):
Packit Service a04d08
        return parse_public_keys(self.metadata.get('public-keys', {}))
Packit Service a04d08
Packit Service a04d08
    def _get_cloud_name(self):
Packit Service a04d08
        if _is_aliyun():
Packit Service a04d08
            return EC2.CloudNames.ALIYUN
Packit Service a04d08
        else:
Packit Service a04d08
            return EC2.CloudNames.NO_EC2_METADATA
Packit Service a04d08
Packit Service a04d08
Packit Service a04d08
def _is_aliyun():
Packit Service a04d08
    return util.read_dmi_data('system-product-name') == ALIYUN_PRODUCT
Packit Service a04d08
Packit Service a04d08
Packit Service a04d08
def parse_public_keys(public_keys):
Packit Service a04d08
    keys = []
Packit Service a04d08
    for _key_id, key_body in public_keys.items():
Packit Service a04d08
        if isinstance(key_body, str):
Packit Service a04d08
            keys.append(key_body.strip())
Packit Service a04d08
        elif isinstance(key_body, list):
Packit Service a04d08
            keys.extend(key_body)
Packit Service a04d08
        elif isinstance(key_body, dict):
Packit Service a04d08
            key = key_body.get('openssh-key', [])
Packit Service a04d08
            if isinstance(key, str):
Packit Service a04d08
                keys.append(key.strip())
Packit Service a04d08
            elif isinstance(key, list):
Packit Service a04d08
                keys.extend(key)
Packit Service a04d08
    return keys
Packit Service a04d08
Packit Service a04d08
Packit Service a04d08
# Used to match classes to dependencies
Packit Service a04d08
datasources = [
Packit Service a04d08
    (DataSourceAliYun, (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