def make_cmd_line_parser()

in assets/scripts/SilentInstaller.py [0:0]


def make_cmd_line_parser():
    ''' Creates a parser for the arguments passed on this script's command line '''

    parser = argparse.ArgumentParser(
        description='Tableau Server silent installation script',
        add_help=False,
        formatter_class=argparse.ArgumentDefaultsHelpFormatter)

    optional_flags = parser.add_argument_group('optional flags')
    optional_flags.add_argument('-h', '--help', action='help', help='display this message and exit')
    optional_flags.add_argument('--bootstrapFile', help='A json file containing all options listed here. When using this option, no other options can be specified on the command line.')

    # Required arguments
    subparsers = parser.add_subparsers(help='Install Server, Install Worker or Update Topology')

    ### INSTALL ARGS
    install_parser = subparsers.add_parser('install')
    install_parser.set_defaults(type='install')

    # Optional flags (have reasonable defaults)
    optional_flags = install_parser.add_argument_group('optional flags')
    optional_flags.add_argument('--installDir', help='Installation directory', default=Options.defaults['installDir'])
    optional_flags.add_argument('--dataDir', help='Data directory', default=Options.defaults['dataDir'])
    optional_flags.add_argument('--controllerPort', help='TSM conroller port', default=Options.defaults['controllerPort'])
    optional_flags.add_argument('--coordinationserviceClientPort', help='ZooKeeper client port', default=Options.defaults['coordinationserviceClientPort'])
    optional_flags.add_argument('--coordinationservicePeerPort', help='ZooKeeper peer port', default=Options.defaults['coordinationservicePeerPort'])
    optional_flags.add_argument('--coordinationserviceLeaderPort', help='ZooKeeper leader port', default=Options.defaults['coordinationserviceLeaderPort'])
    optional_flags.add_argument('--licenseserviceVendorDaemonPort', help='License Service vendor daemon port', default=Options.defaults['licenseserviceVendorDaemonPort'])
    optional_flags.add_argument('--agentFileTransferPort', help='Tabadmin Agent file transfer port', default=Options.defaults['agentFileTransferPort'])
    optional_flags.add_argument('--portRangeMin', help='Port range min', default=Options.defaults['portRangeMin'])
    optional_flags.add_argument('--portRangeMax', help='Port range max', default=Options.defaults['portRangeMax'])
    optional_flags.add_argument('--portRemappingEnabled', help='Whether port remapping is enabled', default=Options.defaults['portRemappingEnabled'])
    optional_flags.add_argument('--start', help='Should Tableau Server start at the end of the installation?', choices=['yes', 'no'], default=Options.defaults['start'])
    optional_flags.add_argument('--saveNodeConfiguration', help='Should Tableau Server save the node configuration file for worker installation?', choices=['yes', 'no'], default=Options.defaults['saveNodeConfiguration'])
    optional_flags.add_argument('--nodeConfigurationDirectory', help='Directory to save the node setup file for worker installation if you choose YES for --saveNodeConfigurationFile option', default=Options.defaults['nodeConfigurationDirectory'])

    # Required flags (no reasonable defaults)
    required_flags = install_parser.add_argument_group('required flags')
    required_flags.add_argument('--secretsFile', required=True, help='User credentials json file')
    required_flags.add_argument('--configFile', help='Configuration and topology json file')
    required_flags.add_argument('--registrationFile', help='User registration file')
    required_flags.add_argument('installer', help='Installer path, e.g: Tableau-Server-64bit-9-3-1.exe')

    ### INSTALL WORKER ARGS
    install_worker_parser = subparsers.add_parser('installWorker')
    install_worker_parser.set_defaults(type='installWorker')

    # Optional flags (no reasonable defaults)
    optional_flags = install_worker_parser.add_argument_group('optional flags')
    optional_flags.add_argument('--installDir', help='Installation directory', default=Options.defaults['installDir'])
    optional_flags.add_argument('--dataDir', help='Data directory', default=Options.defaults['dataDir'])

    # Required flags (no reasonable defaults)
    required_flags = install_worker_parser.add_argument_group('required flags')
    required_flags.add_argument('--nodeConfigurationFile', help='Node configuration json file')
    required_flags.add_argument('--secretsFile', required=True, help='User credentials json file')
    required_flags.add_argument('installer', help='Worker Installer path, e.g: Tableau-Worker-64bit-9-3-1.exe')

    ### UPDATE Topology ARGS
    update_topology_parser = subparsers.add_parser('updateTopology')
    update_topology_parser.set_defaults(type='updateTopology')

    # Optional flags (have reasonable defaults)
    optional_flags = update_topology_parser.add_argument_group('optional flags')
    optional_flags.add_argument('--installDir', help='Installation directory', default=Options.defaults['installDir'])
    optional_flags.add_argument('--controllerPort', help='TSM conroller port', default=Options.defaults['controllerPort'])

    # Required flags (no reasonable defaults)
    required_flags = update_topology_parser.add_argument_group('required flags')
    required_flags.add_argument('--secretsFile', required=True, help='User credentials json file')
    required_flags.add_argument('--configFile', help='Topology json file')

    return parser