Update the RW Core configuration to accept similar configuration as the
Twisted Python Voltha Core.

Change-Id: Ic9b497dd2b2160d76c941f5115e8e6d0271916e9
diff --git a/rw_core/config/config.go b/rw_core/config/config.go
index ec30eac..a223318 100644
--- a/rw_core/config/config.go
+++ b/rw_core/config/config.go
@@ -7,80 +7,140 @@
 	//dt "github.com/docker/docker/api/types"
 	//dc "github.com/docker/docker/client"
 	"os"
-	"time"
 )
 
-// Constants used to differentiate between the KV stores
+// RW Core service default constants
 const (
-	ConsulStoreName string = "consul"
-	EtcdStoreName   string = "etcd"
+	ConsulStoreName          = "consul"
+	EtcdStoreName            = "etcd"
+	default_InstanceID       = "rwcore001"
+	default_GrpcPort         = 50057
+	default_GrpcHost         = "10.100.198.240"
+	default_KafkaAdapterHost = "10.100.198.240"
+	default_KafkaAdapterPort = 9092
+	default_KafkaClusterHost = "10.100.198.240"
+	default_KafkaClusterPort = 9094
+	default_KVStoreType      = ConsulStoreName
+	default_KVStoreTimeout   = 5 //in seconds
+	default_KVStoreHost      = "10.100.198.240"
+	default_KVStorePort      = 8500 // Etcd = 2379
+	default_LogLevel         = 1
+	default_Banner           = false
+	default_CoreTopic        = "rwcore"
+	default_RWCoreEndpoint   = "rwcore"
+	default_RWCoreKey        = "pki/voltha.key"
+	default_RWCoreCert       = "pki/voltha.crt"
+	default_RWCoreCA         = "pki/voltha-CA.pem"
 )
 
-// CoordinatorFlags represents the set of configurations used by the coordinator
+// RWCoreFlags represents the set of configurations used by the read-write core service
 type RWCoreFlags struct {
 	// Command line parameters
-	InstanceID     string
-	KVStoreType    string
-	KVStoreTimeout int // in seconds
-	KVStoreHost    string
-	KVStorePort    int
-	LogLevel       string
+	InstanceID       string
+	RWCoreEndpoint   string
+	GrpcHost         string
+	GrpcPort         int
+	KafkaAdapterHost string
+	KafkaAdapterPort int
+	KafkaClusterHost string
+	KafkaClusterPort int
+	KVStoreType      string
+	KVStoreTimeout   int // in seconds
+	KVStoreHost      string
+	KVStorePort      int
+	CoreTopic        string
+	LogLevel         int
+	Banner           bool
+	RWCoreKey        string
+	RWCoreCert       string
+	RWCoreCA         string
 }
 
-// NewRWCoreFlags returns a new coordinator config
+// NewRWCoreFlags returns a new RWCore config
 func NewRWCoreFlags() *RWCoreFlags {
 	var rwCoreFlag = RWCoreFlags{ // Default values
-		InstanceID:     "rw_coreInstance001",
-		KVStoreType:    ConsulStoreName,
-		KVStoreTimeout: 5,
-		KVStoreHost:    "10.100.198.240",
-		//KVStorePort:                 2379,
-		KVStorePort: 8500,
-		LogLevel:    "info",
+		InstanceID:       default_InstanceID,
+		RWCoreEndpoint:   default_RWCoreEndpoint,
+		GrpcHost:         default_GrpcHost,
+		GrpcPort:         default_GrpcPort,
+		KafkaAdapterHost: default_KafkaAdapterHost,
+		KafkaAdapterPort: default_KafkaAdapterPort,
+		KafkaClusterHost: default_KafkaClusterHost,
+		KafkaClusterPort: default_KafkaClusterPort,
+		KVStoreType:      default_KVStoreType,
+		KVStoreTimeout:   default_KVStoreTimeout,
+		KVStoreHost:      default_KVStoreHost,
+		KVStorePort:      default_KVStorePort,
+		CoreTopic:        default_CoreTopic,
+		LogLevel:         default_LogLevel,
+		Banner:           default_Banner,
+		RWCoreKey:        default_RWCoreKey,
+		RWCoreCert:       default_RWCoreCert,
+		RWCoreCA:         default_RWCoreCA,
 	}
 	return &rwCoreFlag
 }
 
