From a38a7ef43a08709c552c6b40747b816d76007f73 Mon Sep 17 00:00:00 2001 From: Alexey Volkov Date: Fri, 3 Jan 2020 15:17:17 -0800 Subject: [PATCH] SDL - DSL - Stabilized the PipelineVolume names The name no longer depends on unset parameters or the version of the Kubernetes package. Needed for https://github.com/kubeflow/pipelines/pull/2780 Fixes https://travis-ci.com/kubeflow/pipelines/jobs/270786161 --- sdk/python/kfp/dsl/_pipeline_volume.py | 11 ++++++++++- sdk/python/tests/dsl/pipeline_volume_tests.py | 3 +-- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/sdk/python/kfp/dsl/_pipeline_volume.py b/sdk/python/kfp/dsl/_pipeline_volume.py index 2d27a114588..9d8af8ee3f3 100644 --- a/sdk/python/kfp/dsl/_pipeline_volume.py +++ b/sdk/python/kfp/dsl/_pipeline_volume.py @@ -23,6 +23,14 @@ from . import _pipeline +def prune_none_dict_values(d: dict) -> dict: + return { + k: prune_none_dict_values(v) if isinstance(v, dict) else v + for k, v in d.items() + if v is not None + } + + class PipelineVolume(V1Volume): """Representing a volume that is passed between pipeline operators and is to be mounted by a ContainerOp or its inherited type. @@ -72,7 +80,8 @@ def __init__(self, init_volume["persistent_volume_claim"] = pvc_volume_source super().__init__(**init_volume, **kwargs) if not name_provided: - hash_value = hashlib.sha256(bytes(json.dumps(self.to_dict(), + volume_dict = prune_none_dict_values(self.to_dict()) + hash_value = hashlib.sha256(bytes(json.dumps(volume_dict, sort_keys=True), "utf-8")).hexdigest() name = "pvolume-{}".format(hash_value) diff --git a/sdk/python/tests/dsl/pipeline_volume_tests.py b/sdk/python/tests/dsl/pipeline_volume_tests.py index aad88b3701b..c98902b3fd4 100644 --- a/sdk/python/tests/dsl/pipeline_volume_tests.py +++ b/sdk/python/tests/dsl/pipeline_volume_tests.py @@ -70,8 +70,7 @@ def test_omitting_name(self): def my_pipeline(param='foo'): vol1 = PipelineVolume(pvc="foo") vol2 = PipelineVolume(name="provided", pvc="foo") - name1 = ("pvolume-127ac63cf2013e9b95c192eb6a2c7d5a023ebeb51f6a1144" - "86e3121") + name1 = ("pvolume-4cf668b8c7be134cfcbd7758d1eef9643d1bd7ed9925a98e707635b") name2 = "provided" self.assertEqual(vol1.name, name1) self.assertEqual(vol2.name, name2)