Petals CLI 2.3.0+

Introduction

Petals CLI is a command line client to administrate a set of Petals nodes.
Petals CLI has 4 interaction modes:

  • Interactive Mode: in this mode, the user types in commands directly in the shell.
  • Scripting Mode: in this mode, Petals CLI executes a script file that contains Petals CLI commands.
  • Executable Mode: in this mode, Petals CLI is launched with a command as an argument.
  • Redirection Mode: in this mode, Petals CLI takes the commands to execute from the standard input.

To work, Petals CLI needs to establish a connection with a Petals node.
The connection is a JMX connection (see the credentials defined in the topology.xml file of Petals).

Petals CLI 1.0.0 works with Petals 4.0, but may also work with Petals 3 versions.
Petals CLI 2.0.0+ and 2.1.0+ work with Petals 4.1 and higher, but may also work with Petals 3 versions.
Petals CLI 2.2.0+ works with Petals ESB Container 5.0.0, but may also work with previous versions of Petals.
Petals CLI 2.3.0 works with Petals ESB Container 5.0.1 and higher, but may also work with previous versions of Petals.
Petals CLI 2.3.1+ works with Petals ESB Container 5.0.2 and higher, but may also work with previous versions of Petals.

Usage of Petals CLI

usage: Petals JMX Command Line Interface
              
[-d] [-y] [-h <host> -n <port> | -h <host> -n <port> -u <user> -p <password> | -a
<alias>] [-H | -V | [--file] <filename> | -c -- <command> | -C]
 -a,--alias <alias>         Connection alias in the preference file.
 -c,--command               Execute a command given on the command line after '--'.
 -C,--console               Enable the mode 'console'.
 -d,--debug                 Print stack trace and debugging informations
    --file <filename>       Enable the script file execution. If filename is '-',
                            commands are read from the stdin.
 -H,--help                  Print this help message and exit.
 -h,--host <host>           JMX host of the remote petals ESB.
 -n,--port <port>           JMX port of the remote petals ESB.
 -p,--password <password>   JMX password of the remote petals ESB.
 -u,--user <user>           JMX user of the remote petals ESB.
 -V,--version               Print the version number and exit.
 -y,--yes                   Enable automatic confirmation ('yes' flag)

Which evolution would you like on Petals? Share it! http://www.petalslink.com/feedback

To get available commands, use the command 'help' on command-line: petals-cli.sh -c – help

Available commands:
   connect     Connect to a Petals ESB node.
   deploy      Deploy and start a JBI artifact.
   disconnect
               Disconnect from a petals container.
   exit        Exit this shell.
   help        Display this help message or help for a specific command.
   list        List JBI artifacts name and current status.
   load        Load properties from files.
   logger-set
               Set the specified level to the specified logger.
   loggers     Return all the loggers.
   print       Print a message.
   properties-list
               Get the values defined in its server.properties file.
   pwd         Print the working directory.
   endpoint-list
               List the entries of the endpoint directory.
   set         Assign a value to the system property named key.
   show        Print informations about a JBI artifact.
   start-artifact
               Start a JBI artifact.
   stop        Stop the container.
   stop-artifact
               Stop a JBI artifact.
   system      Execute system command.
   topology-list
               Get information about the topology this node is part o.
   undeploy    Stop and uninstall or undeploy JBI artifacts.
   version     Print version informations about petals container.

For help on a specific command type:
   help <command>

To get help on a command, use the command 'help' on command-line: petals-cli.sh -c – help <command>

Options of Petals CLI are POSIX.1-2008 or IEEE Std 1003.1 compliant.
Table of contents
Contributors

Use Cases

Full Size
A&#32;Gliffy&#32;Diagram&#32;named&#58;&#32;Petals&#95;CLI&#95;Use&#95;Cases

Petals CLI: the Basis

Installing Petals-CLI

The installation of Petals CLI depends on your operating system. The following table resumes which archives is needed according to your operating system. Petals CLI archives are available on the Petals's web-site: http://download.petalslink.com/petals-esb.html.

Operating System OS Version Petals archive to use Installation procedure
Debian-based Linux all Debian packages Installing Petals CLI using the Debian packages
Linux all ZIP archive Installing Petals CLI using the ZIP archive
Microsoft Windows all ZIP archive Installing Petals CLI using the ZIP archive
Mac OS all ZIP archive Installing Petals CLI using the ZIP archive

Note: The ZIP archive can be used on Debian-based systems. In this case, Petals CLI should be installed as a user software without integration with the operating system.

Petals CLI capabilities about script and shell usages

Interactive console

Launching Petals CLI with the following command line starts an interactive console with a prompt where the user can enter commands.

> ./petals-cli.sh -C

Type 'help' for help.
------------------------------------------------------------------------------
petals-cli>

On Windows, to be able to launch Petals CLI by a double-click, this command is wrapped by another script: petals-cli-console.bat.
On Linux, there is no wrapper script but a shell alias can be created.

Execution of a Petals CLI command directly on the command line

Launching Petals CLI with the following command line executes the command specified on the command line.

> ./petals-cli.sh -c -- <command> <command-args>

Execution of a Petals script file

Launching Petals CLI with the following command line executes the commands from the specified Petals script.

> ./petals-cli.sh <filename>
> ./petals-cli.sh --file <filename>
A Petals script is text file containing commands supported by Petals CLI, and comments. Comments start by '#', optionally preceded by space(s).

Execution of an inlined Petals script

Launching Petals CLI with the following command line executes commands provided through the standard input ("stdin").

> cat <filename> | ./petals-cli.sh -
> cat <filename> | ./petals-cli.sh --file -
> ./petals-cli.sh - << EOF
<command1> <command1-args>
<command2> <command2-args>
EOF
> ./petals-cli.sh --file - << EOF
<command1> <command1-args>
<command2> <command2-args>
EOF

Getting help

Getting help on command line options and arguments

The help on command line options and arguments is available through the '-H' option. A text containing options, arguments and available commands is displayed according to the usage defined above.

> ./petals-cli.sh -H

Getting help on commands from the command line

The help on a command is available by using the command 'help'. A usage and a description of the command is displayed:

