def _parse_cli_args()

in cookbooks/aws-parallelcluster-environment/files/custom_action_executor/custom_action_executor.py [0:0]


def _parse_cli_args():
    parser = argparse.ArgumentParser(
        description="Execute action scripts attached to a node lifecycle event", exit_on_error=False
    )

    event_group = parser.add_mutually_exclusive_group(required=True)

    for event in LegacyEventName:
        event_group.add_argument(
            f"-{event.value}",
            action="store_true",
            help=f"selects the {event.value} event in the node lifecycle to execute",
        )

    parser.add_argument(
        "-r",
        "--region",
        type=str,
        default=os.getenv("AWS_REGION", None),
        required=False,
        help="the cluster AWS region, defaults to AWS_REGION env variable",
    )
    parser.add_argument(
        "-s",
        "--stack-name",
        type=str,
        default=os.getenv("PCLUSTER_STACK_NAME", None),
        required=False,
        help="the parallelcluster cloudformation stack name," " defaults to PCLUSTER_STACK_NAME env variable",
    )
    parser.add_argument(
        "-n",
        "--node-type",
        type=str,
        default=os.getenv("PCLUSTER_NODE_TYPE", None),
        required=False,
        help="the node type, defaults to PCLUSTER_NODE_TYPE env variable",
    )
    parser.add_argument(
        "-q",
        "--queue-name",
        type=str,
        default=os.getenv("PCLUSTER_SCHEDULER_QUEUE_NAME", None),
        required=False,
        help="the scheduler queue name, defaults to PCLUSTER_SCHEDULER_QUEUE_NAME env variable",
    )
    parser.add_argument(
        "-p",
        "--pool-name",
        default=os.getenv("PCLUSTER_LOGIN_NODES_POOL_NAME", None),
        required=False,
        help="the login node pool name, defaults to PCLUSTER_LOGIN_NODES_POOL_NAME env variable",
    )
    parser.add_argument(
        "-c",
        "--cluster-configuration",
        type=str,
        default="/opt/parallelcluster/shared/cluster-config.yaml",
        required=False,
        help="the cluster config file, defaults to " "/opt/parallelcluster/shared/cluster-config.yaml",
    )
    parser.add_argument(
        "--instance-id",
        type=str,
        default=None,
        required=False,
        help="the EC2 instance ID",
    )
    parser.add_argument(
        "--instance-type",
        type=str,
        default=None,
        required=False,
        help="the EC2 instance type",
    )
    parser.add_argument(
        "--ip-address",
        type=str,
        default=None,
        required=False,
        help="the IP address of this host",
    )
    parser.add_argument(
        "--hostname",
        type=str,
        default=None,
        required=False,
        help="the name of this host",
    )
    parser.add_argument(
        "--resource-name", type=str, default=None, help="the name of the compute resource pool this host belongs to"
    )
    parser.add_argument(
        "--availability-zone", type=str, default=None, help="the availability zone this host is deployed to"
    )
    parser.add_argument("--cluster-name", type=str, default=None, help="the cluster name")
    parser.add_argument("--scheduler", type=str, default=None, help="the cluster scheduler type")
    parser.add_argument("--verbose", "-v", action="store_true", help="enable verbose logging")
    parser.add_argument("--dry-run", "-d", action="store_true", help="enable dry run")
    parser.add_argument("--execute-via-cfnconfig", "-e", action="store_true", help="execute via cfnconfig")
    parser.add_argument(
        "--event-file-override", type=str, default=BOOSTRAP_ERROR_FILE, help="override event output file path"
    )
    parser.add_argument(
        "--node-spec-file", type=str, default=None, required=False, help="path to file containing node description"
    )

    try:
        args = parser.parse_args()
    except SystemExit as e:
        e.code = 1
        raise e

    return args