66 lines
2.2 KiB
Python
66 lines
2.2 KiB
Python
# Copyright 2020,2021 The Kubeflow Authors
|
|
#
|
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
# you may not use this file except in compliance with the License.
|
|
# You may obtain a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
# See the License for the specific language governing permissions and
|
|
# limitations under the License.
|
|
|
|
from kfp import dsl, components
|
|
|
|
component_op = components.load_component_from_text('''
|
|
name: Component with optional inputs
|
|
inputs:
|
|
- {name: required_input, type: String, optional: false}
|
|
- {name: optional_input_1, type: String, optional: true}
|
|
- {name: optional_input_2, type: String, optional: true}
|
|
implementation:
|
|
container:
|
|
image: gcr.io/google-containers/busybox
|
|
command:
|
|
- echo
|
|
args:
|
|
- --arg0
|
|
- {inputValue: required_input}
|
|
- if:
|
|
cond:
|
|
isPresent: optional_input_1
|
|
then:
|
|
- --arg1
|
|
- {inputValue: optional_input_1}
|
|
- if:
|
|
cond:
|
|
isPresent: optional_input_2
|
|
then:
|
|
- --arg2
|
|
- {inputValue: optional_input_2}
|
|
else:
|
|
- --arg2
|
|
- 'default value'
|
|
''')
|
|
|
|
|
|
@dsl.pipeline(name='one-step-pipeline-with-if-placeholder-supply-both')
|
|
def pipeline_both(input0: str = 'input0',
|
|
input1: str = 'input1',
|
|
input2: str = 'input2'):
|
|
# supply both optional_input_1 and optional_input_2
|
|
component = component_op(
|
|
required_input=input0, optional_input_1=input1, optional_input_2=input2)
|
|
|
|
|
|
@dsl.pipeline(name='one-step-pipeline-with-if-placeholder-supply-none')
|
|
def pipeline_none(input0: str = 'input0'):
|
|
# supply neither optional_input_1 nor optional_input_2
|
|
# Note, KFP only supports compile-time optional arguments, e.g. it's not
|
|
# supported to write a pipeline that supplies both inputs and pass None
|
|
# at runtime -- in that case, the input arguments will be interpreted as
|
|
# the raw text "None".
|
|
component = component_op(required_input=input0)
|