diff --git a/internal/pkg/util/envutils/envutils.go b/internal/pkg/util/envutils/envutils.go
new file mode 100644
index 0000000..2c7d2ca
--- /dev/null
+++ b/internal/pkg/util/envutils/envutils.go
@@ -0,0 +1,123 @@
+/*
+* Copyright 2022-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 envutils provides the env parsing utility functions
+package envutils
+
+import (
+	"fmt"
+	"os"
+	"strconv"
+)
+
+// common constants
+const (
+	// common environment variables
+
+	KafkaAdapterHost     = "KAFKA_ADAPTER_HOST"
+	KafkaAdapterPort     = "KAFKA_ADAPTER_PORT"
+	KafkaClusterHost     = "KAFKA_CLUSTER_HOST"
+	KafkaClusterPort     = "KAFKA_CLUSTER_PORT"
+	KvStoreType          = "KV_STORE_TYPE"
+	KvStoreTimeout       = "KV_STORE_TIMEOUT"
+	KvStoreHost          = "KV_STORE_HOST"
+	KvStorePort          = "KV_STORE_PORT"
+	AdapterTopic         = "ADAPTER_TOPIC"
+	CoreTopic            = "CORE_TOPIC"
+	EventTopic           = "EVENT_TOPIC"
+	LogLevel             = "LOG_LEVEL"
+	OnuNumber            = "ONU_NUMBER"
+	Banner               = "BANNER"
+	DisplayVersionOnly   = "DISPLAY_VERSION_ONLY"
+	ProbeHost            = "PROBE_HOST"
+	ProbePort            = "PROBE_PORT"
+	LiveProbeInterval    = "LIVE_PROBE_INTERVAL"
+	NotLiveProbeInterval = "NOT_LIVE_PROBE_INTERVAL"
+	VolthaHost           = "VOLTHA_HOST"
+	VolthaPort           = "VOLTHA_PORT"
+	HostName             = "HOST_NAME"
+
+	// openolt adapter environment variables
+
+	HeartbeatCheckInterval      = "HEARTBEAT_CHECK_INTERVAL"
+	HeartbeatFailReportInterval = "HEARTBEAT_FAIL_REPORT_INTERVAL"
+	GrpcTimeoutInterval         = "GRPC_TIMEOUT_INTERVAL"
+
+	// rwcore environment variables
+
+	RWCoreEndpoint            = "RW_CORE_ENDPOINT"
+	GrpcHost                  = "GRPC_HOST"
+	GrpcPort                  = "GRPC_PORT"
+	AffinityRouterTopic       = "AFFINITY_ROUTER_TOPIC"
+	InCompetingMode           = "IN_COMPETING_MODE"
+	KVTxnKeyDelTime           = "KV_TXN_KEY_DEL_TIME"
+	KVStoreDataPrefix         = "KV_STORE_DATA_PREFIX"
+	LongRunningRequestTimeout = "LONG_RUNNING_REQ_TIMEOUT"
+	DefaultRequestTimeout     = "DEFAULT_REQ_TIMEOUT"
+	DefaultCoreTimeout        = "DEFAULT_CORE_TIMEOUT"
+	CoreBindingKey            = "CORE_BINDING_KEY"
+	CorePairTopic             = "CORE_PAIR_TOPIC"
+	MaxConnectionRetries      = "MAX_CONNECTION_RETRIES"
+	ConnectionRetryInterval   = "CONNECTION_RETRY_INTERVAL"
+
+	// vgc environment variables
+
+	DeviceListRefreshInterval = "DEVICE_LIST_REFRESH_INTERVAL" // in seconds
+	CPUProfile                = "CPU_PROFILE"
+	MemProfile                = "MEM_PROFILE"
+	VendorID                  = "VENDOR_ID"
+    DeviceSyncDuration        = "DEVICE_SYNC_DURATION"
+	// openonu environment variables
+
+	OmciPacketCapture = "SAVE_OMCI_PACKET_CAPTURE"
+)
+
+// ParseStringEnvVariable reads the environment variable and returns env as string
+func ParseStringEnvVariable(envVarName string, defaultVal string) string {
+	envValue := os.Getenv(envVarName)
+	if envValue == "" {
+		fmt.Println("Environment variable " + envVarName + " undefined")
+		return defaultVal
+	}
+	return envValue
+}
+
+// ParseIntEnvVariable reads the environment variable and returns env as int64
+func ParseIntEnvVariable(envVarName string, defaultVal int64) int64 {
+	envValue := os.Getenv(envVarName)
+	if envValue == "" {
+		fmt.Println("Environment variable "+envVarName+" undefined", envVarName)
+		return defaultVal
+	}
+	returnVal, err := strconv.Atoi(envValue)
+	if err != nil {
+		fmt.Println("Unable to convert string to integer environment variable")
+		return defaultVal
+	}
+	return int64(returnVal)
+}
+
+// ParseBoolEnvVariable reads the environment variable and returns env as boolean
+func ParseBoolEnvVariable(envVarName string, defaultVal bool) bool {
+	envValue := os.Getenv(envVarName)
+	if envValue == "" {
+		fmt.Println("Environment variable " + envVarName + " undefined")
+		return defaultVal
+	}
+	if envValue == "true" || envValue == "True" {
+		return true
+	}
+	return false
+}
