usage: topo <subcommand> <options>
This command is used to register containers in STR and to create, update, remove, and view pico configurations.
Note!
This command is valid only for the MZ_HOME owner.
When you make changes in pico configurations using topo
, these are automatically validated before they are copied to the active registry.
If the command and its arguments can be parsed but fail the validation, you can update the configuration or use a reset command to undo the changes. An error message will appear if the validation fails. You can disable the validation by using the option --no-activation
. Changes performed by the mzsh topo
will then remain in the master registry until you submit a separate topo activate
command.
You can use the following subcommands with topo:
activate
container
convert
diff
env
get
hash
help
migrate
open
rebase-configs
register
reset
set
setupremote
show
unset
The option --allow-disconnected
is available for all subcommands except for setupremote
. You should only include this option when the Platform is unreachable and you want to use cached data.
activate
Usage: topo activate [--dry-run] [-v, --verbose]
Use topo activate
to move staged changes in the master registry to the active registry.
Option | Description |
---|---|
[--dry-run] | Use this option to validate the staged changes without performing the activation. |
[–hash <hash value>] | Compare the provided hash value with the actual hash that represents the current state of active registry. The activation fails if the values are not equal. For further information, see hash below, |
[-v, --verbose] | Use this option for detailed information about the changes. |
Hint! The options Example - Output from activate with verbose Option You can then restore the master registry with the the command Example - Restart the picos to apply the changes Changes to the STR are not applied on running pico instances or services. If you, for example, have updated the properties of the Platform and an EC, both must be restarted after activation. Example, after an mzsh topo activate of ec5, mzsh shutdown and startup needs to be done to apply the changes.--dry-run
and --verbose
are useful to learn the mzsh topo
syntax. When you have edited the configuration manually, use the following command, to view the corresponding edits in a scripted syntax:$ mzsh topo activate --dry-run --verbose
$ mzsh topo activate -v --dry-run
mzsh topo set topo://container:main1/pico:ec1/val:config.properties.ec.httpd.port 9096 # (was: 9092)
Dry-run: Validation successful
Dry-run: Stopping without performing activation
Dry-run: Active registry not changed
mzsh topo reset
.$ mzsh shutdown ec5
$ mzsh startup ec5
container
Usage: topo container
Use topo container
to display the name of the current container.
Option | Description |
---|---|
[--allow-disconnected] | Use this option when the Platform is unreachable and you want to operate on cached data. |
convert
Usage: topo convert [-c, --container <container>] [-g, --container-group <container group>] [--dry-run] [-f, --file <filename>]
Use topo convert
to move the configuration of a specific XML file to STR.
Option | Description |
---|---|
[-c, --container <container>] | Use this option to specify a target container. |
[-g, --container-group <container group>] | Use this option to specify a target container group. |
[--dry-run] | Use this option to validate that the conversion and display the result of the conversion without updating the STR. |
[-f, --file <filename> | Use this option to specify the source XML file. |
Example - Converting an XML File
$ mzsh topo convert --container main1
diff
Usage: topo diff [-e, --show-entries] [-f, --from <registry>] [-q, --brief]
Use topo diff
to view differences between the master repository and the active repository in the STR.
Option | Description |
---|---|
[-e, --show-entries] | Use this option for viewing differences in an easy-to-read format. By default, the output from the command displays Example - Output from diff Command With -e option: UPDATE (containers/main1/picos/ec1.conf) config.properties.aaa:"2" # (was: "1") Without -e option: mzsh topo set topo://container:main1/pico:ec1/val:config.properties.aaa "2" # (was: "1") |
[ -f, --from] <registry> | Use this option when you want to compare the active registry with the backup registry |
[-q, --brief] | Use this option to only view the names of the updated registry files. The default value is false. |
Example - Comparing Registry Files
Run the following command to view the differences between the active registry and the master registry.
$ mzsh topo diff
or
$ mzsh topo diff --from master
Run the following command to view the differences between the active registry and the backup registry.
$ mzsh topo diff --from backup
env
Usage: topo env [-e, --effective] [--update-java-home <value>] [--update-mz-container <value>] [--update-mz-home <value>] [--update-mz-platform <value>]
Use topo env
to display or set environment variables that are used by the mzsh command. These variables are written to the script file MZ_HOME/bin/mzsh
.
The variables, MZ_PLATFORM
, MZ_CONTAINER
and MZ_CONTAINER_TYPE
, are handled differently than the rest. To update the value in the script file you use the parameters starting with --update-<value>
as per the below table. To update the value in the script file and use the value immediately, you need to combine the --update-<value>
parameter with the -e
parameter.
Option | Description |
---|---|
[-e, --effective] | Use this option to read the environment parameters in runtime, i e the "effective values" after accounting for overrides. The default behaviour is to read the values as they are defineds in the mzsh script file, not accounting for the possibility to override these values with environment variables. |
[--update-java-home <value>] | Use this option to update the value of JAVA_HOME |
[--update-mz-container <value>] | Use this option to update the value of MZ_CONTAINER. |
[--update-mz-home <value> ] | Use this option to update the value of MZ_HOME. |
[--update-mz-platform <value> ] | Use this option to update the mzsh value of MZ_PLATFORM. |
Example - Reading the Environment Variables
$ mzsh topo env export JAVA_HOME="/opt/Java/JavaVirtualMachines/jdk-17.0.2.jdk/Contents/Home" export MZ_CONTAINER="main1" export MZ_CONTAINER_TYPE="platform" export MZ_PLATFORM="http://localhost:9000" export MZ_HOME="/user/home/mz/main1"
Example - Setting the Environment Variable JAVA_HOME
$ mzsh topo env --update-java-home /opt/Java/JavaVirtualMachines/jdk1.8.0_121.jdk/Contents/Home
get
Usage: topo get [--default-val <value>] [ --exclude-dynamic] [--format <full | data-only>] [-l, --local] [-p, --perspective] <target path>]
Use topo get
to retrieve pico configurations in the target path from STR.
Paths in STR are structured as follows:
topo://container:<container>/pico:<pico>/val:<attribute>
Option | Description |
---|---|
[--default-val <value>] | Use this option to replace a missing value in the target path with a default value. Example - Using default-val If the property aaa, is not defined for ec1, 123 is returned instead. $ mzsh topo get -l --default-val 123 \ topo://pico:ec1/val:config.properties.aaa |
[ --exclude-dynamic] | Use this option to exclude non-static data in the output e g |
[--format <full|data-only>] | Use this option to exclude metadata from the command output.
Default: |
[-l, --local] | Use this option to select the local container, unless another container is specified in the target path. Default: |
[-p, --perspective <resolve | default>] | Use this option to retrieve the attributes of templates instead of the template names.
Default: |
Example - Viewing Pico Configurations
Run the following command to view one or more pico configurations.
$ mzsh topo get topo://container:main1/pico:ec2
You can view multiple pico configurations by replacing the full path with a regular expression.
$ mzsh topo get topo://container:main1/pico:.*
Example - Viewing Pico Attributes
Run the following command to view a specific attribute in a pico configuration.
$ mzsh topo get topo://container:main1/pico:ec2/val:_name
You can retrieve the attributes of multiple pico processes by replacing the full path with a regular expression.
$ mzsh topo get --format data-only topo://container:main1/pico:.*/val:_name
hash
Usage: topo hash
Use topo hash
to retrieve a value that represents the current state of the active registry. This is useful when you need to handle concurrent changes of the STR. For instance, an application may need to retrieve a pico configuration to evaluate the required changes. In the meantime, a second application or a user may update the same configuration
Example - Using Hash Values
Application 1 retrieves a new hash value.
$ mzsh topo hash "3a2e373fa1653c7f0e757e2682c70317-2028777631"
Application 1 retrieves the properties of ec1.
$ mzsh topo get -l pico:ec1/obj:config.properties
Application 1 updates a property but does not call
topo activate
. The hash is specified to ensure that changes by other users are not activated inadvertently later on.$ mzsh topo set -l --no-activation --hash 3a2e373fa1653c7f0e757e2682c70317-2028777631 \ topo://pico:ec1/val:config.properties.ec.httpd.port 9090
Application 2 updates the properties of ec1. The hash value is updated.
$ mzsh topo set -l topo://pico:ec1/val:config.properties.ec.httpd.port 9090
Application 1 calls
topo activate
with hash value retrieved in step 1.$ mzsh topo activate --hash 3a2e373fa1653c7f0e757e2682c70317-2028777631
The activation fails since the hash values do not match.
Specified hash does not match transaction id: d9cd38f3793647028bd7e5d64c354ad5-2055434210 != 3a2e373fa1653c7f0e757e2682c70317-2028777631) This may indicate concurrent modification of registry: Operation aborted!
Application 1 resets the master registry, retrieves a new hash and starts over.
$ mzsh topo reset $ mzsh topo hash
help
Usage: topo help [<subcommand>]
Use topo help
to retrieve a description of a subcommand.
Run the following command for an overview of the various topo
subcomands
$ mzsh topo help
Run the following command for a description of a specific subcomand
$ mzsh topo help <command>
migrate
Usage: topo migrate
Use topo migrate
to move pico configurations from MZ_HOME to STR. The upgrader runs this command during upgrade to 8.0.
open
Usage: topo open [-n, --no-activation] <target path>
Use topo open
to open a cell, container- or pico configuration file in a text editor. When you save and close the editor, the command will call topo activate
to move the staged changes in the master registry to the active registry.
Option | Description |
---|---|
[-n, --no-activation] | Use this option to skip activation after changes in master registry. |
Run the following command to open a cell configuration:
$ mzsh topo open cell:<cell>
Example - Opening a Cell Configuration
$ mzsh topo open cell:default
Run the following command to open a container configuration:
$ mzsh topo open <container>
Example - Opening a Container Configuration
$ mzsh topo open main1
Run the following command to open a pico configuration:
$ mzsh topo open <pico>
Example - Opening a Pico Configuration
$ mzsh topo open ec1
or
$ mzsh topo open container:main1/pico:ec1
If the pico name is not unique in the system, you will be prompted to specify the container.
Example - Multiple Pico Configurations Sharing the Same Name
$ mzsh topo open ec2 (/home/main1/common/config/cell/default/master/containers/main1/picos/ec2.conf,ec2,topo://container:main1/pico:ec2) (/home/main1/common/config/cell/default/master/containers/exec1/picos/ec2.conf,ec2,topo://container:exec1/pico:ec2) Multiple entries, select one: (1) topo://container:main1/pico:ec2 (2) topo://container:exec1/pico:ec2 [1] :
To avoid ambiguous references, specify the name of the container and the pico configuration.
Run the following command to open the custom or the standard services configuration:
$ mzsh topo open services:<custom|standard>
Example - Opening a Service Configuration
$ mzsh topo open services:custom
Hint!
When you save the configuration, topo activate
is called with the --verbose
option and the saved changes are displayed in a scripted syntax.
By default, the command opens the vi editor. To use a different editor set the environment variable EDITOR
.
Example - Setting nano as the Default Editor
$ export EDITOR=nano
rebase-configs
Usage: topo rebase-configs [-a, --activate] <target path>
Use topo rebase
to inset a standard template in a pico configuration and remove attributes that are identical to attributes in the template. The command automatically detects the pico configuration type and applies one of the following templates:
mz.standard-platform.conf
mz.standard-ec.conf
mz.standard-sc
This command is useful to reduce the size of the pico configurations and thereby facilitate maintenance.
The changes are written to the master registry. To validate and activate the changes you can either use the --activate option or run topo activate
after the topo rebase-configs
command.
For further information about templates, see STR File Structure.
Option | Description |
---|---|
[-a, --activate] | Use this option to immediately activate after changes in master registry. |
Example - Rebasing an EC Configuration
$ mzsh topo rebase-configs topo://container:main1/pico:ec1$ mzsh topo active --verbose
or
mzsh topo rebase-configs --actoivate topo://container:main1/pico:ec1
register
Usage: topo register [-a, --address] [-c, --container] [-g, --container-group <container group>] [--mz-home <mz home>] [-u]
When you install an execution container, and the Platform is running, it is automatically registered in the Platform Container. If the platform is not running during the installation, use topo register
to register the Execution Container manually.
Option | Description |
---|---|
[-a, --address <ip/host>] | Use this when you need to set a different host address for the container than the one that is specified in the common property |
[-c, --container <container>] | Use this option when you need to change the existing container name. This option is typically used together with the |
[-g, --container-group <container group>] | Use this option when you need to change the existing container group. This option is typically used together with the |
[--mz-home <path>] | Use this option when you need to set a different home directory for the container than the one that is specified in the environment variable MZ_HOME, which is the default value. |
[-u] | Use this option to allow updates of an already registered container. By default, updates are not allowed and the command will attempt to register a new container. |
reset
Usage: topo reset
Use this option to remove any changes to the master registry in STR since the activation
set
Usage: topo set [-l, --local] [-n, --no-activation] [-s, --strict-json] <target path> <config>
Use topo set
to create and update pico configurations in the specified target-path of STR.
Option | Description |
---|---|
[-l, --local ] | Use this option to select the local container, unless another container is specified in the target path. |
[--no-activation, -n] | Use this option to skip activation after changes in master registry. |
[-s, --strict-json] | Use this option when you want to specify the configuration in JSON format instead of HOCON format. |
Run the following command to create a new pico configuration.
$ mzsh topo set topo://container:<container>/pico:<pico> <config>
The <config>
argument may contain a key-value pair that specifies a template or a pico configuration in HOCON format.
Example - Creating a New Pico Configuration Based on a Template
$ mzsh topo set topo://container:main1/pico:ec2 template:mz.standard-ec
Example - Creating Pico Configuration
When you specify a pico configuration that consists of multiple attributes, it is recommended that you use multi-line strings.
HOCON Format:
$ mzsh topo set --local pico:ec2 ' { template:mz.standard-ec config { properties { ec.httpd.port : 9092 } classpath { jars=["lib/picostart.jar"] } } }'
JSON Format:
mzsh topo set -l --strict-json pico:ec2 ' { "template": "mz.standard-ec", "config": { "properties": { "ec": { "httpd": { "port": 9092 } } }, "classpath": { "jars": ["lib/picostart.jar"] } } }'
Add the pico group setting by using the following topo command
mzsh topo set topo://container:main1/pico:ec1/val:config.properties.pico.groups "ec1, ec2"
This command makes the Execution context "EC1" a member of the "ec1" and "ec2" groups.
This is the HOCON example format adding in ECs to a pico group.
config { classpath {} jvmargs { args=[] } properties { mz.webserver.xframeoptions=DENY pico.groups="ec1, ec2" ec.backlog.dir="/home/davids/git/mz9/mediationzone/mz-dist/../mzhomes/mz9/tmp" ec.webserver.port=9137 } vendor-jvmargs { hp {} sun {} } }
Run the following command to add or update an attribute of a pico configuration.
mzsh topo set topo://container:<container>/pico:<pico>/val:<attribute> <attribute value>
Example - Updating a Pico Attribute
$ mzsh topo set topo://container:main1/pico:ec2/val:ec_type ec
Run the following command to add or update an object that contains one or more attributes.
$ mzsh topo set topo://container:<container>/pico:<pico>/obj:<object name> '<config>'
The <config>
argument may contain a pico configuration in HOCON format.
Example - Updating a Pico Object
This command adds the properties value1
and value2
:
$ mzsh topo set topo://container:main1/pico:ec2/obj:config.properties.example_object '{ value1=1 value2=2 }'
The following commands does not overwrite the properties value1
and value2
in example_object
but adds value3
:
$ mzsh topo set topo://container:main1/pico:ec2/obj:config.properties.example_object '{ value3=3 }'
setupremote
Usage: topo setupremote [-c, --container <container>] [-g, --container-group <container group>] [--host-key <path>] [--javahome <path>] [--no-authorized-key] [--no-host-key] [-- no-ssh-details] [--ssh-address <ip/host>] [--ssh-port <port>] [--ssh-username <username>]
Use the command topo setupremote
to enable remote access via SSH to an Execution Container, e g from the Platform container.
Option | Description |
---|---|
[-c, --container <container>] | Use this option to specify a different container than the local one, which is the default value. |
[-g, --container-group <container group>] | Use this option to setup remote access to a container in specific container group. This is useful when you have multiple containers with identical names in different containers groups. |
[--host-key <path>] | Use this option to use a pre-generated host key instead of the one that is generated when you run |
[--java-home <path>] | Use this option when the target container is located on a different host. The default value is specified by the environment variable JAVA_HOME in the current shell. |
[--no-authorized-key] | By default, the |
[--no-host-key] | By default, the |
[--no-ssh-details] | Use this option to exclude |
[--ssh-address <ip/host>] | Use this option when the target container is located on a different host or when you want to bind to a specific IP address or hostname. The default value is specified by the |
[--ssh-port <port>] | Use this option when you want to use a different port than 22 for SSH. |
[--ssh-username <username>] | Use this option when the target container is located on a different host or when a specific username is required for SSH. The default SSH user is the OS user that runs the |
show
Use topo show to retrieve various types of information about pico instances that are defined in the STR.
Usage: topo show [ --exclude-dynamic] [--format <format>] [-l, --local] [--timeout-seconds <time>] <view>
Option | Description |
---|---|
[ --exclude-dynamic] | Exclude non-static data in the output e g |
[ --format <format>] | Set the format of the returned data:
|
[ -l, --local ] | Use this option to view pico instances in the local container only. By default, all containers are included. |
[--timeout-seconds <time>] | Use this option to limit the time for retrieving dynamic information, e g |
The following views are available:
jvm-args
- Displays the JVM arguments that are used by the pico instances in the system. JVM arguments that are set in templates are included.status
- Displays the container name, pico name, pico type and running state.status-sc
- Displays similar view asstatus
but only includes SCs.status-ec
- Displays similar view asstatus
but only includes ECs.status-long
- Displays similar view asstatus
but also includes the status of replication between Platform Container and Execution Containers.pico-view
- Displays similar view asstatus
but also includes memory usage and the pico response time.pico-view2
- Displays similar view aspico-view
but also includes uptime.ports
- Displays the ports that are used by the pico instances in the system. Ports that are set in templates and on cell- and container level, are included. If both webserver and httpd ports are displayed, then webserver ports take precedence.
Example - Views
$ mzsh topo show jvm-args +------------------------------------------------------------- | container | name | config.jvmargs | +-----------+----------+-------------------------------------+ | main1 | platform | args=[ | | | | "-XX:MaxMetaspaceSize=256M", | | | | "-Xms192M", | | | | "-Xmx1024M" | | | | ] | +-----------+----------+-------------------------------------+ | main1 | ec1 | args=[ | | | | "-server" | | | | ] | | | | maxDirect=[ | | | | "-XX:MaxDirectMemorySize=4096M" | | | | ] | | | | maxMetaspace=[ | | | | "-XX:MaxMetaspaceSize=196M" | | | | ] | | | | xms=[ | | | | "-Xms64M" | | | | ] | | | | xmx=[ | | | | "-Xmx256M" | | | | ] | +-----------+----------+-------------------------------------+ | main1 | psc1 | args=[ | | | | "-server" | | | | ] | | | | maxDirect=[ | | | | "-XX:MaxDirectMemorySize=4096M" | | | | ] | | | | maxMetaspace=[ | | | | "-XX:MaxMetaspaceSize=196M" | | | | ] | | | | xms=[ | | | | "-Xms64M" | | | | ] | | | | xmx=[ | | | | "-Xmx256M" | | | | ] | +-----------+----------+-------------------------------------+ | exec1 | ec2 | args=[ | | | | "-server" | | | | ] | | | | maxDirect=[ | | | | "-XX:MaxDirectMemorySize=4096M" | | | | ] | | | | maxMetaspace=[ | | | | "-XX:MaxMetaspaceSize=196M" | | | | ] | | | | xms=[ | | | | "-Xms64M" | | | | ] | | | | xmx=[ | | | | "-Xmx256M" | | | | ] | +-------------------------------------------------------------
$ mzsh topo show status +--------------------------------------------------------------- | container | name | type | state | config-state | +-----------+----------+----------+-------------+--------------+ | main1 | platform | platform | running | in-sync | | main1 | ec1 | ec. | not-started | | | main1 | psc1 | sc | not-started | | | exec1 | ec2 | ec | not-started | | +---------------------------------------------------------------
$ mzsh topo show ports +---------------------------------------------------------------------------- | container | name | type | ports | +-----------+----------+----------+-----------------------------------------+ | main1 | platform | platform | "mz.pcc.restful.port"="9090" | | | | | "mz.servicehost.port.range"="5451-5500" | | | | | "mz.wi.port"="9000" | | | | | "pico.rcp.platform.port"="6790" | | | | | "pico.synchronizer.port"="6791" | +-----------+----------+----------+-----------------------------------------+ | main1 | ec1 | ec | "ec.httpd.port"="9093" | | | | | "pico.rcp.platform.port"="6790" | | | | | "pico.synchronizer.port"="6791" | +-----------+----------+----------+-----------------------------------------+ | main1 | psc1 | sc | "mz.servicehost.port.range"="5801-5850" | | | | | "pico.rcp.platform.port"="6790" | | | | | "pico.synchronizer.port"="6791" | +-----------+----------+----------+-----------------------------------------+ | exec1 | ec2 | ec | "ec.httpd.port"="9090" | | | | | "pico.rcp.platform.port"="6790" | | | | | "pico.synchronizer.port"="6791" | +----------------------------------------------------------------------------
unset
Usage: topo unset [-l, --local] [-n, --no-activation] <target path>
Use topo unset
to remove pico configurations in the specified target-path of STR.
Option | Description |
---|---|
[-l, --local] | Use this option to select the local container, unless another container is specified in the target path. |
[-n, --no-activation] | Use this option to skip activation after changes in master registry. |
Run the following command to remove a pico configuration.
mzsh topo unset topo://container:<container>/pico:<pico>
Example - Removing a Pico Configuration
$ mzsh topo unset topo://container:main1/pico:ec2
Example - Removing a Pico Attribute
$ mzsh topo unset topo://container:main1/pico:ec2/val:ec_type ec
When you enter a path that is relative to MZ_HOME in the value of an attribute, it is recommend that you use In the following example MZ_HOME will be resolved to its current value e g Example - Resolved Path The next example uses a path that is always relative to MZ_HOME. Example - Substituted Path When you are using The name of an attribute may contain the full name of another attribute. For instance, In this case you must ensure that the name of both properties are surrounded by quotes, or one of the properties will be overwritten at activation. Example - Handling Conflicting Attributes, Manual Editing When there are conflicting properties and you are using the mzsh topo command, also add single quotes, surrounding the target path (topo://..). Example - Handling Conflicting Attributes, Scripted EditingFile Paths in Attributes
${mz.home}
as a substitution./home/user/mz.
$ mzsh topo set topo://container:main1/val:common.pico.rcp.tls.keystore $MZ_HOME/keys/platform.keys
$ mzsh topo set topo://container:main1/obj:common.pico.rcp.tls.keystore '{ keystore=${mz.home}"/keys" }'
${mz.home}
as a substitution, ensure to set attributes as part of an object, using the obj
keyword.Conflicting Attributes
mz.httpd.security.keystore
is a system property but its name is also a part of mz.httpd.security.keystore.password.
common : {
"pico.rcp.tls.keystore" : "home/mz/keys",
"pico.rcp.tls.keystore.password" : "..."
}
$ mzsh topo set 'topo://container:<platform container>/val:common."pico.rcp.tls.keystore"' "home/mz/keys"
$ mzsh topo set 'topo://container:<platform container>/val:common."pico.rcp.tls.keystore.password"' "..."
Updating IP, Hostname, and Ports in JDBC URL
You can update the IP address, hostname, and ports int he JDBC URL using the mzsh topo get
and mzsh topo set
commands as shown in the examples below.
Example - Get Current Config
$ mzsh topo get -s --format data-only topo://container:platform1/pico:platform/obj:config.properties.mz.jdbc { "password": "DR-4-48851644227183C2041D838568E117EC", "oracle": { "ons": "" }, "type": "oracle", "user": "mzadmin", "url": "jdbc:oracle:thin:@//127.0.0.1:1521/orcl" }
Example - Update URL with set
$ mzsh topo set topo://container:mz/pico:platform/val:config.properties.mz.jdbc.url "jdbc:oracle:thin:@//192.168.1.10:1522/orcl" [ set: topo://container:mz/pico:platform/val:config.properties.mz.jdbc.url => jdbc:oracle:thin:@//192.168.1.10:1522/orcl] Updating file: $MZ_HOME/common/config/cell/default/master/containers/mz/picos/platform.conf Topology activation completed (master->active)
Caution!
When you have set the new JDBC URL, run shutdown and startup on the platform to ensure that your changes take effect properly.
If you added the incorrect config and the platform did not start, you can run your mzsh
command again with the --allow-disconnected
option
Return Codes
Listed below are the different return codes for the topo command:
Code | Description |
---|---|
0 | Will be returned if the command is successful. |
1 | Will be returned if the argument count is incorrect or argument(s) are invalid. |
3 | Will be returned if the target path argument for the subcommand |