diff --git a/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/Constants.java b/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/Constants.java
index bca34f2..4a69e10 100644
--- a/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/Constants.java
+++ b/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/Constants.java
@@ -121,4 +121,21 @@
     public static final int POD_RESOLUTION_TABLE = 11;
 
     public static final int LOCAL_ENTRY_TABLE = 0;
+
+    // CLI item length
+    public static final int CLI_ID_LENGTH = 30;
+    public static final int CLI_NAME_LENGTH = 30;
+    public static final int CLI_IP_ADDRESSES_LENGTH = 50;
+    public static final int CLI_IP_ADDRESS_LENGTH = 25;
+    public static final int CLI_MAC_ADDRESS_LENGTH = 25;
+    public static final int CLI_PORTS_LENGTH = 20;
+    public static final int CLI_NAMESPACE_LENGTH = 15;
+    public static final int CLI_PHASE_LENGTH = 15;
+    public static final int CLI_TYPE_LENGTH = 15;
+    public static final int CLI_TYPES_LENGTH = 30;
+    public static final int CLI_SEG_ID_LENGTH = 10;
+    public static final int CLI_LABELS_LENGTH = 30;
+    public static final int CLI_CONTAINERS_LENGTH = 30;
+
+    public static final int CLI_MARGIN_LENGTH = 2;
 }
diff --git a/apps/k8s-networking/app/src/main/java/org/onosproject/k8snetworking/cli/K8sEndpointsListCommand.java b/apps/k8s-networking/app/src/main/java/org/onosproject/k8snetworking/cli/K8sEndpointsListCommand.java
index 5258c18..c866f04 100644
--- a/apps/k8s-networking/app/src/main/java/org/onosproject/k8snetworking/cli/K8sEndpointsListCommand.java
+++ b/apps/k8s-networking/app/src/main/java/org/onosproject/k8snetworking/cli/K8sEndpointsListCommand.java
@@ -18,9 +18,11 @@
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.databind.node.ArrayNode;
 import com.fasterxml.jackson.databind.node.ObjectNode;
+import com.google.common.collect.ImmutableList;
 import com.google.common.collect.Lists;
 import io.fabric8.kubernetes.api.model.Endpoints;
 import io.fabric8.kubernetes.client.utils.Serialization;
+import org.apache.commons.lang.StringUtils;
 import org.apache.karaf.shell.api.action.Command;
 import org.apache.karaf.shell.api.action.lifecycle.Service;
 import org.onosproject.cli.AbstractShellCommand;
@@ -30,6 +32,11 @@
 import java.util.Comparator;
 import java.util.List;
 
