def install_new_agents(ctx,
                       install_agent_timeout,
                       node_ids,
                       node_instance_ids,
                       install_methods=None,
                       validate=True,
                       install=True,
                       manager_ip=None,
                       manager_certificate=None,
                       stop_old_agent=False,
                       **_):

    hosts = _create_hosts_list(ctx, node_ids, node_instance_ids,
                               install_methods)
    _assert_hosts_started(hosts)

    graph = ctx.graph_mode()
    if validate:
        validate_subgraph = _add_validate_to_task_graph(
            graph,
            hosts,
            current_amqp=False,
            manager_ip=manager_ip,
            manager_certificate=manager_certificate)
    if install:
        install_subgraph = graph.subgraph('install')
        for host in hosts:
            seq = install_subgraph.sequence()
            seq.add(
                host.send_event('Installing new agent'),
                host.execute_operation(
                    'cloudify.interfaces.cloudify_agent.create_amqp',
                    kwargs={
                        'install_agent_timeout': install_agent_timeout,
                        'manager_ip': manager_ip,
                        'manager_certificate': manager_certificate,
                        'stop_old_agent': stop_old_agent
                    },
                    allow_kwargs_override=True),
                host.send_event('New agent installed.'),
                host.execute_operation(
                    'cloudify.interfaces.cloudify_agent.validate_amqp',
                    kwargs={'current_amqp': True}),
                *lifecycle.prepare_running_agent(host))
            for subnode in host.get_contained_subgraph():
                seq.add(
                    subnode.execute_operation(
                        'cloudify.interfaces.monitoring.start'))
    if validate and install:
        graph.add_dependency(install_subgraph, validate_subgraph)
    graph.execute()
def install_new_agents(ctx, install_agent_timeout, node_ids,
                       node_instance_ids, **_):
    if node_ids or node_instance_ids:
        filtered_node_instances = _filter_node_instances(
            ctx=ctx,
            node_ids=node_ids,
            node_instance_ids=node_instance_ids,
            type_names=[])
        error = False
        for node_instance in filtered_node_instances:
            if not lifecycle.is_host_node(node_instance):
                msg = 'Node instance {0} is not host.'.format(node_instance.id)
                ctx.logger.error(msg)
                error = True
            elif utils.internal.get_install_method(
                    node_instance.node.properties) \
                    == constants.AGENT_INSTALL_METHOD_NONE:
                msg = ('Agent should not be installed on '
                       'node instance {0}').format(node_instance.id)
                ctx.logger.error(msg)
                error = True
        if error:
            raise ValueError('Specified filters are not correct.')
        else:
            hosts = filtered_node_instances
    else:
        hosts = (host for host in _get_all_host_instances(ctx)
                 if utils.internal.get_install_method(host.node.properties)
                 != constants.AGENT_INSTALL_METHOD_NONE)

    graph = ctx.graph_mode()
    for host in hosts:
        seq = graph.sequence()
        seq.add(
            host.send_event('Installing new agent.'),
            host.execute_operation(
                'cloudify.interfaces.cloudify_agent.create_amqp',
                kwargs={'install_agent_timeout': install_agent_timeout},
                allow_kwargs_override=True),
            host.send_event('New agent installed.'),
            *lifecycle.prepare_running_agent(host)
        )
        for subnode in host.get_contained_subgraph():
            seq.add(subnode.execute_operation(
                'cloudify.interfaces.monitoring.start'))
    graph.execute()
