You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@stratos.apache.org by me...@apache.org on 2015/03/10 06:11:19 UTC

[2/2] stratos git commit: Bugfix for CLI command options (e.g. -f) not being accepted (ported from 4.0.0): from the CLI. They only worked in interactive CLI mode. This is because theparser in the StratosApplication class parses all the options (it trips

Bugfix for CLI command options (e.g. -f) not being accepted (ported from 4.0.0): from the CLI. They only worked in interactive CLI mode. This is because theparser in the StratosApplication class parses all the options (it trips over unrecognised options), and the remaining arguments are passed down to the Command classes. These classes then parse those, but all options are now missing from them. If a command is invoked via the CLI, options would still be present, since the CLI commands are not parsed with the same logic as the command line arguments. This bugfix extends the execute function of the Command interface such that it accepts an argument called already_parsed_opts, which will contain options parsed in StratosApplication. These options are merged with any options parsed in the command module, and the merged options are then used in the remaining Command-specific code.


Project: http://git-wip-us.apache.org/repos/asf/stratos/repo
Commit: http://git-wip-us.apache.org/repos/asf/stratos/commit/c18226c0
Tree: http://git-wip-us.apache.org/repos/asf/stratos/tree/c18226c0
Diff: http://git-wip-us.apache.org/repos/asf/stratos/diff/c18226c0

Branch: refs/heads/master
Commit: c18226c01b6d7e75c8c6bcdf1294e5288b816e1d
Parents: 21c5baa
Author: Martin Eppel <me...@cisco..com>
Authored: Mon Mar 9 22:09:43 2015 -0700
Committer: Martin Eppel <me...@cisco..com>
Committed: Mon Mar 9 22:09:43 2015 -0700

----------------------------------------------------------------------
 .../java/org/apache/stratos/cli/Command.java    |  5 ++-
 .../apache/stratos/cli/StratosApplication.java  |  8 +++--
 .../cli/commands/ActivateTenantCommand.java     |  3 +-
 .../commands/AddApplicationSignupCommand.java   | 10 ++++--
 .../commands/AddAutoscalingPolicyCommand.java   | 10 ++++--
 .../cli/commands/AddCartridgeCommand.java       | 10 ++++--
 .../cli/commands/AddCartridgeGroupCommand.java  | 10 ++++--
 .../commands/AddDeploymentPolicyCommand.java    | 10 ++++--
 .../cli/commands/AddDomainMappingsCommand.java  |  9 ++++--
 .../commands/AddKubernetesClusterCommand.java   |  9 ++++--
 .../cli/commands/AddKubernetesHostCommand.java  | 11 ++++---
 .../commands/AddNetworkPartitionCommand.java    |  9 ++++--
 .../stratos/cli/commands/AddTenantCommand.java  | 29 +++++++++--------
 .../stratos/cli/commands/AddUserCommand.java    | 33 +++++++++++---------
 .../cli/commands/CreateApplicationCommand.java  | 10 ++++--
 .../cli/commands/DeactivateTenantCommand.java   |  3 +-
 .../cli/commands/DeleteApplicationCommand.java  |  3 +-
 .../DeleteApplicationSignupCommand.java         |  3 +-
 .../DeleteAutoScalingPolicyCommand.java         |  3 +-
 .../cli/commands/DeleteTenantCommand.java       |  3 +-
 .../stratos/cli/commands/DeleteUserCommand.java |  3 +-
 .../cli/commands/DeployApplicationCommand.java  | 14 ++++++---
 .../commands/DescribeApplicationCommand.java    |  3 +-
 .../DescribeApplicationRuntimeCommand.java      |  3 +-
 .../DescribeApplicationSignupCommand.java       |  3 +-
 .../DescribeAutoScalingPolicyCommand.java       |  2 +-
 .../cli/commands/DescribeCartridgeCommand.java  |  2 +-
 .../commands/DescribeCartridgeGroupCommand.java |  3 +-
 .../DescribeDeploymentPolicyCommand.java        |  2 +-
 .../DescribeKubernetesClusterCommand.java       |  3 +-
 .../DescribeKubernetesMasterCommand.java        |  3 +-
 .../DescribeNetworkPartitionCommand.java        |  3 +-
 .../cli/commands/DescribeTenantCommand.java     |  3 +-
 .../stratos/cli/commands/ExitCommand.java       |  5 +--
 .../stratos/cli/commands/HelpCommand.java       |  3 +-
 .../stratos/cli/commands/InfoCommand.java       |  3 +-
 .../cli/commands/ListApplicationsCommand.java   |  3 +-
 .../commands/ListAutoscalePolicyCommand.java    |  3 +-
 .../commands/ListCartridgeGroupsCommand.java    |  3 +-
 .../commands/ListCartridgesByFilterCommand.java |  9 ++++--
 .../cli/commands/ListCartridgesCommand.java     |  3 +-
 .../commands/ListDeploymentPoliciesCommand.java |  3 +-
 .../cli/commands/ListDomainMappingsCommand.java |  3 +-
 .../commands/ListKubernetesClustersCommand.java |  3 +-
 .../commands/ListKubernetesHostsCommand.java    |  3 +-
 .../commands/ListNetworkPartitionCommand.java   |  3 +-
 .../ListPartialSearchTenantsCommand.java        |  9 ++++--
 .../stratos/cli/commands/ListTenants.java       |  3 +-
 .../apache/stratos/cli/commands/ListUsers.java  |  3 +-
 .../cli/commands/RemoveCartridgeCommand.java    |  3 +-
 .../commands/RemoveCartridgeGroupCommand.java   |  3 +-
 .../commands/RemoveDeploymentPolicyCommand.java |  3 +-
 .../commands/RemoveDomainMappingsCommand.java   |  3 +-
 .../RemoveKubernetesClusterCommand.java         |  2 +-
 .../commands/RemoveKubernetesHostCommand.java   |  3 +-
 .../commands/RemoveNetworkPartitionCommand.java |  3 +-
 .../commands/SynchronizeArtifactsCommand.java   |  3 +-
 .../commands/UndeployApplicationCommand.java    |  3 +-
 .../UpdateAutoscalingPolicyCommand.java         |  9 ++++--
 .../cli/commands/UpdateCartridgeCommand.java    |  9 ++++--
 .../commands/UpdateDeploymentPolicyCommand.java |  7 +++--
 .../commands/UpdateKubernetesHostCommand.java   | 15 +++++----
 .../commands/UpdateKubernetesMasterCommand.java | 11 ++++---
 .../commands/UpdateNetworkPartitionCommand.java |  9 ++++--
 .../cli/commands/UpdateTenantCommand.java       | 33 +++++++++++---------
 .../stratos/cli/commands/UpdateUserCommand.java | 33 +++++++++++---------
 .../org/apache/stratos/cli/utils/CliUtils.java  | 15 +++++++++
 67 files changed, 301 insertions(+), 166 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/stratos/blob/c18226c0/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/Command.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/Command.java b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/Command.java
index 6516556..c3cd04f 100644
--- a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/Command.java
+++ b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/Command.java
@@ -18,6 +18,7 @@
  */
 package org.apache.stratos.cli;
 
+import org.apache.commons.cli.Option;
 import org.apache.commons.cli.Options;
 import org.apache.stratos.cli.exception.CommandException;
 
@@ -58,10 +59,12 @@ public interface Command<T extends CommandContext> {
 	 *            The context assoicated with the Command Line Application
 	 * @param args
 	 *            The arguments for the command
+	 * @param already_parsed_opts
+	 *            Options parsed by any parent parsers.
 	 * @return The status code
 	 * @throws org.apache.stratos.cli.exception.CommandException
 	 *             if any errors occur when executing the command
 	 */
-	int execute(T context, String[] args) throws CommandException;
+	int execute(T context, String[] args, Option[] already_parsed_opts) throws CommandException;
 
 }

http://git-wip-us.apache.org/repos/asf/stratos/blob/c18226c0/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/StratosApplication.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/StratosApplication.java b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/StratosApplication.java
index 532f043..a735914 100644
--- a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/StratosApplication.java
+++ b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/StratosApplication.java
@@ -312,6 +312,8 @@ public class StratosApplication extends CommandLineApplication<StratosCommandCon
 
         // Command action
         String action = null;
+        // Command action options
+        Option[] actionOptions = null;
 
         String usernameInput = null;
         String passwordInput = null;
@@ -329,6 +331,7 @@ public class StratosApplication extends CommandLineApplication<StratosCommandCon
             CommandLine commandLine;
             try {
                 // Must add all options. Otherwise actions cannot be performed directly by command line.
+            	// This is because the parser trips over unrecognised options.
                 Options allCommandOptions = new Options();
                 for (Command<StratosCommandContext> command : commands.values()) {
                     Options commandOptions = command.getOptions();
@@ -347,6 +350,7 @@ public class StratosApplication extends CommandLineApplication<StratosCommandCon
 
                 commandLine = parser.parse(options, args, true);
                 remainingArgs = commandLine.getArgs();
+                actionOptions = commandLine.getOptions();
                 if (remainingArgs != null && remainingArgs.length > 0) {
                     // Get command action
                     action = remainingArgs[0];
@@ -412,7 +416,7 @@ public class StratosApplication extends CommandLineApplication<StratosCommandCon
                 if (logger.isDebugEnabled()) {
                     logger.debug("Executing Action: {} {}", action, Arrays.asList(actionArgs));
                 }
-                int returnCode = command.execute(context, actionArgs);
+                int returnCode = command.execute(context, actionArgs, actionOptions);
                 if (logger.isDebugEnabled()) {
                     logger.debug("Exiting with error code {} after executing action {}", returnCode, action);
                 }
@@ -506,7 +510,7 @@ public class StratosApplication extends CommandLineApplication<StratosCommandCon
             return CliConstants.COMMAND_FAILED;
         }
         try {
-            return command.execute(context, actionArgs);
+        	return command.execute(context, actionArgs, new Option[0]);
         } catch (CommandException e) {
             if (logger.isErrorEnabled()) {
                 logger.error("Error executing command: " + action, e);

http://git-wip-us.apache.org/repos/asf/stratos/blob/c18226c0/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/ActivateTenantCommand.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/ActivateTenantCommand.java b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/ActivateTenantCommand.java
index b9923ab..7aa0b81 100644
--- a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/ActivateTenantCommand.java
+++ b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/ActivateTenantCommand.java
@@ -18,6 +18,7 @@
  */
 package org.apache.stratos.cli.commands;
 
+import org.apache.commons.cli.Option;
 import org.apache.commons.cli.Options;
 import org.apache.stratos.cli.Command;
 import org.apache.stratos.cli.RestCommandLineService;
@@ -51,7 +52,7 @@ public class ActivateTenantCommand implements Command<StratosCommandContext> {
     }
 
     @Override
-    public int execute(StratosCommandContext context, String[] args) throws CommandException {
+    public int execute(StratosCommandContext context, String[] args, Option[] already_parsed_opts) throws CommandException {
         if (logger.isDebugEnabled()) {
 			logger.debug("Executing {} command...", getName());
 		}

http://git-wip-us.apache.org/repos/asf/stratos/blob/c18226c0/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/AddApplicationSignupCommand.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/AddApplicationSignupCommand.java b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/AddApplicationSignupCommand.java
index a0ecd2e..8425fc7 100644
--- a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/AddApplicationSignupCommand.java
+++ b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/AddApplicationSignupCommand.java
@@ -26,8 +26,10 @@ import org.apache.stratos.cli.StratosCommandContext;
 import org.apache.stratos.cli.exception.CommandException;
 import org.apache.stratos.cli.utils.CliConstants;
 import org.apache.stratos.cli.utils.CliUtils;
+import static org.apache.stratos.cli.utils.CliUtils.mergeOptionArrays;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+
 import java.io.IOException;
 
 /**
@@ -68,7 +70,7 @@ public class AddApplicationSignupCommand implements Command<StratosCommandContex
     }
 
     @Override
-    public int execute(StratosCommandContext context, String[] args) throws CommandException {
+    public int execute(StratosCommandContext context, String[] args, Option[] already_parsed_opts) throws CommandException {
         if (logger.isDebugEnabled()) {
             logger.debug("Executing command: ", getName());
         }
@@ -82,8 +84,10 @@ public class AddApplicationSignupCommand implements Command<StratosCommandContex
         try {
             CommandLineParser parser = new GnuParser();
             CommandLine commandLine = parser.parse(options, args);
-            if (commandLine.hasOption(CliConstants.RESOURCE_PATH)) {
-                String resourcePath = commandLine.getOptionValue(CliConstants.RESOURCE_PATH);
+            //merge newly discovered options with previously discovered ones.
+            Options opts = mergeOptionArrays(already_parsed_opts, commandLine.getOptions());
+            if (opts.hasOption(CliConstants.RESOURCE_PATH)) {
+                String resourcePath = opts.getOption(CliConstants.RESOURCE_PATH).getValue();
                 if (resourcePath == null) {
                     System.out.println("usage: " + getName() + " [-" + CliConstants.RESOURCE_PATH + " " + CliConstants.RESOURCE_PATH_LONG_OPTION + "]");
                     return CliConstants.COMMAND_FAILED;

http://git-wip-us.apache.org/repos/asf/stratos/blob/c18226c0/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/AddAutoscalingPolicyCommand.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/AddAutoscalingPolicyCommand.java b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/AddAutoscalingPolicyCommand.java
index 51c7769..f666bff 100644
--- a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/AddAutoscalingPolicyCommand.java
+++ b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/AddAutoscalingPolicyCommand.java
@@ -24,8 +24,10 @@ import org.apache.stratos.cli.RestCommandLineService;
 import org.apache.stratos.cli.StratosCommandContext;
 import org.apache.stratos.cli.exception.CommandException;
 import org.apache.stratos.cli.utils.CliConstants;
+import static org.apache.stratos.cli.utils.CliUtils.mergeOptionArrays;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+
 import java.io.BufferedReader;
 import java.io.FileReader;
 import java.io.IOException;
@@ -63,7 +65,7 @@ public class AddAutoscalingPolicyCommand implements Command<StratosCommandContex
         return null;
     }
 
-    public int execute(StratosCommandContext context, String[] args) throws CommandException {
+    public int execute(StratosCommandContext context, String[] args, Option[] already_parsed_opts) throws CommandException {
         if (logger.isDebugEnabled()) {
             logger.debug("Executing {} command...", getName());
         }
@@ -77,16 +79,18 @@ public class AddAutoscalingPolicyCommand implements Command<StratosCommandContex
 
             try {
                 commandLine = parser.parse(options, args);
+                //merge newly discovered options with previously discovered ones.
+                Options opts = mergeOptionArrays(already_parsed_opts, commandLine.getOptions());
 
                 if (logger.isDebugEnabled()) {
                     logger.debug("Autoscaling policy deployment");
                 }
 
-                if (commandLine.hasOption(CliConstants.RESOURCE_PATH)) {
+                if (opts.hasOption(CliConstants.RESOURCE_PATH)) {
                     if (logger.isTraceEnabled()) {
                         logger.trace("Resource path option is passed");
                     }
-                    resourcePath = commandLine.getOptionValue(CliConstants.RESOURCE_PATH);
+                    resourcePath = opts.getOption(CliConstants.RESOURCE_PATH).getValue();
                     autoscalingPolicyDeployment = readResource(resourcePath);
                 }
 

http://git-wip-us.apache.org/repos/asf/stratos/blob/c18226c0/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/AddCartridgeCommand.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/AddCartridgeCommand.java b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/AddCartridgeCommand.java
index dcb8846..b32c965 100644
--- a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/AddCartridgeCommand.java
+++ b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/AddCartridgeCommand.java
@@ -24,8 +24,10 @@ import org.apache.stratos.cli.RestCommandLineService;
 import org.apache.stratos.cli.StratosCommandContext;
 import org.apache.stratos.cli.exception.CommandException;
 import org.apache.stratos.cli.utils.CliConstants;
+import static org.apache.stratos.cli.utils.CliUtils.mergeOptionArrays;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+
 import java.io.BufferedReader;
 import java.io.FileReader;
 import java.io.IOException;
@@ -63,7 +65,7 @@ public class AddCartridgeCommand implements Command<StratosCommandContext> {
         return null;
     }
 
-    public int execute(StratosCommandContext context, String[] args) throws CommandException {
+    public int execute(StratosCommandContext context, String[] args, Option[] already_parsed_opts) throws CommandException {
         if (logger.isDebugEnabled()) {
             logger.debug("Executing {} command...", getName());
         }
@@ -77,16 +79,18 @@ public class AddCartridgeCommand implements Command<StratosCommandContext> {
 
             try {
                 commandLine = parser.parse(options, args);
+              //merge newly discovered options with previously discovered ones.
+              Options opts = mergeOptionArrays(already_parsed_opts, commandLine.getOptions());
 
                 if (logger.isDebugEnabled()) {
                     logger.debug("Cartridge deployment");
                 }
 
-                if (commandLine.hasOption(CliConstants.RESOURCE_PATH)) {
+                if (opts.hasOption(CliConstants.RESOURCE_PATH)) {
                     if (logger.isTraceEnabled()) {
                         logger.trace("Resource path option is passed");
                     }
-                    resourcePath = commandLine.getOptionValue(CliConstants.RESOURCE_PATH);
+                    resourcePath = opts.getOption(CliConstants.RESOURCE_PATH).getValue();
                     cartridgeJson = readResource(resourcePath);
                 }
 

http://git-wip-us.apache.org/repos/asf/stratos/blob/c18226c0/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/AddCartridgeGroupCommand.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/AddCartridgeGroupCommand.java b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/AddCartridgeGroupCommand.java
index cba6cf3..ce26680 100644
--- a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/AddCartridgeGroupCommand.java
+++ b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/AddCartridgeGroupCommand.java
@@ -26,8 +26,10 @@ import org.apache.stratos.cli.StratosCommandContext;
 import org.apache.stratos.cli.exception.CommandException;
 import org.apache.stratos.cli.utils.CliConstants;
 import org.apache.stratos.cli.utils.CliUtils;
+import static org.apache.stratos.cli.utils.CliUtils.mergeOptionArrays;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+
 import java.io.IOException;
 
 /**
@@ -68,7 +70,7 @@ public class AddCartridgeGroupCommand implements Command<StratosCommandContext>
     }
 
     @Override
-    public int execute(StratosCommandContext context, String[] args) throws CommandException {
+    public int execute(StratosCommandContext context, String[] args, Option[] already_parsed_opts) throws CommandException {
         if (logger.isDebugEnabled()) {
             logger.debug("Executing command: ", getName());
         }
@@ -81,8 +83,10 @@ public class AddCartridgeGroupCommand implements Command<StratosCommandContext>
         try {
             CommandLineParser parser = new GnuParser();
             CommandLine commandLine = parser.parse(options, args);
-            if (commandLine.hasOption(CliConstants.RESOURCE_PATH)) {
-                String resourcePath = commandLine.getOptionValue(CliConstants.RESOURCE_PATH);
+            //merge newly discovered options with previously discovered ones.
+            Options opts = mergeOptionArrays(already_parsed_opts, commandLine.getOptions());
+            if (opts.hasOption(CliConstants.RESOURCE_PATH)) {
+                String resourcePath = opts.getOption(CliConstants.RESOURCE_PATH).getValue();
                 if (resourcePath == null) {
                     System.out.println("usage: " + getName() + " [-" + CliConstants.RESOURCE_PATH + " " + CliConstants.RESOURCE_PATH_LONG_OPTION + "]");
                     return CliConstants.COMMAND_FAILED;

http://git-wip-us.apache.org/repos/asf/stratos/blob/c18226c0/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/AddDeploymentPolicyCommand.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/AddDeploymentPolicyCommand.java b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/AddDeploymentPolicyCommand.java
index c5a5b92..7070594 100644
--- a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/AddDeploymentPolicyCommand.java
+++ b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/AddDeploymentPolicyCommand.java
@@ -25,8 +25,10 @@ import org.apache.stratos.cli.RestCommandLineService;
 import org.apache.stratos.cli.StratosCommandContext;
 import org.apache.stratos.cli.exception.CommandException;
 import org.apache.stratos.cli.utils.CliConstants;
+import static org.apache.stratos.cli.utils.CliUtils.mergeOptionArrays;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+
 import java.io.BufferedReader;
 import java.io.FileReader;
 import java.io.IOException;
@@ -63,7 +65,7 @@ public class AddDeploymentPolicyCommand implements Command<StratosCommandContext
         return null;
     }
 
-    public int execute(StratosCommandContext context, String[] args) throws CommandException {
+    public int execute(StratosCommandContext context, String[] args, Option[] already_parsed_opts) throws CommandException {
         if (logger.isDebugEnabled()) {
             logger.debug("Executing {} command...", getName());
         }
@@ -77,16 +79,18 @@ public class AddDeploymentPolicyCommand implements Command<StratosCommandContext
 
             try {
                 commandLine = parser.parse(options, args);
+              //merge newly discovered options with previously discovered ones.
+              Options opts = mergeOptionArrays(already_parsed_opts, commandLine.getOptions());
 
                 if (logger.isDebugEnabled()) {
                     logger.debug("Deployment policy deployment");
                 }
 
-                if (commandLine.hasOption(CliConstants.RESOURCE_PATH)) {
+                if (opts.hasOption(CliConstants.RESOURCE_PATH)) {
                     if (logger.isTraceEnabled()) {
                         logger.trace("Resource path option is passed");
                     }
-                    resourcePath = commandLine.getOptionValue(CliConstants.RESOURCE_PATH);
+                    resourcePath = opts.getOption(CliConstants.RESOURCE_PATH).getValue();
                     deploymentPolicyDeployment = readResource(resourcePath);
                 }
 

http://git-wip-us.apache.org/repos/asf/stratos/blob/c18226c0/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/AddDomainMappingsCommand.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/AddDomainMappingsCommand.java b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/AddDomainMappingsCommand.java
index 775d0a3..35f1ec4 100644
--- a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/AddDomainMappingsCommand.java
+++ b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/AddDomainMappingsCommand.java
@@ -26,6 +26,7 @@ import org.apache.stratos.cli.StratosCommandContext;
 import org.apache.stratos.cli.exception.CommandException;
 import org.apache.stratos.cli.utils.CliConstants;
 import org.apache.stratos.cli.utils.CliUtils;
+import static org.apache.stratos.cli.utils.CliUtils.mergeOptionArrays;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -69,7 +70,7 @@ public class AddDomainMappingsCommand implements Command<StratosCommandContext>
     }
 
     @Override
-    public int execute(StratosCommandContext context, String[] args) throws CommandException {
+    public int execute(StratosCommandContext context, String[] args, Option[] already_parsed_opts) throws CommandException {
         if (logger.isDebugEnabled()) {
             logger.debug("Executing command: ", getName());
         }
@@ -82,8 +83,10 @@ public class AddDomainMappingsCommand implements Command<StratosCommandContext>
         try {
             CommandLineParser parser = new GnuParser();
             CommandLine commandLine = parser.parse(options, args);
-            if (commandLine.hasOption(CliConstants.RESOURCE_PATH)) {
-                String resourcePath = commandLine.getOptionValue(CliConstants.RESOURCE_PATH);
+            //merge newly discovered options with previously discovered ones.
+            Options opts = mergeOptionArrays(already_parsed_opts, commandLine.getOptions());
+            if (opts.hasOption(CliConstants.RESOURCE_PATH)) {
+                String resourcePath = opts.getOption(CliConstants.RESOURCE_PATH).getValue();
                 if (resourcePath == null) {
                     System.out.println("usage: " + getName() + " [-" + CliConstants.RESOURCE_PATH + " "
                             + CliConstants.RESOURCE_PATH_LONG_OPTION + "]");

http://git-wip-us.apache.org/repos/asf/stratos/blob/c18226c0/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/AddKubernetesClusterCommand.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/AddKubernetesClusterCommand.java b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/AddKubernetesClusterCommand.java
index 0ca4246..b785bb5 100644
--- a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/AddKubernetesClusterCommand.java
+++ b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/AddKubernetesClusterCommand.java
@@ -26,6 +26,7 @@ import org.apache.stratos.cli.StratosCommandContext;
 import org.apache.stratos.cli.exception.CommandException;
 import org.apache.stratos.cli.utils.CliConstants;
 import org.apache.stratos.cli.utils.CliUtils;
+import static org.apache.stratos.cli.utils.CliUtils.mergeOptionArrays;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -69,7 +70,7 @@ public class AddKubernetesClusterCommand implements Command<StratosCommandContex
     }
 
     @Override
-    public int execute(StratosCommandContext context, String[] args) throws CommandException {
+    public int execute(StratosCommandContext context, String[] args, Option[] already_parsed_opts) throws CommandException {
         if (logger.isDebugEnabled()) {
             logger.debug("Executing command: ", getName());
         }
@@ -82,8 +83,10 @@ public class AddKubernetesClusterCommand implements Command<StratosCommandContex
         try {
             CommandLineParser parser = new GnuParser();
             CommandLine commandLine = parser.parse(options, args);
-            if (commandLine.hasOption(CliConstants.RESOURCE_PATH)) {
-                String resourcePath = commandLine.getOptionValue(CliConstants.RESOURCE_PATH);
+            //merge newly discovered options with previously discovered ones.
+            Options opts = mergeOptionArrays(already_parsed_opts, commandLine.getOptions());
+            if (opts.hasOption(CliConstants.RESOURCE_PATH)) {
+                String resourcePath = opts.getOption(CliConstants.RESOURCE_PATH).getValue();
                 if (resourcePath == null) {
                     System.out.println("usage: " + getName() + " [-" + CliConstants.RESOURCE_PATH + " " + CliConstants.RESOURCE_PATH_LONG_OPTION + "]");
                     return CliConstants.COMMAND_FAILED;

http://git-wip-us.apache.org/repos/asf/stratos/blob/c18226c0/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/AddKubernetesHostCommand.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/AddKubernetesHostCommand.java b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/AddKubernetesHostCommand.java
index 60ca1f8..d0548fd 100644
--- a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/AddKubernetesHostCommand.java
+++ b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/AddKubernetesHostCommand.java
@@ -26,6 +26,7 @@ import org.apache.stratos.cli.StratosCommandContext;
 import org.apache.stratos.cli.exception.CommandException;
 import org.apache.stratos.cli.utils.CliConstants;
 import org.apache.stratos.cli.utils.CliUtils;
+import static org.apache.stratos.cli.utils.CliUtils.mergeOptionArrays;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -73,7 +74,7 @@ public class AddKubernetesHostCommand implements Command<StratosCommandContext>
     }
 
     @Override
-    public int execute(StratosCommandContext context, String[] args) throws CommandException {
+    public int execute(StratosCommandContext context, String[] args, Option[] already_parsed_opts) throws CommandException {
         if (logger.isDebugEnabled()) {
             logger.debug("Executing command: ", getName());
         }
@@ -86,18 +87,20 @@ public class AddKubernetesHostCommand implements Command<StratosCommandContext>
         try {
             CommandLineParser parser = new GnuParser();
             CommandLine commandLine = parser.parse(options, args);
+            //merge newly discovered options with previously discovered ones.
+            Options opts = mergeOptionArrays(already_parsed_opts, commandLine.getOptions());
             
-            if((commandLine.hasOption(CliConstants.RESOURCE_PATH)) && (commandLine.hasOption(CliConstants.CLUSTER_ID_OPTION))) {
+            if((opts.hasOption(CliConstants.RESOURCE_PATH)) && (opts.hasOption(CliConstants.CLUSTER_ID_OPTION))) {
 	               
                 // get cluster id arg value
-            	String clusterId = commandLine.getOptionValue(CliConstants.CLUSTER_ID_OPTION);
+            	String clusterId = opts.getOption(CliConstants.CLUSTER_ID_OPTION).getValue();
                 if (clusterId == null) {
                     context.getStratosApplication().printUsage(getName());
                     return CliConstants.COMMAND_FAILED;
                 }
                 
                 // get resource path arg value
-            	String resourcePath = commandLine.getOptionValue(CliConstants.RESOURCE_PATH);
+            	String resourcePath = opts.getOption(CliConstants.RESOURCE_PATH).getValue();
                 if (resourcePath == null) {
                     context.getStratosApplication().printUsage(getName());
                     return CliConstants.COMMAND_FAILED;

http://git-wip-us.apache.org/repos/asf/stratos/blob/c18226c0/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/AddNetworkPartitionCommand.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/AddNetworkPartitionCommand.java b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/AddNetworkPartitionCommand.java
index 299b241..d93c41e 100644
--- a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/AddNetworkPartitionCommand.java
+++ b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/AddNetworkPartitionCommand.java
@@ -25,6 +25,7 @@ import org.apache.stratos.cli.RestCommandLineService;
 import org.apache.stratos.cli.StratosCommandContext;
 import org.apache.stratos.cli.exception.CommandException;
 import org.apache.stratos.cli.utils.CliConstants;
+import static org.apache.stratos.cli.utils.CliUtils.mergeOptionArrays;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -101,7 +102,7 @@ public class AddNetworkPartitionCommand implements Command<StratosCommandContext
      * @throws org.apache.stratos.cli.exception.CommandException if any errors occur when executing the command
      */
     @Override
-    public int execute(StratosCommandContext context, String[] args) throws CommandException {
+    public int execute(StratosCommandContext context, String[] args, Option[] already_parsed_opts) throws CommandException {
         if (logger.isDebugEnabled()) {
             logger.debug("Executing {} command...", getName());
             logger.debug("Get name" + getName());
@@ -116,16 +117,18 @@ public class AddNetworkPartitionCommand implements Command<StratosCommandContext
 
             try {
                 commandLine = parser.parse(options, args);
+                //merge newly discovered options with previously discovered ones.
+                Options opts = mergeOptionArrays(already_parsed_opts, commandLine.getOptions());
 
                 if (logger.isDebugEnabled()) {
                     logger.debug("Network Partition deployment");
                 }
 
-                if (commandLine.hasOption(CliConstants.RESOURCE_PATH)) {
+                if (opts.hasOption(CliConstants.RESOURCE_PATH)) {
                     if (logger.isTraceEnabled()) {
                         logger.trace("Resource path option is passed");
                     }
-                    resourcePath = commandLine.getOptionValue(CliConstants.RESOURCE_PATH);
+                    
                     partitionJson = readResource(resourcePath);
                 }
 

http://git-wip-us.apache.org/repos/asf/stratos/blob/c18226c0/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/AddTenantCommand.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/AddTenantCommand.java b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/AddTenantCommand.java
index fd9bfd3..9310071 100644
--- a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/AddTenantCommand.java
+++ b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/AddTenantCommand.java
@@ -28,6 +28,7 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.apache.commons.cli.Options;
 import org.apache.commons.cli.Option;
+import static org.apache.stratos.cli.utils.CliUtils.mergeOptionArrays;
 
 public class AddTenantCommand implements Command<StratosCommandContext> {
 
@@ -87,7 +88,7 @@ public class AddTenantCommand implements Command<StratosCommandContext> {
         return null;
     }
 
-    public int execute(StratosCommandContext context, String[] args) throws CommandException {
+    public int execute(StratosCommandContext context, String[] args, Option[] already_parsed_opts) throws CommandException {
         if (logger.isDebugEnabled()) {
             logger.debug("Executing {} command...", getName());
         }
@@ -105,46 +106,48 @@ public class AddTenantCommand implements Command<StratosCommandContext> {
 
             try {
                 commandLine = parser.parse(options, args);
+              //merge newly discovered options with previously discovered ones.
+              Options opts = mergeOptionArrays(already_parsed_opts, commandLine.getOptions());
 
                 if (logger.isDebugEnabled()) {
                     logger.debug("Add tenant");
                 }
 
-                if (commandLine.hasOption(CliConstants.USERNAME_OPTION)) {
+                if (opts.hasOption(CliConstants.USERNAME_OPTION)) {
                     if (logger.isTraceEnabled()) {
                         logger.trace("Username option is passed");
                     }
-                    admin = commandLine.getOptionValue(CliConstants.USERNAME_OPTION);
+                    admin = opts.getOption(CliConstants.USERNAME_OPTION).getValue();
                 }
-                if (commandLine.hasOption(CliConstants.FIRST_NAME_OPTION)) {
+                if (opts.hasOption(CliConstants.FIRST_NAME_OPTION)) {
                     if (logger.isTraceEnabled()) {
                         logger.trace("First name option is passed");
                     }
-                    firstName = commandLine.getOptionValue(CliConstants.FIRST_NAME_OPTION);
+                    firstName = opts.getOption(CliConstants.FIRST_NAME_OPTION).getValue();
                 }
-                if (commandLine.hasOption(CliConstants.LAST_NAME_OPTION)) {
+                if (opts.hasOption(CliConstants.LAST_NAME_OPTION)) {
                     if (logger.isTraceEnabled()) {
                         logger.trace("Last name option is passed");
                     }
-                    lastaName = commandLine.getOptionValue(CliConstants.LAST_NAME_OPTION);
+                    lastaName = opts.getOption(CliConstants.LAST_NAME_OPTION).getValue();
                 }
-                if (commandLine.hasOption(CliConstants.PASSWORD_OPTION)) {
+                if (opts.hasOption(CliConstants.PASSWORD_OPTION)) {
                     if (logger.isTraceEnabled()) {
                         logger.trace("Password option is passed");
                     }
-                    password = commandLine.getOptionValue(CliConstants.PASSWORD_OPTION);
+                    password = opts.getOption(CliConstants.PASSWORD_OPTION).getValue();
                 }
-                if (commandLine.hasOption(CliConstants.DOMAIN_NAME_OPTION)) {
+                if (opts.hasOption(CliConstants.DOMAIN_NAME_OPTION)) {
                     if (logger.isTraceEnabled()) {
                         logger.trace("Domain name option is passed");
                     }
-                    domain = commandLine.getOptionValue(CliConstants.DOMAIN_NAME_OPTION);
+                    domain = opts.getOption(CliConstants.DOMAIN_NAME_OPTION).getValue();
                 }
-                if (commandLine.hasOption(CliConstants.EMAIL_OPTION)) {
+                if (opts.hasOption(CliConstants.EMAIL_OPTION)) {
                     if (logger.isTraceEnabled()) {
                         logger.trace("Email option is passed");
                     }
-                    email = commandLine.getOptionValue(CliConstants.EMAIL_OPTION);
+                    email = opts.getOption(CliConstants.EMAIL_OPTION).getValue();
 
                 }
 

http://git-wip-us.apache.org/repos/asf/stratos/blob/c18226c0/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/AddUserCommand.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/AddUserCommand.java b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/AddUserCommand.java
index e3ebb07..9e1689e 100644
--- a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/AddUserCommand.java
+++ b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/AddUserCommand.java
@@ -29,6 +29,7 @@ import org.apache.stratos.cli.RestCommandLineService;
 import org.apache.stratos.cli.StratosCommandContext;
 import org.apache.stratos.cli.exception.CommandException;
 import org.apache.stratos.cli.utils.CliConstants;
+import static org.apache.stratos.cli.utils.CliUtils.mergeOptionArrays;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -95,7 +96,7 @@ public class AddUserCommand implements Command<StratosCommandContext> {
         return null;
     }
 
-    public int execute(StratosCommandContext context, String[] args) throws CommandException {
+    public int execute(StratosCommandContext context, String[] args, Option[] already_parsed_opts) throws CommandException {
         if (logger.isDebugEnabled()) {
             logger.debug("Executing {} command...", getName());
         }
@@ -114,52 +115,54 @@ public class AddUserCommand implements Command<StratosCommandContext> {
 
             try {
                 commandLine = parser.parse(options, args);
+                //merge newly discovered options with previously discovered ones.
+                Options opts = mergeOptionArrays(already_parsed_opts, commandLine.getOptions());
 
                 if (logger.isDebugEnabled()) {
                     logger.debug("Add user");
                 }
 
-                if (commandLine.hasOption(CliConstants.USERNAME_OPTION)) {
+                if (opts.hasOption(CliConstants.USERNAME_OPTION)) {
                     if (logger.isTraceEnabled()) {
                         logger.trace("Username option is passed");
                     }
-                    userName = commandLine.getOptionValue(CliConstants.USERNAME_OPTION);
+                    userName = opts.getOption(CliConstants.USERNAME_OPTION).getValue();
                 }
-                if (commandLine.hasOption(CliConstants.PASSWORD_OPTION)) {
+                if (opts.hasOption(CliConstants.PASSWORD_OPTION)) {
                     if (logger.isTraceEnabled()) {
                         logger.trace("Credential option is passed");
                     }
-                    credential = commandLine.getOptionValue(CliConstants.PASSWORD_OPTION);
+                    credential = opts.getOption(CliConstants.PASSWORD_OPTION).getValue();
                 }
-                if (commandLine.hasOption(CliConstants.ROLE_NAME_OPTION)) {
+                if (opts.hasOption(CliConstants.ROLE_NAME_OPTION)) {
                     if (logger.isTraceEnabled()) {
                         logger.trace("Role option is passed");
                     }
-                    role = commandLine.getOptionValue(CliConstants.ROLE_NAME_OPTION);
+                    role = opts.getOption(CliConstants.ROLE_NAME_OPTION).getValue();
                 }
-                if (commandLine.hasOption(CliConstants.FIRST_NAME_OPTION)) {
+                if (opts.hasOption(CliConstants.FIRST_NAME_OPTION)) {
                     if (logger.isTraceEnabled()) {
                         logger.trace("First name option is passed");
                     }
-                    firstName = commandLine.getOptionValue(CliConstants.FIRST_NAME_OPTION);
+                    firstName = opts.getOption(CliConstants.FIRST_NAME_OPTION).getValue();;
                 }
-                if (commandLine.hasOption(CliConstants.LAST_NAME_OPTION)) {
+                if (opts.hasOption(CliConstants.LAST_NAME_OPTION)) {
                     if (logger.isTraceEnabled()) {
                         logger.trace("Last name option is passed");
                     }
-                    lastName = commandLine.getOptionValue(CliConstants.LAST_NAME_OPTION);
+                    lastName = opts.getOption(CliConstants.LAST_NAME_OPTION).getValue();
                 }
-                if (commandLine.hasOption(CliConstants.EMAIL_OPTION)) {
+                if (opts.hasOption(CliConstants.EMAIL_OPTION)) {
                     if (logger.isTraceEnabled()) {
                         logger.trace("Email option is passed");
                     }
-                    email = commandLine.getOptionValue(CliConstants.EMAIL_OPTION);
+                    email = opts.getOption(CliConstants.EMAIL_OPTION).getValue();
                 }
-                if (commandLine.hasOption(CliConstants.PROFILE_NAME_OPTION)) {
+                if (opts.hasOption(CliConstants.PROFILE_NAME_OPTION)) {
                     if (logger.isTraceEnabled()) {
                         logger.trace("Profile name option is passed");
                     }
-                    profileName = commandLine.getOptionValue(CliConstants.PROFILE_NAME_OPTION);
+                    profileName = opts.getOption(CliConstants.PROFILE_NAME_OPTION).getValue();
                 }
 
 

http://git-wip-us.apache.org/repos/asf/stratos/blob/c18226c0/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/CreateApplicationCommand.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/CreateApplicationCommand.java b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/CreateApplicationCommand.java
index 1cbb7fa..0a07ee2 100644
--- a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/CreateApplicationCommand.java
+++ b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/CreateApplicationCommand.java
@@ -24,8 +24,10 @@ import org.apache.stratos.cli.RestCommandLineService;
 import org.apache.stratos.cli.StratosCommandContext;
 import org.apache.stratos.cli.exception.CommandException;
 import org.apache.stratos.cli.utils.CliConstants;
+import static org.apache.stratos.cli.utils.CliUtils.mergeOptionArrays;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+
 import java.io.BufferedReader;
 import java.io.FileReader;
 import java.io.IOException;
@@ -63,7 +65,7 @@ public class CreateApplicationCommand implements Command<StratosCommandContext>
         return null;
     }
 
-    public int execute(StratosCommandContext context, String[] args) throws CommandException {
+    public int execute(StratosCommandContext context, String[] args, Option[] already_parsed_opts) throws CommandException {
         if (logger.isDebugEnabled()) {
             logger.debug("Executing {} command...", getName());
         }
@@ -77,16 +79,18 @@ public class CreateApplicationCommand implements Command<StratosCommandContext>
 
             try {
                 commandLine = parser.parse(options, args);
+                //merge newly discovered options with previously discovered ones.
+                Options opts = mergeOptionArrays(already_parsed_opts, commandLine.getOptions());
 
                 if (logger.isDebugEnabled()) {
                     logger.debug("Creating application...");
                 }
 
-                if (commandLine.hasOption(CliConstants.RESOURCE_PATH)) {
+                if (opts.hasOption(CliConstants.RESOURCE_PATH)) {
                     if (logger.isTraceEnabled()) {
                         logger.trace("Resource path option is passed");
                     }
-                    resourcePath = commandLine.getOptionValue(CliConstants.RESOURCE_PATH);
+                    resourcePath = opts.getOption(CliConstants.RESOURCE_PATH).getValue();
                     applicationDefinition = readResource(resourcePath);
                 }
 

http://git-wip-us.apache.org/repos/asf/stratos/blob/c18226c0/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DeactivateTenantCommand.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DeactivateTenantCommand.java b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DeactivateTenantCommand.java
index ce4cf51..6ebb3ca 100644
--- a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DeactivateTenantCommand.java
+++ b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DeactivateTenantCommand.java
@@ -18,6 +18,7 @@
  */
 package org.apache.stratos.cli.commands;
 
+import org.apache.commons.cli.Option;
 import org.apache.commons.cli.Options;
 import org.apache.stratos.cli.Command;
 import org.apache.stratos.cli.RestCommandLineService;
@@ -51,7 +52,7 @@ public class DeactivateTenantCommand implements Command<StratosCommandContext> {
     }
 
     @Override
-    public int execute(StratosCommandContext context, String[] args) throws CommandException {
+    public int execute(StratosCommandContext context, String[] args, Option[] already_parsed_opts) throws CommandException {
         if (logger.isDebugEnabled()) {
 			logger.debug("Executing {} command...", getName());
 		}

http://git-wip-us.apache.org/repos/asf/stratos/blob/c18226c0/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DeleteApplicationCommand.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DeleteApplicationCommand.java b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DeleteApplicationCommand.java
index 9286ed1..ee27f92 100644
--- a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DeleteApplicationCommand.java
+++ b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DeleteApplicationCommand.java
@@ -18,6 +18,7 @@
  */
 package org.apache.stratos.cli.commands;
 
+import org.apache.commons.cli.Option;
 import org.apache.commons.cli.Options;
 import org.apache.stratos.cli.Command;
 import org.apache.stratos.cli.RestCommandLineService;
@@ -51,7 +52,7 @@ public class DeleteApplicationCommand implements Command<StratosCommandContext>
     }
 
     @Override
-    public int execute(StratosCommandContext context, String[] args) throws CommandException {
+    public int execute(StratosCommandContext context, String[] args, Option[] already_parsed_opts) throws CommandException {
         if (logger.isDebugEnabled()) {
 			logger.debug("Executing {} command...", getName());
 		}

http://git-wip-us.apache.org/repos/asf/stratos/blob/c18226c0/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DeleteApplicationSignupCommand.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DeleteApplicationSignupCommand.java b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DeleteApplicationSignupCommand.java
index dfced5b..f8c1c0f 100644
--- a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DeleteApplicationSignupCommand.java
+++ b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DeleteApplicationSignupCommand.java
@@ -18,6 +18,7 @@
  */
 package org.apache.stratos.cli.commands;
 
+import org.apache.commons.cli.Option;
 import org.apache.commons.cli.Options;
 import org.apache.stratos.cli.Command;
 import org.apache.stratos.cli.RestCommandLineService;
@@ -51,7 +52,7 @@ public class DeleteApplicationSignupCommand implements Command<StratosCommandCon
     }
 
     @Override
-    public int execute(StratosCommandContext context, String[] args) throws CommandException {
+    public int execute(StratosCommandContext context, String[] args, Option[] already_parsed_opts) throws CommandException {
         if (logger.isDebugEnabled()) {
 			logger.debug("Executing {} command...", getName());
 		}

http://git-wip-us.apache.org/repos/asf/stratos/blob/c18226c0/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DeleteAutoScalingPolicyCommand.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DeleteAutoScalingPolicyCommand.java b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DeleteAutoScalingPolicyCommand.java
index 5830b46..84d96c3 100644
--- a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DeleteAutoScalingPolicyCommand.java
+++ b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DeleteAutoScalingPolicyCommand.java
@@ -18,6 +18,7 @@
  */
 package org.apache.stratos.cli.commands;
 
+import org.apache.commons.cli.Option;
 import org.apache.commons.cli.Options;
 import org.apache.stratos.cli.Command;
 import org.apache.stratos.cli.RestCommandLineService;
@@ -51,7 +52,7 @@ public class DeleteAutoScalingPolicyCommand implements Command<StratosCommandCon
     }
 
     @Override
-    public int execute(StratosCommandContext context, String[] args) throws CommandException {
+    public int execute(StratosCommandContext context, String[] args, Option[] already_parsed_opts) throws CommandException {
         if (logger.isDebugEnabled()) {
 			logger.debug("Executing {} command...", getName());
 		}

http://git-wip-us.apache.org/repos/asf/stratos/blob/c18226c0/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DeleteTenantCommand.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DeleteTenantCommand.java b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DeleteTenantCommand.java
index 4ff72f4..1f82fa3 100644
--- a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DeleteTenantCommand.java
+++ b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DeleteTenantCommand.java
@@ -18,6 +18,7 @@
  */
 package org.apache.stratos.cli.commands;
 
+import org.apache.commons.cli.Option;
 import org.apache.commons.cli.Options;
 import org.apache.stratos.cli.Command;
 import org.apache.stratos.cli.RestCommandLineService;
@@ -51,7 +52,7 @@ public class DeleteTenantCommand implements Command<StratosCommandContext> {
     }
 
     @Override
-    public int execute(StratosCommandContext context, String[] args) throws CommandException {
+    public int execute(StratosCommandContext context, String[] args, Option[] already_parsed_opts) throws CommandException {
         if (logger.isDebugEnabled()) {
 			logger.debug("Executing {} command...", getName());
 		}

http://git-wip-us.apache.org/repos/asf/stratos/blob/c18226c0/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DeleteUserCommand.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DeleteUserCommand.java b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DeleteUserCommand.java
index f884665..82f37e0 100644
--- a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DeleteUserCommand.java
+++ b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DeleteUserCommand.java
@@ -18,6 +18,7 @@
  */
 package org.apache.stratos.cli.commands;
 
+import org.apache.commons.cli.Option;
 import org.apache.commons.cli.Options;
 import org.apache.stratos.cli.Command;
 import org.apache.stratos.cli.RestCommandLineService;
@@ -51,7 +52,7 @@ public class DeleteUserCommand implements Command<StratosCommandContext> {
     }
 
     @Override
-    public int execute(StratosCommandContext context, String[] args) throws CommandException {
+    public int execute(StratosCommandContext context, String[] args, Option[] already_parsed_opts) throws CommandException {
         if (logger.isDebugEnabled()) {
 			logger.debug("Executing {} command...", getName());
 		}

http://git-wip-us.apache.org/repos/asf/stratos/blob/c18226c0/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DeployApplicationCommand.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DeployApplicationCommand.java b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DeployApplicationCommand.java
index 5fa6b86..dbde8f9 100644
--- a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DeployApplicationCommand.java
+++ b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DeployApplicationCommand.java
@@ -25,6 +25,7 @@ import org.apache.stratos.cli.RestCommandLineService;
 import org.apache.stratos.cli.StratosCommandContext;
 import org.apache.stratos.cli.exception.CommandException;
 import org.apache.stratos.cli.utils.CliConstants;
+import static org.apache.stratos.cli.utils.CliUtils.mergeOptionArrays;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -78,7 +79,7 @@ public class DeployApplicationCommand implements Command<StratosCommandContext>
     }
 
     @Override
-    public int execute(StratosCommandContext context, String[] args) throws CommandException {
+    public int execute(StratosCommandContext context, String[] args, Option[] already_parsed_opts) throws CommandException {
         if (logger.isDebugEnabled()) {
             logger.debug("Executing {} command...", getName());
         }
@@ -93,21 +94,24 @@ public class DeployApplicationCommand implements Command<StratosCommandContext>
             try {
                 commandLine = parser.parse(options, args);
 
+                //merge newly discovered options with previously discovered ones.
+                Options opts = mergeOptionArrays(already_parsed_opts, commandLine.getOptions());
+
                 if (logger.isDebugEnabled()) {
                     logger.debug("Deploy application");
                 }
 
-                if (commandLine.hasOption(CliConstants.APPLICATION_ID_OPTION)) {
+                if (opts.hasOption(CliConstants.APPLICATION_ID_OPTION)) {
                     if (logger.isTraceEnabled()) {
                         logger.trace("Application Id option is passed");
                     }
-                    applicationId = commandLine.getOptionValue(CliConstants.APPLICATION_ID_OPTION);
+                    applicationId = opts.getOption(CliConstants.APPLICATION_ID_OPTION).getValue();
                 }
-                if (commandLine.hasOption(CliConstants.APPLICATION_POLICY_ID_OPTION)) {
+                if (opts.hasOption(CliConstants.APPLICATION_POLICY_ID_OPTION)) {
                     if (logger.isTraceEnabled()) {
                         logger.trace("Application policy Id option is passed");
                     }
-                    applicationPolicyId = commandLine.getOptionValue(CliConstants.APPLICATION_POLICY_ID_OPTION);
+                    applicationPolicyId = opts.getOption(CliConstants.APPLICATION_POLICY_ID_OPTION).getValue();
                 }
 
                 if (applicationId == null || applicationPolicyId == null) {

http://git-wip-us.apache.org/repos/asf/stratos/blob/c18226c0/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DescribeApplicationCommand.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DescribeApplicationCommand.java b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DescribeApplicationCommand.java
index dbac1e8..a6f0bec 100644
--- a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DescribeApplicationCommand.java
+++ b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DescribeApplicationCommand.java
@@ -19,6 +19,7 @@
 
 package org.apache.stratos.cli.commands;
 
+import org.apache.commons.cli.Option;
 import org.apache.commons.cli.Options;
 import org.apache.stratos.cli.Command;
 import org.apache.stratos.cli.RestCommandLineService;
@@ -47,7 +48,7 @@ public class DescribeApplicationCommand implements Command<StratosCommandContext
 		return "[application-id]";
 	}
 
-	public int execute(StratosCommandContext context, String[] args) throws CommandException {
+	public int execute(StratosCommandContext context, String[] args, Option[] already_parsed_opts) throws CommandException {
 		if (logger.isDebugEnabled()) {
 			logger.debug("Executing command: ", getName());
 		}

http://git-wip-us.apache.org/repos/asf/stratos/blob/c18226c0/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DescribeApplicationRuntimeCommand.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DescribeApplicationRuntimeCommand.java b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DescribeApplicationRuntimeCommand.java
index 4405518..45bc3a0 100644
--- a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DescribeApplicationRuntimeCommand.java
+++ b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DescribeApplicationRuntimeCommand.java
@@ -19,6 +19,7 @@
 
 package org.apache.stratos.cli.commands;
 
+import org.apache.commons.cli.Option;
 import org.apache.commons.cli.Options;
 import org.apache.stratos.cli.Command;
 import org.apache.stratos.cli.RestCommandLineService;
@@ -47,7 +48,7 @@ public class DescribeApplicationRuntimeCommand implements Command<StratosCommand
         return "[application-id]";
     }
 
-    public int execute(StratosCommandContext context, String[] args) throws CommandException {
+    public int execute(StratosCommandContext context, String[] args, Option[] already_parsed_opts) throws CommandException {
         if (logger.isDebugEnabled()) {
             logger.debug("Executing command: ", getName());
         }

http://git-wip-us.apache.org/repos/asf/stratos/blob/c18226c0/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DescribeApplicationSignupCommand.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DescribeApplicationSignupCommand.java b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DescribeApplicationSignupCommand.java
index a9e4c36..3983be2 100644
--- a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DescribeApplicationSignupCommand.java
+++ b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DescribeApplicationSignupCommand.java
@@ -19,6 +19,7 @@
 
 package org.apache.stratos.cli.commands;
 
+import org.apache.commons.cli.Option;
 import org.apache.commons.cli.Options;
 import org.apache.stratos.cli.Command;
 import org.apache.stratos.cli.RestCommandLineService;
@@ -47,7 +48,7 @@ public class DescribeApplicationSignupCommand implements Command<StratosCommandC
 		return "[application-id]";
 	}
 
-	public int execute(StratosCommandContext context, String[] args) throws CommandException {
+	public int execute(StratosCommandContext context, String[] args, Option[] already_parsed_opts) throws CommandException {
 		if (logger.isDebugEnabled()) {
 			logger.debug("Executing command: ", getName());
 		}

http://git-wip-us.apache.org/repos/asf/stratos/blob/c18226c0/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DescribeAutoScalingPolicyCommand.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DescribeAutoScalingPolicyCommand.java b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DescribeAutoScalingPolicyCommand.java
index a056141..8773b33 100644
--- a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DescribeAutoScalingPolicyCommand.java
+++ b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DescribeAutoScalingPolicyCommand.java
@@ -51,7 +51,7 @@ public class DescribeAutoScalingPolicyCommand implements Command<StratosCommandC
     }
 
     @Override
-    public int execute(StratosCommandContext context, String[] args) throws CommandException {
+    public int execute(StratosCommandContext context, String[] args, Option[] already_parsed_opts) throws CommandException {
         if (logger.isDebugEnabled()) {
 			logger.debug("Executing {} command...", getName());
 		}

http://git-wip-us.apache.org/repos/asf/stratos/blob/c18226c0/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DescribeCartridgeCommand.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DescribeCartridgeCommand.java b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DescribeCartridgeCommand.java
index f3430fc..fcba2e7 100644
--- a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DescribeCartridgeCommand.java
+++ b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DescribeCartridgeCommand.java
@@ -51,7 +51,7 @@ public class DescribeCartridgeCommand implements Command<StratosCommandContext>
     }
 
     @Override
-    public int execute(StratosCommandContext context, String[] args) throws CommandException {
+    public int execute(StratosCommandContext context, String[] args, Option[] already_parsed_opts) throws CommandException {
         if (logger.isDebugEnabled()) {
 			logger.debug("Executing {} command...", getName());
 		}

http://git-wip-us.apache.org/repos/asf/stratos/blob/c18226c0/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DescribeCartridgeGroupCommand.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DescribeCartridgeGroupCommand.java b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DescribeCartridgeGroupCommand.java
index 193c458..b22649c 100644
--- a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DescribeCartridgeGroupCommand.java
+++ b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DescribeCartridgeGroupCommand.java
@@ -19,6 +19,7 @@
 
 package org.apache.stratos.cli.commands;
 
+import org.apache.commons.cli.Option;
 import org.apache.commons.cli.Options;
 import org.apache.stratos.cli.Command;
 import org.apache.stratos.cli.RestCommandLineService;
@@ -47,7 +48,7 @@ public class DescribeCartridgeGroupCommand implements Command<StratosCommandCont
 		return "[group-name]";
 	}
 
-	public int execute(StratosCommandContext context, String[] args) throws CommandException {
+	public int execute(StratosCommandContext context, String[] args, Option[] already_parsed_opts) throws CommandException {
 		if (logger.isDebugEnabled()) {
 			logger.debug("Executing command: ", getName());
 		}

http://git-wip-us.apache.org/repos/asf/stratos/blob/c18226c0/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DescribeDeploymentPolicyCommand.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DescribeDeploymentPolicyCommand.java b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DescribeDeploymentPolicyCommand.java
index b092d1f..eccb05a 100644
--- a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DescribeDeploymentPolicyCommand.java
+++ b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DescribeDeploymentPolicyCommand.java
@@ -51,7 +51,7 @@ public class DescribeDeploymentPolicyCommand implements Command<StratosCommandCo
     }
 
     @Override
-    public int execute(StratosCommandContext context, String[] args) throws CommandException {
+    public int execute(StratosCommandContext context, String[] args, Option[] already_parsed_opts) throws CommandException {
         if (logger.isDebugEnabled()) {
 			logger.debug("Executing {} command...", getName());
 		}

http://git-wip-us.apache.org/repos/asf/stratos/blob/c18226c0/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DescribeKubernetesClusterCommand.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DescribeKubernetesClusterCommand.java b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DescribeKubernetesClusterCommand.java
index 8ac4923..70de471 100644
--- a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DescribeKubernetesClusterCommand.java
+++ b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DescribeKubernetesClusterCommand.java
@@ -19,6 +19,7 @@
 
 package org.apache.stratos.cli.commands;
 
+import org.apache.commons.cli.Option;
 import org.apache.commons.cli.Options;
 import org.apache.stratos.cli.Command;
 import org.apache.stratos.cli.RestCommandLineService;
@@ -52,7 +53,7 @@ public class DescribeKubernetesClusterCommand implements Command<StratosCommandC
     }
 
     @Override
-    public int execute(StratosCommandContext context, String[] args) throws CommandException {
+    public int execute(StratosCommandContext context, String[] args, Option[] already_parsed_opts) throws CommandException {
         if (logger.isDebugEnabled()) {
             logger.debug("Executing {} command...", getName());
         }

http://git-wip-us.apache.org/repos/asf/stratos/blob/c18226c0/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DescribeKubernetesMasterCommand.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DescribeKubernetesMasterCommand.java b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DescribeKubernetesMasterCommand.java
index 9b423ea..eb5d878 100644
--- a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DescribeKubernetesMasterCommand.java
+++ b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DescribeKubernetesMasterCommand.java
@@ -19,6 +19,7 @@
 
 package org.apache.stratos.cli.commands;
 
+import org.apache.commons.cli.Option;
 import org.apache.commons.cli.Options;
 import org.apache.stratos.cli.Command;
 import org.apache.stratos.cli.RestCommandLineService;
@@ -53,7 +54,7 @@ public class DescribeKubernetesMasterCommand implements Command<StratosCommandCo
     }
 
     @Override
-    public int execute(StratosCommandContext context, String[] args) throws CommandException {
+    public int execute(StratosCommandContext context, String[] args, Option[] already_parsed_opts) throws CommandException {
         if (logger.isDebugEnabled()) {
             logger.debug("Executing {} command...", getName());
         }

http://git-wip-us.apache.org/repos/asf/stratos/blob/c18226c0/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DescribeNetworkPartitionCommand.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DescribeNetworkPartitionCommand.java b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DescribeNetworkPartitionCommand.java
index f3cec36..5e9c5af 100644
--- a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DescribeNetworkPartitionCommand.java
+++ b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DescribeNetworkPartitionCommand.java
@@ -19,6 +19,7 @@
 
 package org.apache.stratos.cli.commands;
 
+import org.apache.commons.cli.Option;
 import org.apache.commons.cli.Options;
 import org.apache.stratos.cli.Command;
 import org.apache.stratos.cli.RestCommandLineService;
@@ -52,7 +53,7 @@ public class DescribeNetworkPartitionCommand implements Command<StratosCommandCo
     }
 
     @Override
-    public int execute(StratosCommandContext context, String[] args) throws CommandException {
+    public int execute(StratosCommandContext context, String[] args, Option[] already_parsed_opts) throws CommandException {
         if (logger.isDebugEnabled()) {
             logger.debug("Executing {} command...", getName());
         }

http://git-wip-us.apache.org/repos/asf/stratos/blob/c18226c0/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DescribeTenantCommand.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DescribeTenantCommand.java b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DescribeTenantCommand.java
index c4a451e..8add681 100644
--- a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DescribeTenantCommand.java
+++ b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DescribeTenantCommand.java
@@ -19,6 +19,7 @@
 
 package org.apache.stratos.cli.commands;
 
+import org.apache.commons.cli.Option;
 import org.apache.commons.cli.Options;
 import org.apache.stratos.cli.Command;
 import org.apache.stratos.cli.RestCommandLineService;
@@ -79,7 +80,7 @@ public class DescribeTenantCommand implements Command<StratosCommandContext> {
      * @throws org.apache.stratos.cli.exception.CommandException if any errors occur when executing the command
      */
     @Override
-    public int execute(StratosCommandContext context, String[] args) throws CommandException {
+    public int execute(StratosCommandContext context, String[] args, Option[] already_parsed_opts) throws CommandException {
         if (logger.isDebugEnabled()) {
             logger.debug("Executing {} command...", getName());
         }

http://git-wip-us.apache.org/repos/asf/stratos/blob/c18226c0/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/ExitCommand.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/ExitCommand.java b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/ExitCommand.java
index 4605113..5f8b407 100644
--- a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/ExitCommand.java
+++ b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/ExitCommand.java
@@ -18,8 +18,9 @@
  */
 package org.apache.stratos.cli.commands;
 
+import org.apache.commons.cli.Option;
 import org.apache.commons.cli.Options;
-    import org.slf4j.Logger;
+import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.apache.stratos.cli.Command;
 import org.apache.stratos.cli.StratosCommandContext;
@@ -49,7 +50,7 @@ public class ExitCommand implements Command<StratosCommandContext> {
 	}
 
 	@Override
-	public int execute(StratosCommandContext context, String[] args) throws CommandException {
+	public int execute(StratosCommandContext context, String[] args, Option[] already_parsed_opts) throws CommandException {
 		// Nothing to execute here. This is a special command.
 		if (logger.isDebugEnabled()) {
 			logger.debug("Executing {} command...", getName());

http://git-wip-us.apache.org/repos/asf/stratos/blob/c18226c0/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/HelpCommand.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/HelpCommand.java b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/HelpCommand.java
index 2257f11..8c1ed13 100644
--- a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/HelpCommand.java
+++ b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/HelpCommand.java
@@ -18,6 +18,7 @@
  */
 package org.apache.stratos.cli.commands;
 
+import org.apache.commons.cli.Option;
 import org.apache.commons.cli.Options;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -49,7 +50,7 @@ public class HelpCommand implements Command<StratosCommandContext> {
 	}
 
 	@Override
-	public int execute(StratosCommandContext context, String[] args) throws CommandException {
+	public int execute(StratosCommandContext context, String[] args, Option[] already_parsed_opts) throws CommandException {
 		if (logger.isDebugEnabled()) {
 			logger.debug("Executing {} command...", getName());
 		}

http://git-wip-us.apache.org/repos/asf/stratos/blob/c18226c0/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/InfoCommand.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/InfoCommand.java b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/InfoCommand.java
index 804d7e0..962413f 100644
--- a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/InfoCommand.java
+++ b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/InfoCommand.java
@@ -18,6 +18,7 @@
  */
 package org.apache.stratos.cli.commands;
 
+import org.apache.commons.cli.Option;
 import org.apache.commons.cli.Options;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -50,7 +51,7 @@ public class InfoCommand implements Command<StratosCommandContext> {
 	}
 
 	@Override
-	public int execute(StratosCommandContext context, String[] args) throws CommandException {
+	public int execute(StratosCommandContext context, String[] args, Option[] already_parsed_opts) throws CommandException {
 		if (logger.isDebugEnabled()) {
 			logger.debug("Executing {} command...", getName());
 		}

http://git-wip-us.apache.org/repos/asf/stratos/blob/c18226c0/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/ListApplicationsCommand.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/ListApplicationsCommand.java b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/ListApplicationsCommand.java
index a59d131..a80d67a 100644
--- a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/ListApplicationsCommand.java
+++ b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/ListApplicationsCommand.java
@@ -18,6 +18,7 @@
  */
 package org.apache.stratos.cli.commands;
 
+import org.apache.commons.cli.Option;
 import org.apache.commons.cli.Options;
 import org.apache.stratos.cli.Command;
 import org.apache.stratos.cli.RestCommandLineService;
@@ -46,7 +47,7 @@ public class ListApplicationsCommand implements Command<StratosCommandContext> {
         return null;
     }
 
-    public int execute(StratosCommandContext context, String[] args) throws CommandException {
+    public int execute(StratosCommandContext context, String[] args, Option[] already_parsed_opts) throws CommandException {
         if (logger.isDebugEnabled()) {
             logger.debug("Executing {} command...", getName());
         }

http://git-wip-us.apache.org/repos/asf/stratos/blob/c18226c0/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/ListAutoscalePolicyCommand.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/ListAutoscalePolicyCommand.java b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/ListAutoscalePolicyCommand.java
index aa5a8cb..e8a8060 100644
--- a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/ListAutoscalePolicyCommand.java
+++ b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/ListAutoscalePolicyCommand.java
@@ -18,6 +18,7 @@
  */
 package org.apache.stratos.cli.commands;
 
+import org.apache.commons.cli.Option;
 import org.apache.commons.cli.Options;
 import org.apache.stratos.cli.Command;
 import org.apache.stratos.cli.RestCommandLineService;
@@ -46,7 +47,7 @@ public class ListAutoscalePolicyCommand implements Command<StratosCommandContext
         return null;
     }
 
-    public int execute(StratosCommandContext context, String[] args) throws CommandException {
+    public int execute(StratosCommandContext context, String[] args, Option[] already_parsed_opts) throws CommandException {
         if (logger.isDebugEnabled()) {
             logger.debug("Executing {} command...", getName());
         }

http://git-wip-us.apache.org/repos/asf/stratos/blob/c18226c0/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/ListCartridgeGroupsCommand.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/ListCartridgeGroupsCommand.java b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/ListCartridgeGroupsCommand.java
index 6a2a540..a80364a 100644
--- a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/ListCartridgeGroupsCommand.java
+++ b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/ListCartridgeGroupsCommand.java
@@ -18,6 +18,7 @@
  */
 package org.apache.stratos.cli.commands;
 
+import org.apache.commons.cli.Option;
 import org.apache.commons.cli.Options;
 import org.apache.stratos.cli.Command;
 import org.apache.stratos.cli.RestCommandLineService;
@@ -46,7 +47,7 @@ public class ListCartridgeGroupsCommand implements Command<StratosCommandContext
 		return null;
 	}
 
-	public int execute(StratosCommandContext context, String[] args) throws CommandException {
+	public int execute(StratosCommandContext context, String[] args, Option[] already_parsed_opts) throws CommandException {
 		if (logger.isDebugEnabled()) {
 			logger.debug("Executing {} command...", getName());
 		}

http://git-wip-us.apache.org/repos/asf/stratos/blob/c18226c0/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/ListCartridgesByFilterCommand.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/ListCartridgesByFilterCommand.java b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/ListCartridgesByFilterCommand.java
index 1fcf70f..3a9497d 100644
--- a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/ListCartridgesByFilterCommand.java
+++ b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/ListCartridgesByFilterCommand.java
@@ -6,6 +6,7 @@ import org.apache.stratos.cli.RestCommandLineService;
 import org.apache.stratos.cli.StratosCommandContext;
 import org.apache.stratos.cli.exception.CommandException;
 import org.apache.stratos.cli.utils.CliConstants;
+import static org.apache.stratos.cli.utils.CliUtils.mergeOptionArrays;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -45,7 +46,7 @@ public class ListCartridgesByFilterCommand implements Command<StratosCommandCont
         return null;
     }
 
-    public int execute(StratosCommandContext context, String[] args) throws CommandException {
+    public int execute(StratosCommandContext context, String[] args, Option[] already_parsed_opts) throws CommandException {
         if (logger.isDebugEnabled()) {
             logger.debug("Executing {} command...", getName());
         }
@@ -58,16 +59,18 @@ public class ListCartridgesByFilterCommand implements Command<StratosCommandCont
 
             try {
                 commandLine = parser.parse(options, args);
+                //merge newly discovered options with previously discovered ones.
+                Options opts = mergeOptionArrays(already_parsed_opts, commandLine.getOptions());
 
                 if (logger.isDebugEnabled()) {
                     logger.debug("List cartridges by a filter");
                 }
 
-                if (commandLine.hasOption(CliConstants.CARTRIDGE_FILTER_OPTION)) {
+                if (opts.hasOption(CliConstants.CARTRIDGE_FILTER_OPTION)) {
                     if (logger.isTraceEnabled()) {
                         logger.trace("Filter option is passed");
                     }
-                    filter = commandLine.getOptionValue(CliConstants.CARTRIDGE_FILTER_OPTION);
+                    filter = opts.getOption(CliConstants.CARTRIDGE_FILTER_OPTION).getValue();
                 }
 
                 if (filter == null) {

http://git-wip-us.apache.org/repos/asf/stratos/blob/c18226c0/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/ListCartridgesCommand.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/ListCartridgesCommand.java b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/ListCartridgesCommand.java
index 1014003..f998d89 100644
--- a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/ListCartridgesCommand.java
+++ b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/ListCartridgesCommand.java
@@ -18,6 +18,7 @@
  */
 package org.apache.stratos.cli.commands;
 
+import org.apache.commons.cli.Option;
 import org.apache.commons.cli.Options;
 import org.apache.stratos.cli.RestCommandLineService;
 import org.slf4j.Logger;
@@ -46,7 +47,7 @@ public class ListCartridgesCommand implements Command<StratosCommandContext> {
 		return null;
 	}
 
-	public int execute(StratosCommandContext context, String[] args) throws CommandException {
+	public int execute(StratosCommandContext context, String[] args, Option[] already_parsed_opts) throws CommandException {
 		if (logger.isDebugEnabled()) {
 			logger.debug("Executing {} command...", getName());
 		}

http://git-wip-us.apache.org/repos/asf/stratos/blob/c18226c0/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/ListDeploymentPoliciesCommand.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/ListDeploymentPoliciesCommand.java b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/ListDeploymentPoliciesCommand.java
index a9cb6fb..3f37b06 100644
--- a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/ListDeploymentPoliciesCommand.java
+++ b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/ListDeploymentPoliciesCommand.java
@@ -19,6 +19,7 @@
 
 package org.apache.stratos.cli.commands;
 
+import org.apache.commons.cli.Option;
 import org.apache.commons.cli.Options;
 import org.apache.stratos.cli.Command;
 import org.apache.stratos.cli.RestCommandLineService;
@@ -46,7 +47,7 @@ public class ListDeploymentPoliciesCommand implements Command<StratosCommandCont
         return null;
     }
 
-    public int execute(StratosCommandContext context, String[] args) throws CommandException {
+    public int execute(StratosCommandContext context, String[] args, Option[] already_parsed_opts) throws CommandException {
         if (logger.isDebugEnabled()) {
             logger.debug("Executing {} command...", getName());
         }