| 1 | /*++ |
| 2 | |
| 3 | Copyright (c) Microsoft. All rights reserved. |
| 4 | |
| 5 | Module Name: |
| 6 | |
| 7 | ArgumentDefinitions.h |
| 8 | |
| 9 | Abstract: |
| 10 | |
| 11 | Declaration of the available Arguments with their base properties. |
| 12 | |
| 13 | --*/ |
| 14 | #pragma once |
| 15 | |
| 16 | // Here is where base argument types are defined, with their default name, default alias, kind, conversion type, and |
| 17 | // default description. Commands can override the name, alias, required state, limit, and description. The ArgType enum, |
| 18 | // kind, and conversion type remain fixed. The ArgType enum and the mapping of ArgType to data type are generated from |
| 19 | // this X-Macro, so all arguments must be defined here to be used in the system. The arguments defined here are the basis |
| 20 | // for all commands, but not all arguments need to be used by all commands. |
| 21 | |
| 22 | // The Kind determines the data type: |
| 23 | // - Kind::Flag -> bool |
| 24 | // - Kind::Value -> std::wstring |
| 25 | // - Kind::Positional -> std::wstring |
| 26 | // - Kind::Forward -> std::vector<std::wstring> |
| 27 | |
| 28 | // No other files other than ArgumentValidation need to be changed when adding a new argument, and that is only |
| 29 | // if you wish to add validation for the new argument or have it use existing validation. |
| 30 | |
| 31 | // X-Macro for defining all arguments in one place |
| 32 | // Format: ARGUMENT(EnumName, Name, Alias, Kind, ConvertedType, Desc) |
| 33 | // ConvertedType is the type the argument's string value is converted to during validation and cached for |
| 34 | // execution (see ArgumentConvertedTypes.h). Use NoConversion for arguments that are not converted to a typed value. |
| 35 | // clang-format off |
| 36 | #define WSLC_ARGUMENTS(_) \ |
| 37 | _(All, "all", L"a", Kind::Flag, NoConversion, Localization::WSLCCLI_AllArgDescription()) \ |
| 38 | _(Archive, "archive", L"a", Kind::Flag, NoConversion, Localization::WSLCCLI_ArchiveArgDescription()) \ |
| 39 | _(Attach, "attach", L"a", Kind::Flag, NoConversion, Localization::WSLCCLI_AttachArgDescription()) \ |
| 40 | _(BuildArg, "build-arg", NO_ALIAS, Kind::Value, NoConversion, Localization::WSLCCLI_BuildArgDescription()) \ |
| 41 | _(BuildLabel, "label", L"l", Kind::Value, NoConversion, Localization::WSLCCLI_LabelArgDescription()) \ |
| 42 | _(BuildOutput, "output", L"o", Kind::Value, BuildOutput, Localization::WSLCCLI_OutputArgDescription()) \ |
| 43 | _(BuildPull, "pull", NO_ALIAS, Kind::Flag, NoConversion, Localization::WSLCCLI_BuildPullArgDescription()) \ |
| 44 | _(BuildTarget, "target", NO_ALIAS, Kind::Value, NoConversion, Localization::WSLCCLI_BuildTargetArgDescription()) \ |
| 45 | _(CIDFile, "cidfile", NO_ALIAS, Kind::Value, NoConversion, Localization::WSLCCLI_CIDFileArgDescription()) \ |
| 46 | _(Command, "command", NO_ALIAS, Kind::Positional, NoConversion, Localization::WSLCCLI_CommandArgDescription()) \ |
| 47 | _(ContainerId, "container-id", NO_ALIAS, Kind::Positional, NoConversion, Localization::WSLCCLI_ContainerIdArgDescription()) \ |
| 48 | _(Cpus, "cpus", NO_ALIAS, Kind::Value, int64_t, Localization::WSLCCLI_CpusArgDescription()) \ |
| 49 | _(Force, "force", L"f", Kind::Flag, NoConversion, Localization::WSLCCLI_ForceArgDescription()) \ |
| 50 | _(Detach, "detach", L"d", Kind::Flag, NoConversion, Localization::WSLCCLI_DetachArgDescription()) \ |
| 51 | _(DNS, "dns", NO_ALIAS, Kind::Value, NoConversion, Localization::WSLCCLI_DNSArgDescription()) \ |
| 52 | /*_(DNSDomain, "dns-domain", NO_ALIAS, Kind::Value, NoConversion, Localization::WSLCCLI_DNSDomainArgDescription())*/ \ |
| 53 | _(DNSOption, "dns-option", NO_ALIAS, Kind::Value, NoConversion, Localization::WSLCCLI_DNSOptionArgDescription()) \ |
| 54 | _(DNSSearch, "dns-search", NO_ALIAS, Kind::Value, NoConversion, Localization::WSLCCLI_DNSSearchArgDescription()) \ |
| 55 | _(Domainname, "domainname", NO_ALIAS, Kind::Value, NoConversion, Localization::WSLCCLI_DomainnameArgDescription()) \ |
| 56 | _(Driver, "driver", L"d", Kind::Value, NoConversion, Localization::WSLCCLI_DriverOptionDescription()) \ |
| 57 | _(DriverOpt, "driver-opt", NO_ALIAS, Kind::Value, NoConversion, Localization::WSLCCLI_DriverOptArgDescription()) \ |
| 58 | _(Entrypoint, "entrypoint", NO_ALIAS, Kind::Value, NoConversion, Localization::WSLCCLI_EntrypointArgDescription()) \ |
| 59 | _(Env, "env", L"e", Kind::Value, NoConversion, Localization::WSLCCLI_EnvArgDescription()) \ |
| 60 | _(EnvFile, "env-file", NO_ALIAS, Kind::Value, NoConversion, Localization::WSLCCLI_EnvFileArgDescription()) \ |
| 61 | _(File, "file", L"f", Kind::Value, NoConversion, Localization::WSLCCLI_FileArgDescription()) \ |
| 62 | _(Filter, "filter", L"f", Kind::Value, KeyValuePair, Localization::WSLCCLI_FilterArgDescription()) \ |
| 63 | _(Follow, "follow", L"f", Kind::Flag, NoConversion, Localization::WSLCCLI_FollowArgDescription()) \ |
| 64 | _(Timestamps, "timestamps", L"t", Kind::Flag, NoConversion, Localization::WSLCCLI_TimestampsArgDescription()) \ |
| 65 | _(Since, "since", NO_ALIAS, Kind::Value, LONGLONG, Localization::WSLCCLI_SinceArgDescription()) \ |
| 66 | _(Until, "until", NO_ALIAS, Kind::Value, LONGLONG, Localization::WSLCCLI_UntilArgDescription()) \ |
| 67 | _(Format, "format", NO_ALIAS, Kind::Value, FormatType, Localization::WSLCCLI_FormatArgDescription()) \ |
| 68 | _(ForwardArgs, "arguments", NO_ALIAS, Kind::Forward, NoConversion, Localization::WSLCCLI_ForwardArgsDescription()) \ |
| 69 | _(Gateway, "gateway", NO_ALIAS, Kind::Value, NoConversion, Localization::WSLCCLI_NetworkGatewayArgDescription()) \ |
| 70 | _(Gpus, "gpus", NO_ALIAS, Kind::Value, NoConversion, Localization::WSLCCLI_GpusArgDescription()) \ |
| 71 | /*_(GroupId, "groupid", NO_ALIAS, Kind::Value, NoConversion, Localization::WSLCCLI_GroupIdArgDescription())*/ \ |
| 72 | _(HealthCmd, "health-cmd", NO_ALIAS, Kind::Value, NoConversion, Localization::WSLCCLI_HealthCmdArgDescription()) \ |
| 73 | _(HealthInterval, "health-interval", NO_ALIAS, Kind::Value, int64_t, Localization::WSLCCLI_HealthIntervalArgDescription()) \ |
| 74 | _(HealthRetries, "health-retries", NO_ALIAS, Kind::Value, int, Localization::WSLCCLI_HealthRetriesArgDescription()) \ |
| 75 | _(HealthStartPeriod,"health-start-period", NO_ALIAS, Kind::Value, int64_t, Localization::WSLCCLI_HealthStartPeriodArgDescription()) \ |
| 76 | _(HealthTimeout, "health-timeout", NO_ALIAS, Kind::Value, int64_t, Localization::WSLCCLI_HealthTimeoutArgDescription()) \ |
| 77 | _(Help, "help", WSLC_CLI_HELP_ARG,Kind::Flag, NoConversion, Localization::WSLCCLI_HelpArgDescription()) \ |
| 78 | _(Hostname, "hostname", L"h", Kind::Value, NoConversion, Localization::WSLCCLI_HostnameArgDescription()) \ |
| 79 | _(ImageForce, "force", L"f", Kind::Flag, NoConversion, Localization::WSLCCLI_ImageForceArgDescription()) \ |
| 80 | _(ImageId, "image", NO_ALIAS, Kind::Positional, NoConversion, Localization::WSLCCLI_ImageIdArgDescription()) \ |
| 81 | _(ImportFile, "file", NO_ALIAS, Kind::Positional, NoConversion, Localization::WSLCCLI_ImportFileArgDescription()) \ |
| 82 | _(IidFile, "iidfile", NO_ALIAS, Kind::Value, NoConversion, Localization::WSLCCLI_IidFileArgDescription()) \ |
| 83 | _(Input, "input", L"i", Kind::Value, NoConversion, Localization::WSLCCLI_InputArgDescription()) \ |
| 84 | _(InspectFormat, "format", L"f", Kind::Value, JsonIndent, Localization::WSLCCLI_InspectFormatArgDescription()) \ |
| 85 | _(Interactive, "interactive", L"i", Kind::Flag, NoConversion, Localization::WSLCCLI_InteractiveArgDescription()) \ |
| 86 | _(Internal, "internal", NO_ALIAS, Kind::Flag, NoConversion, Localization::WSLCCLI_NetworkInternalArgDescription()) \ |
| 87 | _(IpAddress, "ip", NO_ALIAS, Kind::Value, NoConversion, Localization::WSLCCLI_IpAddressArgDescription()) \ |
| 88 | _(IpRange, "ip-range", NO_ALIAS, Kind::Value, NoConversion, Localization::WSLCCLI_NetworkIpRangeArgDescription()) \ |
| 89 | _(Label, "label", L"l", Kind::Value, KeyValuePair, Localization::WSLCCLI_LabelArgDescription()) \ |
| 90 | _(Last, "last", L"n", Kind::Value, int, Localization::WSLCCLI_LastArgDescription()) \ |
| 91 | _(Latest, "latest", L"l", Kind::Flag, NoConversion, Localization::WSLCCLI_LatestArgDescription()) \ |
| 92 | _(Link, "link", NO_ALIAS, Kind::Value, NoConversion, Localization::WSLCCLI_LinkArgDescription()) \ |
| 93 | _(LinkLocalIp, "link-local-ip", NO_ALIAS, Kind::Value, NoConversion, Localization::WSLCCLI_LinkLocalIpArgDescription()) \ |
| 94 | _(Memory, "memory", L"m", Kind::Value, int64_t, Localization::WSLCCLI_MemoryArgDescription()) \ |
| 95 | _(Mount, "mount", NO_ALIAS, Kind::Value, ParsedMount, Localization::WSLCCLI_MountArgDescription()) \ |
| 96 | _(Name, "name", NO_ALIAS, Kind::Value, NoConversion, Localization::WSLCCLI_NameArgDescription()) \ |
| 97 | _(Network, "network", NO_ALIAS, Kind::Value, ParsedNetworkArgument, Localization::WSLCCLI_NetworkArgDescription()) \ |
| 98 | _(NetworkAlias, "network-alias", NO_ALIAS, Kind::Value, NoConversion, Localization::WSLCCLI_NetworkAliasArgDescription()) \ |
| 99 | _(NetworkName, "network-name", NO_ALIAS, Kind::Positional, NoConversion, Localization::WSLCCLI_NetworkNameArgDescription()) \ |
| 100 | /*_(NoDNS, "no-dns", NO_ALIAS, Kind::Flag, NoConversion, Localization::WSLCCLI_NoDNSArgDescription())*/ \ |
| 101 | _(NoCache, "no-cache", NO_ALIAS, Kind::Flag, NoConversion, Localization::WSLCCLI_NoCacheArgDescription()) \ |
| 102 | _(NoColor, "no-color", NO_ALIAS, Kind::Flag, NoConversion, Localization::WSLCCLI_NoColorArgDescription()) \ |
| 103 | _(NoHealthcheck, "no-healthcheck", NO_ALIAS, Kind::Flag, NoConversion, Localization::WSLCCLI_NoHealthcheckArgDescription()) \ |
| 104 | _(NoPrune, "no-prune", NO_ALIAS, Kind::Flag, NoConversion, Localization::WSLCCLI_NoPruneArgDescription()) \ |
| 105 | _(NoTrunc, "no-trunc", NO_ALIAS, Kind::Flag, NoConversion, Localization::WSLCCLI_NoTruncArgDescription()) \ |
| 106 | _(ObjectId, "object-id", NO_ALIAS, Kind::Positional, NoConversion, Localization::WSLCCLI_ObjectIdArgDescription()) \ |
| 107 | _(Options, "opt", L"o", Kind::Value, KeyValuePair, Localization::WSLCCLI_OptionsArgDescription()) \ |
| 108 | _(Output, "output", L"o", Kind::Value, NoConversion, Localization::WSLCCLI_OutputArgDescription()) \ |
| 109 | _(Password, "password", L"p", Kind::Value, NoConversion, Localization::WSLCCLI_LoginPasswordArgDescription()) \ |
| 110 | _(PasswordStdin, "password-stdin", NO_ALIAS, Kind::Flag, NoConversion, Localization::WSLCCLI_LoginPasswordStdinArgDescription()) \ |
| 111 | _(Path, "path", NO_ALIAS, Kind::Positional, NoConversion, Localization::WSLCCLI_PathArgDescription()) \ |
| 112 | _(Progress, "progress", NO_ALIAS, Kind::Value, ProgressMode, Localization::WSLCCLI_ProgressArgDescription()) \ |
| 113 | _(Publish, "publish", L"p", Kind::Value, NoConversion, Localization::WSLCCLI_PublishArgDescription()) \ |
| 114 | _(PublishAll, "publish-all", L"P", Kind::Flag, NoConversion, Localization::WSLCCLI_PublishAllArgDescription()) \ |
| 115 | _(Pull, "pull", NO_ALIAS, Kind::Value, PullPolicy, Localization::WSLCCLI_PullArgDescription()) \ |
| 116 | _(Quiet, "quiet", L"q", Kind::Flag, NoConversion, Localization::WSLCCLI_QuietArgDescription()) \ |
| 117 | _(Remove, "rm", NO_ALIAS, Kind::Flag, NoConversion, Localization::WSLCCLI_RemoveArgDescription()) \ |
| 118 | /*_(Scheme, "scheme", NO_ALIAS, Kind::Value, NoConversion, Localization::WSLCCLI_SchemeArgDescription())*/ \ |
| 119 | _(Secret, "secret", NO_ALIAS, Kind::Value, BuildSecret, Localization::WSLCCLI_SecretArgDescription()) \ |
| 120 | _(Server, "server", NO_ALIAS, Kind::Positional, NoConversion, Localization::WSLCCLI_LoginServerArgDescription()) \ |
| 121 | _(Session, "session", NO_ALIAS, Kind::Value, NoConversion, Localization::WSLCCLI_SessionIdArgDescription()) \ |
| 122 | _(ShmSize, "shm-size", NO_ALIAS, Kind::Value, int64_t, Localization::WSLCCLI_ShmSizeArgDescription()) \ |
| 123 | _(StoragePath, "storage-path", NO_ALIAS, Kind::Positional, NoConversion, Localization::WSLCCLI_StoragePathArgDescription()) \ |
| 124 | _(Signal, "signal", L"s", Kind::Value, WSLCSignal, Localization::WSLCCLI_SignalArgDescription()) \ |
| 125 | _(Size, "size", L"s", Kind::Flag, NoConversion, Localization::WSLCCLI_InspectSizeArgDescription()) \ |
| 126 | _(Source, "source", NO_ALIAS, Kind::Positional, NoConversion, Localization::WSLCCLI_SourceArgDescription()) \ |
| 127 | _(StopSignal, "stop-signal", NO_ALIAS, Kind::Value, WSLCSignal, Localization::WSLCCLI_StopSignalArgDescription()) \ |
| 128 | _(StopTimeout, "stop-timeout", NO_ALIAS, Kind::Value, int, Localization::WSLCCLI_StopTimeoutArgDescription()) \ |
| 129 | _(Subnet, "subnet", NO_ALIAS, Kind::Value, NoConversion, Localization::WSLCCLI_NetworkSubnetArgDescription()) \ |
| 130 | _(Tail, "tail", L"n", Kind::Value, ULONGLONG, Localization::WSLCCLI_TailArgDescription()) \ |
| 131 | _(Tag, "tag", L"t", Kind::Value, NoConversion, Localization::WSLCCLI_TagArgDescription()) \ |
| 132 | _(Target, "target", NO_ALIAS, Kind::Positional, NoConversion, Localization::WSLCCLI_TargetArgDescription()) \ |
| 133 | _(Time, "time", L"t", Kind::Value, LONG, Localization::WSLCCLI_TimeArgDescription()) \ |
| 134 | _(Timeout, "timeout", L"t", Kind::Value, LONG, Localization::WSLCCLI_TimeArgDescription()) \ |
| 135 | _(TMPFS, "tmpfs", NO_ALIAS, Kind::Value, ParsedMount, Localization::WSLCCLI_TMPFSArgDescription()) \ |
| 136 | _(TTY, "tty", L"t", Kind::Flag, NoConversion, Localization::WSLCCLI_TTYArgDescription()) \ |
| 137 | _(Type, "type", L"t", Kind::Value, InspectType, Localization::WSLCCLI_TypeArgDescription()) \ |
| 138 | _(Ulimit, "ulimit", NO_ALIAS, Kind::Value, UlimitValue, Localization::WSLCCLI_UlimitArgDescription()) \ |
| 139 | _(User, "user", L"u", Kind::Value, NoConversion, Localization::WSLCCLI_UserArgDescription()) \ |
| 140 | _(Username, "username", L"u", Kind::Value, NoConversion, Localization::WSLCCLI_LoginUsernameArgDescription()) \ |
| 141 | _(Verbose, "verbose", NO_ALIAS, Kind::Flag, NoConversion, Localization::WSLCCLI_VerboseArgDescription()) \ |
| 142 | _(Version, "version", L"v", Kind::Flag, NoConversion, Localization::WSLCCLI_VersionArgDescription()) \ |
| 143 | /*_(Virtual, "virtualization", NO_ALIAS, Kind::Value, NoConversion, Localization::WSLCCLI_VirtualArgDescription())*/ \ |
| 144 | _(Volume, "volume", L"v", Kind::Value, ParsedMount, Localization::WSLCCLI_VolumeArgDescription()) \ |
| 145 | _(VolumeName, "volume-name", NO_ALIAS, Kind::Positional, NoConversion, Localization::WSLCCLI_VolumeNameArgDescription()) \ |
| 146 | _(Volumes, "volumes", L"v", Kind::Flag, NoConversion, Localization::WSLCCLI_RemoveVolumesArgDescription()) \ |
| 147 | _(WorkDir, "workdir", L"w", Kind::Value, NoConversion, Localization::WSLCCLI_WorkingDirArgDescription()) \ |
| 148 | // clang-format on |