def reconcile_kubernetes_resource( kube_client: KubeClient, service: str, instance_configs: Mapping[str, Any], custom_resources: Sequence[KubeCustomResource], kind: KubeKind, version: str, group: str, ) -> bool: results = [] for instance, config in instance_configs.items(): formatted_resource = format_custom_resource( instance_config=config, service=service, instance=instance, kind=kind.singular, version=version, group=group, ) desired_resource = KubeCustomResource( service=service, instance=instance, config_sha=formatted_resource['metadata']['labels'] ['yelp.com/paasta_config_sha'], kind=kind.singular, ) try: if not (service, instance, kind.singular) in [ (c.service, c.instance, c.kind) for c in custom_resources ]: log.info(f"{desired_resource} does not exist so creating") create_custom_resource( kube_client=kube_client, version=version, kind=kind, formatted_resource=formatted_resource, group=group, ) elif desired_resource not in custom_resources: sanitised_service = service.replace('_', '--') sanitised_instance = instance.replace('_', '--') log.info( f"{desired_resource} exists but config_sha doesn't match") update_custom_resource( kube_client=kube_client, name=f'{sanitised_service}-{sanitised_instance}', version=version, kind=kind, formatted_resource=formatted_resource, group=group, ) else: log.info(f"{desired_resource} is up to date, no action taken") except Exception as e: log.error(str(e)) results.append(False) results.append(True) return all(results) if results else True
def reconcile_kubernetes_resource( kube_client: KubeClient, service: str, instance_configs: Mapping[str, Any], custom_resources: Sequence[KubeCustomResource], kind: KubeKind, version: str, group: str, cluster: str, instance: str = None, ) -> bool: results = [] for inst, config in instance_configs.items(): if instance is not None and instance != inst: continue formatted_resource = format_custom_resource( instance_config=config, service=service, instance=inst, cluster=cluster, kind=kind.singular, version=version, group=group, namespace=f"paasta-{kind.plural}", ) desired_resource = KubeCustomResource( service=service, instance=inst, config_sha=formatted_resource["metadata"]["labels"] ["paasta.yelp.com/config_sha"], kind=kind.singular, name=formatted_resource["metadata"]["name"], namespace=f"paasta-{kind.plural}", ) try: if not (service, inst, kind.singular) in [ (c.service, c.instance, c.kind) for c in custom_resources ]: log.info(f"{desired_resource} does not exist so creating") create_custom_resource( kube_client=kube_client, version=version, kind=kind, formatted_resource=formatted_resource, group=group, ) elif desired_resource not in custom_resources: sanitised_service = sanitise_kubernetes_name(service) sanitised_instance = sanitise_kubernetes_name(inst) log.info( f"{desired_resource} exists but config_sha doesn't match") update_custom_resource( kube_client=kube_client, name=f"{sanitised_service}-{sanitised_instance}", version=version, kind=kind, formatted_resource=formatted_resource, group=group, ) else: log.info(f"{desired_resource} is up to date, no action taken") except Exception as e: log.error(str(e)) results.append(False) results.append(True) return all(results) if results else True
def reconcile_kubernetes_resource( kube_client: KubeClient, service: str, instance_configs: Mapping[str, Any], custom_resources: Sequence[KubeCustomResource], kind: KubeKind, version: str, group: str, crd: CustomResourceDefinition, cluster: str, instance: str = None, ) -> bool: succeeded = True config_handler = LONG_RUNNING_INSTANCE_TYPE_HANDLERS[crd.file_prefix] for inst, config in instance_configs.items(): if instance is not None and instance != inst: continue try: soa_config = config_handler.loader( service=service, instance=inst, cluster=cluster, load_deployments=True, soa_dir=DEFAULT_SOA_DIR, ) git_sha = get_git_sha_from_dockerurl(soa_config.get_docker_url(), long=True) formatted_resource = format_custom_resource( instance_config=config, service=service, instance=inst, cluster=cluster, kind=kind.singular, version=version, group=group, namespace=f"paasta-{kind.plural}", git_sha=git_sha, ) desired_resource = KubeCustomResource( service=service, instance=inst, config_sha=formatted_resource["metadata"]["labels"][ paasta_prefixed("config_sha")], git_sha=formatted_resource["metadata"]["labels"].get( paasta_prefixed("git_sha")), kind=kind.singular, name=formatted_resource["metadata"]["name"], namespace=f"paasta-{kind.plural}", ) if not (service, inst, kind.singular) in [ (c.service, c.instance, c.kind) for c in custom_resources ]: log.info(f"{desired_resource} does not exist so creating") create_custom_resource( kube_client=kube_client, version=version, kind=kind, formatted_resource=formatted_resource, group=group, ) elif desired_resource not in custom_resources: sanitised_service = sanitise_kubernetes_name(service) sanitised_instance = sanitise_kubernetes_name(inst) log.info( f"{desired_resource} exists but config_sha doesn't match") update_custom_resource( kube_client=kube_client, name=f"{sanitised_service}-{sanitised_instance}", version=version, kind=kind, formatted_resource=formatted_resource, group=group, ) else: log.info(f"{desired_resource} is up to date, no action taken") except Exception as e: log.error(str(e)) succeeded = False return succeeded