def execute(self, nodes_to_provision): """Run provisioning task on specified nodes """ # locking nodes nodes_ids = [node.id for node in nodes_to_provision] nodes = objects.NodeCollection.filter_by_list(None, "id", nodes_ids, order_by="id") objects.NodeCollection.lock_for_update(nodes).all() objects.NodeCollection.update_slave_nodes_fqdn(nodes_to_provision) logger.debug("Nodes to provision: {0}".format(" ".join([n.fqdn for n in nodes_to_provision]))) task_provision = Task(name="provision") task_provision.node_ids = nodes_ids # node_ids参数在安装成功时候无用,但在安装失败的时候需要用到 db().add(task_provision) db().commit() provision_message = self._call_silently( task_provision, tasks.InstallosTask, nodes_to_provision, method_name="message" ) task_provision = objects.Task.get_by_uid(task_provision.id, fail_if_not_found=True, lock_for_update=True) task_provision.cache = provision_message objects.NodeCollection.lock_for_update(nodes).all() for node in nodes_to_provision: node.pending_addition = False node.status = NODE_STATUSES.provisioning node.progress = 0 db().commit() rpc.cast("naily", provision_message) logger.info(u"消息发送完毕") return task_provision
def execute(self, nodes_to_provision): """Run provisioning task on specified nodes """ # locking nodes nodes_ids = [node.id for node in nodes_to_provision] nodes = objects.NodeCollection.filter_by_list(None, 'id', nodes_ids, order_by='id') objects.NodeCollection.lock_for_update(nodes).all() objects.NodeCollection.update_slave_nodes_fqdn(nodes_to_provision) logger.debug('Nodes to provision: {0}'.format(' '.join( [n.fqdn for n in nodes_to_provision]))) task_provision = Task(name='provision') task_provision.node_ids = nodes_ids #node_ids参数在安装成功时候无用,但在安装失败的时候需要用到 db().add(task_provision) db().commit() provision_message = self._call_silently(task_provision, tasks.InstallosTask, nodes_to_provision, method_name='message') task_provision = objects.Task.get_by_uid(task_provision.id, fail_if_not_found=True, lock_for_update=True) task_provision.cache = provision_message objects.NodeCollection.lock_for_update(nodes).all() for node in nodes_to_provision: node.pending_addition = False node.status = NODE_STATUSES.provisioning node.progress = 0 db().commit() rpc.cast('naily', provision_message) logger.info(u'消息发送完毕') return task_provision