Statistics
| Branch: | Tag: | Revision:

root / snf-cyclades-app / synnefo / logic / management / commands / reconcile-pools.py @ 6fec4302

History | View | Annotate | Download (3.1 kB)

1 0ccb6461 Christos Stavrakakis
# Copyright 2011-2013 GRNET S.A. All rights reserved.
2 14fd6983 Christos Stavrakakis
#
3 14fd6983 Christos Stavrakakis
# Redistribution and use in source and binary forms, with or without
4 14fd6983 Christos Stavrakakis
# modification, are permitted provided that the following conditions
5 14fd6983 Christos Stavrakakis
# are met:
6 14fd6983 Christos Stavrakakis
#
7 14fd6983 Christos Stavrakakis
#   1. Redistributions of source code must retain the above copyright
8 14fd6983 Christos Stavrakakis
#      notice, this list of conditions and the following disclaimer.
9 14fd6983 Christos Stavrakakis
#
10 14fd6983 Christos Stavrakakis
#  2. Redistributions in binary form must reproduce the above copyright
11 14fd6983 Christos Stavrakakis
#     notice, this list of conditions and the following disclaimer in the
12 14fd6983 Christos Stavrakakis
#     documentation and/or other materials provided with the distribution.
13 14fd6983 Christos Stavrakakis
#
14 14fd6983 Christos Stavrakakis
# THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
15 14fd6983 Christos Stavrakakis
# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16 14fd6983 Christos Stavrakakis
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
17 14fd6983 Christos Stavrakakis
# ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
18 14fd6983 Christos Stavrakakis
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
19 14fd6983 Christos Stavrakakis
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20 14fd6983 Christos Stavrakakis
# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
21 14fd6983 Christos Stavrakakis
# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
22 14fd6983 Christos Stavrakakis
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
23 14fd6983 Christos Stavrakakis
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
24 14fd6983 Christos Stavrakakis
# SUCH DAMAGE.
25 14fd6983 Christos Stavrakakis
#
26 14fd6983 Christos Stavrakakis
# The views and conclusions contained in the software and documentation are
27 14fd6983 Christos Stavrakakis
# those of the authors and should not be interpreted as representing official
28 14fd6983 Christos Stavrakakis
# policies, either expressed or implied, of GRNET S.A.
29 14fd6983 Christos Stavrakakis
#
30 0ccb6461 Christos Stavrakakis
import logging
31 0ccb6461 Christos Stavrakakis
from optparse import make_option
32 8c911970 Christos Stavrakakis
from snf_django.management.commands import SynnefoCommand
33 0ccb6461 Christos Stavrakakis
from synnefo.logic import reconciliation
34 14fd6983 Christos Stavrakakis
35 b7d38981 Dimitris Aragiorgis
36 0ccb6461 Christos Stavrakakis
HELP_MSG = """\
37 0ccb6461 Christos Stavrakakis
Check the consistency of pools of resources and fix them if possible.
38 14fd6983 Christos Stavrakakis

39 0ccb6461 Christos Stavrakakis
This command checks that values that come from pools are not used more than
40 0ccb6461 Christos Stavrakakis
once. Also, it checks that are no stale reserved values in a pool by checking
41 0ccb6461 Christos Stavrakakis
that the reserved values are only the ones that are currently used.
42 14fd6983 Christos Stavrakakis

43 0ccb6461 Christos Stavrakakis
The pools for the following resources are checked:
44 0ccb6461 Christos Stavrakakis
    * Pool of bridges
45 0ccb6461 Christos Stavrakakis
    * Pool of MAC prefixes
46 0ccb6461 Christos Stavrakakis
    * Pool of IPv4 addresses for each network"""
47 14fd6983 Christos Stavrakakis
48 14fd6983 Christos Stavrakakis
49 8c911970 Christos Stavrakakis
class Command(SynnefoCommand):
50 0ccb6461 Christos Stavrakakis
    help = HELP_MSG
51 14fd6983 Christos Stavrakakis
52 8c911970 Christos Stavrakakis
    option_list = SynnefoCommand.option_list + (
53 0ccb6461 Christos Stavrakakis
        make_option("--fix", action="store_true",
54 0ccb6461 Christos Stavrakakis
                    dest="fix", default=False,
55 0ccb6461 Christos Stavrakakis
                    help='Fix all issues.'),
56 0ccb6461 Christos Stavrakakis
    )
57 14fd6983 Christos Stavrakakis
58 0ccb6461 Christos Stavrakakis
    def handle(self, **options):
59 0ccb6461 Christos Stavrakakis
        verbosity = int(options["verbosity"])
60 0ccb6461 Christos Stavrakakis
        fix = options["fix"]
61 0ccb6461 Christos Stavrakakis
62 0ccb6461 Christos Stavrakakis
        logger = logging.getLogger("reconcile-pools")
63 0ccb6461 Christos Stavrakakis
        logger.propagate = 0
64 0ccb6461 Christos Stavrakakis
65 0ccb6461 Christos Stavrakakis
        formatter = logging.Formatter("%(message)s")
66 0ccb6461 Christos Stavrakakis
        log_handler = logging.StreamHandler()
67 0ccb6461 Christos Stavrakakis
        log_handler.setFormatter(formatter)
68 0ccb6461 Christos Stavrakakis
        if verbosity == 2:
69 0ccb6461 Christos Stavrakakis
            formatter = logging.Formatter("%(asctime)s: %(message)s")
70 0ccb6461 Christos Stavrakakis
            log_handler.setFormatter(formatter)
71 0ccb6461 Christos Stavrakakis
            logger.setLevel(logging.DEBUG)
72 0ccb6461 Christos Stavrakakis
        elif verbosity == 1:
73 0ccb6461 Christos Stavrakakis
            logger.setLevel(logging.INFO)
74 0ccb6461 Christos Stavrakakis
        else:
75 0ccb6461 Christos Stavrakakis
            logger.setLevel(logging.WARNING)
76 0ccb6461 Christos Stavrakakis
77 0ccb6461 Christos Stavrakakis
        logger.addHandler(log_handler)
78 0ccb6461 Christos Stavrakakis
        reconciler = reconciliation.PoolReconciler(logger=logger, fix=fix)
79 0ccb6461 Christos Stavrakakis
        reconciler.reconcile()