Removing osm_rovim_fos debug folder path from podspec ro charm
[osm/devops.git] / installers / charm / ro / src / charm.py
index 67ba518..028dc0a 100755 (executable)
 
 import base64
 import logging
-from typing import NoReturn, Optional
+from typing import Dict, NoReturn, Optional
 
+from charms.kafka_k8s.v0.kafka import KafkaEvents, KafkaRequires
 from ops.main import main
 from opslib.osm.charm import CharmedOsmBase, RelationsMissing
-from opslib.osm.interfaces.kafka import KafkaClient
 from opslib.osm.interfaces.mongo import MongoClient
 from opslib.osm.interfaces.mysql import MysqlClient
 from opslib.osm.pod import (
@@ -81,6 +81,7 @@ class ConfigModel(ModelValidator):
     image_pull_policy: str
     debug_mode: bool
     security_context: bool
+    period_refresh_active: Optional[int]
 
     @validator("log_level")
     def validate_log_level(cls, v):
@@ -122,23 +123,41 @@ class ConfigModel(ModelValidator):
     def certificates_dict(cls):
         return _extract_certificates(cls.certificates) if cls.certificates else {}
 
+    @validator("period_refresh_active")
+    def validate_vim_refresh_period(cls, v):
+        if v and v < 60 and v != -1:
+            raise ValueError(
+                "Refresh Period is too tight, insert >= 60 seconds or disable using -1"
+            )
+        return v
+
 
 class RoCharm(CharmedOsmBase):
     """GrafanaCharm Charm."""
 
+    on = KafkaEvents()
+
     def __init__(self, *args) -> NoReturn:
         """Prometheus Charm constructor."""
         super().__init__(
             *args,
             oci_image="image",
-            debug_mode_config_key="debug_mode",
-            debug_pubkey_config_key="debug_pubkey",
             vscode_workspace=VSCODE_WORKSPACE,
         )
-
-        self.kafka_client = KafkaClient(self, "kafka")
-        self.framework.observe(self.on["kafka"].relation_changed, self.configure_pod)
-        self.framework.observe(self.on["kafka"].relation_broken, self.configure_pod)
+        if self.config.get("debug_mode"):
+            self.enable_debug_mode(
+                pubkey=self.config.get("debug_pubkey"),
+                hostpaths={
+                    "osm_common": {
+                        "hostpath": self.config.get("debug_common_local_path"),
+                        "container-path": "/usr/lib/python3/dist-packages/osm_common",
+                    },
+                    **_get_ro_host_paths(self.config.get("debug_ro_local_path")),
+                },
+            )
+        self.kafka = KafkaRequires(self)
+        self.framework.observe(self.on.kafka_available, self.configure_pod)
+        self.framework.observe(self.on.kafka_broken, self.configure_pod)
 
         self.mysql_client = MysqlClient(self, "mysql")
         self.framework.observe(self.on["mysql"].relation_changed, self.configure_pod)
@@ -168,10 +187,7 @@ class RoCharm(CharmedOsmBase):
         missing_relations = []
 
         if config.enable_ng_ro:
-            if (
-                self.kafka_client.is_missing_data_in_unit()
-                and self.kafka_client.is_missing_data_in_app()
-            ):
+            if not self.kafka.host or not self.kafka.port:
                 missing_relations.append("kafka")
             if not config.mongodb_uri and self.mongodb_client.is_missing_data_in_unit():
                 missing_relations.append("mongodb")
@@ -264,7 +280,12 @@ class RoCharm(CharmedOsmBase):
                 "OSMRO_LOG_LEVEL": config.log_level,
             }
         )
-
+        if config.period_refresh_active:
+            container_builder.add_envs(
+                {
+                    "OSMRO_PERIOD_REFRESH_ACTIVE": config.period_refresh_active,
+                }
+            )
         if config.enable_ng_ro:
             # Add secrets to the pod
             mongodb_secret_name = f"{self.app.name}-mongodb-secret"
@@ -278,8 +299,8 @@ class RoCharm(CharmedOsmBase):
             container_builder.add_envs(
                 {
                     "OSMRO_MESSAGE_DRIVER": "kafka",
-                    "OSMRO_MESSAGE_HOST": self.kafka_client.host,
-                    "OSMRO_MESSAGE_PORT": self.kafka_client.port,
+                    "OSMRO_MESSAGE_HOST": self.kafka.host,
+                    "OSMRO_MESSAGE_PORT": self.kafka.port,
                     # MongoDB configuration
                     "OSMRO_DATABASE_DRIVER": "mongo",
                 }
@@ -341,8 +362,7 @@ VSCODE_WORKSPACE = {
         {"path": "/usr/lib/python3/dist-packages/osm_rosdn_onosof"},
         {"path": "/usr/lib/python3/dist-packages/osm_rovim_aws"},
         {"path": "/usr/lib/python3/dist-packages/osm_rovim_azure"},
-        {"path": "/usr/lib/python3/dist-packages/osm_rovim_fos"},
-        {"path": "/usr/lib/python3/dist-packages/osm_rovim_opennebula"},
+        {"path": "/usr/lib/python3/dist-packages/osm_rovim_gcp"},
         {"path": "/usr/lib/python3/dist-packages/osm_rovim_openstack"},
         {"path": "/usr/lib/python3/dist-packages/osm_rovim_openvim"},
         {"path": "/usr/lib/python3/dist-packages/osm_rovim_vmware"},
@@ -362,5 +382,84 @@ VSCODE_WORKSPACE = {
     "settings": {},
 }
 
+
+def _get_ro_host_paths(ro_host_path: str) -> Dict:
+    """Get RO host paths"""
+    return (
+        {
+            "NG-RO": {
+                "hostpath": f"{ro_host_path}/NG-RO",
+                "container-path": "/usr/lib/python3/dist-packages/osm_ng_ro",
+            },
+            "RO-plugin": {
+                "hostpath": f"{ro_host_path}/RO-plugin",
+                "container-path": "/usr/lib/python3/dist-packages/osm_ro_plugin",
+            },
+            "RO-SDN-arista_cloudvision": {
+                "hostpath": f"{ro_host_path}/RO-SDN-arista_cloudvision",
+                "container-path": "/usr/lib/python3/dist-packages/osm_rosdn_arista_cloudvision",
+            },
+            "RO-SDN-dpb": {
+                "hostpath": f"{ro_host_path}/RO-SDN-dpb",
+                "container-path": "/usr/lib/python3/dist-packages/osm_rosdn_dpb",
+            },
+            "RO-SDN-dynpac": {
+                "hostpath": f"{ro_host_path}/RO-SDN-dynpac",
+                "container-path": "/usr/lib/python3/dist-packages/osm_rosdn_dynpac",
+            },
+            "RO-SDN-floodlight_openflow": {
+                "hostpath": f"{ro_host_path}/RO-SDN-floodlight_openflow",
+                "container-path": "/usr/lib/python3/dist-packages/osm_rosdn_floodlightof",
+            },
+            "RO-SDN-ietfl2vpn": {
+                "hostpath": f"{ro_host_path}/RO-SDN-ietfl2vpn",
+                "container-path": "/usr/lib/python3/dist-packages/osm_rosdn_ietfl2vpn",
+            },
+            "RO-SDN-juniper_contrail": {
+                "hostpath": f"{ro_host_path}/RO-SDN-juniper_contrail",
+                "container-path": "/usr/lib/python3/dist-packages/osm_rosdn_juniper_contrail",
+            },
+            "RO-SDN-odl_openflow": {
+                "hostpath": f"{ro_host_path}/RO-SDN-odl_openflow",
+                "container-path": "/usr/lib/python3/dist-packages/osm_rosdn_odlof",
+            },
+            "RO-SDN-onos_openflow": {
+                "hostpath": f"{ro_host_path}/RO-SDN-onos_openflow",
+                "container-path": "/usr/lib/python3/dist-packages/osm_rosdn_onosof",
+            },
+            "RO-SDN-onos_vpls": {
+                "hostpath": f"{ro_host_path}/RO-SDN-onos_vpls",
+                "container-path": "/usr/lib/python3/dist-packages/osm_rosdn_onos_vpls",
+            },
+            "RO-VIM-aws": {
+                "hostpath": f"{ro_host_path}/RO-VIM-aws",
+                "container-path": "/usr/lib/python3/dist-packages/osm_rovim_aws",
+            },
+            "RO-VIM-azure": {
+                "hostpath": f"{ro_host_path}/RO-VIM-azure",
+                "container-path": "/usr/lib/python3/dist-packages/osm_rovim_azure",
+            },
+            "RO-VIM-gcp": {
+                "hostpath": f"{ro_host_path}/RO-VIM-gcp",
+                "container-path": "/usr/lib/python3/dist-packages/osm_rovim_gcp",
+            },
+            "RO-VIM-openstack": {
+                "hostpath": f"{ro_host_path}/RO-VIM-openstack",
+                "container-path": "/usr/lib/python3/dist-packages/osm_rovim_openstack",
+            },
+            "RO-VIM-openvim": {
+                "hostpath": f"{ro_host_path}/RO-VIM-openvim",
+                "container-path": "/usr/lib/python3/dist-packages/osm_rovim_openvim",
+            },
+            "RO-VIM-vmware": {
+                "hostpath": f"{ro_host_path}/RO-VIM-vmware",
+                "container-path": "/usr/lib/python3/dist-packages/osm_rovim_vmware",
+            },
+        }
+        if ro_host_path
+        else {}
+    )
+
+
 if __name__ == "__main__":
     main(RoCharm)