Example #1
0
    def wrapper(*args, **kwargs):
        ctx = _find_type_in_kwargs(context.CloudifyContext,
                                   kwargs.values() + list(args))
        if not ctx:
            raise NonRecoverableError(
                'CloudifyContext not found in invocation args')
        if ctx.type == context.NODE_INSTANCE and \
                'cloudify_agent' in ctx.node.properties:
            agent_config = ctx.node.properties['cloudify_agent']
        else:
            agent_config = kwargs.get('cloudify_agent', {})
        prepare_configuration(ctx, agent_config)
        kwargs['agent_config'] = agent_config
        runner = FabricRunner(ctx, agent_config)
        kwargs['runner'] = runner

        try:
            if not (agent_config.get('distro') and
                    agent_config.get('distro_codename')):
                distro_info = get_machine_distro(runner)
                if not agent_config.get('distro'):
                    agent_config['distro'] = distro_info[0]
                if not agent_config.get('distro_codename'):
                    agent_config['distro_codename'] = distro_info[2]
            return func(*args, **kwargs)
        finally:
            # Fixes CFY-1741 (clear fabric connection cache)
            runner.close()
Example #2
0
    def wrapper(*args, **kwargs):
        ctx = _find_type_in_kwargs(context.CloudifyContext,
                                   kwargs.values() + list(args))
        if not ctx:
            raise NonRecoverableError(
                'CloudifyContext not found in invocation args')

        if 'cloudify_agent' in kwargs:
            if ctx.type == context.NODE_INSTANCE and \
                    ctx.node.properties.get('cloudify_agent'):
                raise NonRecoverableError("'cloudify_agent' is configured "
                                          "both as a node property and as an "
                                          "invocation input parameter for "
                                          "operation '{0}'"
                                          .format(ctx.operation.name))
            agent_config = kwargs['cloudify_agent']
        else:
            if ctx.type == context.NODE_INSTANCE and \
                    ctx.node.properties.get('cloudify_agent'):
                agent_config = ctx.node.properties['cloudify_agent']
            else:
                agent_config = {}
        prepare_connection_configuration(ctx, agent_config)
        runner = FabricRunner(ctx, agent_config)
        try:
            prepare_additional_configuration(ctx, agent_config, runner)

            kwargs['runner'] = runner
            kwargs['agent_config'] = agent_config

            if not (agent_config.get('distro') and
                    agent_config.get('distro_codename')):
                distro_info = get_machine_distro(runner)
                if not agent_config.get('distro'):
                    agent_config['distro'] = distro_info[0]
                if not agent_config.get('distro_codename'):
                    agent_config['distro_codename'] = distro_info[2]
            return func(*args, **kwargs)
        finally:
            # Fixes CFY-1741 (clear fabric connection cache)
            runner.close()
    def wrapper(*args, **kwargs):
        ctx = _find_type_in_kwargs(context.CloudifyContext,
                                   kwargs.values() + list(args))
        if not ctx:
            raise NonRecoverableError(
                'CloudifyContext not found in invocation args')

        if 'cloudify_agent' in kwargs:
            if ctx.type == context.NODE_INSTANCE and \
                    ctx.node.properties.get('cloudify_agent'):
                raise NonRecoverableError("'cloudify_agent' is configured "
                                          "both as a node property and as an "
                                          "invocation input parameter for "
                                          "operation '{0}'".format(
                                              ctx.operation.name))
            agent_config = kwargs['cloudify_agent']
        else:
            if ctx.type == context.NODE_INSTANCE and \
                    ctx.node.properties.get('cloudify_agent'):
                agent_config = ctx.node.properties['cloudify_agent']
            else:
                agent_config = {}
        prepare_connection_configuration(ctx, agent_config)
        runner = FabricRunner(ctx, agent_config)
        try:
            prepare_additional_configuration(ctx, agent_config, runner)

            kwargs['runner'] = runner
            kwargs['agent_config'] = agent_config

            if not (agent_config.get('distro')
                    and agent_config.get('distro_codename')):
                distro_info = get_machine_distro(runner)
                if not agent_config.get('distro'):
                    agent_config['distro'] = distro_info[0]
                if not agent_config.get('distro_codename'):
                    agent_config['distro_codename'] = distro_info[2]
            return func(*args, **kwargs)
        finally:
            # Fixes CFY-1741 (clear fabric connection cache)
            runner.close()