Statistics
| Branch: | Tag: | Revision:

root / snf-cyclades-app / synnefo / api / management / commands / cyclades-export-quota.py @ d443e1dd

History | View | Annotate | Download (2.9 kB)

1 f35081af Christos Stavrakakis
# Copyright 2013 GRNET S.A. All rights reserved.
2 f35081af Christos Stavrakakis
#
3 f35081af Christos Stavrakakis
# Redistribution and use in source and binary forms, with or
4 f35081af Christos Stavrakakis
# without modification, are permitted provided that the following
5 f35081af Christos Stavrakakis
# conditions are met:
6 f35081af Christos Stavrakakis
#
7 f35081af Christos Stavrakakis
#   1. Redistributions of source code must retain the above
8 f35081af Christos Stavrakakis
#      copyright notice, this list of conditions and the following
9 f35081af Christos Stavrakakis
#      disclaimer.
10 f35081af Christos Stavrakakis
#
11 f35081af Christos Stavrakakis
#   2. Redistributions in binary form must reproduce the above
12 f35081af Christos Stavrakakis
#      copyright notice, this list of conditions and the following
13 f35081af Christos Stavrakakis
#      disclaimer in the documentation and/or other materials
14 f35081af Christos Stavrakakis
#      provided with the distribution.
15 f35081af Christos Stavrakakis
#
16 f35081af Christos Stavrakakis
# THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS
17 f35081af Christos Stavrakakis
# OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 f35081af Christos Stavrakakis
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
19 f35081af Christos Stavrakakis
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR
20 f35081af Christos Stavrakakis
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
21 f35081af Christos Stavrakakis
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22 f35081af Christos Stavrakakis
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
23 f35081af Christos Stavrakakis
# USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
24 f35081af Christos Stavrakakis
# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25 f35081af Christos Stavrakakis
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
26 f35081af Christos Stavrakakis
# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
27 f35081af Christos Stavrakakis
# POSSIBILITY OF SUCH DAMAGE.
28 f35081af Christos Stavrakakis
#
29 f35081af Christos Stavrakakis
# The views and conclusions contained in the software and
30 f35081af Christos Stavrakakis
# documentation are those of the authors and should not be
31 f35081af Christos Stavrakakis
# interpreted as representing official policies, either expressed
32 f35081af Christos Stavrakakis
# or implied, of GRNET S.A.
33 f35081af Christos Stavrakakis
34 f35081af Christos Stavrakakis
from django.core.management.base import NoArgsCommand, CommandError
35 f35081af Christos Stavrakakis
from optparse import make_option
36 f35081af Christos Stavrakakis
from synnefo import settings
37 f35081af Christos Stavrakakis
from os import path
38 f35081af Christos Stavrakakis
39 f35081af Christos Stavrakakis
40 f35081af Christos Stavrakakis
class Command(NoArgsCommand):
41 f35081af Christos Stavrakakis
    help = "Export account quota policies"
42 f35081af Christos Stavrakakis
    option_list = NoArgsCommand.option_list + (
43 f35081af Christos Stavrakakis
        make_option('--location',
44 f35081af Christos Stavrakakis
                dest='location',
45 f35081af Christos Stavrakakis
                default='exported_quota',
46 f35081af Christos Stavrakakis
                help="Where to save the output file"),
47 f35081af Christos Stavrakakis
    )
48 f35081af Christos Stavrakakis
49 f35081af Christos Stavrakakis
    def handle_noargs(self, **options):
50 f35081af Christos Stavrakakis
        try:
51 f35081af Christos Stavrakakis
            vms_per_user = settings.VMS_USER_QUOTA
52 f35081af Christos Stavrakakis
            nets_per_user = settings.NETWORKS_USER_QUOTA
53 f35081af Christos Stavrakakis
        except AttributeError as e:
54 f35081af Christos Stavrakakis
            raise CommandError(e)
55 f35081af Christos Stavrakakis
        location = path.abspath(options['location'])
56 f35081af Christos Stavrakakis
57 f35081af Christos Stavrakakis
        try:
58 f35081af Christos Stavrakakis
            f = open(location, 'w')
59 f35081af Christos Stavrakakis
        except IOError as e:
60 f35081af Christos Stavrakakis
            raise CommandError(e)
61 f35081af Christos Stavrakakis
62 4dcfe1c4 Georgios D. Tsoukalas
        INF = str(10**30)
63 f35081af Christos Stavrakakis
        for user, value in vms_per_user.items():
64 4dcfe1c4 Georgios D. Tsoukalas
            f.write(' '.join([user, "cyclades.vm", "%s" % value, '0', INF,
65 4dcfe1c4 Georgios D. Tsoukalas
                              INF]))
66 f35081af Christos Stavrakakis
            f.write('\n')
67 f35081af Christos Stavrakakis
        for user, value in nets_per_user.items():
68 f35081af Christos Stavrakakis
            f.write(' '.join([user, "cyclades.network.private", "%s" % value,
69 4dcfe1c4 Georgios D. Tsoukalas
                              '0', INF, INF]))
70 f35081af Christos Stavrakakis
            f.write('\n')
71 f35081af Christos Stavrakakis
72 f35081af Christos Stavrakakis
        f.close()
73 f35081af Christos Stavrakakis
74 f35081af Christos Stavrakakis
        self.stdout.write("Successfully exported cyclades per-user-quotas to"
75 f35081af Christos Stavrakakis
                          " file '%s'\n" % location)