~ubuntu-branches/ubuntu/quantal/cloud-init/quantal

« back to all changes in this revision

Viewing changes to cloudinit/url_helper.py

  • Committer: Package Import Robot
  • Author(s): Scott Moser
  • Date: 2012-09-30 14:29:04 UTC
  • Revision ID: package-import@ubuntu.com-20120930142904-nq8fkve62i0xytqz
* add CloudStack to DataSources listed by dpkg-reconfigure (LP: #1002155)
* New upstream snapshot.
  * 0440 permissions on /etc/sudoers.d files rather than 0644
  * get host ssh keys to the console (LP: #1055688)
  * MAAS DataSource adjust timestamp in oauth header to one based on the
    timestamp in the response of a 403.  This accounts for a bad local
    clock. (LP: #978127)
  * re-start the salt daemon rather than start to ensure config changes
    are taken.
  * allow for python unicode types in yaml that is loaded.
  * cleanup in how config modules get at users and groups.

Show diffs side-by-side

added added

removed removed

Lines of Context:
136
136
 
137
137
 
138
138
def wait_for_url(urls, max_wait=None, timeout=None,
139
 
                 status_cb=None, headers_cb=None, sleep_time=1):
 
139
                 status_cb=None, headers_cb=None, sleep_time=1,
 
140
                 exception_cb=None):
140
141
    """
141
142
    urls:      a list of urls to try
142
143
    max_wait:  roughly the maximum time to wait before giving up
146
147
    status_cb: call method with string message when a url is not available
147
148
    headers_cb: call method with single argument of url to get headers
148
149
                for request.
 
150
    exception_cb: call method with 2 arguments 'msg' (per status_cb) and
 
151
                  'exception', the exception that occurred.
149
152
 
150
153
    the idea of this routine is to wait for the EC2 metdata service to
151
154
    come up.  On both Eucalyptus and EC2 we have seen the case where
164
167
    """
165
168
    start_time = time.time()
166
169
 
167
 
    def log_status_cb(msg):
 
170
    def log_status_cb(msg, exc=None):
168
171
        LOG.debug(msg)
169
172
 
170
173
    if status_cb is None:
196
199
                resp = readurl(url, headers=headers, timeout=timeout)
197
200
                if not resp.contents:
198
201
                    reason = "empty response [%s]" % (resp.code)
 
202
                    e = ValueError(reason)
199
203
                elif not resp.ok():
200
204
                    reason = "bad status code [%s]" % (resp.code)
 
205
                    e = ValueError(reason)
201
206
                else:
202
207
                    return url
203
208
            except urllib2.HTTPError as e:
214
219
                                                             time_taken,
215
220
                                                             max_wait, reason)
216
221
            status_cb(status_msg)
 
222
            if exception_cb:
 
223
                exception_cb(msg=status_msg, exception=e)
217
224
 
218
225
        if timeup(max_wait, start_time):
219
226
            break