|
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
|