> ./petals-cli.sh -c -- help <command>

usage: <command> <command-arguments>

<command description>

>

where:

  • <command> is the command for which we want to get help.
  • <command-arguments> is the list of arguments for the command.
  • <command-description is a description of the command.

Getting help on available commands and on a command in interactive mode

The list of available commands is available by using the command 'help' without argument.
Help about a command is available by using the 'help' command. Command's usage and description are then displayed.

> ./petals-cli.sh -C

Type 'help' for help.
------------------------------------------------------------------------------
petals-cli> help

Available commands:
deploy Deploy and start a JBI artifact in petals container.
exit Exit this shell.
help Display this help message or help for a specific command.
...

For help on a specific command type:
help <command>

petals-cli> help <command>

usage: <command> <command-arguments>

<command description>

petals-cli>

where:

  • <command> is the command for which we want to get help.
  • <command-arguments> is the list of arguments for the command.
  • <command-description is a description of the command.

Getting the version of Petals CLI

To get the version of Petals CLI, the version of the JVM running Petals CLI, and its operating system, use the '-V' option:

> ./petals-cli.sh -V
Petals ESB Command Line Interface 2.2.0
OpenJDK Runtime Environment 1.7.0_79-b14
Linux 3.19.0-30-generic

Working with variables

Petals CLI supports variables as properties or environment variables. A variable is a placeholder with a name: ${variable-name}, that is replaced by its value when evaluating the command in which it is used. By default, a variable is a property. An environment variable is identified by a name prefixed with "env:":

connect -h ${host.name} -n ${host.port} -u ${env:USER} -p ${host.password}

Listing available variables

The command 'set' without argument lists all available variables, properties and environment variables:

> ./petals-cli.sh -C

Type 'help' for help.
------------------------------------------------------------------------------
petals-cli> set
...
java.runtime.name=OpenJDK Runtime Environment
java.runtime.version=1.7.0_79-b14
java.specification.name=Java Platform API Specification
java.specification.vendor=Oracle Corporation
java.specification.version=1.7
...
env:PATH=usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/home/cdeneux/maven/bin
env:PETALS_CLI_PREFS=/home/cdeneux/.petals-cli/petals-cli.default
...

Setting a variable as property

A property can be set using the command 'set':

set [ property-name = property-value ]
set [ property-name =: property-value ]
set [ property-name : property-value ]

> ./petals-cli.sh -C

Type 'help' for help.
------------------------------------------------------------------------------
petals-cli> set my-property-name=value

Return codes of Petals CLI

Return code on error parsing mode options

If Petals CLI is not able to determine the mode (interactive, scripting, executable or redirection) to use from arguments, the return code will be 1.

Return code of Petals CLI launched in interactive mode

Petals CLI launched in interactive mode will exist always with the return code 0, even if error occurs executing a command.
If an error occurs during a command execution or parsing:

  • The error message is displayed.
  • Petals CLI is not interrupted, the user can enter other commands.

Return codes of Petals CLI launched in command line mode

Return code on parsing error of the command arguments

When there is an error about options and arguments of the command, the return code of Petals CLI is 1.

Return code on command execution

When there is an error about the command execution, the command is interrupted and the return code of Petals CLI is 2.

Return code on connection error

When there is an error about the connection establishment, the command is not executed the return code of Petals CLI is 3. If the error is due to an unresolvable hostname, the return code is 1 (ie. error on arguments).

Return code on successful command execution

When there is no error about options, arguments and execution of a the command, the return code of Petals CLI is the return code of the command

Return code of commands

All commands return the return code 0 when the execution succeeds, and 1 when the execution fails. Except the command 'system' that returns the return code of the system command invoked.

Return codes of Petals CLI launched in scripting modes

Return code on error reading script

When there is an error reading the command flow, Petals CLI script is interrupted and the return code of Petals CLI is 1.

Return code on parsing error of the command arguments

When using the script mode or inlined mode, parsing errors (invalid options and/or arguments) result in an interruption of Petals CLI.
The return code 1 then pushed back.

Return code on command execution

When there is an error about a command execution, the command is interrupted, Petals CLI script is interrupted and the return code of Petals CLI is 2.

Return code on connection error

When there is an error about the connection establishment, the command is not executed and the return code of Petals CLI is 3. If the error is due to an unresolvable hostname, the return code is 1 (ie. error on arguments).

Return code on successful command execution

When there is no error about options, arguments and execution of commands, the return code of Petals CLI is the return code of the last command, except if a dedicated value is used through the command exit.

Error management of a command read from stdin or a file

If an error occurs during the execution of a flow of commands:

  • The command that has thrown the error is interrupted.
  • The return code of the command can be checked using the commands isParsingErrorReturned, isExecutionErrorReturned, isNoErrorReturned, the ternary conditional operator, and the lastErrorCode attribute.
    > ./petals-cli.sh - << EOF
    deploy <artifact-url>
    isNoErrorReturned ? listartefacts : exit lastErrorCode
    EOF
    


Note:

  • The return values of command isParsingErrorReturned, isExecutionErrorReturned and isNoErrorReturned are reset when invoking another command. Only the error of the last command execution can be checked.
  • The attribute lastErrorCode is an argument of the command exit to return the return code of the last executed command.

Exit from the Console mode

To exit the console mode, use the 'exit' command.
If a number is set as an argument, it is used as return code. Otherwise, the 0 is returned.

> ./petals-cli.sh -C

Type 'help' for help.
------------------------------------------------------------------------------
petals-cli> exit
> echo $?
0
> ./petals-cli.sh -C

Type 'help' for help.
------------------------------------------------------------------------------
petals-cli> exit 1
> echo $?
1
If an asynchronous command is running, the command 'exit' will wait the end of these pending commands to really exit. If you have infinite asynchronous command as defect subscription, you can force to exit using Ctrl+C or kill the processus.

Petals CLI Preferences

