diff --git a/cli/util/tableGen.go b/cli/util/tableGen.go
new file mode 100644
index 0000000..3b07ef0
--- /dev/null
+++ b/cli/util/tableGen.go
@@ -0,0 +1,73 @@
+/*
+   * Copyright 2018-present Open Networking Foundation
+
+   * Licensed under the Apache License, Version 2.0 (the "License");
+   * you may not use this file except in compliance with the License.
+   * You may obtain a copy of the License at
+
+   * http://www.apache.org/licenses/LICENSE-2.0
+
+   * Unless required by applicable law or agreed to in writing, software
+   * distributed under the License is distributed on an "AS IS" BASIS,
+   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   * See the License for the specific language governing permissions and
+   * limitations under the License.
+*/
+
+package util
+
+import (
+	"fmt"
+	"strings"
+)
+
+func BuildTable(keys []string, rows []map[string]string) (string, error) {
+	var returnString string
+	fieldSizes := make(map[string]int)
+
+	for i := 0; i < len(rows); i++ {
+		for key, value := range rows[i] {
+			currentSize := len(value)
+			if currentSize > fieldSizes[key] {
+				fieldSizes[key] = currentSize
+			}
+
+		}
+	}
+	for i := 0; i < len(keys); i++ {
+		currentSize := len(keys[i])
+		if currentSize > fieldSizes[keys[i]] {
+			fieldSizes[keys[i]] = currentSize
+		}
+	}
+	bottom := "+"
+
+	for i := 0; i < len(rows); i++ {
+		header := "|"
+		line := "|"
+		for j := 0; j < len(keys); j++ {
+			key := keys[j]
+			value := rows[i][key]
+			if i == 0 {
+				pad := 2 + fieldSizes[key] - len(key)
+				field := fmt.Sprintf("%s%s|", strings.Repeat(" ", pad), key)
+				spacer := fmt.Sprintf("%s+", strings.Repeat("-", fieldSizes[key]+2))
+				header = header + field
+				bottom = bottom + spacer
+			}
+			pad := 2 + fieldSizes[key] - len(value)
+			field := fmt.Sprintf("%s%s|", strings.Repeat(" ", pad), value)
+			line = line + field
+
+		}
+		if i == 0 {
+			returnString = bottom + "\n" + header + "\n" + bottom + "\n"
+		}
+
+		returnString = returnString + line + "\n"
+	}
+	returnString = returnString + bottom + "\n"
+
+	return returnString, nil
+
+}
