4 from datetime import datetime
5 from django.db.models import F, Q
6 from planetstack.config import Config
7 from observer.openstacksyncstep import OpenStackSyncStep
8 from core.models.node import Node
9 from core.models.site import SiteDeployment, Controller
10 from util.logger import Logger, logging
12 logger = Logger(level=logging.INFO)
14 class SyncNodes(OpenStackSyncStep):
18 def fetch_pending(self, deleted):
19 # Nodes come from the back end
20 # You can't delete them
25 controllers = Controller.objects.all()
26 nodes = Node.objects.all()
27 node_hostnames = [node.name for node in nodes]
29 # fetch all nodes from each controller
31 for controller in controllers:
33 controller_site_deployments = SiteDeployment.objects.filter(controller=controller)[0]
35 raise Exception("Controller %s not bound to any site deployments"%controller.name)
37 site_deployment = controller_site_deployments.site_deployment
38 if (not site_deployment):
39 raise Exception('Controller without Site Deployment: %s'%controller.name)
42 driver = self.driver.admin_driver(controller=controller,tenant='admin')
43 compute_nodes = driver.shell.nova.hypervisors.list()
45 logger.log_exc("Failed to get nodes from controller %s" % str(controller))
48 for compute_node in compute_nodes:
49 if compute_node.hypervisor_hostname not in node_hostnames:
50 # XX TODO:figure out how to correctly identify a node's site.
51 # XX pick the first one
52 node = Node(name=compute_node.hypervisor_hostname,
53 site_deployment=site_deployment)
54 new_nodes.append(node)
59 def sync_record(self, node):