Merge "Fix sync function so that it doesn't remove nodes/envs wrong"

This commit is contained in:
Jenkins 2014-05-27 10:05:54 +00:00 committed by Gerrit Code Review
commit 505e324c7c
2 changed files with 23 additions and 13 deletions

View File

@ -260,7 +260,9 @@ class DevopsDriver(object):
@retry()
def node_list(self):
return self.conn.listDefinedDomains()
# virConnect.listDefinedDomains() only returns stopped domains
# https://bugzilla.redhat.com/show_bug.cgi?id=839259
return [item.name() for item in self.conn.listAllDomains()]
@retry()
def node_reset(self, node):

View File

@ -116,9 +116,9 @@ class Environment(DriverModel):
volume.erase()
self.delete()
@staticmethod
def erase_empty():
for env in Environment.objects.all():
@classmethod
def erase_empty(cls):
for env in cls.objects.all():
if len(env.nodes) == 0:
env.delete()
@ -141,25 +141,33 @@ class Environment(DriverModel):
for node in self.nodes:
node.revert(name, destroy=False)
def synchronize_all(self):
nodes = {self.get_driver()._get_name(e.name, n.name): n
for e in Environment.objects.all()
@classmethod
def synchronize_all(cls):
driver = cls.get_driver()
nodes = {driver._get_name(e.name, n.name): n
for e in cls.objects.all()
for n in e.nodes}
domains = set(self.driver.node_list())
domains = set(driver.node_list())
# FIXME (AWoodward) This willy nilly wacks domains when you run this
# on domains that are outside the scope of devops, if anything this
# should cause domains to be imported into db instead of undefined.
# It also leaves network and volumes around too
# Disabled untill a safer implmentation arrives
# Undefine domains without devops nodes
domains_to_undefine = domains - set(nodes.keys())
for d in domains_to_undefine:
self.driver.node_undefine_by_name(d)
#domains_to_undefine = domains - set(nodes.keys())
#for d in domains_to_undefine:
# driver.node_undefine_by_name(d)
# Remove devops nodes without domains
nodes_to_remove = set(nodes.keys()) - domains
for n in nodes_to_remove:
nodes[n].delete()
Environment.erase_empty()
cls.erase_empty()
logger.info('Undefined domains: %s, removed nodes: %s',
(len(domains_to_undefine), len(nodes_to_remove)))
(0, len(nodes_to_remove)))
class ExternalModel(DriverModel):