diff options
author | Scott Moser <smoser@ubuntu.com> | 2012-07-09 13:50:05 -0400 |
---|---|---|
committer | Scott Moser <smoser@ubuntu.com> | 2012-07-09 13:50:05 -0400 |
commit | 972c4e0d1bcfe40414dfb08525eb0fc35cec102e (patch) | |
tree | 75b3fc822c57354932df312f235460655e2fea3e | |
parent | f1b72be4b4923d3effb80e1898f76ba0f81aab23 (diff) | |
download | vyos-cloud-init-972c4e0d1bcfe40414dfb08525eb0fc35cec102e.tar.gz vyos-cloud-init-972c4e0d1bcfe40414dfb08525eb0fc35cec102e.zip |
DataSourceEc2: only do dns check in mirror selection
This returns the check for an archive mirror in the DataSourceEc2 to
only do so by DNS resolution. The 'rework' branch had made the check
wait and timeout on attempts to reach the mirror. This resulted
in 120 seconds of waiting before failure.
For now, just go back to the old situation of checking by dns.
-rw-r--r-- | cloudinit/sources/DataSourceEc2.py | 19 | ||||
-rw-r--r-- | cloudinit/util.py | 5 | ||||
-rw-r--r-- | config/cloud.cfg | 2 |
3 files changed, 15 insertions, 11 deletions
diff --git a/cloudinit/sources/DataSourceEc2.py b/cloudinit/sources/DataSourceEc2.py index cb460de1..6f7cfd43 100644 --- a/cloudinit/sources/DataSourceEc2.py +++ b/cloudinit/sources/DataSourceEc2.py @@ -87,6 +87,7 @@ class DataSourceEc2(sources.DataSource): return self.get_mirror_from_availability_zone() def get_mirror_from_availability_zone(self, availability_zone=None): + # Return type None indicates there is no cloud specific mirror # Availability is like 'us-west-1b' or 'eu-west-1a' if availability_zone is None: availability_zone = self.get_availability_zone() @@ -94,26 +95,26 @@ class DataSourceEc2(sources.DataSource): if self.is_vpc(): return None - # Use the distro to get the mirror if not availability_zone: return None - mirror_tpl = self.distro.get_option('availability_zone_template') - if not mirror_tpl: + mirror_tpl = self.distro.get_option('package_mirror_ec2_template', None) + + if mirror_tpl is None: return None + # in EC2, the 'region' is 'us-east-1' if 'zone' is 'us-east-1a' tpl_params = { 'zone': availability_zone.strip(), + 'region': availability_zone[:-1] } mirror_url = mirror_tpl % (tpl_params) - (max_wait, timeout) = self._get_url_settings() - worked = uhelp.wait_for_url([mirror_url], max_wait=max_wait, - timeout=timeout, status_cb=LOG.warn) - if not worked: - return None + found = util.search_for_mirror([mirror_url]) + if found is not None: + return mirror_url - return mirror_url + return None def _get_url_settings(self): mcfg = self.ds_cfg diff --git a/cloudinit/util.py b/cloudinit/util.py index d7dd20b5..d0d7a303 100644 --- a/cloudinit/util.py +++ b/cloudinit/util.py @@ -805,7 +805,10 @@ def is_resolvable_url(url): def search_for_mirror(candidates): - """ Search through a list of mirror urls for one that works """ + """ + Search through a list of mirror urls for one that works + This needs to return quickly. + """ for cand in candidates: try: if is_resolvable_url(cand): diff --git a/config/cloud.cfg b/config/cloud.cfg index 5dae4047..cb51d061 100644 --- a/config/cloud.cfg +++ b/config/cloud.cfg @@ -70,5 +70,5 @@ system_info: templates_dir: /etc/cloud/templates/ upstart_dir: /etc/init/ package_mirror: http://archive.ubuntu.com/ubuntu - availability_zone_template: http://%(zone)s.ec2.archive.ubuntu.com/ubuntu/ + package_mirror_ec2_template: http://%(region)s.ec2.archive.ubuntu.com/ubuntu/ ssh_svcname: ssh |