SDK - Components - Reorganized TaskSpec execution options (#2270)

This part of the spec was unused, so this is not a breaking change.
Consolidating Kubernetes-related options under a single attribute: `TaskSpec.execution_options.kubernetes_options`.
`TaskSpec.k8s_container_options` -> `TaskSpec.execution_options.kubernetes_options.main_container`
`TaskSpec.k8s_pod_options.spec` -> `TaskSpec.execution_options.kubernetes_options.pod_spec`
Added `TaskSpec.execution_options.retry_strategy.max_tetries` attribute.
This commit is contained in:
Alexey Volkov 2019-10-02 18:44:08 -07:00 committed by Kubernetes Prow Robot
parent be4f5851ed
commit 052a6ac0ce
2 changed files with 60 additions and 21 deletions

View File

@ -489,21 +489,57 @@ class OrPredicate(ModelBase):
super().__init__(locals()) super().__init__(locals())
class RetryStrategySpec(ModelBase):
_serialized_names = {
'max_retries': 'maxRetries',
}
def __init__(self,
max_retries: int,
):
super().__init__(locals())
class KubernetesExecutionOptionsSpec(ModelBase):
_serialized_names = {
'main_container': 'mainContainer',
'pod_spec': 'podSpec',
}
def __init__(self,
metadata: Optional[v1.ObjectMetaArgoSubset] = None,
main_container: Optional[v1.Container] = None,
pod_spec: Optional[v1.PodSpecArgoSubset] = None,
):
super().__init__(locals())
class ExecutionOptionsSpec(ModelBase):
_serialized_names = {
'retry_strategy': 'retryStrategy',
'kubernetes_options': 'kubernetesOptions',
}
def __init__(self,
retry_strategy: Optional[RetryStrategySpec] = None,
kubernetes_options: Optional[KubernetesExecutionOptionsSpec] = None,
):
super().__init__(locals())
class TaskSpec(ModelBase): class TaskSpec(ModelBase):
'''Task specification. Task is a "configured" component - a component supplied with arguments and other applied configuration changes.''' '''Task specification. Task is a "configured" component - a component supplied with arguments and other applied configuration changes.'''
_serialized_names = { _serialized_names = {
'component_ref': 'componentRef', 'component_ref': 'componentRef',
'is_enabled': 'isEnabled', 'is_enabled': 'isEnabled',
'k8s_container_options': 'k8sContainerOptions', 'execution_options': 'executionOptions'
'k8s_pod_options': 'k8sPodOptions',
} }
def __init__(self, def __init__(self,
component_ref: ComponentReference, component_ref: ComponentReference,
arguments: Optional[Mapping[str, ArgumentType]] = None, arguments: Optional[Mapping[str, ArgumentType]] = None,
is_enabled: Optional[PredicateType] = None, is_enabled: Optional[PredicateType] = None,
k8s_container_options: Optional[v1.Container] = None, execution_options: Optional[ExecutionOptionsSpec] = None,
k8s_pod_options: Optional[v1.PodArgoSubset] = None,
): ):
super().__init__(locals()) super().__init__(locals())
#TODO: If component_ref is resolved to component spec, then check that the arguments correspond to the inputs #TODO: If component_ref is resolved to component spec, then check that the arguments correspond to the inputs

View File

@ -135,7 +135,9 @@ implementation:
tasks: tasks:
task 1: task 1:
componentRef: {name: Comp 1} componentRef: {name: Comp 1}
k8sContainerOptions: executionOptions:
kubernetesOptions:
mainContainer:
resources: resources:
requests: requests:
memory: 1024Mi memory: 1024Mi
@ -144,7 +146,7 @@ implementation:
''' '''
struct = load_yaml(component_text) struct = load_yaml(component_text)
component_spec = ComponentSpec.from_dict(struct) component_spec = ComponentSpec.from_dict(struct)
self.assertEqual(component_spec.implementation.graph.tasks['task 1'].k8s_container_options.resources.requests['memory'], '1024Mi') self.assertEqual(component_spec.implementation.graph.tasks['task 1'].execution_options.kubernetes_options.main_container.resources.requests['memory'], '1024Mi')
def test_handle_parsing_task_volumes_and_mounts(self): def test_handle_parsing_task_volumes_and_mounts(self):
@ -154,20 +156,21 @@ implementation:
tasks: tasks:
task 1: task 1:
componentRef: {name: Comp 1} componentRef: {name: Comp 1}
k8sContainerOptions: executionOptions:
kubernetesOptions:
mainContainer:
volumeMounts: volumeMounts:
- name: workdir - name: workdir
mountPath: /mnt/vol mountPath: /mnt/vol
k8sPodOptions: podSpec:
spec:
volumes: volumes:
- name: workdir - name: workdir
emptyDir: {} emptyDir: {}
''' '''
struct = load_yaml(component_text) struct = load_yaml(component_text)
component_spec = ComponentSpec.from_dict(struct) component_spec = ComponentSpec.from_dict(struct)
self.assertEqual(component_spec.implementation.graph.tasks['task 1'].k8s_pod_options.spec.volumes[0].name, 'workdir') self.assertEqual(component_spec.implementation.graph.tasks['task 1'].execution_options.kubernetes_options.pod_spec.volumes[0].name, 'workdir')
self.assertTrue(component_spec.implementation.graph.tasks['task 1'].k8s_pod_options.spec.volumes[0].empty_dir is not None) self.assertIsNotNone(component_spec.implementation.graph.tasks['task 1'].execution_options.kubernetes_options.pod_spec.volumes[0].empty_dir)
def test_load_graph_component(self): def test_load_graph_component(self):
component_text = '''\ component_text = '''\