Refactor access to group/version/kind
This commit is contained in:
parent
55f6169562
commit
0eb07feeef
1 changed files with 31 additions and 23 deletions
|
@ -355,11 +355,27 @@ class ControlPlaneCRD(ServalaModelMixin, models.Model):
|
|||
def __str__(self):
|
||||
return f"{self.service_offering} on {self.control_plane} with {self.service_definition}"
|
||||
|
||||
@cached_property
|
||||
def group(self):
|
||||
return self.service_definition.api_definition["group"]
|
||||
|
||||
@cached_property
|
||||
def version(self):
|
||||
return self.service_definition.api_definition["version"]
|
||||
|
||||
@cached_property
|
||||
def kind(self):
|
||||
return self.service_definition.api_definition["kind"]
|
||||
|
||||
@cached_property
|
||||
def kind_plural(self):
|
||||
plural = self.kind.lower()
|
||||
if not plural.endswith("s"):
|
||||
plural = f"{plural}s"
|
||||
return plural
|
||||
|
||||
@cached_property
|
||||
def resource_definition(self):
|
||||
kind = self.service_definition.api_definition["kind"]
|
||||
group = self.service_definition.api_definition["group"]
|
||||
version = self.service_definition.api_definition["version"]
|
||||
client = self.control_plane.get_kubernetes_client()
|
||||
|
||||
extensions_api = kubernetes.client.ApiextensionsV1Api(client)
|
||||
|
@ -368,10 +384,10 @@ class ControlPlaneCRD(ServalaModelMixin, models.Model):
|
|||
for crd in crds.items:
|
||||
if matching_crd:
|
||||
break
|
||||
if crd.spec.group == group:
|
||||
if crd.spec.group == self.group:
|
||||
for served_version in crd.spec.versions:
|
||||
if served_version.name == version and served_version.served:
|
||||
if crd.spec.names.kind == kind:
|
||||
if served_version.name == self.version and served_version.served:
|
||||
if crd.spec.names.kind == self.kind:
|
||||
matching_crd = crd
|
||||
break
|
||||
return matching_crd
|
||||
|
@ -382,9 +398,8 @@ class ControlPlaneCRD(ServalaModelMixin, models.Model):
|
|||
if result := cache.get(cache_key):
|
||||
return result
|
||||
|
||||
version = self.service_definition.api_definition["version"]
|
||||
for v in self.resource_definition.spec.versions:
|
||||
if v.name == version:
|
||||
if v.name == self.version:
|
||||
result = v.schema.open_apiv3_schema.to_dict()
|
||||
timeout_seconds = 60 * 60 * 24
|
||||
cache.set(cache_key, result, timeout=timeout_seconds)
|
||||
|
@ -395,9 +410,9 @@ class ControlPlaneCRD(ServalaModelMixin, models.Model):
|
|||
from servala.core.crd import generate_django_model
|
||||
|
||||
kwargs = {
|
||||
key: value
|
||||
for key, value in self.service_definition.api_definition.items()
|
||||
if key in ("group", "version", "kind")
|
||||
"group": self.group,
|
||||
"version": self.version,
|
||||
"kind": self.kind,
|
||||
}
|
||||
return generate_django_model(self.resource_schema, **kwargs)
|
||||
|
||||
|
@ -517,12 +532,9 @@ class ServiceInstance(ServalaModelMixin, models.Model):
|
|||
)
|
||||
|
||||
try:
|
||||
group = context.service_definition.api_definition["group"]
|
||||
version = context.service_definition.api_definition["version"]
|
||||
kind = context.service_definition.api_definition["kind"]
|
||||
create_data = {
|
||||
"apiVersion": f"{group}/{version}",
|
||||
"kind": kind,
|
||||
"apiVersion": f"{context.group}/{context.version}",
|
||||
"kind": context.kind,
|
||||
"metadata": {
|
||||
"name": name,
|
||||
"namespace": organization.namespace,
|
||||
|
@ -534,15 +546,11 @@ class ServiceInstance(ServalaModelMixin, models.Model):
|
|||
api_instance = client.CustomObjectsApi(
|
||||
context.control_plane.get_kubernetes_client()
|
||||
)
|
||||
plural = kind.lower()
|
||||
if not plural.endswith("s"):
|
||||
plural = f"{plural}s"
|
||||
|
||||
api_instance.create_namespaced_custom_object(
|
||||
group=group,
|
||||
version=version,
|
||||
group=context.group,
|
||||
version=context.version,
|
||||
namespace=organization.namespace,
|
||||
plural=plural,
|
||||
plural=context.kind_plural,
|
||||
body=create_data,
|
||||
)
|
||||
except Exception as e:
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue