def build_zones(cmd_line_args):
    base_image = get_base_image(cmd_line_args.platform_target, cmd_line_args.image_tag)
    federation_tag_list=[]
    for x in range(cmd_line_args.zones):
        zone_id = x + 1    
        stage = 'federation_zone_' + str(zone_id)
        federation_tag = get_build_tag(cmd_line_args.platform_target, stage, cmd_line_args.build_id)
        docker_cmds_utilities.build_irods_zone(federation_tag, base_image, cmd_line_args.database_type, 'Dockerfile.fed')
        federation_tag_list.append(federation_tag)

    network_name = cmd_line_args.platform_target + '_' + cmd_line_args.test_type + '_' + cmd_line_args.database_type + '_' + cmd_line_args.build_id
    create_federation(federation_tag_list, network_name, cmd_line_args)
def build_topo_containers(cmd_line_args):
    base_image = ci_utilities.get_base_image(cmd_line_args.platform_target, cmd_line_args.image_tag)
    provider_tag = ci_utilities.get_build_tag(cmd_line_args.platform_target, 'topo_provider', cmd_line_args.database_type, cmd_line_args.build_id)
    docker_cmds_utilities.build_irods_zone(provider_tag, base_image, cmd_line_args.database_type, 'Dockerfile.topo', 'True')
    consumer_tag_list = []
    machine_list = []
    for x in range(cmd_line_args.consumers):
        consumer_id = x + 1
        stage = 'topo_consumer_' + str(consumer_id)
        consumer_tag = ci_utilities.get_build_tag(cmd_line_args.platform_target, stage, cmd_line_args.database_type, cmd_line_args.build_id)
        docker_cmds_utilities.build_irods_zone(consumer_tag, base_image, cmd_line_args.database_type, 'Dockerfile.topo', 'False')
        consumer_tag_list.append(consumer_tag)
        consumer_name = cmd_line_args.platform_target + '-' + cmd_line_args.test_name_prefix + '-consumer-' + str(consumer_id)
        machine_list.append(consumer_name)

    network_name = cmd_line_args.platform_target + '_' + cmd_line_args.test_type + '_' + cmd_line_args.database_type + '_' + cmd_line_args.build_id
    create_topology(cmd_line_args, provider_tag, consumer_tag_list, machine_list, network_name)
def main():
    parser = argparse.ArgumentParser(description='Run tests in os-containers')
    parser.add_argument('-p', '--platform_target', type=str, required=True)
    parser.add_argument('--image_tag',
                        type=str,
                        required=True,
                        help='Tag id or name for the base image')
    parser.add_argument('-b', '--build_id', type=str, required=True)
    parser.add_argument('--irods_repo', type=str, required=False)
    parser.add_argument('--irods_commitish', type=str, required=False)
    parser.add_argument('--test_name_prefix', type=str, required=True)
    parser.add_argument('--irods_build_dir', type=str, required=True)
    parser.add_argument('--test_plugin', action='store_true', default=False)
    parser.add_argument('--externals_dir',
                        type=str,
                        help='externals build directory')
    parser.add_argument('--plugin_build_dir',
                        type=str,
                        help='plugin build directory')
    parser.add_argument('--plugin_repo', help='plugin git repo')
    parser.add_argument('--plugin_commitish', help='plugin git commit sha')
    parser.add_argument('--database_type',
                        default='postgres',
                        help='database type',
                        required=True)
    parser.add_argument('--test_parallelism',
                        default='4',
                        help='The number of tests to run in parallel',
                        required=False)
    parser.add_argument('-o', '--output_directory', type=str, required=True)
    parser.add_argument('--passthrough_arguments', type=str)
    parser.add_argument('--run_unit_tests', action='store_true', default=False)
    parser.add_argument('--run_timing_tests',
                        action='store_true',
                        default=False)

    args = parser.parse_args()
    build_tag = None
    base_image = ci_utilities.get_base_image(args.platform_target,
                                             args.image_tag)

    if not args.test_plugin:
        build_tag = ci_utilities.get_build_tag(args.platform_target,
                                               'irods-install',
                                               args.database_type,
                                               args.build_id)
    else:
        build_tag = ci_utilities.get_build_tag(args.platform_target,
                                               'plugin-install',
                                               args.database_type,
                                               args.build_id)

    docker_cmds_utilities.build_irods_zone(build_tag, base_image,
                                           args.database_type,
                                           'Dockerfile.install_and_test', True)
    test_name_prefix = args.platform_target + '_' + args.test_name_prefix.replace(
        '-', '_')

    if not args.test_plugin:
        irods_sha = ci_utilities.get_sha_from_commitish(
            args.irods_repo, args.irods_commitish)
        run_tests(build_tag, irods_sha, test_name_prefix, args)
    else:
        plugin_repo = args.plugin_repo
        plugin_repo_split = plugin_repo.split('/')
        plugin = plugin_repo_split[len(plugin_repo_split) - 1]
        plugin_name = plugin.split('.git')[0]
        if 'audit' in plugin_name:
            if '--message_broker' in args.passthrough_arguments:
                message_broker = args.passthrough_arguments.split(' ')[1]
                machine_name = args.platform_target + '-' + plugin_name + '-' + message_broker + '-' + args.database_type + '-' + args.build_id
        elif 'storage' in plugin_name and args.passthrough_arguments is not None and 'unified' in args.passthrough_arguments:
            plugin_name = plugin_name + '-unified'
            machine_name = args.platform_target + '-' + plugin_name + '-' + args.database_type + '-' + args.build_id
        else:
            machine_name = args.platform_target + '-' + plugin_name + '-' + args.database_type + '-' + args.build_id

        plugin_sha = ci_utilities.get_sha_from_commitish(
            args.plugin_repo, args.plugin_commitish)
        run_plugin_tests(build_tag, plugin_sha, machine_name, plugin_name,
                         test_name_prefix, args)