It is possible to define preferences in Petals CLI. The preferences are defined in a properties file, as key/value pairs. Two levels of preference files are defined:

  • a user level, by the file $HOME/.petals-cli/petals-cli.default
  • and a system level. The location of this file is defined according to the operating system:
    OS/Distribution System level file
    Linux/Debian-based distribution /etc/petals-cli/petals-cli.default
    Windows %PETALS_CLI_HOME%\conf\petals-cli.default

If the user preference file exists, it is used. Otherwise the system preference file is used.

If Petals CLI is installed through the ZIP archive, and no user level file exists, it is possible to define another preference file through the environment variable $PETALS_CLI_PREFS.
If Petals CLI is installed through the Debian archive, the default preference file is protected by system ACL and can be read only by users that are member of its group. So don't forget to add you users to the security group, or you can protect this file with your own group.

The preferences files contain a set of keys in several sections:

  • section 'Global preferences':
    • alias.default: the default alias to use (required).
    • user.lang: the language to use in Petals CLI.
      • This property is optional. If not set, OS settings are used. If the OS language setting is not supported, then English is used.
      • If the value is specified and not supported, then English is picked up.
      • French and English are the two languages that must be supported. Others are optional (but contributions are welcome).
    • embedded.http.port: the listening port of the embedded HTTP server (see the command deploy). Default value: 0 (any free port). To be able to use several Petals CLI instances concurrently on the same machine, you must set embedded.http.port to 0 to force the use of a free port, otherwise an error will occur on deployments.
  • section defining aliases. An alias identifies all the properties of a connection. An alias is defined as following:
    • <alias>.host: the host of the default Petals node (required).
    • <alias>.port: the JMX port of the default Petals node (required).
    • <alias>.username: the JMX user name for the default Petals node (optional).
    • <alias>.password: the JMX password for the default Petals node (optional).
    • <alias>.passphrase: the security passphrase to access critical information or execute critical operation on other Petals nodes (than the one on which Petals CLI is connected) of the topology (optional).

When optional keys are not defined, Petals CLI will ask for their values manually (or you will have to use the right options with the commands).
If the file does not exist, or that $PETALS_CLI_PREFS points to an invalid location, Petals CLI will use default settings when possible. Otherwise, it will display an error message.

For a server, the user and password must both be set or both be absent. An error message is displayed if only one of them is specified.

The server alias must be unique in the properties file. If a server alias is used twice, an error message will be displayed.

In a production environment, we discourage setting passphrase at alias level to increase the security.

Sample content of the file:

# The default server / connection
alias.default = default

# The connection properties of the 1st server
default.host = localhost
default.port = 7700
default.username = petals
default.password = petals
default.passphrase = petals

Petals CLI extensions

Several Petals CLI extensions are available, they comes with new command(s):

Connection to a Petals node

Connection options from the command line

All the required parameters for a JMX connection can be configured on the command line as options or through the command connect:

> ./petals-cli.sh -h <host> -n <port> -u <user> -p <password> -c -- <command>
> ./petals-cli.sh -C
petals-cli> connect -h <host1> -n <port1> -u <user1> -p <password1> 
petals-cli@<host1>:<port1>>

An alias can also be used.

> ./petals-cli.sh -a <alias> -c -- <command>
> ./petals-cli.sh -C
petals-cli> connect -a <alias1>
petals-cli@<host1>:<port1>>
The arguments -h, -p, -u, -p and -a of the command line are significant only for the command line mode (ie. -c)

Default connection

In console mode, the connection is established, by the command 'connect', with the values given in the preferences file. The connection parameters are identified through the default alias defined by the property alias.default of the preferences file.

> ./petals-cli.sh -C

Type 'help' for help.
------------------------------------------------------------------------------
petals-cli> connect
petals-cli> Would you like to connect to <default-user>:*****@<default-host>:<default-port>? (y/n)
y
petals-cli@<default-host>:<default-port>>

The confirmation can be skipped by adding the 'yes' argument to the command.

> ./petals-cli.sh -C

Type 'help' for help.
------------------------------------------------------------------------------
petals-cli> connect -y
petals-cli@<default-host>:<default-port>>

In command line mode, no default connection is available. A connection is automatically established with the connection parameters explicitly set on the command line.

> ./petals-cli.sh -h localhost -n 7700 -u petals -p petals -c -- stop
> ./petals-cli.sh -a default -c -- stop
This is necessary to easily stop a local container

In script mode, the connection is established, by the command 'connect', with the values given in the preferences file. The connection parameters are identified through the default alias defined by the property alias.default of the preferences file.

> ./petals-cli.sh - << EOF
connect
EOF

If the preferences file does not exist and that connect was invoked without an argument, the command returns the error code 2.

Interacting with several Petals nodes without exiting Petals CLI

In interactive mode or script mode, we should be able to close a connection and open another one without leaving Petals CLI. This is achieved with the 'connect' and 'disconnect' commands. If no argument is set on the 'connect' command, default values are used. These default values are specified in the preferences file. If a connection already exists, the 'connect' command will realize a disconnection before to establish the new connection.

> ./petals-cli.sh -C

Type 'help' for help.
------------------------------------------------------------------------------
petals-cli> connect -h <host1> -n <port1> -u <user1> -p <password1>
Connected on <host1>:<port1> with '<user1>'
petals-cli@<host1>:<port1>> disconnect
petals-cli> connect -a <alias>
Connected on <host1>:<port1> with '<user1>'
petals-cli@<host1>:<port1>> disconnect
petals-cli> connect -h <host2> -n <port2> -u <user2> -p <password2>
Connected on <host2>:<port2> with '<user2>'
petals-cli@<host2>:<port2>> connect
petals-cli@<host2>:<port2>> Would you like to connect to <default-user>:*****@<default-host>:<default-port>? (y/n)
y
petals-cli@<default-host>:<default-port>>

Security

For security reasons, a Petals CLI user may decide that there should be no default connection.
In that case, he may decide to delete the preference file, so that any user will have to type in the right information.
If the preference (properties file) does not exist, Petals CLI displays an error message.

> ./petals-cli.sh -C

Type 'help' for help.
------------------------------------------------------------------------------
petals-cli> connect
No default connection is available. Use 'help connect' for more information.


Another possibility is that the user allows to record a default host and port but not the credentials.
In that case, Petals CLI will ask the user to type in the credentials.

