diff options
Diffstat (limited to 'cloudinit')
| -rw-r--r-- | cloudinit/config/cc_resolv_conf.py | 29 | ||||
| -rw-r--r-- | cloudinit/ec2_utils.py | 4 | ||||
| -rw-r--r-- | cloudinit/settings.py | 2 | ||||
| -rw-r--r-- | cloudinit/sources/DataSourceCloudStack.py | 3 | 
4 files changed, 24 insertions, 14 deletions
| diff --git a/cloudinit/config/cc_resolv_conf.py b/cloudinit/config/cc_resolv_conf.py index 879b62b1..bbaa6c63 100644 --- a/cloudinit/config/cc_resolv_conf.py +++ b/cloudinit/config/cc_resolv_conf.py @@ -49,23 +49,22 @@  # +from cloudinit import log as logging  from cloudinit.settings import PER_INSTANCE  from cloudinit import templater  from cloudinit import util +LOG = logging.getLogger(__name__) +  frequency = PER_INSTANCE  distros = ['fedora', 'rhel', 'sles'] -def generate_resolv_conf(cloud, log, params): -    template_fn = cloud.get_template_filename('resolv.conf') -    if not template_fn: -        log.warn("No template found, not rendering /etc/resolv.conf") -        return - +def generate_resolv_conf(template_fn, params, target_fname="/etc/resolv.conf"):      flags = []      false_flags = [] +      if 'options' in params:          for key, val in params['options'].iteritems():              if type(val) == bool: @@ -77,12 +76,15 @@ def generate_resolv_conf(cloud, log, params):      for flag in flags + false_flags:          del params['options'][flag] +    if not params.get('options'): +        params['options'] = {} +      params['flags'] = flags -    log.debug("Writing resolv.conf from template %s" % template_fn) -    templater.render_to_file(template_fn, '/etc/resolv.conf', params) +    LOG.debug("Writing resolv.conf from template %s" % template_fn) +    templater.render_to_file(template_fn, target_fname, params) -def handle(name, cfg, _cloud, log, _args): +def handle(name, cfg, cloud, log, _args):      """      Handler for resolv.conf @@ -102,8 +104,13 @@ def handle(name, cfg, _cloud, log, _args):                     " 'manage_resolv_conf' present but set to False"), name)          return -    if not "resolv_conf" in cfg: +    if "resolv_conf" not in cfg:          log.warn("manage_resolv_conf True but no parameters provided!") -    generate_resolv_conf(_cloud, log, cfg["resolv_conf"]) +    template_fn = cloud.get_template_filename('resolv.conf') +    if not template_fn: +        log.warn("No template found, not rendering /etc/resolv.conf") +        return + +    generate_resolv_conf(template_fn=template_fn, params=cfg["resolv_conf"])      return diff --git a/cloudinit/ec2_utils.py b/cloudinit/ec2_utils.py index a7c9c9ab..0c751140 100644 --- a/cloudinit/ec2_utils.py +++ b/cloudinit/ec2_utils.py @@ -166,7 +166,9 @@ def get_instance_metadata(api_version='latest',                            metadata_address='http://169.254.169.254',                            ssl_details=None, timeout=5, retries=5):      md_url = url_helper.combine_url(metadata_address, api_version) -    md_url = url_helper.combine_url(md_url, 'meta-data') +    # Note, 'meta-data' explicitly has trailing /. +    # this is required for CloudStack (LP: #1356855) +    md_url = url_helper.combine_url(md_url, 'meta-data/')      caller = functools.partial(util.read_file_or_url,                                 ssl_details=ssl_details, timeout=timeout,                                 retries=retries) diff --git a/cloudinit/settings.py b/cloudinit/settings.py index 37d4958b..5efcb0b0 100644 --- a/cloudinit/settings.py +++ b/cloudinit/settings.py @@ -37,7 +37,7 @@ CFG_BUILTIN = {          'OVF',          'MAAS',          'GCE', -        'OpenStack' +        'OpenStack',          'Ec2',          'CloudSigma',          'CloudStack', diff --git a/cloudinit/sources/DataSourceCloudStack.py b/cloudinit/sources/DataSourceCloudStack.py index 08f661e4..1bbeca59 100644 --- a/cloudinit/sources/DataSourceCloudStack.py +++ b/cloudinit/sources/DataSourceCloudStack.py @@ -78,7 +78,8 @@ class DataSourceCloudStack(sources.DataSource):          (max_wait, timeout) = self._get_url_settings() -        urls = [self.metadata_address + "/latest/meta-data/instance-id"] +        urls = [uhelp.combine_url(self.metadata_address, +                                  'latest/meta-data/instance-id')]          start_time = time.time()          url = uhelp.wait_for_url(urls=urls, max_wait=max_wait,                                  timeout=timeout, status_cb=LOG.warn) | 
