Skip to content

Commit

Permalink
Fixing script bug (#3651)
Browse files Browse the repository at this point in the history
* Fixing script bug
  • Loading branch information
wilmer05 authored Jul 18, 2023
1 parent caf36e2 commit c596569
Show file tree
Hide file tree
Showing 3 changed files with 73 additions and 49 deletions.
22 changes: 14 additions & 8 deletions paasta_tools/kubernetes_tools.py
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@
from kubernetes.client import V1Affinity
from kubernetes.client import V1AWSElasticBlockStoreVolumeSource
from kubernetes.client import V1beta1CustomResourceDefinition
from kubernetes.client import V1beta1CustomResourceDefinitionList
from kubernetes.client import V1beta1PodDisruptionBudget
from kubernetes.client import V1beta1PodDisruptionBudgetSpec
from kubernetes.client import V1Capabilities
Expand Down Expand Up @@ -3859,27 +3860,32 @@ def mode_to_int(mode: Optional[Union[str, int]]) -> Optional[int]:


def update_crds(
apiextensions: Union[
kube_client.ApiextensionsV1Api, kube_client.ApiextensionsV1beta1Api
],
kube_client: KubeClient,
desired_crds: Collection[
Union[V1CustomResourceDefinition, V1beta1CustomResourceDefinition]
],
existing_crds: V1CustomResourceDefinitionList,
existing_crds: Union[
V1CustomResourceDefinitionList, V1beta1CustomResourceDefinitionList
],
) -> bool:
success = True
for desired_crd in desired_crds:
existing_crd = None
for crd in existing_crds.items:
if crd.metadata.name == desired_crd.metadata["name"]:
existing_crd = crd
break

try:

if "apiextensions.k8s.io/v1beta1" == desired_crd.api_version:
apiextensions = kube_client.apiextensions_v1_beta1
else:
apiextensions = kube_client.apiextensions

if existing_crd:
desired_crd.metadata[
"resourceVersion"
] = existing_crd.metadata.resource_version

apiextensions.replace_custom_resource_definition(
name=desired_crd.metadata["name"], body=desired_crd
)
Expand All @@ -3901,9 +3907,9 @@ def update_crds(
f"status: {exc.status}, reason: {exc.reason}"
)
log.debug(exc.body)
success = False
return False

return success
return True


def sanitise_label_value(value: str) -> str:
Expand Down
78 changes: 51 additions & 27 deletions paasta_tools/setup_kubernetes_crd.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@
import service_configuration_lib
from kubernetes.client import V1beta1CustomResourceDefinition
from kubernetes.client import V1CustomResourceDefinition
from kubernetes.client.exceptions import ApiException

from paasta_tools.kubernetes_tools import KubeClient
from paasta_tools.kubernetes_tools import paasta_prefixed
Expand Down Expand Up @@ -101,43 +102,66 @@ def setup_kube_crd(
services: Sequence[str],
soa_dir: str = DEFAULT_SOA_DIR,
) -> bool:
for apiextension, crd_class in [
(kube_client.apiextensions, V1CustomResourceDefinition),
(kube_client.apiextensions_v1_beta1, V1beta1CustomResourceDefinition),
]:
existing_crds = apiextension.list_custom_resource_definition(
label_selector=paasta_prefixed("service")
existing_crds = kube_client.apiextensions.list_custom_resource_definition(
label_selector=paasta_prefixed("service")
)

# This step can fail in k8s 1.22 since this version is not existing anymore
# we need to support this for the transition
try:
existing_crds_v1_beta1 = (
kube_client.apiextensions_v1_beta1.list_custom_resource_definition(
label_selector=paasta_prefixed("service")
)
)
except ApiException:
existing_crds_v1_beta1 = []
log.debug(
"Listing CRDs with apiextensions/v1beta1 not supported on this cluster, falling back to v1"
)

desired_crds = []
for service in services:
crd_config = service_configuration_lib.read_extra_service_information(
service, f"crd-{cluster}", soa_dir=soa_dir
desired_crds = []
desired_crds_v1_beta1 = []
for service in services:
crd_config = service_configuration_lib.read_extra_service_information(
service, f"crd-{cluster}", soa_dir=soa_dir
)
if not crd_config:
log.info("nothing to deploy")
continue

metadata = crd_config.get("metadata", {})
if "labels" not in metadata:
metadata["labels"] = {}
metadata["labels"]["yelp.com/paasta_service"] = service
metadata["labels"][paasta_prefixed("service")] = service

if "apiextensions.k8s.io/v1beta1" == crd_config["apiVersion"]:
desired_crd = V1beta1CustomResourceDefinition(
api_version=crd_config.get("apiVersion"),
kind=crd_config.get("kind"),
metadata=metadata,
spec=crd_config.get("spec"),
)
if not crd_config:
log.info("nothing to deploy")
continue

metadata = crd_config.get("metadata", {})
if "labels" not in metadata:
metadata["labels"] = {}
metadata["labels"]["yelp.com/paasta_service"] = service
metadata["labels"][paasta_prefixed("service")] = service
desired_crd = crd_class(
desired_crds_v1_beta1.append(desired_crd)
else:
desired_crd = V1CustomResourceDefinition(
api_version=crd_config.get("apiVersion"),
kind=crd_config.get("kind"),
metadata=metadata,
spec=crd_config.get("spec"),
)
desired_crds.append(desired_crd)

if update_crds(
apiextensions=apiextension,
desired_crds=desired_crds,
existing_crds=existing_crds,
):
return True
return False
return update_crds(
kube_client=kube_client,
desired_crds=desired_crds,
existing_crds=existing_crds,
) and update_crds(
kube_client=kube_client,
desired_crds=desired_crds_v1_beta1,
existing_crds=existing_crds_v1_beta1,
)


if __name__ == "__main__":
Expand Down
22 changes: 8 additions & 14 deletions paasta_tools/setup_kubernetes_internal_crd.py
Original file line number Diff line number Diff line change
Expand Up @@ -140,20 +140,14 @@ def main() -> None:
def setup_kube_internal_crd(
kube_client: KubeClient,
) -> bool:
for apiextension in [
kube_client.apiextensions,
kube_client.apiextensions_v1_beta1,
]:
existing_crds = apiextension.list_custom_resource_definition(
label_selector=paasta_prefixed("internal")
)
if update_crds(
apiextensions=apiextension,
desired_crds=INTERNAL_CRDS,
existing_crds=existing_crds,
):
return True
return False
existing_crds = kube_client.apiextensions.list_custom_resource_definition(
label_selector=paasta_prefixed("internal")
)
return update_crds(
kube_client=kube_client,
desired_crds=INTERNAL_CRDS,
existing_crds=existing_crds,
)


if __name__ == "__main__":
Expand Down

0 comments on commit c596569

Please sign in to comment.