blob: 289c96cf6eb18230957e1622417e48b10f0a03da [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you 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.
*/
package v1alpha08
import (
"strconv"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)
// Describes the general build specification for this platform. Specific for build scenarios.
type BuildPlatformSpec struct {
// Describes a build template for building workflows. Base for the internal SonataFlowBuild resource.
Template BuildTemplate `json:"template,omitempty"`
// Describes the platform configuration for building workflows.
Config BuildPlatformConfig `json:"config,omitempty"`
}
// Describes the configuration for building in the given platform
type BuildPlatformConfig struct {
// a base image that can be used as base layer for all images.
// It can be useful if you want to provide some custom base image with further utility software
BaseImage string `json:"baseImage,omitempty"`
// how much time to wait before time out the build process
Timeout *metav1.Duration `json:"timeout,omitempty"`
// BuildStrategy to use to build workflows in the platform.
// Usually, the operator elect the strategy based on the platform.
// Note that this field might be read only in certain scenarios.
BuildStrategy BuildStrategy `json:"strategy,omitempty"`
// BuildStrategyOptions additional options to add to the build strategy.
// See https://sonataflow.org/serverlessworkflow/main/cloud/operator/build-and-deploy-workflows.html
BuildStrategyOptions map[string]string `json:"strategyOptions,omitempty"`
// Registry the registry where to publish the built image
Registry RegistrySpec `json:"registry,omitempty"`
}
// GetTimeout returns the specified duration or a default one
func (b *BuildPlatformConfig) GetTimeout() metav1.Duration {
if b.Timeout == nil {
return metav1.Duration{}
}
return *b.Timeout
}
// IsStrategyOptionEnabled return whether the BuildStrategyOptions is enabled or not
func (b *BuildPlatformConfig) IsStrategyOptionEnabled(option string) bool {
if enabled, ok := b.BuildStrategyOptions[option]; ok {
res, err := strconv.ParseBool(enabled)
if err != nil {
return false
}
return res
}
return false
}
func (b *BuildPlatformConfig) IsStrategyOptionEmpty(option string) bool {
if v, ok := b.BuildStrategyOptions[option]; ok {
return len(v) == 0
}
return false
}
// RegistrySpec provides the configuration for the container registry
type RegistrySpec struct {
// if the container registry is insecure (ie, http only)
Insecure bool `json:"insecure,omitempty"`
// the URI to access
Address string `json:"address,omitempty"`
// the secret where credentials are stored
Secret string `json:"secret,omitempty"`
// the configmap which stores the Certificate Authority
CA string `json:"ca,omitempty"`
// the registry organization
Organization string `json:"organization,omitempty"`
}
type BuildStrategy string
const (
// OperatorBuildStrategy uses the operator builder to perform the workflow build
// E.g. on Minikube or Kubernetes the container-builder strategies
OperatorBuildStrategy BuildStrategy = "operator"
// PlatformBuildStrategy uses the cluster to perform the build.
// E.g. on OpenShift, BuildConfig.
PlatformBuildStrategy BuildStrategy = "platform"
// In the future we can have "custom" which will delegate the build to an external actor provided by the administrator
// See https://issues.redhat.com/browse/KOGITO-9084
)