~allenap/maas/docs-and-man-bug-975454

« back to all changes in this revision

Viewing changes to src/metadataserver/api.py

  • Committer: Jeroen Vermeulen
  • Date: 2012-02-07 18:14:14 UTC
  • mto: This revision was merged to the branch mainline in revision 92.
  • Revision ID: jeroen.vermeulen@canonical.com-20120207181414-3mtmupvvksyrwv2d
Basic setup for a metadata server.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
# Copyright 2012 Canonical Ltd.  This software is licensed under the
 
2
# GNU Affero General Public License version 3 (see the file LICENSE).
 
3
 
 
4
"""Metadata API."""
 
5
 
 
6
from __future__ import (
 
7
    print_function,
 
8
    unicode_literals,
 
9
    )
 
10
 
 
11
__metaclass__ = type
 
12
__all__ = [
 
13
    'meta_data',
 
14
    'versions_index',
 
15
    'version',
 
16
    'user_data',
 
17
    ]
 
18
 
 
19
from django.http import HttpResponse
 
20
 
 
21
 
 
22
class UnknownMetadataVersion(RuntimeError):
 
23
    """Not a known metadata version."""
 
24
 
 
25
 
 
26
def make_text_response(contents):
 
27
    """Create a response containing `contents` as plain text."""
 
28
    return HttpResponse(contents, mimetype='text/plain')
 
29
 
 
30
 
 
31
def make_list_response(items):
 
32
    """Create an `HttpResponse` listing `items`, one per line."""
 
33
    return make_text_response('\n'.join(items))
 
34
 
 
35
 
 
36
def check_version(version):
 
37
    """Check that `version` is a supported metadata version."""
 
38
    if version != 'latest':
 
39
        raise UnknownMetadataVersion("Unknown metadata version: %s" % version)
 
40
 
 
41
 
 
42
def versions_index(request):
 
43
    """View: top-level metadata listing."""
 
44
    return make_list_response(['latest'])
 
45
 
 
46
 
 
47
def version(request, version):
 
48
    """View: listing for a given metadata version."""
 
49
    check_version(version)
 
50
    return make_list_response(['meta-data', 'user-data'])
 
51
 
 
52
 
 
53
def meta_data(request, version):
 
54
    """View: meta-data listing for a given version."""
 
55
    check_version(version)
 
56
    items = [
 
57
        'kernel-id',
 
58
        ]
 
59
    return make_list_response(items)
 
60
 
 
61
 
 
62
def user_data(request, version):
 
63
    """View: user-data blob for a given version."""
 
64
    check_version(version)
 
65
    data = "User data here."
 
66
    return make_text_response(data)