def test_delete(self): """Test delete method.""" param = PipelineParam("param") k8s_resource = { "apiVersion": "version", "kind": "CustomResource", "metadata": { "name": "my-resource" } } res = ResourceOp(name="resource", k8s_resource=k8s_resource, success_condition=param, attribute_outputs={"test": "attr"}) delete_res = res.delete() expected_name = str(res.outputs['name']) self.assertEqual(delete_res.command, [ 'kubectl', 'delete', 'CustomResource', expected_name, '--ignore-not-found', '--output', 'name', '--wait=false' ]) self.assertEqual(delete_res.outputs, {})
def test_graphcomponent_basic(self): """Test graph_component decorator metadata.""" @graph_component def flip_component(flip_result): with dsl.Condition(flip_result == 'heads'): flip_component(flip_result) with Pipeline('pipeline') as p: param = PipelineParam(name='param') flip_component(param) self.assertEqual(1, len(p.groups)) self.assertEqual(1, len(p.groups[0].groups)) # pipeline self.assertEqual(1, len( p.groups[0].groups[0].groups)) # flip_component self.assertEqual(1, len( p.groups[0].groups[0].groups[0].groups)) # condition self.assertEqual(0, len(p.groups[0].groups[0].groups[0].groups[0] .groups)) # recursive flip_component recursive_group = p.groups[0].groups[0].groups[0].groups[0] self.assertTrue(recursive_group.recursive_ref is not None) self.assertEqual(1, len(recursive_group.inputs)) self.assertEqual('param', recursive_group.inputs[0].name)
def assert_res(self, res, expected_spec): self.assertEqual(res.name, "importworkspaceitem") self.assertEqual(res.resource.action, "create") self.assertEqual(res.resource.success_condition, "status.object_hash") self.assertEqual(res.resource.failure_condition, None) self.assertEqual(res.resource.manifest, None) expected_attribute_outputs = { "name": "{.metadata.name}", "object_hash": "{.status.object_hash}", "object_language": "{.status.object_info.language}", "object_type": "{.status.object_info.object_type}", "object_path": "{.status.object_info.path}", "manifest": "{}" } self.assertEqual(res.attribute_outputs, expected_attribute_outputs) expected_outputs = { "name": PipelineParam(name="name", op_name=res.name), "object_hash": PipelineParam(name="object_hash", op_name=res.name), "object_language": PipelineParam(name="object_language", op_name=res.name), "object_type": PipelineParam(name="object_type", op_name=res.name), "object_path": PipelineParam(name="object_path", op_name=res.name), "manifest": PipelineParam(name="manifest", op_name=res.name) } self.assertEqual(res.outputs, expected_outputs) self.assertEqual(res.output, PipelineParam(name="name", op_name=res.name)) self.assertEqual(res.dependent_names, []) self.assertEqual(res.k8s_resource["kind"], "WorkspaceItem") self.assertEqual(res.k8s_resource["metadata"]["name"], "test-item") self.assertEqual(res.k8s_resource["spec"], expected_spec)
def assert_res(self, res, expected_spec): self.assertEqual(res.name, "createsecretscope") self.assertEqual(res.resource.action, "create") self.assertEqual(res.resource.success_condition, "status.secretscope.name") self.assertEqual(res.resource.failure_condition, None) self.assertEqual(res.resource.manifest, None) expected_attribute_outputs = { "name": "{.metadata.name}", "secretscope_name": "{.status.secretscope.name}", "secretscope_backend_type": "{.status.secretscope.backend_type}", "secret_in_cluster_available": "{.status.secretinclusteravailable}", "manifest": "{}" } self.assertEqual(res.attribute_outputs, expected_attribute_outputs) expected_outputs = { "name": PipelineParam(name="name", op_name=res.name), "secretscope_name": PipelineParam(name="secretscope_name", op_name=res.name), "secretscope_backend_type": PipelineParam(name="secretscope_backend_type", op_name=res.name), "secret_in_cluster_available": PipelineParam(name="secret_in_cluster_available", op_name=res.name), "manifest": PipelineParam(name="manifest", op_name=res.name) } self.assertEqual(res.outputs, expected_outputs) self.assertEqual(res.output, PipelineParam(name="name", op_name=res.name)) self.assertEqual(res.dependent_names, []) self.assertEqual(res.k8s_resource["kind"], "SecretScope") self.assertEqual(res.k8s_resource["metadata"]["name"], "test-secretscope") self.assertEqual(res.k8s_resource["spec"], expected_spec)
def test_basic(self): """Test basic usage.""" with Pipeline("somename") as p: param = PipelineParam("param") resource_metadata = k8s_client.V1ObjectMeta(name="my-resource") k8s_resource = k8s_client.V1PersistentVolumeClaim( api_version="v1", kind="PersistentVolumeClaim", metadata=resource_metadata) res = ResourceOp(name="resource", k8s_resource=k8s_resource, success_condition=param, attribute_outputs={"test": "attr"}) self.assertCountEqual([x.name for x in res.inputs], ["param"]) self.assertEqual(res.name, "resource") self.assertEqual(res.resource.success_condition, PipelineParam("param")) self.assertEqual(res.resource.action, "create") self.assertEqual(res.resource.failure_condition, None) self.assertEqual(res.resource.manifest, None) expected_attribute_outputs = { "manifest": "{}", "name": "{.metadata.name}", "test": "attr" } self.assertEqual(res.attribute_outputs, expected_attribute_outputs) expected_outputs = { "manifest": PipelineParam(name="manifest", op_name=res.name), "name": PipelineParam(name="name", op_name=res.name), "test": PipelineParam(name="test", op_name=res.name), } self.assertEqual(res.outputs, expected_outputs) self.assertEqual(res.output, PipelineParam(name="test", op_name=res.name)) self.assertEqual(res.dependent_names, [])
def test_invalid(self): """Invalid pipeline param name and op_name.""" with self.assertRaises(ValueError): p = PipelineParam(name='123_abc')
def my_pipeline(param1, param2): vol = VolumeOp( name="myvol_creation", resource_name="myvol", size="1Gi", ) snap1 = VolumeSnapshotOp( name="mysnap_creation", resource_name=param1, volume=vol.volume, ) snap2 = VolumeSnapshotOp(name="mysnap_creation", resource_name="mysnap", pvc=param2, attribute_outputs={"size": "test"}) snap3 = VolumeSnapshotOp( name="mysnap_creation2", resource_name="mysnap2", pvc=param2, api_version="snapshot.storage.k8s.io/v1beta1", attribute_outputs={"size": "test"}) self.assertEqual(sorted([x.name for x in snap1.inputs]), ["name", "param1"]) self.assertEqual(sorted([x.name for x in snap2.inputs]), ["param2"]) expected_attribute_outputs_1 = { "manifest": "{}", "name": "{.metadata.name}", "size": "{.status.restoreSize}" } self.assertEqual(snap1.attribute_outputs, expected_attribute_outputs_1) expected_attribute_outputs_2 = { "manifest": "{}", "name": "{.metadata.name}", "size": "test" } self.assertEqual(snap2.attribute_outputs, expected_attribute_outputs_2) expected_outputs_1 = { "manifest": PipelineParam(name="manifest", op_name=snap1.name), "name": PipelineParam(name="name", op_name=snap1.name), "size": PipelineParam(name="name", op_name=snap1.name), } self.assertEqual(snap1.outputs, expected_outputs_1) expected_outputs_2 = { "manifest": PipelineParam(name="manifest", op_name=snap2.name), "name": PipelineParam(name="name", op_name=snap2.name), "size": PipelineParam(name="name", op_name=snap2.name), } self.assertEqual(snap2.outputs, expected_outputs_2) self.assertEqual(snap1.output, PipelineParam(name="name", op_name=snap1.name)) self.assertEqual(snap2.output, PipelineParam(name="size", op_name=snap2.name)) self.assertEqual(snap1.dependent_names, []) self.assertEqual(snap2.dependent_names, []) expected_snapshot_1 = k8s_client.V1TypedLocalObjectReference( api_group="snapshot.storage.k8s.io", kind="VolumeSnapshot", name=PipelineParam(name="name", op_name=vol.name)) self.assertEqual(snap1.snapshot, expected_snapshot_1) expected_snapshot_2 = k8s_client.V1TypedLocalObjectReference( api_group="snapshot.storage.k8s.io", kind="VolumeSnapshot", name=PipelineParam(name="param1")) assert (snap2.k8s_resource['apiVersion'] == "snapshot.storage.k8s.io/v1alpha1") self.assertEqual(snap2.snapshot, expected_snapshot_2) expected_snapshot_3 = k8s_client.V1TypedLocalObjectReference( api_group="snapshot.storage.k8s.io", kind="VolumeSnapshot", name=PipelineParam(name="param1")) self.assertEqual(snap3.snapshot, expected_snapshot_3) assert (snap3.k8s_resource['apiVersion'] == "snapshot.storage.k8s.io/v1beta1")
def assert_res(self, res, expected_spec): self.assertEqual(res.name, "submitrun") self.assertEqual(res.resource.action, "create") self.assertEqual( res.resource.success_condition, "status.metadata.state.life_cycle_state in (TERMINATED, SKIPPED, INTERNAL_ERROR)" ) self.assertEqual(res.resource.failure_condition, None) self.assertEqual(res.resource.manifest, None) expected_attribute_outputs = { "name": "{.metadata.name}", "job_id": "{.status.metadata.job_id}", "number_in_job": "{.status.metadata.number_in_job}", "run_id": "{.status.metadata.run_id}", "run_name": "{.status.metadata.run_name}", "life_cycle_state": "{.status.metadata.state.life_cycle_state}", "result_state": "{.status.metadata.state.result_state}", "notebook_output_result": "{.status.notebook_output.result}", "notebook_output_truncated": "{.status.notebook_output.truncated}", "error": "{.status.error}", "manifest": "{}" } self.assertEqual(res.attribute_outputs, expected_attribute_outputs) expected_outputs = { "name": PipelineParam(name="name", op_name=res.name), "job_id": PipelineParam(name="job_id", op_name=res.name), "number_in_job": PipelineParam(name="number_in_job", op_name=res.name), "run_id": PipelineParam(name="run_id", op_name=res.name), "run_name": PipelineParam(name="run_name", op_name=res.name), "life_cycle_state": PipelineParam(name="life_cycle_state", op_name=res.name), "result_state": PipelineParam(name="result_state", op_name=res.name), "notebook_output_result": PipelineParam(name="notebook_output_result", op_name=res.name), "notebook_output_truncated": PipelineParam(name="notebook_output_truncated", op_name=res.name), "error": PipelineParam(name="error", op_name=res.name), "manifest": PipelineParam(name="manifest", op_name=res.name) } self.assertEqual(res.outputs, expected_outputs) self.assertEqual(res.output, PipelineParam(name="name", op_name=res.name)) self.assertEqual(res.dependent_names, []) self.assertEqual(res.k8s_resource["kind"], "Run") self.assertEqual(res.k8s_resource["metadata"]["name"], "test-run") self.assertEqual(res.k8s_resource["spec"], expected_spec)
def test_basic(self): """Test basic usage.""" with Pipeline("somename") as p: param1 = PipelineParam("param1") param2 = PipelineParam("param2") vol = VolumeOp( name="myvol_creation", resource_name="myvol", size="1Gi", ) snap1 = VolumeSnapshotOp( name="mysnap_creation", resource_name=param1, volume=vol.volume, ) snap2 = VolumeSnapshotOp( name="mysnap_creation", resource_name="mysnap", pvc=param2, attribute_outputs={"size": "test"} ) self.assertEqual( sorted([x.name for x in snap1.inputs]), ["name", "param1"] ) self.assertEqual( sorted([x.name for x in snap2.inputs]), ["param2"] ) expected_attribute_outputs_1 = { "manifest": "{}", "name": "{.metadata.name}", "size": "{.status.restoreSize}" } self.assertEqual(snap1.attribute_outputs, expected_attribute_outputs_1) expected_attribute_outputs_2 = { "manifest": "{}", "name": "{.metadata.name}", "size": "test" } self.assertEqual(snap2.attribute_outputs, expected_attribute_outputs_2) expected_outputs_1 = { "manifest": PipelineParam(name="manifest", op_name=snap1.name), "name": PipelineParam(name="name", op_name=snap1.name), "size": PipelineParam(name="name", op_name=snap1.name), } self.assertEqual(snap1.outputs, expected_outputs_1) expected_outputs_2 = { "manifest": PipelineParam(name="manifest", op_name=snap2.name), "name": PipelineParam(name="name", op_name=snap2.name), "size": PipelineParam(name="name", op_name=snap2.name), } self.assertEqual(snap2.outputs, expected_outputs_2) self.assertEqual( snap1.output, PipelineParam(name="name", op_name=snap1.name) ) self.assertEqual( snap2.output, PipelineParam(name="size", op_name=snap2.name) ) self.assertEqual(snap1.dependent_names, []) self.assertEqual(snap2.dependent_names, []) expected_snapshot_1 = k8s_client.V1TypedLocalObjectReference( api_group="snapshot.storage.k8s.io", kind="VolumeSnapshot", name=PipelineParam(name="name", op_name=vol.name) ) self.assertEqual(snap1.snapshot, expected_snapshot_1) expected_snapshot_2 = k8s_client.V1TypedLocalObjectReference( api_group="snapshot.storage.k8s.io", kind="VolumeSnapshot", name=PipelineParam(name="param1") ) self.assertEqual(snap2.snapshot, expected_snapshot_2)