> ./petals-cli.sh -C

Type 'help' for help.
------------------------------------------------------------------------------
petals-cli> connect
petals-cli> Would you like to connect to <default-host>:<-default-port>? (y/n)
y
petals-cli> Username: wrong-username
petals-cli> Password: right-pwd
Invalid credentials.
petals-cli> Retry? (y/n)
y

petals-cli> Username: right-username
petals-cli> Password: wrong-pwd
Invalid credentials.
petals-cli> Retry? (y/n)
y

petals-cli> Username: right-username
petals-cli> Password: right-pwd
petals-cli@<default-host>:<-default-port>>

Error Messages

Error messages should be written in active form.
Negative forms should be avoided.


The preferences file does not exist.
The connect command results in the following error message.

No default connection is available. Use 'help connect' for more information.


The preferences file is invalid (missing property, or duplicate alias...).
The connect command results in the following error message.

The preferences file contains <N> error(s).

  • Error 1
  • Error2


Duplicate Alias.

The alias '<alias>' can only be used once.


Missing property.

The property '<property>' is missing.


Only user was specified for a server.

The credentials for '<alias>' are invalid: add the password or remove the user.


Only password was specified for a server.

The credentials for '<alias>' are invalid: add the user or remove the password.

Administration Commands

Working with JBI artifacts

Artifact lifecycle managed by PetalsCLI

Full Size
A&#32;Gliffy&#32;Diagram&#32;named&#58;&#32;Artifact&#32;lifecycle&#32;of&#32;PetalsCLI

Deploying and Starting an Artifact at once

Petals CLI is able to deploy and start a JBI artifact without distinction between shared-library, component, service assembly and deployable service unit using the following command:

deploy -u <artifact-file> [-f,--file <configuration-file> | -D <configuration-properties>] [-s,--skip-startup]

where:

  • <artifact-file> is the local file name or the URL correctly encoded of the artifact to install or deploy and start
  • <configuration-file> is the local file name or the URL correctly encoded of the properties file used to configure the artifact. This argument is used only if the artifact is a component. It has no sense for other artifacts. This argument is exclusive with <configuration-properties>.
  • <configuration-properties> is a list of '<property-name>=<property-value>', separated by a comma, where <property-name> is the name of the property to configure with <property-value>. This argument is used only if the artifact is a component. It has no sense for other artifacts. This argument is exclusive with <configuration-file>.
Due to a limitation with the underlying library used to implement CLI, it is necessary to have a space between -D and its argument! (see PETALSESBCLI-150 for details)

If the flag -s,--skip-startup is set, the start-up of the artifact is skipped, the artifact is only deployed.

Auto-completion is available on artifacts identifiers and artifact file names.

The command deploy is able to deploy an artifact local to Petals CLI on a remote Petals ESB container. An artifact is local to Petals CLI if deployed using a file or an URL with the protocol 'file'. In this case, the command deploy uses an embedded HTTP server. So the remote Petals ESB container will be able to download the artifact to deploy from Petals CLI. See Petals CLI preferences to configure the embedded HTTP server.

If the artifact to deploy is:

  • a component:
    • if its component installer is already loaded (the component is not installed), then the command 'deploy' will unload the component installer, reload a new one and continue the lifecycle (configuration, installation and start),
    • if the component is installed:
      • if the component is shutdown, then the command 'deploy' will uninstall the component, unload the component installer, reload a new one and continue the lifecycle (configuration, installation and start),
      • otherwise an error occurs, use command 'undeploy' to fix it.
  • a service assembly:
    • if the SA is already deployed and in state 'SHUTDOWN', then the command 'deploy' will undeploy the service assembly, before to re-deploy a new one,
    • otherwise an error occurs, use command 'undeploy' to fix it.
  • a deployable service unit:
    • a service assembly is created from the deployable service unit,
    • next, the service assembly is deployed usually.

Deployment of an Artifact located in a Maven repository

Not available. Coming soon !

Petals CLI is able to deploy and start a JBI artifact located into a Maven repository by using the following command:

deploy <maven-artifact> [<configuration-file> | <configuration-properties>] [-s,--skip-startup]

where:

  • <maven-artifact> is the Maven identifiers of the artifact to install: group-id:artifact-id:version[:classifier]. If required, the Maven repository can be defined in the Maven configuration file ($HOME/.m2/settings.xml)
  • <configuration-file> is the local file name or the URL of the properties file used to configure the artifact. This argument is used only if the artifact is a component. It has no sense for other artifacts. This argument is exclusive with <configuration-properties>.
  • <configuration-properties> is a list of '<property-name>=<property-value>', separated by a white character, where <property-name> is the name of the property to configure with <property-value>. This argument is used only if the artifact is a component. It has no sense for other artifacts. This argument is exclusive with <configuration-file>.

If the flag -s,--skip-startup is set, the start-up of the artifacts are skipped, the artifacts are only deployed.

Same remarks about lifecycle of the deployment from an URL are applicable for the deployment from a Maven artifact.

Bulk Deployment and Start

To deploy and start several artifacts in one command, just put them in a local directory and execute the command 'deploy':

deploy -b,--bulk <url|file> [-s,--skip-startup]
> ./petals-cli.sh -y - << EOF
deploy -b file:///tmp
EOF
> ./petals-cli.sh -C

Type 'help' for help.
------------------------------------------------------------------------------
petals-cli> deploy -b /tmp

If the argument <artifact-file> of the 'deploy' command is a local directory, all artifacts of the directory are deployed.

If the flag -s,--skip-startup is set, the start-up of the artifact is skipped, the artifact is only deployed.

Only the protocol 'file' is available.

Starting an Artifact

An artifact can be started by using the 'start-artifact' command:

> ./petals-cli.sh -c -- start-artifact [ -u <artifact-file> | -a <artifact-id> [-t <artifact-type>] ]

where:

  • <artifact-file> is the local file name or the URL correctly encoded of the artifact to start.
  • <artifact-type> is the nature (SL, component, SA) of the artifact to start. Accepted values are: SL, BC, SL, SA.
  • <artifact-id> is the JBI identifier of the artifact to start.
Auto-completion is available on artifacts IDs, artifact file names and artifact types. The auto-completer for artifact identifiers displays only artifacts in state STOPPED or SHUTDOWNED.

If the artifact to start is a component or a service assembly, the command 'start-artifact' will succeed only if the artifact state on Petals ESB side is 'STOPPED' or 'SHUTDOWN', otherwise on error will occur.

If you want to start a deployable service unit, you must start the associated service assembly that was created during the deployment of the service unit.

Stopping an artifact

An artifact can be stopped by using the command 'stop-artifact':

> ./petals-cli.sh -c -- stop-artifact [ -u <artifact-file> | -a <artifact-id> [-t <artifact-type>] ]

where:

  • <artifact-file> is the local file name or the URL correctly encoded of the artifact to stop.
  • <artifact-type> is the nature (SL, component, SA) of the artifact to stop. Accepted values are: SL, BC, SL, SA.
  • <artifact-id> is the JBI identifier of the artifact to stop.
Auto-completion is available on artifacts IDs, artifact file names and artifact types. The auto-completer for artifact identifiers displays only artifacts in state STARTED.

If the artifact to deploy is a component or a service assembly, the command 'stop-artifact' will succeed only if the artifact state on Petals ESB side is 'STARTED', otherwise on error will occur.

If you want to stop a deployable service unit, you must stop the associated service assembly that was created during the deployment of the service unit.

Undeploying and Stopping an Artifact at once

Petals CLI is able to stop and uninstall/undeploy a JBI artifact without distinction between shared-library, component and service assembly using the following command:

undeploy [ -u <artifact-file> | -a <artifact-id> [-t <artifact-type>] [-v <artifact-version>] ]

where:

  • <artifact-file> is the local file name or the URL correctly encoded of the artifact to undeploy.
  • <artifact-id> is the JBI identifier of the artifact to undeploy.
  • <artifact-type> is the nature (SL, component, SA) of the artifact to undeploy. Accepted values are: SL, BC, SL, SA.
  • <artifact-version> is the artifact version to limit artifacts matching other criteria. Supported only for SL.
Auto-completion is available on artifacts IDs, artifact file names and artifact types.

No lifecycle error can occur. Whatever the artifact state, the command 'undeploy' will adapt to it to realize the undeployment. In particular, if the artifact is in state 'STOPPED', it will be undeployed without confirmation and the user will be responsible to re-deploy it.

If you want to undeploy a deployable service unit, you must undeploy the associated service assembly that was created during the deployment of the service unit.

Bulk Undeployment and Stop

The undeployment command is able to stop and uninstall/undeploy several JBI artifact in one shoot using the bulk mode:

undeploy [ -b [<artifact-directory>] ] [ -y ]

where <artifact-directory> is a local directory name or the URL containing archives of artifacts to undeploy. If not set set, all JBI artifacts are stopped and undeployed/uninstalled.

A confirmation is expected, except if the 'yes' flag is set on the command line or as command argument, otherwise an error will occur.
A confirmation message is displayed in the console mode, except if the 'yes' flag is set on the command line or as command argument.

> ./petals-cli.sh -y -c -- undeploy -b
> ./petals-cli.sh -c -- undeploy -b -y
> ./petals-cli.sh -c -- undeploy -b
ERROR on command 'undeploy': A confirmation is required. Use option: : '-y'

If the directory, containing artifacts to undeploy, contains an artifact that is not deployed, a warning is displayed, no error occurs and the undeployment of other artifacts continues.
If an error occurs during the undeployment of an artifact, the bulk undeployment is interrupted.

Showing installed JBI artifacts

All the installed JBI artefacts can be listed using the command 'list [-p <artifact-pattern> ] [-t artifact-type]':

> ./petals-cli.sh -c -- list
petals-sl-mysql(1.0.0) Installed SL
petals-bc-soap Loaded BC
petals-se-bpel Started SE
soap-consume-provide Started SA
su-SOAP-EchoService-consume SU
su-SOAP-EchoService-provide SU

where:

  • <artifact-pattern> is an optional RegExp pattern to filter the content of the returned list. All the returned JBI artifacts must have a JBI identifier matching the pattern. If no pattern is defined, all the installed artifacts are returned.
  • <artifact-type> is one of the following values: SL, BC, SE, SA, SU, used to restrict the returned list.

The returned list is ordered:

  • firstly, according to the artifact type: SL, BC, SE, SA, SU,
  • and secondly the alphabetical order is applied.

For each artifact, the command displays (caution to the padding):

  • Its JBI identifier. If the JBI artifact is a shared library, the JBI identifier is displayed according to the following pattern: name(version)
  • Its current status:
    • Loaded, available only for component, the installer is loaded but the component is not installed
    • Started
    • Stopped
  • Its type (SL, BC, SE, SA, SU).
As the SU lifecycle can't be modified through the JMX API, there is no interest to display the SU status (it's the same as the status of its SA).

Getting information about an Artifact

Information about a JBI artifact can be got with the 'show' command:

> ./petals-cli.sh -c -- show [-e] [ -u <artifact-file> | -a <artifact-id> [-t <artifact-type>] [-v <artifact-version>] ]

where:

  • <artifact-file> is the local file name or the URL correctly encoded of the artifact to show.
  • <artifact-id> is the JBI identifier of the artifact to show.
  • <artifact-type> is the nature (SL, component, SA) of the artifact to show. Accepted values are: SL, BC, SL, SA, SU.
  • <artifact-version> is the artifact version to limit artifacts matching other criteria. Supported only for SL.

The '-e' option displays extended information.

Displayed information includes:

  • For a shared library:
    • Its JBI identifier
    • The version of the shared library if available, extracted from its JBI descriptor
    • If the shared library was built with Maven, its Maven version extracted from Maven metadata
    • Extended information:
      • List of embedded libraries (coming next)
  • For a component (BC or SE):
    • Its JBI identifier
    • Its type: binding component or service engine
    • If the component was built with Maven, its Maven version extracted from Maven metadata
    • Its state (not-loaded, loaded, installed, started, stopped, shutdown)
    • Extended information:
      • List of embedded libraries of the boostrap classpath(coming next)
      • List of embedded libraries of the runtime classpath(coming next)
      • List of needed shared-libraries, for each shared-library(coming next):
        • Its JBI identifier
        • The version of the shared library if available, extracted from its JBI descriptor
  • For a service assembly:
    • Its JBI identifier
    • If the service-assembly was built with Maven, its Maven version extracted from Maven metadata
    • Its state (not-deployed, deployed, started, stopped, shutdown)
    • List of embedded service-units (displayed using their JBI identifiers)
    • Extended information (replace the previous list of embedded service-units):
      • For each service unit embedded:
      • Its JBI identifier
      • Its target component (displayed using its JBI identifier)
Auto-completion is available on artifacts IDs, artifact file names and artifact types.

Reloading the external configuration of a JBI component

Each Petals CDK-based JBI component includes a parameter named 'properties-file' containing placeholders to configure some parameters at service unit level. These placeholder values can be reloaded without stopping anything using the command 'reload-configuration':

> ./petals-cli.sh -c -- reload-configuration [ -u <artifact-file> | -a <artifact-id> ]

where:

  • <artifact-file> is the local file name or the URL correctly encoded of the JBI component artifact for which the configuration must be reloaded,
  • <artifact-id> is the JBI identifier of JBI component artifact for which the configuration must be reloaded.
Auto-completion is available on JBI component artifact identifiers and artifact file names. The auto-completer for artifact identifiers displays only artifacts in state STARTED or STOPPED.

Interrupting a flow of commands

A flow of commands can be interrupted by using the 'exit' command. If a number is set as argument, it is used as return code. The argument 'lastErrorCode' is used as return code value of the last executed command. Otherwise, 0 is returned to the shell.

> ./petals-cli.sh -y - << EOF
deploy /tmp/my-artifact.zip
exit lastErrorCode
EOF

Ending a flow of commands

When the end of a flow of commands is reached, if the last command is not 'exit', the 'exit lastErrorCode' command is implicitly executed.

> ./petals-cli.sh -y - << EOF
deploy /tmp/my-artifact.zip
EOF
echo $?
0

Working with the Container

Getting the versions related to a Petals node

To get the version of a Petals node, the version of the JVM running Petals node, and its operating system, use the 'version' command:

> ./petals-cli.sh -c -- version
Petals JBI Container 5.0.0-M1
OpenJDK Runtime Environment 24.79-b02 Oracle Corporation
Linux 3.19.0-30-generic amd64

Stopping the container

The container can be stopped by using the command 'stop':

> ./petals-cli.sh -c -- stop

Shutdowning the container

The container can be shut-downed by using the command 'stop' and the parameter '--shutdown'.

> ./petals-cli.sh -C
petals-cli@host:port> stop --shutdown
Are you sure you want to shutdown the container? (y/n)

A confirmation is expected, except if the 'yes' flag is set on the command line or as command argument, otherwise an error will occur.
A confirmation message is displayed in the console mode, except if the 'yes' flag is set on the command line or as command argument.

> ./petals-cli.sh -y -c -- stop --shutdown
> ./petals-cli.sh -c -- stop --shutdown -y
> ./petals-cli.sh -c -- stop --shutdown
ERROR on command 'stop': A confirmation is required. Use option: : '-y'

Getting the server properties

When connected to a container, it is possible to get all the values defined in its server.properties file.

petals-cli@host:port> properties-list
Key1: value1
Key2: value2
...

where "keyN" and "valueN" are the keys and values defined in the server.properties file of this container.

Changing logger levels

On a container, it is possible to change the level of a logger.

petals-cli@host:port> logger-set -n <logger-name> -l <level>
The log level was succesfully changed.

In case of error, the error message is "The log level could not be changed.", followed by a detailed message (e.g. "WARN is not a valid log level").


To get all the available loggers with their level, use the command loggers without any argument.

petals-cli@host:port> loggers
<logger-name-1> <level>
<logger-name-2> <level>
...


You can also use a regular expression to filter the candidate results.

petals-cli@host:port> loggers -p <regular expression>
<logger-name-1> <level>
<logger-name-2> <level>
...
Auto-completion is available on logger names and log levels.

Working with the Topology

Getting the topology

Getting the topology only

When connected to a container, it is possible to get information about the topology of this node is part of.

petals-cli@host:port> topology-list
Domain: Domain 1
* Container: Node1 (Reachable)
** information

* Container: Node2 (Unreachable)
** information

...

Sensible information as credentials are returned only if a security passphrase is provided. This passphrase can be provided using the command option '-p'. Or, if you used an alias (including the default alias) to connect to the remote Petals container, the passphrase set at alias level (<alias>.passphrase) will be used automatically if defined.

petals-cli@host:port> topology-list -p mypassphrase
Domain: Domain 1
* Container: Node1 (Reachable)
** information including credentials
In a production environment, we discourage setting passphrase at alias level to increase the security

This command shows a set of Petals nodes of the same domain, each node having the following information:

  • Container name,
  • Container state (possible values are: Reachable, Unreachable, Unknown),
  • Host,
  • Node ports,
  • Node credentials (only if the security passphrase is provided and correct).

Getting the topology with JBI artifacts deployed

All JBI artifacts deployed on each Petals container of the topology can be displayed using the option '-a | --artifacts'. With this option the following JBI artifacts are returned: shared libraries, components and service assemblies.

petals-cli@host:port> topology-list -a
Domain: Domain 1
* Container: Node1 (Reachable)
** container information
** shared library informations
** component informations
** service assembly information

* Container: Node2 (Reachable)
** container information
** shared library informations
** component informations
** service assembly information

* Container: Node2 (Unreachable)
** container information

...

Information returned are:

  • for share libraries: name and version,
  • for components: name and state (Loaded, Started or Stopped),
  • for service assemblies: name and state (Started or Stopped).
To get information about JBI artifacts, the Petals container holding them must be reachable. So if one container can not be reached, no error is returned and no information about shared-libray, component and service-assemblies is displayed for this container.

Filtering

The content of the topology can be limited to some containers using the filter '-c <container-name-regexp>', where container-name-regexp is a regexp identifying the containers to displayed:

petals-cli@host:port> topology-list -c Node1
Domain: Domain 1
* Container: Node1 (Reachable)
** information of Node1
The auto-completion of the filter '-c' proposes the container names of the topology.

Moving or attaching a container to another domain

A running container can be moved to another domain, using the command 'move-container':

>./petals-cli.sh -C
petals-cli@host:port> move-container [--target-domain <domain-0> --target-name <container-0> [--target-host <localhost>] [--target-port <7700>] [--target-user <petals>] [--target-pwd <petals>] --target-pass-phrase <target-pass-phrase>]
Are you sure you want to move the current container ? (y/n)

where:

  • the container to move is the container on which Petals CLI is connected
  • --target-domain: the target domain name, the one that will be joined,
  • --target-name: the name of the container of the target domain, used as entry point in the target domain,
  • --target-host: the host name of the container of the target domain. Default value: localhost,
  • --target-port: the JMX port of the container of the target domain. Default value: 7700,
  • --target-user: the JMX username of the container of the target domain. Default value: petals,
  • --target-pwd: the JMX password of the container of the target domain. Default value: petals,
  • --target-pass-phrase: the security pass-phrase to access sensible information

Note that the domain and container names are only used to verify the consistency of the move: in the end, what matters is that the container will be moved to the same domain as the target container that is contacted using the JMX connection informations.

A confirmation is expected, except if the 'yes' flag is set on the command line or as command argument, otherwise an error will occur.
A confirmation message is displayed in the console mode, except if the 'yes' flag is set on the command line or as command argument.

> ./petals-cli.sh -y -c -- move-container ...
> ./petals-cli.sh -c -- move-container -y ...
> ./petals-cli.sh -c -- move-container
ERROR on command 'move-container': A confirmation is required. Use option: : '-y'

Detaching a container from domain

A running container can be detached from a domain, using the command 'move-container':

>./petals-cli.sh -C
petals-cli@host:port> move-container 
Are you sure you want to detach the current container ? (y/n)

where:

  • the container to detach is the container on which Petals CLI is connected

A confirmation is expected, except if the 'yes' flag is set on the command line or as command argument, otherwise an error will occur.
A confirmation message is displayed in the console mode, except if the 'yes' flag is set on the command line or as command argument.

> ./petals-cli.sh -y -c -- move-container ...
> ./petals-cli.sh -c -- move-container -y ...
> ./petals-cli.sh -c -- move-container
ERROR on command 'move-container': A confirmation is required. Use option: : '-y'

Working with the endpoint directory

Showing the endpoint directory's full content

The full content of the endpoint directory can be dumped by using the 'endpoint-list' command:

petals-cli> endpoint-list
Endpoints:
<endpoint-name-1>: <endpoint-1-characteristics>
<endpoint-name-2>: <endpoint-2-characteristics>
Services:
<service-name-1>:
<endpoints-list>
<service-name-2>:
<endpoints-list>
Interfaces:
<interface-name-1>:
<endpoints-list>
<interface-name-2>:
<endpoints-list>

where:

  • <endpoint-name-x> is an endpoint name.
  • <endpoint-x-characteristics> is the attributes of the endpoint, separated by comma: container identifier, component identifier, endpoint type.
  • <service-name-x> is a service name.
  • <interface-name-x> is an interface name.
  • <endpoints-list> is the list of endpoint name implementing the interface or service.
Qualified names, like service and interface names, are written as follows:{namespace-uri}local-part.

Filtering the endpoint directory's full content

The content of the endpoint directory can be dumped by using the 'endpoint-list' command.
It is however possible to filter the dumped result.

petals-cli> endpoint-list [-e <endpoint-name-regexp>] [-s <service-name-regexp>] [-i <interface-name-regexp>] [-c <container-name-regexp>]

where:

  • <endpoint-name-regexp> is a regular expression used as filter on the full end-point name,
  • <service-name-regexp> is a regular expression used as filter on the full service name,
  • <interface-name-regexp> is a regular expression used as filter on the full interface name,
  • <container-name-regexp> is a regular expression used as filter on the container name on which the endpoints are deployed.

The parameter order (endpoint, service, interface) does not matter.
All are optional. If none is specified, the entire endpoint directory content is dumped.

The { and } are special in Java's regex dialect: they are the opening and closing tokens for the repetition quantifier {n,m} where n and m are integers. Hence the error message: "Illegal repetition".

You should escape them:

\{http://petals.ow2.org/\}Service

Controlling the output of the endpoint directory content dumped

The output of the command 'endpoint-list', defined below, is composed of 3 parts:

  • endpoints, under the header 'Endpoints:',
  • services, under the header 'Services:',
  • interfaces, under the header 'Interface:'.

You can select the parts to display one by one using:

petals-cli> endpoint-list [--output-endpoints] [--output-services] [--output-interfaces]

where:

  • --output-endpoints selects the part about endpoints,
  • --output-services selects the part about services,
  • --output-interfaces selects the part about interfaces.

If only one of these flags is set, its header will not be displayed. If none of these flags is set, all 3 parts are displayed.

Sample #1
petals-cli@localhost:7700>endpoint-list -e HelloEndpoint-TargetContainer[01]
Endpoints:
HelloEndpoint-TargetContainer0: target-container-0,petals-se-pojo,INTERNAL
HelloEndpoint-TargetContainer1: target-container-1,petals-se-pojo,INTERNAL
Services:
{http://petals.ow2.org/}HelloService0:
HelloEndpoint-TargetContainer0
{http://petals.ow2.org/}HelloService1:
HelloEndpoint-TargetContainer1
Interfaces:
{http://petals.ow2.org/}HelloPortType:
HelloEndpoint-TargetContainer0 HelloEndpoint-TargetContainer1
Sample #2
petals-cli@localhost:7700>endpoint-list -e HelloEndpoint-TargetContainer[01] --output-endpoints
HelloEndpoint-TargetContainer0: target-container-0,petals-se-pojo,INTERNAL
HelloEndpoint-TargetContainer1: target-container-1,petals-se-pojo,INTERNAL
Sample #3
petals-cli@localhost:7700>endpoint-list -e HelloEndpoint-TargetContainer[01] --output-endpoints --output-interfaces
Endpoints:
HelloEndpoint-TargetContainer0: target-container-0,petals-se-pojo,INTERNAL
HelloEndpoint-TargetContainer1: target-container-1,petals-se-pojo,INTERNAL
Interfaces:
{http://petals.ow2.org/}HelloPortType:
HelloEndpoint-TargetContainer0 HelloEndpoint-TargetContainer1
Sample #4
petals-cli@localhost:7700>endpoint-list -e HelloEndpoint-TargetContainer[01] -s {http://petals.ow2.org/}HelloService0 --output-endpoints --output-services
Endpoints:
HelloEndpoint-TargetContainer0: target-container-0,petals-se-pojo,INTERNAL
HelloEndpoint-TargetContainer1: target-container-1,petals-se-pojo,INTERNAL
Services:
{http://petals.ow2.org/}HelloService0:
HelloEndpoint-TargetContainer0
Sample #5
petals-cli@localhost:7700>endpoint-list -e HelloEndpoint-TargetContainer[01] -s {http://petals.ow2.org/}HelloService0 --output-services
{http://petals.ow2.org/}HelloService0:
HelloEndpoint-TargetContainer0
Sample #6
petals-cli@localhost:7700>endpoint-list -e HelloEndpoint-TargetContainer[01] --output-services
{http://petals.ow2.org/}HelloService0:
HelloEndpoint-TargetContainer0
{http://petals.ow2.org/}HelloService1:
HelloEndpoint-TargetContainer1

System Commands

Petals CLI can directly execute system commands.
To achieve it, the system command is an argument of the 'system' command.

petals-cli> system <system-command>

As an example,

petals-cli> system pwd

displays the directory in which Petals CLI runs.
The return code of the wrapping command is the return code of the system command.

A system command having arguments can also be enclosed with quotes:
petals-cli> system "echo My linux shell: ${env:SHELL}"
My linux shell: /bin/bash
Caution to correctly escape the symbol '$' when using a system command with variables on command line:
$ petals-cli -c -- system echo My linux shell: \${env:SHELL} with the temporary folder: \${java.io.tmpdir}
My linux shell: /bin/bash with the temporary folder: /tmp
$ petals-cli -c -- system "echo My linux shell: \${env:SHELL} with the temporary folder: \${java.io.tmpdir}"
My linux shell: /bin/bash with the temporary folder: /tmp

Advanced usage

Logging in Petals CLI

Petals CLI is provided with a default Java Logging configuration. This configuration displays logging trace as following:

<LEVEL>: <message>

where <LEVEL> is the international label of the logging trace level, except for the level 'SEVERE' which is always 'ERROR'. By default, only levels 'SEVERE' and 'WARNING' are printed.

The default configuration can be overridden using the system property 'java.util.logging.config.file' to set into the launching script '$PETALS_CLI_HOME/bin/petals-cli.sh' or '%PETALS_CLI_HOME%\bin\petals-cli.bat'. An sample configuration is available in file '$PETALS_CLI_HOME/conf/petals-cli-logging-sample.properties'

To add your custom command

Petals CLI is provided with an API to add your own command.

Writing your command

To create a new custom command, just create a new Java class that IMPLEMENTS the interface org.ow2.petals.cli.api.command.Command.
To be auto-discovered, your command MUST be declared in a resource named 'META-INF/service/org.ow2.petals.cli.api.command.Command' (put the class name with the package part in this file).

If the new command needs third party products in addition of the ones already provided by Petals CLI, they MUST be installed with your command.

No classloader isolation is available between commands, pay attention to versions of third-party products. They MUST match the version of those provided with Petals CLI or those custom commands.

Custom command installation

To install your command just put all needed JAR files in the directory $PETALS_CLI_HOME/extensions.

Monitoring Petals with Petals CLI

An extension of Petals CLI was created to monitor Petals ESB.

This extension has several implementations. Each implementation is adapted to a monitoring tool, but can be used as a normal command. Now, only one implementation exist, the Cacti's implementation

Known Problems

Error about missing options

For commands requiring at least one option, an error can occur if the operand flag ('--') is missing:

> ./petals-cli.sh -h localhost -n 7700 -u petals -p petals -c -- deploy -u file:///.../my-archive.zip
ERROR on command 'deploy': Missing option(s):b, u
usage: deploy [-b <url> | -u <url>] [-D
       <property1=value1,property2=value2> | -f <configuration-file>]

This is due to the option overriding: the command deploy and Petals CLI have the same option: -u. Both -u are processed by Petals CLI option parsing. Just add '--' before the command to exclude the second 'u' of the Petals CLI option parsing. So it will be available for the command option parsing.

Can not connect using URI : service:jmx:rmi:///jndi/rmi://<host>:7700/jmxRmiConnector with petals/petals

This error can reveal several configuration problems:

  • a mistake in the Petals ESB container configuration at topology level:
    If you are running Petals ESB with its default configuration on a host 'A', you will get the following error connecting the Petals CLI from another host 'B':
    ERROR: org.ow2.petals.jmx.api.api.exception.ConnectionErrorException: Can not connect using URI : service:jmx:rmi:///jndi/rmi://192.168.0.11:7700/jmxRmiConnector with petals/petals
    

    By default, Petals ESB listens JMX connection from localhost, that's why you get the error. Update the host name of the Petals ESB in its topology configuration file to solve the problem.

  • a mistake in your network configuration at system level:
    On Linux system, check your file /etc/hosts. If declared, the host running the Petals ESB container must be correctly defined with its IP address.

Petals CLI seems to be frozen on command 'exit'

You entered the command exit in the interactive mode, and the Petals CLI seems to be frozen: no prompt.
You probably have launched asynchronous commands as defect subscriptions, use Ctrl-C to force to exit the Petals CLI or kill its process.

Enter labels to add to this page:
Please wait 
Looking for a label? Just start typing.