Update from master
[osm/NBI.git] / osm_nbi / admin_topics.py
index 6510d5e..f70c497 100644 (file)
@@ -556,20 +556,34 @@ class VimAccountTopic(CommonVimWimSdn):
         return indata.get("vim_type") and indata["vim_type"] == "paas"
 
     def _check_paas_account(self, indata):
-        if self._is_paas_vim_type(indata):
-            self._check_paas_provider_is_valid(indata)
+        if not self._is_paas_vim_type(indata):
+            return
+        if not self._is_valid_paas_config(indata.get("config")):
+            raise EngineException(
+                "Invalid config for VIM account '{}'.".format(indata["name"]),
+                HTTPStatus.UNPROCESSABLE_ENTITY,
+            )
 
-    def _check_paas_provider_is_valid(self, indata):
-        try:
-            paas_provider = indata["config"]["paas_provider"]
-            if paas_provider in self.valid_paas_providers:
-                return
-        except Exception:
-            pass
-        raise EngineException(
-            "Invalid paas_provider for VIM account '{}'.".format(indata["name"]),
-            HTTPStatus.UNPROCESSABLE_ENTITY,
-        )
+    def _is_valid_paas_config(self, config) -> bool:
+        if not config:
+            return False
+        paas_provider = config.get("paas_provider")
+        is_valid_paas_provider = paas_provider in self.valid_paas_providers
+        if paas_provider == "juju":
+            return self._is_valid_juju_paas_config(config)
+        return is_valid_paas_provider
+
+    def _is_valid_juju_paas_config(self, config) -> bool:
+        if not config:
+            return False
+        config_keys = [
+            "paas_provider",
+            "ca_cert_content",
+            "cloud",
+            "cloud_credentials",
+            "authorized_keys",
+        ]
+        return all(key in config for key in config_keys)
 
     def check_conflict_on_del(self, session, _id, db_content):
         """