+ config_to_encrypt = {}
+
+ def _obtain_url(self, input, create):
+ if input.get("ip") or input.get("port"):
+ if not input.get("ip") or not input.get("port") or input.get('url'):
+ raise ValidationError("You must provide both 'ip' and 'port' (deprecated); or just 'url' (prefered)")
+ input['url'] = "http://{}:{}/".format(input["ip"], input["port"])
+ del input["ip"]
+ del input["port"]
+ elif create and not input.get('url'):
+ raise ValidationError("You must provide 'url'")
+ return input
+
+ def _validate_input_new(self, input, force=False):
+ input = super()._validate_input_new(input, force)
+ return self._obtain_url(input, True)
+
+ def _validate_input_edit(self, input, force=False):
+ input = super()._validate_input_edit(input, force)
+ return self._obtain_url(input, False)
+
+
+class K8sClusterTopic(CommonVimWimSdn):
+ topic = "k8sclusters"
+ topic_msg = "k8scluster"
+ schema_new = k8scluster_new_schema
+ schema_edit = k8scluster_edit_schema
+ multiproject = True
+ password_to_encrypt = None
+ config_to_encrypt = {}
+
+ def format_on_new(self, content, project_id=None, make_public=False):
+ oid = super().format_on_new(content, project_id, make_public)
+ self.db.encrypt_decrypt_fields(content["credentials"], 'encrypt', ['password', 'secret'],
+ schema_version=content["schema_version"], salt=content["_id"])
+ return oid
+
+ def format_on_edit(self, final_content, edit_content):
+ if final_content.get("schema_version") and edit_content.get("credentials"):
+ self.db.encrypt_decrypt_fields(edit_content["credentials"], 'encrypt', ['password', 'secret'],
+ schema_version=final_content["schema_version"], salt=final_content["_id"])
+ deep_update_rfc7396(final_content["credentials"], edit_content["credentials"])
+ oid = super().format_on_edit(final_content, edit_content)
+ return oid
+
+
+class K8sRepoTopic(CommonVimWimSdn):
+ topic = "k8srepos"
+ topic_msg = "k8srepo"
+ schema_new = k8srepo_new_schema
+ schema_edit = k8srepo_edit_schema
+ multiproject = True
+ password_to_encrypt = None
+ config_to_encrypt = {}