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