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