Hi,

For Stratos 2.0 release, we are planning to improve the existing CLI Tool
[1].

We are planning to support following features in Stratos2 CLI Tool


   - Command history [2]
   - Auto-completion of commands
   - Character masking (for passwords) [3]


For above features, we are planning to use jline2 library [4].

*Existing Design*

Currently the CLI tool has two modes. (Stratos2 CLI source can be found at
[5])

1. Interactive Mode - In this mode, user is logged in by passing only
username & password as arguments.

$stratos <username> <password>
After successful login, the user get a prompt as "stratos>"

2. Single Command Line Mode - In this mode, all the commands are passed as
arguments including username and password

$stratos <username> <password> list
This will list all the cartridges.

AFAIK, we can support above features only when the CLI tool is in prompt
mode. In order to provide auto-complete features at the terminal, we need
to use OS specific functions, for example /etc/bash_completion [6]

*Drawbacks of existing Beta 2 CLI Tool & Possible Solutions*

1. A drawback of existing design is that we have to login every time the
stratos command is executed.

Solution: Login only once. The back-end service is an admin service and we
login as a tenant. I'm thinking of a way to save session in the file
system. For example inside <user.home>/.stratos/

If we can save the session id, then we use the same for authenticate next
requests. In this way, the user can use the CLI tool, until the session
times out.

Or else we can keep the username and password cached (encrypted form). In
this way, user can keep using the tool without worrying about the session
time out.

Which is the better way?

2. Currently the password is entered in the command line itself

Solution: With jline2, we can use masking for password input.

3. Command history not support.

Solution: jline2 can provide command history. Additionally if we can login
only once, user can execute commands directly in terminal and use the
history available in the terminal environment.

*New Design*

I'm going to introduce following commands to the tool

1. $stratos setup
This will prompt for Stratos Controller hostname & port. These values will
be saved in <user.home>/.stratos/stratos.config

2. $stratos login
This will have arguments for username and password. Password will be
prompted with masked character. Authentication details will be saved in
<user.home>/.stratos/

3. $stratos logout
Logout user.

After successful login, user can go into interactive mode by just entering
"stratos" or user can execute commands in single line. For example "stratos
list", "stratos subscribe" etc.

CLI Tool will also be improved to use a single '-' for short option names
and '--' for longer option names [7].

WDYT?

[1] https://wso2.org/jira/browse/SPI-234
[2] https://wso2.org/jira/browse/SPI-111
[3] https://wso2.org/jira/browse/SPI-241
[4] http://jline.github.io/jline2/
[5]
https://svn.wso2.org/repos/wso2/carbon/platform/branches/4.1.0/components/stratos/artifact-deployment-coordinator/org.wso2.carbon.adc.mgt.cli/2.1.1
[6] http://www.debian-administration.org/articles/316
[7] https://wso2.org/jira/browse/SPI-240

-- 
Isuru Perera
Senior Software Engineer | WSO2, Inc. | http://wso2.com/
Lean . Enterprise . Middleware

Twitter: http://twitter.com/chrishantha | LinkedIn:
http://lk.linkedin.com/in/chrishantha/
_______________________________________________
Architecture mailing list
Architecture@wso2.org
https://mail.wso2.org/cgi-bin/mailman/listinfo/architecture

Reply via email to