From 735493a8d12bcb9aae88a114f7ef3e5c1e491296 Mon Sep 17 00:00:00 2001 From: Tony Mack Date: Thu, 4 Apr 2013 23:54:28 -0400 Subject: [PATCH] initial checkin --- plstackapi/openstack/manager.py | 93 +++++++++++++++++++++++++++++++++ 1 file changed, 93 insertions(+) create mode 100644 plstackapi/openstack/manager.py diff --git a/plstackapi/openstack/manager.py b/plstackapi/openstack/manager.py new file mode 100644 index 0000000..7ba9106 --- /dev/null +++ b/plstackapi/openstack/manager.py @@ -0,0 +1,93 @@ +from plstackapi.planetstack import settings +from django.core import management +management.setup_environ(settings) +from plstackapi.openstack.shell import OpenStackShell + + +class Manager: + + def __init__(self): + + self.shell = OpenStackShell() + + def refresh_nodes(self): + # collect local nodes + from plstackapi.core.models import Node + nodes = Node.objects.all() + nodes_dict = {} + for node in nodes: + nodes_dict[node.name] = node + + # collect nova nodes: + compute_nodes = self.shell.nova.hypervisors.list() + compute_nodes_dict = {} + for compute_node in compute_nodes: + compute_nodes_dict[compute_node.hypervisor_hostname] = compute_node + + # add new nodes: + new_node_names = set(compute_nodes_dict.keys()).difference(nodes_dict.keys()) + for name in new_node_names: + node = Node(name=compute_nodes_dict[name].hypervisor_hostname) + node.save() + + # remove old nodes + old_node_names = set(nodes_dict.keys()).difference(compute_nodes_dict.keys()) + Node.objects.filter(name__in=old_node_names).delete() + + def refresh_flavors(self): + # collect local flavors + from plstackapi.core.models import Flavor + flavors = Flavor.objects.all() + flavors_dict = {} + for flavor in flavors: + flavors_dict[flavor.name] = flavor + + # collect nova falvors + nova_flavors = self.shell.nova.flavors.list() + nova_flavors_dict = {} + for nova_flavor in nova_flavors: + nova_flavors_dict[nova_flavor.name] = nova_flavor + + # add new flavors + new_flavor_names = set(nova_flavors_dict.keys()).difference(flavors_dict.keys()) + for name in new_flavor_names: + + flavor = Flavor(flavor_id=nova_flavors_dict[name].id, + name=nova_flavors_dict[name].name, + memory_mb=nova_flavors_dict[name].ram, + disk_gb=nova_flavors_dict[name].disk, + vcpus=nova_flavors_dict[name].vcpus) + flavor.save() + + # remove old flavors + old_flavor_names = set(flavors_dict.keys()).difference(nova_flavors_dict.keys()) + Flavor.objects.filter(name__in=old_flavor_names).delete() + + def refresh_images(self): + # collect local images + from plstackapi.core.models import Image + images = Image.objects.all() + images_dict = {} + for image in images: + images_dict[image.name] = image + + # collect glance images + glance_images = self.shell.glance.get_images() + glance_images_dict = {} + for glance_image in glance_images: + glance_images_dict[glance_image['name']] = glance_image + + # add new images + new_image_names = set(glance_images_dict.keys()).difference(images_dict.keys()) + for name in new_image_names: + image = Image(image_id=glance_images_dict[name]['id'], + name=glance_images_dict[name]['name'], + disk_format=glance_images_dict[name]['disk_format'], + container_format=glance_images_dict[name]['container_format']) + image.save() + + # remove old images + old_image_names = set(images_dict.keys()).difference(glance_images_dict.keys()) + Image.objects.filter(name__in=old_image_names).delete() + + -- 2.47.0