+import static org.onosproject.k8snetworking.api.Constants.CLI_IP_ADDRESSES_LENGTH;
+import static org.onosproject.k8snetworking.api.Constants.CLI_MARGIN_LENGTH;
+import static org.onosproject.k8snetworking.api.Constants.CLI_NAME_LENGTH;
+import static org.onosproject.k8snetworking.api.Constants.CLI_PORTS_LENGTH;
+import static org.onosproject.k8snetworking.util.K8sNetworkingUtil.genFormatString;
 import static org.onosproject.k8snetworking.util.K8sNetworkingUtil.prettyJson;
 
 /**
@@ -40,7 +47,6 @@
         description = "Lists all kubernetes endpoints")
 public class K8sEndpointsListCommand extends AbstractShellCommand {
 
-    private static final String FORMAT = "%-50s%-50s%-20s";
     private static final String PORT_PROTOCOL_SEPARATOR = "/";
 
     @Override
@@ -49,10 +55,13 @@
         List<Endpoints> endpointses = Lists.newArrayList(service.endpointses());
         endpointses.sort(Comparator.comparing(e -> e.getMetadata().getName()));
 
+        String format = genFormatString(ImmutableList.of(CLI_NAME_LENGTH,
+                CLI_IP_ADDRESSES_LENGTH, CLI_PORTS_LENGTH));
+
         if (outputJson()) {
             print("%s", json(endpointses));
         } else {
-            print(FORMAT, "Name", "IP Addresses", "Ports");
+            print(format, "Name", "IP Addresses", "Ports");
 
             for (Endpoints endpoints : endpointses) {
 
@@ -65,9 +74,11 @@
                             PORT_PROTOCOL_SEPARATOR + p.getProtocol()));
                 });
 
-                print(FORMAT,
-                        endpoints.getMetadata().getName(),
-                        ips.isEmpty() ? "" : ips,
+                print(format,
+                        StringUtils.substring(endpoints.getMetadata().getName(),
+                                0, CLI_NAME_LENGTH - CLI_MARGIN_LENGTH),
+                        ips.isEmpty() ? "" : StringUtils.substring(ips.toString(),
+                                0, CLI_IP_ADDRESSES_LENGTH - CLI_MARGIN_LENGTH),
                         portWithProtocol.isEmpty() ? "" : portWithProtocol);
             }
         }
diff --git a/apps/k8s-networking/app/src/main/java/org/onosproject/k8snetworking/cli/K8sIngressListCommand.java b/apps/k8s-networking/app/src/main/java/org/onosproject/k8snetworking/cli/K8sIngressListCommand.java
index 8003e28..3f9dc28 100644
--- a/apps/k8s-networking/app/src/main/java/org/onosproject/k8snetworking/cli/K8sIngressListCommand.java
+++ b/apps/k8s-networking/app/src/main/java/org/onosproject/k8snetworking/cli/K8sIngressListCommand.java
@@ -18,9 +18,11 @@
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.databind.node.ArrayNode;
 import com.fasterxml.jackson.databind.node.ObjectNode;
+import com.google.common.collect.ImmutableList;
 import com.google.common.collect.Lists;
 import io.fabric8.kubernetes.api.model.extensions.Ingress;
 import io.fabric8.kubernetes.client.utils.Serialization;
+import org.apache.commons.lang.StringUtils;
 import org.apache.karaf.shell.api.action.Command;
 import org.apache.karaf.shell.api.action.lifecycle.Service;
 import org.onosproject.cli.AbstractShellCommand;
@@ -30,6 +32,11 @@
 import java.util.Comparator;
 import java.util.List;
 
+import static org.onosproject.k8snetworking.api.Constants.CLI_IP_ADDRESS_LENGTH;
+import static org.onosproject.k8snetworking.api.Constants.CLI_MARGIN_LENGTH;
+import static org.onosproject.k8snetworking.api.Constants.CLI_NAMESPACE_LENGTH;
+import static org.onosproject.k8snetworking.api.Constants.CLI_NAME_LENGTH;
+import static org.onosproject.k8snetworking.util.K8sNetworkingUtil.genFormatString;
 import static org.onosproject.k8snetworking.util.K8sNetworkingUtil.prettyJson;
 
 /**
@@ -40,18 +47,19 @@
         description = "Lists all kubernetes ingresses")
 public class K8sIngressListCommand extends AbstractShellCommand {
 
-    private static final String FORMAT = "%-50s%-15s%-30s";
-
     @Override
     protected void doExecute() {
         K8sIngressService service = get(K8sIngressService.class);
         List<Ingress> ingresses = Lists.newArrayList(service.ingresses());
         ingresses.sort(Comparator.comparing(p -> p.getMetadata().getName()));
 
+        String format = genFormatString(ImmutableList.of(CLI_NAME_LENGTH,
+                CLI_NAMESPACE_LENGTH, CLI_IP_ADDRESS_LENGTH));
+
         if (outputJson()) {
             print("%s", json(ingresses));
         } else {
-            print(FORMAT, "Name", "Namespace", "LB Addresses");
+            print(format, "Name", "Namespace", "LB Addresses");
 
             for (Ingress ingress : ingresses) {
 
@@ -60,9 +68,11 @@
                 ingress.getStatus().getLoadBalancer()
                         .getIngress().forEach(i -> lbIps.add(i.getIp()));
 
-                print(FORMAT,
-                        ingress.getMetadata().getName(),
-                        ingress.getMetadata().getNamespace(),
+                print(format,
+                        StringUtils.substring(ingress.getMetadata().getName(),
+                                0, CLI_NAME_LENGTH - CLI_MARGIN_LENGTH),
+                        StringUtils.substring(ingress.getMetadata().getNamespace(),
+                                0, CLI_NAMESPACE_LENGTH - CLI_MARGIN_LENGTH),
                         lbIps.isEmpty() ? "" : lbIps);
             }
         }
diff --git a/apps/k8s-networking/app/src/main/java/org/onosproject/k8snetworking/cli/K8sNamespaceListCommand.java b/apps/k8s-networking/app/src/main/java/org/onosproject/k8snetworking/cli/K8sNamespaceListCommand.java
index 4d69082..db649aa 100644
--- a/apps/k8s-networking/app/src/main/java/org/onosproject/k8snetworking/cli/K8sNamespaceListCommand.java
+++ b/apps/k8s-networking/app/src/main/java/org/onosproject/k8snetworking/cli/K8sNamespaceListCommand.java
@@ -18,9 +18,11 @@
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.databind.node.ArrayNode;
 import com.fasterxml.jackson.databind.node.ObjectNode;
+import com.google.common.collect.ImmutableList;
 import com.google.common.collect.Lists;
 import io.fabric8.kubernetes.api.model.Namespace;
 import io.fabric8.kubernetes.client.utils.Serialization;
+import org.apache.commons.lang.StringUtils;
 import org.apache.karaf.shell.api.action.Command;
 import org.onosproject.cli.AbstractShellCommand;
 import org.onosproject.k8snetworking.api.K8sNamespaceService;
@@ -29,6 +31,11 @@
 import java.util.Comparator;
 import java.util.List;
 
+import static org.onosproject.k8snetworking.api.Constants.CLI_LABELS_LENGTH;
+import static org.onosproject.k8snetworking.api.Constants.CLI_MARGIN_LENGTH;
+import static org.onosproject.k8snetworking.api.Constants.CLI_NAME_LENGTH;
+import static org.onosproject.k8snetworking.api.Constants.CLI_PHASE_LENGTH;
+import static org.onosproject.k8snetworking.util.K8sNetworkingUtil.genFormatString;
 import static org.onosproject.k8snetworking.util.K8sNetworkingUtil.prettyJson;
 
 /**
@@ -38,28 +45,32 @@
         description = "Lists all kubernetes namespaces")
 public class K8sNamespaceListCommand extends AbstractShellCommand {
 
-    private static final String FORMAT = "%-50s%-15s%-30s";
-
     @Override
     protected void doExecute() {
         K8sNamespaceService service = get(K8sNamespaceService.class);
         List<Namespace> namespaces = Lists.newArrayList(service.namespaces());
         namespaces.sort(Comparator.comparing(n -> n.getMetadata().getName()));
 
+        String format = genFormatString(ImmutableList.of(CLI_NAME_LENGTH,
+                CLI_PHASE_LENGTH, CLI_LABELS_LENGTH));
+
         if (outputJson()) {
             print("%s", json(namespaces));
         } else {
-            print(FORMAT, "Name", "Phase", "Labels");
+            print(format, "Name", "Phase", "Labels");
 
             for (Namespace namespace : namespaces) {
 
-                print(FORMAT,
-                        namespace.getMetadata().getName(),
+                print(format,
+                        StringUtils.substring(namespace.getMetadata().getName(),
+                                0, CLI_NAME_LENGTH - CLI_MARGIN_LENGTH),
                         namespace.getStatus().getPhase(),
                         namespace.getMetadata() != null &&
                                 namespace.getMetadata().getLabels() != null &&
                                 !namespace.getMetadata().getLabels().isEmpty() ?
-                                namespace.getMetadata().getLabels() : "");
+                                StringUtils.substring(namespace.getMetadata()
+                                                .getLabels().toString(), 0,
+                                        CLI_LABELS_LENGTH - CLI_MARGIN_LENGTH) : "");
             }
         }
     }
diff --git a/apps/k8s-networking/app/src/main/java/org/onosproject/k8snetworking/cli/K8sNetworkListCommand.java b/apps/k8s-networking/app/src/main/java/org/onosproject/k8snetworking/cli/K8sNetworkListCommand.java
index 82904a6..e3562e2 100644
--- a/apps/k8s-networking/app/src/main/java/org/onosproject/k8snetworking/cli/K8sNetworkListCommand.java
+++ b/apps/k8s-networking/app/src/main/java/org/onosproject/k8snetworking/cli/K8sNetworkListCommand.java
@@ -17,7 +17,9 @@
 
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.databind.node.ArrayNode;
+import com.google.common.collect.ImmutableList;
 import com.google.common.collect.Lists;
+import org.apache.commons.lang.StringUtils;
 import org.apache.karaf.shell.api.action.Command;
 import org.apache.karaf.shell.api.action.lifecycle.Service;
 import org.onosproject.cli.AbstractShellCommand;
@@ -27,6 +29,13 @@
 import java.util.Comparator;
 import java.util.List;
 
+import static org.onosproject.k8snetworking.api.Constants.CLI_ID_LENGTH;
+import static org.onosproject.k8snetworking.api.Constants.CLI_IP_ADDRESS_LENGTH;
+import static org.onosproject.k8snetworking.api.Constants.CLI_MARGIN_LENGTH;
+import static org.onosproject.k8snetworking.api.Constants.CLI_NAME_LENGTH;
+import static org.onosproject.k8snetworking.api.Constants.CLI_SEG_ID_LENGTH;
+import static org.onosproject.k8snetworking.api.Constants.CLI_TYPE_LENGTH;
+import static org.onosproject.k8snetworking.util.K8sNetworkingUtil.genFormatString;
 import static org.onosproject.k8snetworking.util.K8sNetworkingUtil.prettyJson;
 
 /**
@@ -37,22 +46,26 @@
         description = "Lists all kubernetes networks")
 public class K8sNetworkListCommand extends AbstractShellCommand {
 
-    private static final String FORMAT = "%-40s%-20s%-20s%-20s%-16s";
-
     @Override
     protected void doExecute() {
         K8sNetworkService service = get(K8sNetworkService.class);
         List<K8sNetwork> networks = Lists.newArrayList(service.networks());
         networks.sort(Comparator.comparing(K8sNetwork::name));
 
+        String format = genFormatString(ImmutableList.of(CLI_ID_LENGTH, CLI_NAME_LENGTH,
+                CLI_TYPE_LENGTH, CLI_SEG_ID_LENGTH, CLI_IP_ADDRESS_LENGTH));
+
         if (outputJson()) {
             print("%s", json(networks));
         } else {
-            print(FORMAT, "ID", "Name", "Type", "SegId", "Gateway");
+            print(format, "ID", "Name", "Type", "SegId", "Gateway");
 
             for (K8sNetwork net: networks) {
-                print(FORMAT, net.networkId(),
-                        net.name(),
+                print(format,
+                        StringUtils.substring(net.networkId(),
+                                0, CLI_ID_LENGTH - CLI_MARGIN_LENGTH),
+                        StringUtils.substring(net.name(),
+                                0, CLI_NAME_LENGTH - CLI_MARGIN_LENGTH),
                         net.type().toString(),
                         net.segmentId(),
                         net.gatewayIp() == null ? "" : net.gatewayIp().toString());
diff --git a/apps/k8s-networking/app/src/main/java/org/onosproject/k8snetworking/cli/K8sNetworkPolicyListCommand.java b/apps/k8s-networking/app/src/main/java/org/onosproject/k8snetworking/cli/K8sNetworkPolicyListCommand.java
index cc6d24f..ffc76d7 100644
--- a/apps/k8s-networking/app/src/main/java/org/onosproject/k8snetworking/cli/K8sNetworkPolicyListCommand.java
+++ b/apps/k8s-networking/app/src/main/java/org/onosproject/k8snetworking/cli/K8sNetworkPolicyListCommand.java
@@ -18,9 +18,11 @@
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.databind.node.ArrayNode;
 import com.fasterxml.jackson.databind.node.ObjectNode;
+import com.google.common.collect.ImmutableList;
 import com.google.common.collect.Lists;
 import io.fabric8.kubernetes.api.model.networking.NetworkPolicy;
 import io.fabric8.kubernetes.client.utils.Serialization;
+import org.apache.commons.lang.StringUtils;
 import org.apache.karaf.shell.api.action.Command;
 import org.apache.karaf.shell.api.action.lifecycle.Service;
 import org.onosproject.cli.AbstractShellCommand;
@@ -30,6 +32,11 @@
 import java.util.Comparator;
 import java.util.List;
 
+import static org.onosproject.k8snetworking.api.Constants.CLI_MARGIN_LENGTH;
+import static org.onosproject.k8snetworking.api.Constants.CLI_NAMESPACE_LENGTH;
+import static org.onosproject.k8snetworking.api.Constants.CLI_NAME_LENGTH;
+import static org.onosproject.k8snetworking.api.Constants.CLI_TYPES_LENGTH;
+import static org.onosproject.k8snetworking.util.K8sNetworkingUtil.genFormatString;
 import static org.onosproject.k8snetworking.util.K8sNetworkingUtil.prettyJson;
 
 /**
@@ -40,24 +47,27 @@
         description = "Lists all kubernetes network policies")
 public class K8sNetworkPolicyListCommand extends AbstractShellCommand {
 
-    private static final String FORMAT = "%-50s%-15s%-30s";
-
     @Override
     protected void doExecute() {
         K8sNetworkPolicyService service = get(K8sNetworkPolicyService.class);
         List<NetworkPolicy> policies = Lists.newArrayList(service.networkPolicies());
         policies.sort(Comparator.comparing(p -> p.getMetadata().getName()));
 
+        String format = genFormatString(ImmutableList.of(CLI_NAME_LENGTH,
+                CLI_NAMESPACE_LENGTH, CLI_TYPES_LENGTH));
+
         if (outputJson()) {
             print("%s", json(policies));
         } else {
-            print(FORMAT, "Name", "Namespace", "Types");
+            print(format, "Name", "Namespace", "Types");
 
             for (NetworkPolicy policy : policies) {
 
-                print(FORMAT,
-                        policy.getMetadata().getName(),
-                        policy.getMetadata().getNamespace(),
+                print(format,
+                        StringUtils.substring(policy.getMetadata().getName(),
+                                0, CLI_NAME_LENGTH - CLI_MARGIN_LENGTH),
+                        StringUtils.substring(policy.getMetadata().getNamespace(),
+                                0, CLI_NAMESPACE_LENGTH - CLI_MARGIN_LENGTH),
                         policy.getSpec().getPolicyTypes().isEmpty() ?
                                 "" : policy.getSpec().getPolicyTypes());
             }
diff --git a/apps/k8s-networking/app/src/main/java/org/onosproject/k8snetworking/cli/K8sPodListCommand.java b/apps/k8s-networking/app/src/main/java/org/onosproject/k8snetworking/cli/K8sPodListCommand.java
index 7845df1..c597b01 100644
--- a/apps/k8s-networking/app/src/main/java/org/onosproject/k8snetworking/cli/K8sPodListCommand.java
+++ b/apps/k8s-networking/app/src/main/java/org/onosproject/k8snetworking/cli/K8sPodListCommand.java
@@ -18,9 +18,11 @@
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.databind.node.ArrayNode;
 import com.fasterxml.jackson.databind.node.ObjectNode;
+import com.google.common.collect.ImmutableList;
 import com.google.common.collect.Lists;
 import io.fabric8.kubernetes.api.model.Pod;
 import io.fabric8.kubernetes.client.utils.Serialization;
+import org.apache.commons.lang.StringUtils;
 import org.apache.karaf.shell.api.action.Command;
 import org.apache.karaf.shell.api.action.lifecycle.Service;
 import org.onosproject.cli.AbstractShellCommand;
@@ -30,6 +32,12 @@
 import java.util.Comparator;
 import java.util.List;
 
+import static org.onosproject.k8snetworking.api.Constants.CLI_CONTAINERS_LENGTH;
+import static org.onosproject.k8snetworking.api.Constants.CLI_IP_ADDRESS_LENGTH;
+import static org.onosproject.k8snetworking.api.Constants.CLI_MARGIN_LENGTH;
+import static org.onosproject.k8snetworking.api.Constants.CLI_NAMESPACE_LENGTH;
+import static org.onosproject.k8snetworking.api.Constants.CLI_NAME_LENGTH;
+import static org.onosproject.k8snetworking.util.K8sNetworkingUtil.genFormatString;
 import static org.onosproject.k8snetworking.util.K8sNetworkingUtil.prettyJson;
 
 /**
@@ -40,18 +48,19 @@
         description = "Lists all kubernetes pods")
 public class K8sPodListCommand extends AbstractShellCommand {
 
-    private static final String FORMAT = "%-50s%-15s%-15s%-30s";
-
     @Override
     protected void doExecute() {
         K8sPodService service = get(K8sPodService.class);
         List<Pod> pods = Lists.newArrayList(service.pods());
         pods.sort(Comparator.comparing(p -> p.getMetadata().getName()));
 
+        String format = genFormatString(ImmutableList.of(CLI_NAME_LENGTH,
+                CLI_NAMESPACE_LENGTH, CLI_IP_ADDRESS_LENGTH, CLI_CONTAINERS_LENGTH));
+
         if (outputJson()) {
             print("%s", json(pods));
         } else {
-            print(FORMAT, "Name", "Namespace", "IP Address", "Containers");
+            print(format, "Name", "Namespace", "IP Address", "Containers");
 
             for (Pod pod : pods) {
 
@@ -59,10 +68,13 @@
 
                 pod.getSpec().getContainers().forEach(c -> containers.add(c.getName()));
 
-                print(FORMAT,
-                        pod.getMetadata().getName(),
-                        pod.getMetadata().getNamespace(),
-                        pod.getStatus().getPodIP(),
+                print(format,
+                        StringUtils.substring(pod.getMetadata().getName(),
+                                0, CLI_NAME_LENGTH - CLI_MARGIN_LENGTH),
+                        StringUtils.substring(pod.getMetadata().getNamespace(),
+                                0, CLI_NAMESPACE_LENGTH - CLI_MARGIN_LENGTH),
+                        StringUtils.substring(pod.getStatus().getPodIP(),
+                                0, CLI_IP_ADDRESS_LENGTH - CLI_MARGIN_LENGTH),
                         containers.isEmpty() ? "" : containers);
             }
         }
diff --git a/apps/k8s-networking/app/src/main/java/org/onosproject/k8snetworking/cli/K8sPortListCommand.java b/apps/k8s-networking/app/src/main/java/org/onosproject/k8snetworking/cli/K8sPortListCommand.java
index e344971..2dabb0e 100644
--- a/apps/k8s-networking/app/src/main/java/org/onosproject/k8snetworking/cli/K8sPortListCommand.java
+++ b/apps/k8s-networking/app/src/main/java/org/onosproject/k8snetworking/cli/K8sPortListCommand.java
@@ -18,7 +18,9 @@
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.databind.node.ArrayNode;
 import com.google.common.base.Strings;
+import com.google.common.collect.ImmutableList;
 import com.google.common.collect.Lists;
+import org.apache.commons.lang.StringUtils;
 import org.apache.karaf.shell.api.action.Argument;
 import org.apache.karaf.shell.api.action.Command;
 import org.apache.karaf.shell.api.action.lifecycle.Service;
@@ -30,6 +32,12 @@
 import java.util.Comparator;
 import java.util.List;
 
+import static org.onosproject.k8snetworking.api.Constants.CLI_ID_LENGTH;
+import static org.onosproject.k8snetworking.api.Constants.CLI_IP_ADDRESSES_LENGTH;
+import static org.onosproject.k8snetworking.api.Constants.CLI_MAC_ADDRESS_LENGTH;
+import static org.onosproject.k8snetworking.api.Constants.CLI_MARGIN_LENGTH;
+import static org.onosproject.k8snetworking.api.Constants.CLI_NAME_LENGTH;
+import static org.onosproject.k8snetworking.util.K8sNetworkingUtil.genFormatString;
 import static org.onosproject.k8snetworking.util.K8sNetworkingUtil.prettyJson;
 
 /**
@@ -40,8 +48,6 @@
         description = "Lists all kubernetes ports")
 public class K8sPortListCommand extends AbstractShellCommand {
 
-    private static final String FORMAT = "%-40s%-20s%-20s%-8s";
-
     @Argument(name = "networkId", description = "Network ID")
     private String networkId = null;
 
@@ -52,6 +58,9 @@
         List<K8sPort> ports = Lists.newArrayList(service.ports());
         ports.sort(Comparator.comparing(K8sPort::networkId));
 
+        String format = genFormatString(ImmutableList.of(CLI_ID_LENGTH,
+                CLI_NAME_LENGTH, CLI_MAC_ADDRESS_LENGTH, CLI_IP_ADDRESSES_LENGTH));
+
         if (!Strings.isNullOrEmpty(networkId)) {
             ports.removeIf(port -> !port.networkId().equals(networkId));
         }
@@ -59,13 +68,17 @@
         if (outputJson()) {
             print("%s", json(ports));
         } else {
-            print(FORMAT, "ID", "Network", "MAC Address", "Fixed IPs");
+            print(format, "ID", "Network", "MAC Address", "Fixed IPs");
             for (K8sPort port: ports) {
                 K8sNetwork k8sNet = service.network(port.networkId());
-                print(FORMAT, port.portId(),
-                        k8sNet == null ? "" : k8sNet.name(),
-                        port.macAddress(),
-                        port.ipAddress() == null ? "" : port.ipAddress().toString());
+                print(format,
+                        StringUtils.substring(port.portId(),
+                                0, CLI_ID_LENGTH - CLI_MARGIN_LENGTH),
+                        k8sNet == null ? "" : StringUtils.substring(k8sNet.name(),
+                                0, CLI_NAME_LENGTH - CLI_MARGIN_LENGTH),
+                        StringUtils.substring(port.macAddress().toString(),
+                                0, CLI_MAC_ADDRESS_LENGTH - CLI_MARGIN_LENGTH),
+                        port.ipAddress() == null ? "" : port.ipAddress());
             }
         }
     }
diff --git a/apps/k8s-networking/app/src/main/java/org/onosproject/k8snetworking/cli/K8sServiceListCommand.java b/apps/k8s-networking/app/src/main/java/org/onosproject/k8snetworking/cli/K8sServiceListCommand.java
index 1d6cf3d..4356bc7 100644
--- a/apps/k8s-networking/app/src/main/java/org/onosproject/k8snetworking/cli/K8sServiceListCommand.java
+++ b/apps/k8s-networking/app/src/main/java/org/onosproject/k8snetworking/cli/K8sServiceListCommand.java
@@ -18,8 +18,10 @@
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.databind.node.ArrayNode;
 import com.fasterxml.jackson.databind.node.ObjectNode;
+import com.google.common.collect.ImmutableList;
 import com.google.common.collect.Lists;
 import io.fabric8.kubernetes.client.utils.Serialization;
+import org.apache.commons.lang.StringUtils;
 import org.apache.karaf.shell.api.action.Command;
 import org.apache.karaf.shell.api.action.lifecycle.Service;
 import org.onosproject.cli.AbstractShellCommand;
@@ -29,6 +31,11 @@
 import java.util.Comparator;
 import java.util.List;
 
+import static org.onosproject.k8snetworking.api.Constants.CLI_IP_ADDRESS_LENGTH;
+import static org.onosproject.k8snetworking.api.Constants.CLI_MARGIN_LENGTH;
+import static org.onosproject.k8snetworking.api.Constants.CLI_NAME_LENGTH;
+import static org.onosproject.k8snetworking.api.Constants.CLI_PORTS_LENGTH;
+import static org.onosproject.k8snetworking.util.K8sNetworkingUtil.genFormatString;
 import static org.onosproject.k8snetworking.util.K8sNetworkingUtil.prettyJson;
 
 /**
@@ -39,7 +46,6 @@
         description = "Lists all kubernetes services")
 public class K8sServiceListCommand extends AbstractShellCommand {
 
-    private static final String FORMAT = "%-50s%-30s%-30s";
     private static final String PORT_PROTOCOL_SEPARATOR = "/";
 
     @Override
@@ -49,10 +55,13 @@
                 Lists.newArrayList(service.services());
         services.sort(Comparator.comparing(s -> s.getMetadata().getName()));
 
+        String format = genFormatString(ImmutableList.of(CLI_NAME_LENGTH,
+                CLI_IP_ADDRESS_LENGTH, CLI_PORTS_LENGTH));
+
         if (outputJson()) {
             print("%s", json(services));
         } else {
-            print(FORMAT, "Name", "Cluster IP", "Ports");
+            print(format, "Name", "Cluster IP", "Ports");
 
             for (io.fabric8.kubernetes.api.model.Service svc : services) {
 
@@ -62,9 +71,11 @@
                         portWithProtocol.add(p.getPort() +
                                 PORT_PROTOCOL_SEPARATOR + p.getProtocol()));
 
-                print(FORMAT,
-                        svc.getMetadata().getName(),
-                        svc.getSpec().getClusterIP(),
+                print(format,
+                        StringUtils.substring(svc.getMetadata().getName(),
+                                0, CLI_NAME_LENGTH - CLI_MARGIN_LENGTH),
+                        StringUtils.substring(svc.getSpec().getClusterIP(),
+                                0, CLI_IP_ADDRESS_LENGTH - CLI_MARGIN_LENGTH),
                         portWithProtocol.isEmpty() ? "" : portWithProtocol);
             }
         }
diff --git a/apps/k8s-networking/app/src/main/java/org/onosproject/k8snetworking/cli/K8sSyncStateCommand.java b/apps/k8s-networking/app/src/main/java/org/onosproject/k8snetworking/cli/K8sSyncStateCommand.java
index f9bc2c8..a466e14 100644
--- a/apps/k8s-networking/app/src/main/java/org/onosproject/k8snetworking/cli/K8sSyncStateCommand.java
+++ b/apps/k8s-networking/app/src/main/java/org/onosproject/k8snetworking/cli/K8sSyncStateCommand.java
@@ -15,6 +15,7 @@
  */
 package org.onosproject.k8snetworking.cli;
 
