diff options
author | kaihuan.pkh <kaihuan.pkh@alibaba-inc.com> | 2016-10-13 20:31:49 +0800 |
---|---|---|
committer | Scott Moser <smoser@brickies.net> | 2016-11-01 08:39:53 -0400 |
commit | 4f8ceffb2e3a9feefcb718bda7a7f0f21ef7ab7c (patch) | |
tree | c168b5f10d9d6284f36a2ca0754fd56fecebc5f9 /cloudinit/sources/DataSourceAliYun.py | |
parent | c12f4dd835077e3aa39e9056c25f136ff6a6655b (diff) | |
download | vyos-cloud-init-4f8ceffb2e3a9feefcb718bda7a7f0f21ef7ab7c.tar.gz vyos-cloud-init-4f8ceffb2e3a9feefcb718bda7a7f0f21ef7ab7c.zip |
AliYun: Add new datasource for Ali-Cloud ECS
Support AliYun(Ali-Cloud ECS). This datasource inherits from EC2,
the main difference is the meta-server address is changed to
100.100.100.200.
The datasource behaves similarly to EC2 and relies on network polling.
As such, it is not enabled by default.
Diffstat (limited to 'cloudinit/sources/DataSourceAliYun.py')
-rw-r--r-- | cloudinit/sources/DataSourceAliYun.py | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/cloudinit/sources/DataSourceAliYun.py b/cloudinit/sources/DataSourceAliYun.py new file mode 100644 index 00000000..19957212 --- /dev/null +++ b/cloudinit/sources/DataSourceAliYun.py @@ -0,0 +1,49 @@ +# vi: ts=4 expandtab + +import os + +from cloudinit import sources +from cloudinit.sources import DataSourceEc2 as EC2 + +DEF_MD_VERSION = "2016-01-01" + + +class DataSourceAliYun(EC2.DataSourceEc2): + metadata_urls = ["http://100.100.100.200"] + + def __init__(self, sys_cfg, distro, paths): + super(DataSourceAliYun, self).__init__(sys_cfg, distro, paths) + self.seed_dir = os.path.join(paths.seed_dir, "AliYun") + self.api_ver = DEF_MD_VERSION + + def get_hostname(self, fqdn=False, _resolve_ip=False): + return self.metadata.get('hostname', 'localhost.localdomain') + + def get_public_ssh_keys(self): + return parse_public_keys(self.metadata.get('public-keys', {})) + + +def parse_public_keys(public_keys): + keys = [] + for key_id, key_body in public_keys.items(): + if isinstance(key_body, str): + keys.append(key_body.strip()) + elif isinstance(key_body, list): + keys.extend(key_body) + elif isinstance(key_body, dict): + key = key_body.get('openssh-key', []) + if isinstance(key, str): + keys.append(key.strip()) + elif isinstance(key, list): + keys.extend(key) + return keys + +# Used to match classes to dependencies +datasources = [ + (DataSourceAliYun, (sources.DEP_FILESYSTEM, sources.DEP_NETWORK)), +] + + +# Return a list of data sources that match this set of dependencies +def get_datasource_list(depends): + return sources.list_from_depends(depends, datasources) |