Revision c83d0ada snf-cyclades-app/synnefo/logic/management/commands/backend-add.py

b/snf-cyclades-app/synnefo/logic/management/commands/backend-add.py
27 27
# those of the authors and should not be interpreted as representing official
28 28
# policies, either expressed or implied, of GRNET S.A.
29 29
#
30
import sys
31 30
from optparse import make_option
32 31
from django.core.management.base import BaseCommand, CommandError
33 32

  
......
85 84
        if options['check']:
86 85
            check_backend_credentials(clustername, port, username, password)
87 86

  
88
        create_backend(clustername, port, username, password,
89
                       hypervisor=options["hypervisor"],
90
                       initialize=options["init"])
91

  
92

  
93
def create_backend(clustername, port, username, password, hypervisor=None,
94
                   initialize=True, stream=sys.stdout):
95
        kw = {"clustername": clustername,
96
              "port": port,
97
              "username": username,
98
              "password": password,
99
              "drained": True}
100

  
101
        if hypervisor:
102
            kw["hypervisor"] = hypervisor
103

  
104
        # Create the new backend in database
105
        try:
106
            backend = Backend.objects.create(**kw)
107
        except IntegrityError as e:
108
            raise CommandError("Cannot create backend: %s\n" % e)
109

  
110
        stream.write("Successfully created backend with id %d\n" % backend.id)
111

  
112
        if not initialize:
113
            return
114

  
115
        stream.write("Retrieving backend resources:\n")
116
        resources = backend_mod.get_physical_resources(backend)
117
        attr = ['mfree', 'mtotal', 'dfree', 'dtotal', 'pinst_cnt', 'ctotal']
118

  
119
        table = [[str(resources[x]) for x in attr]]
120
        pprint_table(stream, table, attr)
121

  
122
        backend_mod.update_backend_resources(backend, resources)
123
        backend_mod.update_backend_disk_templates(backend)
124

  
125
        networks = Network.objects.filter(deleted=False, public=True)
126
        if not networks:
127
            return
128

  
129
        stream.write("Creating the following public:\n")
130
        headers = ("ID", "Name", 'IPv4 Subnet', "IPv6 Subnet", 'Mac Prefix')
131
        table = []
132

  
133
        for net in networks:
134
            subnet4 = net.subnet4.cidr if net.subnet4 else None
135
            subnet6 = net.subnet6.cidr if net.subnet6 else None
136
            table.append((net.id, net.backend_id, subnet4,
137
                          subnet6, str(net.mac_prefix)))
138
        pprint_table(stream, table, headers)
139

  
140
        for net in networks:
141
            net.create_backend_network(backend)
142
            result = backend_mod.create_network_synced(net, backend)
143
            if result[0] != "success":
144
                stream.write('\nError Creating Network %s: %s\n' %
145
                             (net.backend_id, result[1]))
146
            else:
147
                stream.write('Successfully created Network: %s\n' %
148
                             net.backend_id)
149
            result = backend_mod.connect_network_synced(network=net,
150
                                                        backend=backend)
151
            if result[0] != "success":
152
                stream.write('\nError Connecting Network %s: %s\n' %
153
                             (net.backend_id, result[1]))
154
            else:
155
                stream.write('Successfully connected Network: %s\n' %
156
                             net.backend_id)
87
        self.create_backend(clustername, port, username, password,
88
                            hypervisor=options["hypervisor"],
89
                            initialize=options["init"])
90

  
91
    def create_backend(self, clustername, port, username, password,
92
                       hypervisor=None, initialize=True):
93
            kw = {"clustername": clustername,
94
                  "port": port,
95
                  "username": username,
96
                  "password": password,
97
                  "drained": True}
98

  
99
            if hypervisor:
100
                kw["hypervisor"] = hypervisor
101

  
102
            # Create the new backend in database
103
            try:
104
                backend = Backend.objects.create(**kw)
105
            except IntegrityError as e:
106
                raise CommandError("Cannot create backend: %s\n" % e)
107

  
108
            self.stderr.write("Successfully created backend with id %d\n"
109
                              % backend.id)
110

  
111
            if not initialize:
112
                return
113

  
114
            self.stderr.write("Retrieving backend resources:\n")
115
            resources = backend_mod.get_physical_resources(backend)
116
            attr = ['mfree', 'mtotal', 'dfree',
117
                    'dtotal', 'pinst_cnt', 'ctotal']
118

  
119
            table = [[str(resources[x]) for x in attr]]
120
            pprint_table(self.stdout, table, attr)
121

  
122
            backend_mod.update_backend_resources(backend, resources)
123
            backend_mod.update_backend_disk_templates(backend)
124

  
125
            networks = Network.objects.filter(deleted=False, public=True)
126
            if not networks:
127
                return
128

  
129
            self.stderr.write("Creating the following public:\n")
130
            headers = ("ID", "Name", 'IPv4 Subnet',
131
                       "IPv6 Subnet", 'Mac Prefix')
132
            table = []
133

  
134
            for net in networks:
135
                subnet4 = net.subnet4.cidr if net.subnet4 else None
136
                subnet6 = net.subnet6.cidr if net.subnet6 else None
137
                table.append((net.id, net.backend_id, subnet4,
138
                              subnet6, str(net.mac_prefix)))
139
            pprint_table(self.stdout, table, headers)
140

  
141
            for net in networks:
142
                net.create_backend_network(backend)
143
                result = backend_mod.create_network_synced(net, backend)
144
                if result[0] != "success":
145
                    self.stderr.write('\nError Creating Network %s: %s\n'
146
                                      % (net.backend_id, result[1]))
147
                else:
148
                    self.stderr.write('Successfully created Network: %s\n'
149
                                      % net.backend_id)
150
                result = backend_mod.connect_network_synced(network=net,
151
                                                            backend=backend)
152
                if result[0] != "success":
153
                    self.stderr.write('\nError Connecting Network %s: %s\n'
154
                                      % (net.backend_id, result[1]))
155
                else:
156
                    self.stderr.write('Successfully connected Network: %s\n'
157
                                      % net.backend_id)

Also available in: Unified diff