cloudbase-init/cloudbaseinit/metadata/services/ec2service.py

78 lines
2.7 KiB
Python

# Copyright 2014 Cloudbase Solutions Srl
# Copyright 2012 Mirantis Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
from oslo_log import log as oslo_logging
from cloudbaseinit import conf as cloudbaseinit_conf
from cloudbaseinit.metadata.services import base
from cloudbaseinit.utils import network
CONF = cloudbaseinit_conf.CONF
LOG = oslo_logging.getLogger(__name__)
class EC2Service(base.BaseHTTPMetadataService):
_metadata_version = '2009-04-04'
def __init__(self):
super(EC2Service, self).__init__(
base_url=CONF.ec2.metadata_base_url,
https_allow_insecure=CONF.ec2.https_allow_insecure,
https_ca_bundle=CONF.ec2.https_ca_bundle)
self._enable_retry = True
def load(self):
super(EC2Service, self).load()
if CONF.ec2.add_metadata_private_ip_route:
network.check_metadata_ip_route(CONF.ec2.metadata_base_url)
try:
self.get_host_name()
return True
except Exception as ex:
LOG.exception(ex)
LOG.debug('Metadata not found at URL \'%s\'' %
CONF.ec2.metadata_base_url)
return False
def get_host_name(self):
return self._get_cache_data('%s/meta-data/local-hostname' %
self._metadata_version, decode=True)
def get_instance_id(self):
return self._get_cache_data('%s/meta-data/instance-id' %
self._metadata_version, decode=True)
def get_user_data(self):
return self._get_cache_data('%s/user-data' %
self._metadata_version)
def get_public_keys(self):
ssh_keys = []
keys_info = self._get_cache_data(
'%s/meta-data/public-keys' %
self._metadata_version, decode=True).splitlines()
for key_info in keys_info:
(idx, key_name) = key_info.split('=')
ssh_key = self._get_cache_data(
'%(version)s/meta-data/public-keys/%(idx)s/openssh-key' %
{'version': self._metadata_version, 'idx': idx}, decode=True)
ssh_keys.append(ssh_key.strip())
return ssh_keys