~yolanda.robla/glance/precise-security

« back to all changes in this revision

Viewing changes to bin/glance-upload

  • Committer: Bazaar Package Importer
  • Author(s): Chuck Short
  • Date: 2011-04-12 09:52:06 UTC
  • mto: (50.1.2 precise-proposed)
  • mto: This revision was merged to the branch mainline in revision 3.
  • Revision ID: james.westby@ubuntu.com-20110412095206-8ynvol4gw0phuu30
Tags: upstream-2011.2~bzr108
ImportĀ upstreamĀ versionĀ 2011.2~bzr108

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#!/usr/bin/env python
 
2
# vim: tabstop=4 shiftwidth=4 softtabstop=4
 
3
 
 
4
# Copyright 2011 OpenStack LLC.
 
5
# All Rights Reserved.
 
6
#
 
7
#    Licensed under the Apache License, Version 2.0 (the "License"); you may
 
8
#    not use this file except in compliance with the License. You may obtain
 
9
#    a copy of the License at
 
10
#
 
11
#         http://www.apache.org/licenses/LICENSE-2.0
 
12
#
 
13
#    Unless required by applicable law or agreed to in writing, software
 
14
#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 
15
#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
 
16
#    License for the specific language governing permissions and limitations
 
17
#    under the License.
 
18
 
 
19
"""
 
20
Upload an image into Glance
 
21
 
 
22
Usage
 
23
=====
 
24
 
 
25
    Machine - Kernel outside of the image
 
26
    -------------------------------------
 
27
 
 
28
        glance-upload --type=kernel <filename> <name>
 
29
        glance-upload --type=ramdisk <filename> <name>
 
30
        glance-upload --type=machine --kernel=KERNEL_ID --ramdisk=RAMDISK_ID \
 
31
                         <filename> <name>
 
32
 
 
33
    Raw - Kernel inside, raw image data
 
34
    -----------------------------------
 
35
 
 
36
        glance-upload --type=raw --kernel=nokernel --ramdisk=noramdisk \
 
37
                         <filename> <name>
 
38
 
 
39
 
 
40
    VHD - Kernel inside, data encoded with VHD format
 
41
    -------------------------------------------------
 
42
 
 
43
        glance-upload --type=vhd --kernel=nokernel --ramdisk=noramdisk \
 
44
                         <filename> <name>
 
45
"""
 
46
 
 
47
# FIXME(sirp): This can be merged into glance-admin when that becomes
 
48
# available
 
49
import argparse
 
50
import pprint
 
51
import os
 
52
import sys
 
53
 
 
54
# If ../glance/__init__.py exists, add ../ to Python search path, so that
 
55
# it will override what happens to be installed in /usr/(local/)lib/python...
 
56
possible_topdir = os.path.normpath(os.path.join(os.path.abspath(sys.argv[0]),
 
57
                                   os.pardir,
 
58
                                   os.pardir))
 
59
if os.path.exists(os.path.join(possible_topdir, 'glance', '__init__.py')):
 
60
    sys.path.insert(0, possible_topdir)
 
61
 
 
62
from glance.client import Client
 
63
from glance.registry.db.api import DISK_FORMATS, CONTAINER_FORMATS
 
64
 
 
65
 
 
66
def die(msg):
 
67
    print >> sys.stderr, msg
 
68
    sys.exit(1)
 
69
 
 
70
 
 
71
def parse_args():
 
72
    parser = argparse.ArgumentParser(description='Upload an image into Glance')
 
73
    parser.add_argument('filename', help='file to upload into Glance')
 
74
    parser.add_argument('name', help='name of image')
 
75
    parser.add_argument('--host', metavar='HOST', default='127.0.0.1',
 
76
                        help='Location of Glance Server (default: %default)')
 
77
    parser.add_argument('--port', metavar='PORT', type=int, default=9292,
 
78
                        help='Port of Glance Server (default: %default)')
 
79
    parser.add_argument('--type', metavar='TYPE', default='raw',
 
80
                        help='Type of Image [kernel, ramdisk, machine, raw] '
 
81
                             '(default: %default)')
 
82
    parser.add_argument('--disk-format', metavar='DISK_FORMAT', default=None,
 
83
                        choices=DISK_FORMATS,
 
84
                        help='Disk format of Image [%s] '
 
85
                             '(default: %%default)' % ','.join(DISK_FORMATS))
 
86
    parser.add_argument('--container-format', metavar='CONTAINER_FORMAT',
 
87
                        default=None, choices=CONTAINER_FORMATS,
 
88
                        help='Disk format of Image [%s] '
 
89
                        '(default: %%default)' % ','.join(CONTAINER_FORMATS))
 
90
    parser.add_argument('--kernel', metavar='KERNEL',
 
91
                        help='ID of kernel associated with this machine image')
 
92
    parser.add_argument('--ramdisk', metavar='RAMDISK',
 
93
                        help='ID of ramdisk associated with this machine '
 
94
                             'image')
 
95
    args = parser.parse_args()
 
96
    return args
 
97
 
 
98
 
 
99
def main():
 
100
    args = parse_args()
 
101
    meta = {'name': args.name,
 
102
            'is_public': True,
 
103
            'properties': {}}
 
104
 
 
105
    if args.kernel:
 
106
        meta['properties']['kernel_id'] = args.kernel
 
107
 
 
108
    if args.ramdisk:
 
109
        meta['properties']['ramdisk_id'] = args.ramdisk
 
110
 
 
111
    if args.type:
 
112
        meta['properties']['type'] = args.type
 
113
 
 
114
    if args.disk_format:
 
115
        meta['disk_format'] = args.disk_format
 
116
 
 
117
    if args.container_format:
 
118
        meta['container_format'] = args.container_format
 
119
 
 
120
    client = Client(args.host, args.port)
 
121
    with open(args.filename) as f:
 
122
        try:
 
123
            new_meta = client.add_image(meta, f)
 
124
        except Exception, e:
 
125
            print "Failed to add new image. Got error: ", str(e)
 
126
            return 1
 
127
 
 
128
    print 'Stored image. Got identifier: %s' % pprint.pformat(new_meta)
 
129
 
 
130
 
 
131
if __name__ == "__main__":
 
132
    main()