def set_state_task_for_instance(graph, node_id, instance, state_name, step_id): task = TaskSequenceWrapper(graph) msg = build_wf_event(WfEvent(instance.id, "in", step_id)) task.add(instance.send_event(msg)) task.add(instance.set_state(state_name)) msg = build_wf_event(WfEvent(instance.id, "ok", step_id)) task.add(instance.send_event(msg)) return task
def operation_task_for_instance(ctx, graph, node_id, instance, operation_fqname, step_id, custom_context): sequence = TaskSequenceWrapper(graph) msg = build_wf_event(WfEvent(instance.id, "in", step_id)) sequence.add(instance.send_event(msg)) relationship_count = count_relationships(instance) if operation_fqname == 'cloudify.interfaces.lifecycle.start': sequence.add(instance.execute_operation(operation_fqname)) if _is_host_node(instance): sequence.add(*host_post_start(ctx, instance)) fork = ForkjoinWrapper(graph) fork.add(instance.execute_operation('cloudify.interfaces.monitoring.start')) if relationship_count > 0: for relationship in instance.relationships: fork.add(relationship.execute_source_operation('cloudify.interfaces.relationship_lifecycle.establish')) fork.add(relationship.execute_target_operation('cloudify.interfaces.relationship_lifecycle.establish')) sequence.add( instance.send_event("Start monitoring on node '{0}' instance '{1}'".format(node_id, instance.id)), forkjoin_sequence(graph, fork, instance, "establish") ) elif operation_fqname == 'cloudify.interfaces.lifecycle.configure': as_target_relationships = custom_context.relationship_targets.get(instance.id, set()) if relationship_count > 0 or len(as_target_relationships) > 0: preconfigure_tasks = ForkjoinWrapper(graph) for relationship in instance.relationships: preconfigure_tasks.add(relationship.execute_source_operation('cloudify.interfaces.relationship_lifecycle.preconfigure')) for relationship in as_target_relationships: preconfigure_tasks.add(relationship.execute_target_operation('cloudify.interfaces.relationship_lifecycle.preconfigure')) sequence.add(forkjoin_sequence(graph, preconfigure_tasks, instance, "preconf for {0}".format(instance.id))) sequence.add(instance.execute_operation(operation_fqname)) if relationship_count > 0 or len(as_target_relationships) > 0: postconfigure_tasks = ForkjoinWrapper(graph) for relationship in instance.relationships: postconfigure_tasks.add(relationship.execute_source_operation('cloudify.interfaces.relationship_lifecycle.postconfigure')) for relationship in as_target_relationships: task = relationship.execute_target_operation('cloudify.interfaces.relationship_lifecycle.postconfigure') _set_send_node_event_on_error_handler(task, instance, "Error occurred while postconfiguring node as target for relationship {0} - ignoring...".format(relationship)) postconfigure_tasks.add(task) msg = "postconf for {0}".format(instance.id) sequence.add(forkjoin_sequence(graph, postconfigure_tasks, instance, msg)) elif operation_fqname == 'cloudify.interfaces.lifecycle.stop': if _is_host_node(instance): sequence.add(*host_pre_stop(instance)) task = instance.execute_operation(operation_fqname) _set_send_node_event_on_error_handler(task, instance, "Error occurred while stopping node - ignoring...") sequence.add(task) # now call unlink onto relations' target if relationship_count > 0: fork = ForkjoinWrapper(graph) for relationship in instance.relationships: unlink_task_source = relationship.execute_source_operation('cloudify.interfaces.relationship_lifecycle.unlink') _set_send_node_event_on_error_handler(unlink_task_source, instance, "Error occurred while unlinking node from target {0} - ignoring...".format(relationship.target_id)) fork.add(unlink_task_source) unlink_task_target = relationship.execute_target_operation('cloudify.interfaces.relationship_lifecycle.unlink') _set_send_node_event_on_error_handler(unlink_task_target, instance, "Error occurred while unlinking node from target {0} - ignoring...".format(relationship.target_id)) fork.add(unlink_task_target) sequence.add(forkjoin_sequence(graph, fork, instance, "unlink")) elif operation_fqname == 'cloudify.interfaces.lifecycle.delete': task = instance.execute_operation(operation_fqname) _set_send_node_event_on_error_handler(task, instance, "Error occurred while deleting node - ignoring...") sequence.add(task) else: # the default behavior : just do the job sequence.add(instance.execute_operation(operation_fqname)) msg = build_wf_event(WfEvent(instance.id, "ok", step_id)) sequence.add(instance.send_event(msg)) return sequence
def operation_task_for_instance(ctx, graph, node_id, instance, operation_fqname, step_id, custom_context): sequence = TaskSequenceWrapper(graph) msg = build_wf_event(WfEvent(instance.id, "in", step_id)) sequence.add(instance.send_event(msg)) relationship_count = count_relationships(instance) if operation_fqname == 'cloudify.interfaces.lifecycle.start': sequence.add(instance.execute_operation(operation_fqname)) if _is_host_node(instance): sequence.add(*host_post_start(ctx, instance)) fork = ForkjoinWrapper(graph) fork.add( instance.execute_operation('cloudify.interfaces.monitoring.start')) if relationship_count > 0: for relationship in instance.relationships: fork.add( relationship.execute_source_operation( 'cloudify.interfaces.relationship_lifecycle.establish') ) fork.add( relationship.execute_target_operation( 'cloudify.interfaces.relationship_lifecycle.establish') ) sequence.add( instance.send_event( "Start monitoring on node '{0}' instance '{1}'".format( node_id, instance.id)), forkjoin_sequence(graph, fork, instance, "establish")) elif operation_fqname == 'cloudify.interfaces.lifecycle.configure': as_target_relationships = custom_context.relationship_targets.get( instance.id, set()) if relationship_count > 0 or len(as_target_relationships) > 0: preconfigure_tasks = ForkjoinWrapper(graph) for relationship in instance.relationships: preconfigure_tasks.add( relationship.execute_source_operation( 'cloudify.interfaces.relationship_lifecycle.preconfigure' )) for relationship in as_target_relationships: preconfigure_tasks.add( relationship.execute_target_operation( 'cloudify.interfaces.relationship_lifecycle.preconfigure' )) sequence.add( forkjoin_sequence(graph, preconfigure_tasks, instance, "preconf for {0}".format(instance.id))) sequence.add(instance.execute_operation(operation_fqname)) if relationship_count > 0 or len(as_target_relationships) > 0: postconfigure_tasks = ForkjoinWrapper(graph) for relationship in instance.relationships: postconfigure_tasks.add( relationship.execute_source_operation( 'cloudify.interfaces.relationship_lifecycle.postconfigure' )) for relationship in as_target_relationships: task = relationship.execute_target_operation( 'cloudify.interfaces.relationship_lifecycle.postconfigure') _set_send_node_event_on_error_handler( task, instance, "Error occurred while postconfiguring node as target for relationship {0} - ignoring..." .format(relationship)) postconfigure_tasks.add(task) msg = "postconf for {0}".format(instance.id) sequence.add( forkjoin_sequence(graph, postconfigure_tasks, instance, msg)) elif operation_fqname == 'cloudify.interfaces.lifecycle.stop': if _is_host_node(instance): sequence.add(*host_pre_stop(instance)) task = instance.execute_operation(operation_fqname) _set_send_node_event_on_error_handler( task, instance, "Error occurred while stopping node - ignoring...") sequence.add(task) # now call unlink onto relations' target if relationship_count > 0: fork = ForkjoinWrapper(graph) for relationship in instance.relationships: unlink_task_source = relationship.execute_source_operation( 'cloudify.interfaces.relationship_lifecycle.unlink') _set_send_node_event_on_error_handler( unlink_task_source, instance, "Error occurred while unlinking node from target {0} - ignoring..." .format(relationship.target_id)) fork.add(unlink_task_source) unlink_task_target = relationship.execute_target_operation( 'cloudify.interfaces.relationship_lifecycle.unlink') _set_send_node_event_on_error_handler( unlink_task_target, instance, "Error occurred while unlinking node from target {0} - ignoring..." .format(relationship.target_id)) fork.add(unlink_task_target) sequence.add(forkjoin_sequence(graph, fork, instance, "unlink")) elif operation_fqname == 'cloudify.interfaces.lifecycle.delete': task = instance.execute_operation(operation_fqname) _set_send_node_event_on_error_handler( task, instance, "Error occurred while deleting node - ignoring...") sequence.add(task) else: # the default behavior : just do the job sequence.add(instance.execute_operation(operation_fqname)) msg = build_wf_event(WfEvent(instance.id, "ok", step_id)) sequence.add(instance.send_event(msg)) return sequence
def operation_task_for_instance(ctx, graph, node_id, instance, operation_fqname, step_id, custom_context): sequence = TaskSequenceWrapper(graph) msg = build_wf_event(WfEvent(instance.id, "in", step_id)) sequence.add(instance.send_event(msg)) relationship_count = count_relationships(instance) if operation_fqname == 'cloudify.interfaces.lifecycle.start': sequence.add(instance.execute_operation(operation_fqname)) if _is_host_node(instance): sequence.add(*host_post_start(ctx, instance)) fork = ForkjoinWrapper(graph) fork.add(instance.execute_operation('cloudify.interfaces.monitoring.start')) if relationship_count > 0: for relationship in instance.relationships: fork.add(relationship.execute_source_operation('cloudify.interfaces.relationship_lifecycle.establish')) fork.add(relationship.execute_target_operation('cloudify.interfaces.relationship_lifecycle.establish')) sequence.add( instance.send_event("Start monitoring on node '{0}' instance '{1}'".format(node_id, instance.id)), forkjoin_sequence(graph, fork, instance, "establish") ) elif operation_fqname == 'cloudify.interfaces.lifecycle.configure': as_target_relationships = custom_context.relationship_targets.get(instance.id, set()) if relationship_count > 0 or len(as_target_relationships) > 0: preconfigure_tasks = ForkjoinWrapper(graph) for relationship in instance.relationships: preconfigure_tasks.add(relationship.execute_source_operation('cloudify.interfaces.relationship_lifecycle.preconfigure')) for relationship in as_target_relationships: preconfigure_tasks.add(relationship.execute_target_operation('cloudify.interfaces.relationship_lifecycle.preconfigure')) sequence.add(forkjoin_sequence(graph, preconfigure_tasks, instance, "preconf for {0}".format(instance.id))) sequence.add(instance.execute_operation(operation_fqname)) if relationship_count > 0 or len(as_target_relationships) > 0: postconfigure_tasks = ForkjoinWrapper(graph) for relationship in instance.relationships: postconfigure_tasks.add(relationship.execute_source_operation('cloudify.interfaces.relationship_lifecycle.postconfigure')) for relationship in as_target_relationships: task = relationship.execute_target_operation('cloudify.interfaces.relationship_lifecycle.postconfigure') _set_send_node_event_on_error_handler(task, instance, "Error occurred while postconfiguring node as target for relationship {0} - ignoring...".format(relationship)) postconfigure_tasks.add(task) msg = "postconf for {0}".format(instance.id) sequence.add(forkjoin_sequence(graph, postconfigure_tasks, instance, msg)) persistent_property = instance.node.properties.get('_a4c_persistent_resource_id', None) if persistent_property != None: # send event to send resource id to alien splitted_persistent_property = persistent_property.split('=') persistent_cloudify_attribute = splitted_persistent_property[0] persistent_alien_attribute = splitted_persistent_property[1] persist_msg = build_pre_event(PersistentResourceEvent(persistent_cloudify_attribute, persistent_alien_attribute)) @task_config(send_task_events=False) def send_event_task(): _send_event(instance, 'workflow_node', 'a4c_persistent_event', persist_msg, None, None, None) sequence.add(instance.ctx.local_task( local_task=send_event_task, node=instance, info=persist_msg)) elif operation_fqname == 'cloudify.interfaces.lifecycle.stop': if _is_host_node(instance): sequence.add(*host_pre_stop(instance)) task = instance.execute_operation(operation_fqname) _set_send_node_event_on_error_handler(task, instance, "Error occurred while stopping node - ignoring...") sequence.add(task) # now call unlink onto relations' target if relationship_count > 0: fork = ForkjoinWrapper(graph) for relationship in instance.relationships: unlink_task_source = relationship.execute_source_operation('cloudify.interfaces.relationship_lifecycle.unlink') _set_send_node_event_on_error_handler(unlink_task_source, instance, "Error occurred while unlinking node from target {0} - ignoring...".format(relationship.target_id)) fork.add(unlink_task_source) unlink_task_target = relationship.execute_target_operation('cloudify.interfaces.relationship_lifecycle.unlink') _set_send_node_event_on_error_handler(unlink_task_target, instance, "Error occurred while unlinking node from target {0} - ignoring...".format(relationship.target_id)) fork.add(unlink_task_target) sequence.add(forkjoin_sequence(graph, fork, instance, "unlink")) elif operation_fqname == 'cloudify.interfaces.lifecycle.delete': task = instance.execute_operation(operation_fqname) _set_send_node_event_on_error_handler(task, instance, "Error occurred while deleting node - ignoring...") sequence.add(task) else: # the default behavior : just do the job sequence.add(instance.execute_operation(operation_fqname)) msg = build_wf_event(WfEvent(instance.id, "ok", step_id)) sequence.add(instance.send_event(msg)) return sequence