+import com.google.common.collect.ImmutableList;
 import com.google.common.collect.Lists;
 import io.fabric8.kubernetes.api.model.Endpoints;
 import io.fabric8.kubernetes.api.model.Namespace;
@@ -22,6 +23,7 @@
 import io.fabric8.kubernetes.api.model.extensions.Ingress;
 import io.fabric8.kubernetes.api.model.networking.NetworkPolicy;
 import io.fabric8.kubernetes.client.KubernetesClient;
+import org.apache.commons.lang.StringUtils;
 import org.apache.karaf.shell.api.action.Command;
 import org.apache.karaf.shell.api.action.lifecycle.Service;
 import org.onosproject.cli.AbstractShellCommand;
@@ -38,6 +40,17 @@
 
 import java.util.List;
 
+import static org.onosproject.k8snetworking.api.Constants.CLI_CONTAINERS_LENGTH;
+import static org.onosproject.k8snetworking.api.Constants.CLI_IP_ADDRESSES_LENGTH;
+import static org.onosproject.k8snetworking.api.Constants.CLI_IP_ADDRESS_LENGTH;
+import static org.onosproject.k8snetworking.api.Constants.CLI_LABELS_LENGTH;
+import static org.onosproject.k8snetworking.api.Constants.CLI_MARGIN_LENGTH;
+import static org.onosproject.k8snetworking.api.Constants.CLI_NAMESPACE_LENGTH;
+import static org.onosproject.k8snetworking.api.Constants.CLI_NAME_LENGTH;
+import static org.onosproject.k8snetworking.api.Constants.CLI_PHASE_LENGTH;
+import static org.onosproject.k8snetworking.api.Constants.CLI_PORTS_LENGTH;
+import static org.onosproject.k8snetworking.api.Constants.CLI_TYPES_LENGTH;
+import static org.onosproject.k8snetworking.util.K8sNetworkingUtil.genFormatString;
 import static org.onosproject.k8snetworking.util.K8sNetworkingUtil.syncPortFromPod;
 
 /**
@@ -48,12 +61,19 @@
         description = "Synchronizes all kubernetes states")
 public class K8sSyncStateCommand extends AbstractShellCommand {
 
-    private static final String POD_FORMAT = "%-50s%-15s%-15s%-30s";
-    private static final String SERVICE_FORMAT = "%-50s%-30s%-30s";
-    private static final String ENDPOINTS_FORMAT = "%-50s%-50s%-20s";
-    private static final String INGRESS_FORMAT = "%-50s%-15s%-30s";
-    private static final String NETWORK_POLICY_FORMAT = "%-50s%-15s%-30s";
-    private static final String NAMESPACE_FORMAT = "%-50s%-15s%-30s";
+    private static final String POD_FORMAT = genFormatString(ImmutableList.of(
+            CLI_NAME_LENGTH, CLI_NAMESPACE_LENGTH, CLI_IP_ADDRESS_LENGTH,
+            CLI_CONTAINERS_LENGTH));
+    private static final String SERVICE_FORMAT = genFormatString(ImmutableList.of(
+            CLI_NAME_LENGTH, CLI_IP_ADDRESS_LENGTH, CLI_PORTS_LENGTH));
+    private static final String ENDPOINTS_FORMAT = genFormatString(ImmutableList.of(
+            CLI_NAME_LENGTH, CLI_IP_ADDRESSES_LENGTH, CLI_PORTS_LENGTH));
+    private static final String INGRESS_FORMAT = genFormatString(ImmutableList.of(
+            CLI_NAME_LENGTH, CLI_NAMESPACE_LENGTH, CLI_IP_ADDRESS_LENGTH));
+    private static final String NETWORK_POLICY_FORMAT = genFormatString(ImmutableList.of(
+            CLI_NAME_LENGTH, CLI_NAMESPACE_LENGTH, CLI_TYPES_LENGTH));
+    private static final String NAMESPACE_FORMAT = genFormatString(ImmutableList.of(
+            CLI_NAME_LENGTH, CLI_PHASE_LENGTH, CLI_LABELS_LENGTH));
 
     @Override
     protected void doExecute() {
@@ -164,8 +184,10 @@
                 .getIngress().forEach(i -> lbIps.add(i.getIp()));
 
         print(INGRESS_FORMAT,
-                ingress.getMetadata().getName(),
-                ingress.getMetadata().getNamespace(),
+                StringUtils.substring(ingress.getMetadata().getName(),
+                        0, CLI_NAME_LENGTH - CLI_MARGIN_LENGTH),
+                StringUtils.substring(ingress.getMetadata().getNamespace(),
+                        0, CLI_NAMESPACE_LENGTH - CLI_MARGIN_LENGTH),
                 lbIps.isEmpty() ? "" : lbIps);
     }
 
@@ -179,19 +201,24 @@
         });
 
         print(ENDPOINTS_FORMAT,
-                endpoints.getMetadata().getName(),
-                ips.isEmpty() ? "" : ips,
+                StringUtils.substring(endpoints.getMetadata().getName(),
+                        0, CLI_NAME_LENGTH - CLI_MARGIN_LENGTH),
+                ips.isEmpty() ? "" : StringUtils.substring(ips.toString(),
+                        0, CLI_IP_ADDRESSES_LENGTH - CLI_MARGIN_LENGTH),
                 ports.isEmpty() ? "" : ports);
     }
 
     private void printNamespace(Namespace namespace) {
         print(NAMESPACE_FORMAT,
-                namespace.getMetadata().getName(),
+                StringUtils.substring(namespace.getMetadata().getName(),
+                        0, CLI_NAME_LENGTH - CLI_MARGIN_LENGTH),
                 namespace.getStatus().getPhase(),
                 namespace.getMetadata() != null &&
                         namespace.getMetadata().getLabels() != null &&
                         !namespace.getMetadata().getLabels().isEmpty() ?
-                        namespace.getMetadata().getLabels() : "");
+                        StringUtils.substring(namespace.getMetadata()
+                                        .getLabels().toString(), 0,
+                                CLI_LABELS_LENGTH - CLI_MARGIN_LENGTH) : "");
     }
 
     private void printService(io.fabric8.kubernetes.api.model.Service service) {
@@ -201,8 +228,10 @@
         service.getSpec().getPorts().forEach(p -> ports.add(p.getPort()));
 
         print(SERVICE_FORMAT,
-                service.getMetadata().getName(),
-                service.getSpec().getClusterIP(),
+                StringUtils.substring(service.getMetadata().getName(),
+                        0, CLI_NAME_LENGTH - CLI_MARGIN_LENGTH),
+                StringUtils.substring(service.getSpec().getClusterIP(),
+                        0, CLI_IP_ADDRESS_LENGTH - CLI_MARGIN_LENGTH),
                 ports.isEmpty() ? "" : ports);
     }
 
@@ -213,16 +242,21 @@
         pod.getSpec().getContainers().forEach(c -> containers.add(c.getName()));
 
         print(POD_FORMAT,
-                pod.getMetadata().getName(),
-                pod.getMetadata().getNamespace(),
-                pod.getStatus().getPodIP(),
+                StringUtils.substring(pod.getMetadata().getName(),
+                        0, CLI_NAME_LENGTH - CLI_MARGIN_LENGTH),
+                StringUtils.substring(pod.getMetadata().getNamespace(),
+                        0, CLI_NAMESPACE_LENGTH - CLI_MARGIN_LENGTH),
+                StringUtils.substring(pod.getStatus().getPodIP(),
+                        0, CLI_IP_ADDRESS_LENGTH - CLI_MARGIN_LENGTH),
                 containers.isEmpty() ? "" : containers);
     }
 
     private void printNetworkPolicy(NetworkPolicy policy) {
         print(NETWORK_POLICY_FORMAT,
-                policy.getMetadata().getName(),
-                policy.getMetadata().getNamespace(),
+                StringUtils.substring(policy.getMetadata().getName(),
+                        0, CLI_NAME_LENGTH - CLI_MARGIN_LENGTH),
+                StringUtils.substring(policy.getMetadata().getNamespace(),
+                        0, CLI_NAMESPACE_LENGTH - CLI_MARGIN_LENGTH),
                 policy.getSpec().getPolicyTypes().isEmpty() ?
                         "" : policy.getSpec().getPolicyTypes());
     }
diff --git a/apps/k8s-networking/app/src/main/java/org/onosproject/k8snetworking/util/K8sNetworkingUtil.java b/apps/k8s-networking/app/src/main/java/org/onosproject/k8snetworking/util/K8sNetworkingUtil.java
index 7d20b65..17240fb 100644
--- a/apps/k8s-networking/app/src/main/java/org/onosproject/k8snetworking/util/K8sNetworkingUtil.java
+++ b/apps/k8s-networking/app/src/main/java/org/onosproject/k8snetworking/util/K8sNetworkingUtil.java
@@ -55,6 +55,7 @@
 import java.io.IOException;
 import java.util.Arrays;
 import java.util.HashSet;
+import java.util.List;
 import java.util.Map;
 import java.util.Objects;
 import java.util.Optional;
@@ -546,6 +547,22 @@
         }
     }
 
+    /**
+     * Generates string format based on the given string length list.
+     *
+     * @param stringLengths a list of string lengths
+     * @return string format (e.g., %-28s%-15s%-24s%-20s%-15s)
+     */
+    public static String genFormatString(List<Integer> stringLengths) {
+        StringBuilder fsb = new StringBuilder();
+        stringLengths.forEach(length -> {
+            fsb.append("%-");
+            fsb.append(length);
+            fsb.append("s");
+        });
+        return fsb.toString();
+    }
+
     private static int binLower(String binStr, int bits) {
         StringBuilder outBin = new StringBuilder(
                 binStr.substring(MASK_BEGIN_IDX, MASK_MAX_IDX - bits));
diff --git a/apps/k8s-node/app/src/main/java/org/onosproject/k8snode/cli/K8sNodeListCommand.java b/apps/k8s-node/app/src/main/java/org/onosproject/k8snode/cli/K8sNodeListCommand.java
index aea2130..809df39 100644
--- a/apps/k8s-node/app/src/main/java/org/onosproject/k8snode/cli/K8sNodeListCommand.java
+++ b/apps/k8s-node/app/src/main/java/org/onosproject/k8snode/cli/K8sNodeListCommand.java
@@ -17,7 +17,9 @@
 
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.databind.node.ArrayNode;
+import com.google.common.collect.ImmutableList;
 import com.google.common.collect.Lists;
+import org.apache.commons.lang.StringUtils;
 import org.apache.karaf.shell.api.action.Command;
 import org.apache.karaf.shell.api.action.lifecycle.Service;
 import org.onosproject.cli.AbstractShellCommand;
@@ -27,6 +29,7 @@
 import java.util.Comparator;
 import java.util.List;
 
+import static org.onosproject.k8snode.util.K8sNodeUtil.genFormatString;
 import static org.onosproject.k8snode.util.K8sNodeUtil.prettyJson;
 
 /**
@@ -37,7 +40,12 @@
         description = "Lists all nodes registered in kubernetes node service")
 public class K8sNodeListCommand extends AbstractShellCommand {
 
-    private static final String FORMAT = "%-28s%-15s%-24s%-20s%-15s";
+    private static final int HOSTNAME_LENGTH = 35;
+    private static final int TYPE_LENGTH = 15;
+    private static final int MANAGEMENT_IP_LENGTH = 25;
+    private static final int DATA_IP_LENGTH = 25;
+    private static final int STATUS = 15;
+    private static final int MARGIN_LENGTH = 2;
 
     @Override
     protected void doExecute() {
@@ -45,16 +53,23 @@
         List<K8sNode> nodes = Lists.newArrayList(nodeService.nodes());
         nodes.sort(Comparator.comparing(K8sNode::hostname));
 
+        String format = genFormatString(ImmutableList.of(HOSTNAME_LENGTH,
+                TYPE_LENGTH, MANAGEMENT_IP_LENGTH, DATA_IP_LENGTH, STATUS));
+
         if (outputJson()) {
             print("%s", json(nodes));
         } else {
-            print(FORMAT, "Hostname", "Type", "Management IP", "Data IP", "State");
+            print(format, "Hostname", "Type", "Management IP", "Data IP", "State");
             for (K8sNode node : nodes) {
-                print(FORMAT,
-                        node.hostname(),
+                print(format,
+                        StringUtils.substring(node.hostname(), 0,
+                                HOSTNAME_LENGTH - MARGIN_LENGTH),
                         node.type(),
-                        node.managementIp(),
-                        node.dataIp() != null ? node.dataIp() : "",
+                        StringUtils.substring(node.managementIp().toString(), 0,
+                                MANAGEMENT_IP_LENGTH - MARGIN_LENGTH),
+                        node.dataIp() != null ? StringUtils.substring(
+                                node.dataIp().toString(), 0,
+                                DATA_IP_LENGTH - MARGIN_LENGTH) : "",
                         node.state());
             }
             print("Total %s nodes", nodeService.nodes().size());
diff --git a/apps/k8s-node/app/src/main/java/org/onosproject/k8snode/util/K8sNodeUtil.java b/apps/k8s-node/app/src/main/java/org/onosproject/k8snode/util/K8sNodeUtil.java
index 2413f46..023cec9 100644
--- a/apps/k8s-node/app/src/main/java/org/onosproject/k8snode/util/K8sNodeUtil.java
+++ b/apps/k8s-node/app/src/main/java/org/onosproject/k8snode/util/K8sNodeUtil.java
@@ -37,6 +37,7 @@
 
 import java.io.IOException;
 import java.util.Dictionary;
+import java.util.List;
 
 import static org.onlab.util.Tools.get;
 
@@ -214,6 +215,22 @@
     }
 
     /**
+     * Generates string format based on the given string length list.
+     *
+     * @param stringLengths a list of string lengths
+     * @return string format (e.g., %-28s%-15s%-24s%-20s%-15s)
+     */
+    public static String genFormatString(List<Integer> stringLengths) {
+        StringBuilder fsb = new StringBuilder();
+        stringLengths.forEach(length -> {
+            fsb.append("%-");
+            fsb.append(length);
+            fsb.append("s");
+        });
+        return fsb.toString();
+    }
+
+    /**
      * Obtains workable kubernetes client.
      *
      * @param config kubernetes API config
