def update_cluster(msg): operation = msg.get("operation") clustername = msg.get("cluster") if clustername is None: return if operation != "OP_CLUSTER_SET_PARAMS": return backend = Backend.objects.select_for_update().get(clustername=clustername) backend_mod.update_backend_disk_templates(backend) backend_mod.update_backend_resources(backend)
def refresh_backends_stats(backends): """ Refresh the statistics of the backends. Set db backend state to the actual state of the backend, if BACKEND_REFRESH_MIN time has passed. """ now = datetime.datetime.now() delta = datetime.timedelta(minutes=settings.BACKEND_REFRESH_MIN) for b in backends: if now > b.updated + delta: log.debug("Updating resources of backend %r. Last Updated %r", b, b.updated) backend_mod.update_backend_resources(b)
def get_backend_stats(backend=None): if backend is None: backends = Backend.objects.filter(offline=False) else: if backend.offline: return {} backends = [backend] [backend_mod.update_backend_resources(b) for b in backends] resources = {} for attr in ("dfree", "dtotal", "mfree", "mtotal", "ctotal"): resources[attr] = 0 for b in backends: resources[attr] += getattr(b, attr) return { "disk": { "free": resources["dfree"], "total": resources["dtotal"] }, "ram": { "free": resources["mfree"], "total": resources["mtotal"] }, "cpu": { "free": resources["ctotal"], "total": resources["ctotal"] }, "disk_template": { "free": 0, "total": 0 } }
def get_backend_stats(backend=None): if backend is None: backends = Backend.objects.filter(offline=False) else: if backend.offline: return {} backends = [backend] [backend_mod.update_backend_resources(b) for b in backends] resources = {} for attr in ("dfree", "dtotal", "mfree", "mtotal", "ctotal"): resources[attr] = 0 for b in backends: resources[attr] += getattr(b, attr) return {"disk": {"free": resources["dfree"], "total": resources["dtotal"]}, "ram": {"free": resources["mfree"], "total": resources["mtotal"]}, "cpu": {"free": resources["ctotal"], "total": resources["ctotal"]}, "disk_template": {"free": 0, "total": 0}}
def create_backend(self, clustername, port, username, password, public, hypervisor=None, initialize=True): kw = {"clustername": clustername, "port": port, "username": username, "password": password, "public": public, "drained": True} if hypervisor: kw["hypervisor"] = hypervisor # Create the new backend in database try: backend = Backend.objects.create(**kw) except IntegrityError as e: raise CommandError("Cannot create backend: %s\n" % e) self.stderr.write("Successfully created backend with id %d\n" % backend.id) if not initialize: return self.stderr.write("Retrieving backend resources:\n") resources = backend_mod.get_physical_resources(backend) attr = ['mfree', 'mtotal', 'dfree', 'dtotal', 'pinst_cnt', 'ctotal'] table = [[str(resources[x]) for x in attr]] pprint_table(self.stdout, table, attr) backend_mod.update_backend_resources(backend, resources) backend_mod.update_backend_disk_templates(backend) networks = Network.objects.filter(deleted=False, public=True) if not networks: return self.stderr.write("Creating the following public:\n") headers = ("ID", "Name", 'IPv4 Subnet', "IPv6 Subnet", 'Mac Prefix') table = [] for net in networks: subnet4 = net.subnet4.cidr if net.subnet4 else None subnet6 = net.subnet6.cidr if net.subnet6 else None table.append((net.id, net.backend_id, subnet4, subnet6, str(net.mac_prefix))) pprint_table(self.stdout, table, headers) for net in networks: net.create_backend_network(backend) result = backend_mod.create_network_synced(net, backend) if result[0] != "success": self.stderr.write('\nError Creating Network %s: %s\n' % (net.backend_id, result[1])) else: self.stderr.write('Successfully created Network: %s\n' % net.backend_id) result = backend_mod.connect_network_synced(network=net, backend=backend) if result[0] != "success": self.stderr.write('\nError Connecting Network %s: %s\n' % (net.backend_id, result[1])) else: self.stderr.write('Successfully connected Network: %s\n' % net.backend_id)
def handle(self, **options): for backend in Backend.objects.select_for_update()\ .filter(offline=False): backend_mod.update_backend_disk_templates(backend) backend_mod.update_backend_resources(backend) self.stdout.write("Successfully updated backend '%s'\n" % backend)