Update existing configuration with new values. Needed because
    dict.update is shallow and would overwrite nested dicts.

    Function updates sections commands, parameters and pipelines and adds any
    new items listed in updates.

    :param orig: configuration to update
    :type orig: dict
    :param new: new updated values
    :type orig: dict

def update_configuration(orig, new):
    '''Update existing configuration with new values. Needed because
    dict.update is shallow and would overwrite nested dicts.

    Function updates sections commands, parameters and pipelines and adds any
    new items listed in updates.

    :param orig: configuration to update
    :type orig: dict
    :param new: new updated values
    :type orig: dict
    '''
    dicts = ('commands', 'parameters', 'pipelines')
    for key in dicts:
        if key in new:
            orig[key].update(new[key])

    for key in new:
        if key not in dicts:
            orig[key] = new[key]