[#5] Use better dict-based format for write updates
This commit is contained in:
@ -151,36 +151,34 @@ class NodeInstance():
|
||||
|
||||
if target_hypervisor == None:
|
||||
ansiiprint.echo('Failed to find migration target for VM "{}"; shutting down'.format(dom_uuid), '', 'e')
|
||||
transaction = self.zk_conn.transaction()
|
||||
transaction.set_data('/domains/{}/state'.format(dom_uuid), 'shutdown'.encode('ascii'))
|
||||
transaction.commit()
|
||||
zkhandler.writedata(self.zk_conn, { '/domains/{}/state'.format(dom_uuid): 'shutdown' })
|
||||
else:
|
||||
ansiiprint.echo('Migrating VM "{}" to hypervisor "{}"'.format(dom_uuid, target_hypervisor), '', 'i')
|
||||
transaction = self.zk_conn.transaction()
|
||||
transaction.set_data('/domains/{}/state'.format(dom_uuid), 'migrate'.encode('ascii'))
|
||||
transaction.set_data('/domains/{}/hypervisor'.format(dom_uuid), target_hypervisor.encode('ascii'))
|
||||
transaction.set_data('/domains/{}/lasthypervisor'.format(dom_uuid), current_hypervisor.encode('ascii'))
|
||||
transaction.commit()
|
||||
zkhandler.writedata(self.zk_conn, {
|
||||
'/domains/{}/state'.format(dom_uuid): 'migrate',
|
||||
'/domains/{}/hypervisor'.format(dom_uuid): target_hypervisor,
|
||||
'/domains/{}/lasthypervisor'.format(dom_uuid): current_hypervisor
|
||||
})
|
||||
|
||||
zkhandler.writedata(self.zk_conn, '/nodes/{}/runningdomains'.format(self.name), [ '' ])
|
||||
zkhandler.writedata(self.zk_conn, '/nodes/{}/domainstate'.format(self.name), [ 'flushed' ])
|
||||
zkhandler.writedata(self.zk_conn, { '/nodes/{}/runningdomains'.format(self.name): '' })
|
||||
zkhandler.writedata(self.zk_conn, { '/nodes/{}/domainstate'.format(self.name): 'flushed' })
|
||||
self.inflush = False
|
||||
|
||||
def unflush(self):
|
||||
self.inflush = True
|
||||
ansiiprint.echo('Restoring node {} to active service.'.format(self.name), '', 'i')
|
||||
zkhandler.writedata(self.zk_conn, '/nodes/{}/domainstate'.format(self.name), [ 'ready' ])
|
||||
zkhandler.writedata(self.zk_conn, { '/nodes/{}/domainstate'.format(self.name): 'ready' })
|
||||
for dom_uuid in self.s_domain:
|
||||
last_hypervisor = zkhandler.readdata(self.zk_conn, '/domains/{}/lasthypervisor'.format(dom_uuid))
|
||||
if last_hypervisor != self.name:
|
||||
continue
|
||||
|
||||
ansiiprint.echo('Setting unmigration for VM "{}"'.format(dom_uuid), '', 'i')
|
||||
transaction = self.zk_conn.transaction()
|
||||
transaction.set_data('/domains/{}/state'.format(dom_uuid), 'migrate'.encode('ascii'))
|
||||
transaction.set_data('/domains/{}/hypervisor'.format(dom_uuid), self.name.encode('ascii'))
|
||||
transaction.set_data('/domains/{}/lasthypervisor'.format(dom_uuid), ''.encode('ascii'))
|
||||
transaction.commit()
|
||||
zkhandler.writedata(self.zk_conn, {
|
||||
'/domains/{}/state'.format(dom_uuid): 'migrate',
|
||||
'/domains/{}/hypervisor'.format(dom_uuid): self.name,
|
||||
'/domains/{}/lasthypervisor'.format(dom_uuid): ''
|
||||
})
|
||||
|
||||
self.inflush = False
|
||||
|
||||
@ -196,7 +194,7 @@ class NodeInstance():
|
||||
past_state = zkhandler.readdata(self.zk_conn, '/nodes/{}/daemonstate'.format(self.name))
|
||||
if past_state != 'run':
|
||||
self.daemon_state = 'run'
|
||||
zkhandler.writedata(self.zk_conn, '/nodes/{}/daemonstate'.format(self.name), [ 'run' ])
|
||||
zkhandler.writedata(self.zk_conn, { '/nodes/{}/daemonstate'.format(self.name): 'run' })
|
||||
else:
|
||||
self.daemon_state = 'run'
|
||||
|
||||
@ -210,7 +208,7 @@ class NodeInstance():
|
||||
raise
|
||||
except Exception as e:
|
||||
# Toggle a state "change"
|
||||
zkhandler.writedata(self.zk_conn, '/domains/{}/state'.format(domain), [ instance.getstate() ])
|
||||
zkhandler.writedata(self.zk_conn, { '/domains/{}/state'.format(domain): instance.getstate() })
|
||||
|
||||
# Set our information in zookeeper
|
||||
self.name = lv_conn.getHostname()
|
||||
@ -220,14 +218,14 @@ class NodeInstance():
|
||||
self.domains_count = len(lv_conn.listDomainsID())
|
||||
keepalive_time = int(time.time())
|
||||
try:
|
||||
transaction = self.zk_conn.transaction()
|
||||
transaction.set_data('/nodes/{}/memused'.format(self.name), str(self.memused).encode('ascii'))
|
||||
transaction.set_data('/nodes/{}/memfree'.format(self.name), str(self.memfree).encode('ascii'))
|
||||
transaction.set_data('/nodes/{}/cpuload'.format(self.name), str(self.cpuload).encode('ascii'))
|
||||
transaction.set_data('/nodes/{}/runningdomains'.format(self.name), ' '.join(self.domain_list).encode('ascii'))
|
||||
transaction.set_data('/nodes/{}/domainscount'.format(self.name), str(self.domains_count).encode('ascii'))
|
||||
transaction.set_data('/nodes/{}/keepalive'.format(self.name), str(keepalive_time).encode('ascii'))
|
||||
transaction.commit()
|
||||
zkhandler.writedata(self.zk_conn, {
|
||||
'/nodes/{}/memused'.format(self.name): str(self.memused),
|
||||
'/nodes/{}/memfree'.format(self.name): str(self.memfree),
|
||||
'/nodes/{}/cpuload'.format(self.name): str(self.cpuload),
|
||||
'/nodes/{}/runningdomains'.format(self.name): ' '.join(self.domain_list),
|
||||
'/nodes/{}/domainscount'.format(self.name): str(self.domains_count),
|
||||
'/nodes/{}/keepalive'.format(self.name): str(keepalive_time)
|
||||
})
|
||||
except:
|
||||
return
|
||||
|
||||
@ -256,7 +254,7 @@ class NodeInstance():
|
||||
if node_keepalive < node_deadtime and node_daemon_state == 'run':
|
||||
# CHECK VERSIONING HERE
|
||||
ansiiprint.echo('Node {} seems dead - starting monitor for fencing'.format(node_name), '', 'w')
|
||||
zkhandler.writedata(self.zk_conn, '/nodes/{}/daemonstate'.format(node_name), [ 'dead' ])
|
||||
zkhandler.writedata(self.zk_conn, { '/nodes/{}/daemonstate'.format(node_name): 'dead' })
|
||||
fence_thread = threading.Thread(target=fenceNode, args=(node_name, self.zk_conn), kwargs={})
|
||||
fence_thread.start()
|
||||
|
||||
@ -344,14 +342,14 @@ def fenceNode(node_name, zk_conn):
|
||||
target_hypervisor = hypervisor
|
||||
|
||||
ansiiprint.echo('Moving VM "{}" to hypervisor "{}"'.format(dom_uuid, target_hypervisor), '', 'i')
|
||||
transaction = zk_conn.transaction()
|
||||
transaction.set_data('/domains/{}/state'.format(dom_uuid), 'start'.encode('ascii'))
|
||||
transaction.set_data('/domains/{}/hypervisor'.format(dom_uuid), target_hypervisor.encode('ascii'))
|
||||
transaction.set_data('/domains/{}/lasthypervisor'.format(dom_uuid), current_hypervisor.encode('ascii'))
|
||||
transaction.commit()
|
||||
zkhandler.writedata(self.zk_conn, {
|
||||
'/domains/{}/state'.format(dom_uuid): 'start',
|
||||
'/domains/{}/hypervisor'.format(dom_uuid): target_hypervisor,
|
||||
'/domains/{}/lasthypervisor'.format(dom_uuid): current_hypervisor
|
||||
})
|
||||
|
||||
# Set node in flushed state for easy remigrating when it comes back
|
||||
zkhandler.writedata(self.zk_conn, '/nodes/{}/domainstate'.format(node_name), [ 'flushed' ])
|
||||
zkhandler.writedata(self.zk_conn, { '/nodes/{}/domainstate'.format(node_name): 'flushed' })
|
||||
|
||||
#
|
||||
# Perform an IPMI fence
|
||||
|
Reference in New Issue
Block a user