AETHER-2788 Use parameter from configuration to configure eNB

AETHER-2725	CWMP fault returns by eNodeB
AETHER-2692	Check the XML sent by eNodeB and ACS are valid
AETHER-2691	Research on eNodeB TR-069 service issue
AETHER-2788     Use parameter from configuration to configure eNB
AETHER-2789     Load enodeb configuration by the serial number
AETHER-2821     Configure the PLMN which is current not supported by enodebd
AETHER-2839     Create acs_common to own the common attribute of eNodeb configuration
AETHER-2831     Writing documentation of configuring enodebd

This patch contains above jira tickets.
It can work and configure the eNodeB with single configuration now.

Change-Id: I4875d099246a1995de420c4947e7a99823055161
diff --git a/configuration/mconfig_managers.py b/configuration/mconfig_managers.py
index bd39c4c..3b76418 100644
--- a/configuration/mconfig_managers.py
+++ b/configuration/mconfig_managers.py
@@ -157,7 +157,7 @@
                 mconfig_str = cfg_file.read()
             return self.deserialize_mconfig(mconfig_str)
         except (OSError, json.JSONDecodeError, json_format.ParseError) as e:
-            raise LoadConfigError('Error loading mconfig') from e
+            raise LoadConfigError('Error loading mconfig, mconfig may have format issue') from e
 
     def load_service_mconfig(
         self, service_name: str,
diff --git a/configuration/service_configs.py b/configuration/service_configs.py
index c60c340..f2d0f24 100644
--- a/configuration/service_configs.py
+++ b/configuration/service_configs.py
@@ -22,7 +22,8 @@
 # Location of configs (both service config and mconfig)
 CONFIG_DIR = './magma_configs'
 CONFIG_OVERRIDE_DIR = './override_configs'
-
+ENB_COMMON_FILE = './magma_configs/acs_common.yml'
+ENB_CONFIG_DIR = './magma_configs/serial_number'
 
 def load_override_config(service_name: str) -> Optional[Any]:
     """
@@ -73,7 +74,6 @@
         LoadConfigError:
             Unable to load config due to missing file or missing key
     """
-    print(CONFIG_DIR, service_name)
     cfg_file_name = os.path.join(CONFIG_DIR, '%s.yml' % service_name)
     cfg = _load_yaml_file(cfg_file_name)
 
@@ -83,6 +83,36 @@
         cfg.update(overrides)
     return cfg
 
+def load_enb_config() -> Any:
+    """
+    Load enb configurations from directory.
+
+    Args:
+        None
+
+    Returns: json-decoded value of the service config
+    """
+
+    ret = dict()
+    for fname in os.listdir(ENB_CONFIG_DIR):
+        sn = fname.replace(".yml", "")
+        cfg_file_name = os.path.join(ENB_CONFIG_DIR, fname)
+        ret[sn] = _load_yaml_file(cfg_file_name)
+
+    return ret
+
+def load_common_config() -> Any:
+    """
+    Load enb common configuration.
+
+    Args:
+        None
+
+    Returns: json-decoded value of the service config
+    """
+
+    return _load_yaml_file(ENB_COMMON_FILE)
+
 
 cached_service_configs = {}     # type: Dict[str, Any]