Merge ~smoser/cloud-init:bug/mock-meta-python3 into cloud-init:master

Proposed by Scott Moser
Status: Merged
Merged at revision: dc6e7b49bac8b87a38fe57ee621177a8177fa2c0
Proposed branch: ~smoser/cloud-init:bug/mock-meta-python3
Merge into: cloud-init:master
Diff against target: 106 lines (+21/-11)
1 file modified
tools/mock-meta.py (+21/-11)
Reviewer Review Type Date Requested Status
cloud-init Commiters Pending
Review via email: mp+315626@code.launchpad.net
To post a comment you must log in.

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
diff --git a/tools/mock-meta.py b/tools/mock-meta.py
index d74f9e3..a0d9944 100755
--- a/tools/mock-meta.py
+++ b/tools/mock-meta.py
@@ -18,10 +18,10 @@ Then:
18"""18"""
1919
20import functools20import functools
21import httplib
22import json21import json
23import logging22import logging
24import os23import os
24import socket
25import random25import random
26import string26import string
27import sys27import sys
@@ -29,7 +29,13 @@ import yaml
2929
30from optparse import OptionParser30from optparse import OptionParser
3131
32from BaseHTTPServer import (HTTPServer, BaseHTTPRequestHandler)32try:
33 from BaseHTTPServer import HTTPServer, BaseHTTPRequestHandler
34 import httplib as hclient
35except ImportError:
36 from http.server import HTTPServer, BaseHTTPRequestHandler
37 from http import client as hclient
38
3339
34log = logging.getLogger('meta-server')40log = logging.getLogger('meta-server')
3541
@@ -183,6 +189,10 @@ def get_ssh_keys():
183 return keys189 return keys
184190
185191
192class HTTPServerV6(HTTPServer):
193 address_family = socket.AF_INET6
194
195
186class MetaDataHandler(object):196class MetaDataHandler(object):
187197
188 def __init__(self, opts):198 def __init__(self, opts):
@@ -250,7 +260,7 @@ class MetaDataHandler(object):
250 key_id = int(mybe_key)260 key_id = int(mybe_key)
251 key_name = key_ids[key_id]261 key_name = key_ids[key_id]
252 except:262 except:
253 raise WebException(httplib.BAD_REQUEST,263 raise WebException(hclient.BAD_REQUEST,
254 "Unknown key id %r" % mybe_key)264 "Unknown key id %r" % mybe_key)
255 # Extract the possible sub-params265 # Extract the possible sub-params
256 result = traverse(nparams[1:], {266 result = traverse(nparams[1:], {
@@ -342,13 +352,13 @@ class Ec2Handler(BaseHTTPRequestHandler):
342 return self._get_versions352 return self._get_versions
343 date = segments[0].strip().lower()353 date = segments[0].strip().lower()
344 if date not in self._get_versions():354 if date not in self._get_versions():
345 raise WebException(httplib.BAD_REQUEST,355 raise WebException(hclient.BAD_REQUEST,
346 "Unknown version format %r" % date)356 "Unknown version format %r" % date)
347 if len(segments) < 2:357 if len(segments) < 2:
348 raise WebException(httplib.BAD_REQUEST, "No action provided")358 raise WebException(hclient.BAD_REQUEST, "No action provided")
349 look_name = segments[1].lower()359 look_name = segments[1].lower()
350 if look_name not in func_mapping:360 if look_name not in func_mapping:
351 raise WebException(httplib.BAD_REQUEST,361 raise WebException(hclient.BAD_REQUEST,
352 "Unknown requested data %r" % look_name)362 "Unknown requested data %r" % look_name)
353 base_func = func_mapping[look_name]363 base_func = func_mapping[look_name]
354 who = self.address_string()364 who = self.address_string()
@@ -371,16 +381,16 @@ class Ec2Handler(BaseHTTPRequestHandler):
371 data = func()381 data = func()
372 if not data:382 if not data:
373 data = ''383 data = ''
374 self.send_response(httplib.OK)384 self.send_response(hclient.OK)
375 self.send_header("Content-Type", "binary/octet-stream")385 self.send_header("Content-Type", "binary/octet-stream")
376 self.send_header("Content-Length", len(data))386 self.send_header("Content-Length", len(data))
377 log.info("Sending data (len=%s):\n%s", len(data),387 log.info("Sending data (len=%s):\n%s", len(data),
378 format_text(data))388 format_text(data))
379 self.end_headers()389 self.end_headers()
380 self.wfile.write(data)390 self.wfile.write(data.encode())
381 except RuntimeError as e:391 except RuntimeError as e:
382 log.exception("Error somewhere in the server.")392 log.exception("Error somewhere in the server.")
383 self.send_error(httplib.INTERNAL_SERVER_ERROR, message=str(e))393 self.send_error(hclient.INTERNAL_SERVER_ERROR, message=str(e))
384 except WebException as e:394 except WebException as e:
385 code = e.code395 code = e.code
386 log.exception(str(e))396 log.exception(str(e))
@@ -408,7 +418,7 @@ def extract_opts():
408 help=("port from which to serve traffic"418 help=("port from which to serve traffic"
409 " (default: %default)"))419 " (default: %default)"))
410 parser.add_option("-a", "--addr", dest="address", action="store", type=str,420 parser.add_option("-a", "--addr", dest="address", action="store", type=str,
411 default='0.0.0.0', metavar="ADDRESS",421 default='::', metavar="ADDRESS",
412 help=("address from which to serve traffic"422 help=("address from which to serve traffic"
413 " (default: %default)"))423 " (default: %default)"))
414 parser.add_option("-f", '--user-data-file', dest='user_data_file',424 parser.add_option("-f", '--user-data-file', dest='user_data_file',
@@ -444,7 +454,7 @@ def run_server():
444 setup_fetchers(opts)454 setup_fetchers(opts)
445 log.info("CLI opts: %s", opts)455 log.info("CLI opts: %s", opts)
446 server_address = (opts['address'], opts['port'])456 server_address = (opts['address'], opts['port'])
447 server = HTTPServer(server_address, Ec2Handler)457 server = HTTPServerV6(server_address, Ec2Handler)
448 sa = server.socket.getsockname()458 sa = server.socket.getsockname()
449 log.info("Serving ec2 metadata on %s using port %s ...", sa[0], sa[1])459 log.info("Serving ec2 metadata on %s using port %s ...", sa[0], sa[1])
450 server.serve_forever()460 server.serve_forever()

Subscribers

People subscribed via source and target branches