-// ParseCommandArguments parses the arguments when running coordinator
+// ParseCommandArguments parses the arguments when running read-write core service
 func (cf *RWCoreFlags) ParseCommandArguments() {
-	flag.IntVar(&(cf.KVStoreTimeout),
-		"kv-store-request-timeout",
-		cf.KVStoreTimeout,
-		"The default timeout when making a kv store request")
 
-	flag.StringVar(&(cf.KVStoreType),
-		"kv-store-type",
-		cf.KVStoreType,
-		"KV store type")
+	var help string
 
-	flag.StringVar(&(cf.KVStoreHost),
-		"kv-store-host",
-		cf.KVStoreHost,
-		"KV store host")
+	help = fmt.Sprintf("RW core endpoint address")
+	flag.StringVar(&(cf.RWCoreEndpoint), "vcore-endpoint", default_RWCoreEndpoint, help)
 
-	flag.IntVar(&(cf.KVStorePort),
-		"kv-store-port",
-		cf.KVStorePort,
-		"KV store port")
+	help = fmt.Sprintf("GRPC server - host")
+	flag.StringVar(&(cf.GrpcHost), "grpc_host", default_GrpcHost, help)
 
-	flag.StringVar(&(cf.LogLevel),
-		"log-level",
-		cf.LogLevel,
-		"Log level")
+	help = fmt.Sprintf("GRPC server - port")
+	flag.IntVar(&(cf.GrpcPort), "grpc_port", default_GrpcPort, help)
+
+	help = fmt.Sprintf("Kafka - Adapter messaging host")
+	flag.StringVar(&(cf.KafkaAdapterHost), "kafka_adapter_host", default_KafkaAdapterHost, help)
+
+	help = fmt.Sprintf("Kafka - Adapter messaging port")
+	flag.IntVar(&(cf.KafkaAdapterPort), "kafka_adapter_port", default_KafkaAdapterPort, help)
+
+	help = fmt.Sprintf("Kafka - Cluster messaging host")
+	flag.StringVar(&(cf.KafkaClusterHost), "kafka_cluster_host", default_KafkaClusterHost, help)
+
+	help = fmt.Sprintf("Kafka - Cluster messaging port")
+	flag.IntVar(&(cf.KafkaClusterPort), "kafka_cluster_port", default_KafkaClusterPort, help)
+
+	help = fmt.Sprintf("RW Core topic")
+	flag.StringVar(&(cf.CoreTopic), "rw_core_topic", default_CoreTopic, help)
+
+	help = fmt.Sprintf("KV store type")
+	flag.StringVar(&(cf.KVStoreType), "kv_store_type", default_KVStoreType, help)
+
+	help = fmt.Sprintf("The default timeout when making a kv store request")
+	flag.IntVar(&(cf.KVStoreTimeout), "kv_store_request_timeout", default_KVStoreTimeout, help)
+
+	help = fmt.Sprintf("KV store host")
+	flag.StringVar(&(cf.KVStoreHost), "kv_store_host", default_KVStoreHost, help)
+
+	help = fmt.Sprintf("KV store port")
+	flag.IntVar(&(cf.KVStorePort), "kv_store_port", default_KVStorePort, help)
+
+	help = fmt.Sprintf("Log level")
+	flag.IntVar(&(cf.LogLevel), "log_level", default_LogLevel, help)
+
+	help = fmt.Sprintf("Show startup banner log lines")
+	flag.BoolVar(&cf.Banner, "banner", default_Banner, help)
 
 	flag.Parse()
 
 	// Update the necessary keys with the prefixes
-	start := time.Now()
+	//start := time.Now()
 	containerName := getContainerInfo()
-	fmt.Println("container name:", containerName)
+	//fmt.Println("container name:", containerName)
 	if len(containerName) > 0 {
 		cf.InstanceID = containerName
 	}
 
-	fmt.Println("Inside config:", cf)
-	elapsed := time.Since(start)
-	fmt.Println("time:", elapsed/time.Second)
+	//fmt.Println("Inside config:", cf)
+	//elapsed := time.Since(start)
+	//fmt.Println("time:", elapsed/time.Second)
 }
 
 func getContainerInfo() string {