Example #3
0
def install_new_agents(ctx, install_agent_timeout, node_ids, node_instance_ids,
                       **_):
    if node_ids or node_instance_ids:
        filtered_node_instances = _filter_node_instances(
            ctx=ctx,
            node_ids=node_ids,
            node_instance_ids=node_instance_ids,
            type_names=[])
        error = False
        for node_instance in filtered_node_instances:
            if not lifecycle.is_host_node(node_instance):
                msg = 'Node instance {0} is not host.'.format(node_instance.id)
                ctx.logger.error(msg)
                error = True
            elif utils.internal.get_install_method(
                    node_instance.node.properties) \
                    == constants.AGENT_INSTALL_METHOD_NONE:
                msg = ('Agent should not be installed on '
                       'node instance {0}').format(node_instance.id)
                ctx.logger.error(msg)
                error = True
        if error:
            raise ValueError('Specified filters are not correct.')
        else:
            hosts = filtered_node_instances
    else:
        hosts = (host for host in _get_all_host_instances(ctx)
                 if utils.internal.get_install_method(host.node.properties) !=
                 constants.AGENT_INSTALL_METHOD_NONE)

    graph = ctx.graph_mode()
    for host in hosts:
        seq = graph.sequence()
        seq.add(
            host.send_event('Installing new agent.'),
            host.execute_operation(
                'cloudify.interfaces.cloudify_agent.create_amqp',
                kwargs={'install_agent_timeout': install_agent_timeout},
                allow_kwargs_override=True),
            host.send_event('New agent installed.'),
            *lifecycle.prepare_running_agent(host))
        for subnode in host.get_contained_subgraph():
            seq.add(
                subnode.execute_operation(
                    'cloudify.interfaces.monitoring.start'))
    graph.execute()
def install_new_agents(ctx, install_agent_timeout, node_ids,
                       node_instance_ids, validate=True, install=True,
                       manager_ip=None, manager_certificate=None, **_):

    hosts = _create_hosts_list(ctx, node_ids, node_instance_ids)
    _assert_hosts_started(hosts)

    graph = ctx.graph_mode()
    if validate:
        validate_subgraph = _add_validate_to_task_graph(
            graph,
            hosts,
            current_amqp=False,
            manager_ip=manager_ip,
            manager_certificate=manager_certificate
        )
    if install:
        install_subgraph = graph.subgraph('install')
        for host in hosts:
            seq = install_subgraph.sequence()
            seq.add(
                host.send_event('Installing new agent'),
                host.execute_operation(
                    'cloudify.interfaces.cloudify_agent.create_amqp',
                    kwargs={
                        'install_agent_timeout': install_agent_timeout,
                        'manager_ip': manager_ip,
                        'manager_certificate': manager_certificate
                    },
                    allow_kwargs_override=True),
                host.send_event('New agent installed.'),
                host.execute_operation(
                    'cloudify.interfaces.cloudify_agent.validate_amqp',
                    kwargs={'current_amqp': True}),
                *lifecycle.prepare_running_agent(host)
            )
            for subnode in host.get_contained_subgraph():
                seq.add(subnode.execute_operation(
                    'cloudify.interfaces.monitoring.start'))
    if validate and install:
        graph.add_dependency(install_subgraph, validate_subgraph)
    graph.execute()
def install_new_agents(ctx, install_agent_timeout, node_ids,
                       node_instance_ids, validate=True, install=True, **_):
    if node_ids or node_instance_ids:
        filtered_node_instances = _filter_node_instances(
            ctx=ctx,
            node_ids=node_ids,
            node_instance_ids=node_instance_ids,
            type_names=[])
        error = False
        for node_instance in filtered_node_instances:
            if not lifecycle.is_host_node(node_instance):
                msg = 'Node instance {0} is not host.'.format(node_instance.id)
                ctx.logger.error(msg)
                error = True
            elif utils.internal.get_install_method(
                    node_instance.node.properties) \
                    == constants.AGENT_INSTALL_METHOD_NONE:
                msg = ('Agent should not be installed on '
                       'node instance {0}').format(node_instance.id)
                ctx.logger.error(msg)
                error = True
        if error:
            raise ValueError('Specified filters are not correct.')
        else:
            hosts = filtered_node_instances
    else:
        hosts = [host for host in _get_all_host_instances(ctx)
                 if utils.internal.get_install_method(host.node.properties) !=
                 constants.AGENT_INSTALL_METHOD_NONE]

    for host in hosts:
        state = host.get_state().get()
        if state != 'started':
            raise RuntimeError('Node {0} is not started (state: {1})'.format(
                host.id,
                state))
    graph = ctx.graph_mode()
    if validate:
        validate_subgraph = graph.subgraph('validate')
        for host in hosts:
            seq = validate_subgraph.sequence()
            seq.add(
                host.send_event('Validating agent connection.'),
                host.execute_operation(
                    'cloudify.interfaces.cloudify_agent.validate_amqp',
                    kwargs={
                        'fail_on_agent_not_installable': True
                    }),
                host.send_event('Validation done'))
    if install:
        install_subgraph = graph.subgraph('install')
        for host in hosts:
            seq = install_subgraph.sequence()
            seq.add(
                host.send_event('Installing new agent'),
                host.execute_operation(
                    'cloudify.interfaces.cloudify_agent.create_amqp',
                    kwargs={'install_agent_timeout': install_agent_timeout},
                    allow_kwargs_override=True),
                host.send_event('New agent installed.'),
                host.execute_operation(
                    'cloudify.interfaces.cloudify_agent.validate_amqp',
                    kwargs={
                        'fail_on_agent_dead': True
                    }),
                *lifecycle.prepare_running_agent(host)
            )
            for subnode in host.get_contained_subgraph():
                seq.add(subnode.execute_operation(
                    'cloudify.interfaces.monitoring.start'))
    if validate and install:
        graph.add_dependency(install_subgraph, validate_subgraph)
    graph.execute()
def install_new_agents(ctx,
                       install_agent_timeout,
                       node_ids,
                       node_instance_ids,
                       validate=True,
                       install=True,
                       **_):
    if node_ids or node_instance_ids:
        filtered_node_instances = _filter_node_instances(
            ctx=ctx,
            node_ids=node_ids,
            node_instance_ids=node_instance_ids,
            type_names=[])
        error = False
        for node_instance in filtered_node_instances:
            if not lifecycle.is_host_node(node_instance):
                msg = 'Node instance {0} is not host.'.format(node_instance.id)
                ctx.logger.error(msg)
                error = True
            elif utils.internal.get_install_method(
                    node_instance.node.properties) \
                    == constants.AGENT_INSTALL_METHOD_NONE:
                msg = ('Agent should not be installed on '
                       'node instance {0}').format(node_instance.id)
                ctx.logger.error(msg)
                error = True
        if error:
            raise ValueError('Specified filters are not correct.')
        else:
            hosts = filtered_node_instances
    else:
        hosts = [
            host for host in _get_all_host_instances(ctx)
            if utils.internal.get_install_method(host.node.properties) !=
            constants.AGENT_INSTALL_METHOD_NONE
        ]

    for host in hosts:
        state = host.get_state().get()
        if state != 'started':
            raise RuntimeError('Node {0} is not started (state: {1})'.format(
                host.id, state))
    graph = ctx.graph_mode()
    if validate:
        validate_subgraph = graph.subgraph('validate')
        for host in hosts:
            seq = validate_subgraph.sequence()
            seq.add(
                host.send_event('Validating agent connection.'),
                host.execute_operation(
                    'cloudify.interfaces.cloudify_agent.validate_amqp',
                    kwargs={'fail_on_agent_not_installable': True}),
                host.send_event('Validation done'))
    if install:
        install_subgraph = graph.subgraph('install')
        for host in hosts:
            seq = install_subgraph.sequence()
            seq.add(
                host.send_event('Installing new agent'),
                host.execute_operation(
                    'cloudify.interfaces.cloudify_agent.create_amqp',
                    kwargs={'install_agent_timeout': install_agent_timeout},
                    allow_kwargs_override=True),
                host.send_event('New agent installed.'),
                host.execute_operation(
                    'cloudify.interfaces.cloudify_agent.validate_amqp',
                    kwargs={'fail_on_agent_dead': True}),
                *lifecycle.prepare_running_agent(host))
            for subnode in host.get_contained_subgraph():
                seq.add(
                    subnode.execute_operation(
                        'cloudify.interfaces.monitoring.start'))
    if validate and install:
        graph.add_dependency(install_subgraph, validate_subgraph)
    graph.execute()