Put back deprecated types and hint to v1
Signed-off-by: Hidde Beydals <hidde@hhh.computer>
This commit is contained in:
parent
ee7d9b3317
commit
861343d18e
|
@ -0,0 +1,159 @@
|
|||
/*
|
||||
Copyright 2022 The Flux 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.
|
||||
*/
|
||||
|
||||
package v1beta2
|
||||
|
||||
import (
|
||||
"path"
|
||||
"regexp"
|
||||
"strings"
|
||||
|
||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||
)
|
||||
|
||||
// Artifact represents the output of a Source reconciliation.
|
||||
//
|
||||
// Deprecated: use Artifact from api/v1 instead. This type will be removed in
|
||||
// a future release.
|
||||
type Artifact struct {
|
||||
// Path is the relative file path of the Artifact. It can be used to locate
|
||||
// the file in the root of the Artifact storage on the local file system of
|
||||
// the controller managing the Source.
|
||||
// +required
|
||||
Path string `json:"path"`
|
||||
|
||||
// URL is the HTTP address of the Artifact as exposed by the controller
|
||||
// managing the Source. It can be used to retrieve the Artifact for
|
||||
// consumption, e.g. by another controller applying the Artifact contents.
|
||||
// +required
|
||||
URL string `json:"url"`
|
||||
|
||||
// Revision is a human-readable identifier traceable in the origin source
|
||||
// system. It can be a Git commit SHA, Git tag, a Helm chart version, etc.
|
||||
// +optional
|
||||
Revision string `json:"revision"`
|
||||
|
||||
// Checksum is the SHA256 checksum of the Artifact file.
|
||||
// Deprecated: use Artifact.Digest instead.
|
||||
// +optional
|
||||
Checksum string `json:"checksum,omitempty"`
|
||||
|
||||
// Digest is the digest of the file in the form of '<algorithm>:<checksum>'.
|
||||
// +optional
|
||||
// +kubebuilder:validation:Pattern="^[a-z0-9]+(?:[.+_-][a-z0-9]+)*:[a-zA-Z0-9=_-]+$"
|
||||
Digest string `json:"digest,omitempty"`
|
||||
|
||||
// LastUpdateTime is the timestamp corresponding to the last update of the
|
||||
// Artifact.
|
||||
// +required
|
||||
LastUpdateTime metav1.Time `json:"lastUpdateTime,omitempty"`
|
||||
|
||||
// Size is the number of bytes in the file.
|
||||
// +optional
|
||||
Size *int64 `json:"size,omitempty"`
|
||||
|
||||
// Metadata holds upstream information such as OCI annotations.
|
||||
// +optional
|
||||
Metadata map[string]string `json:"metadata,omitempty"`
|
||||
}
|
||||
|
||||
// HasRevision returns if the given revision matches the current Revision of
|
||||
// the Artifact.
|
||||
func (in *Artifact) HasRevision(revision string) bool {
|
||||
if in == nil {
|
||||
return false
|
||||
}
|
||||
return TransformLegacyRevision(in.Revision) == TransformLegacyRevision(revision)
|
||||
}
|
||||
|
||||
// HasChecksum returns if the given checksum matches the current Checksum of
|
||||
// the Artifact.
|
||||
func (in *Artifact) HasChecksum(checksum string) bool {
|
||||
if in == nil {
|
||||
return false
|
||||
}
|
||||
return in.Checksum == checksum
|
||||
}
|
||||
|
||||
// ArtifactDir returns the artifact dir path in the form of
|
||||
// '<kind>/<namespace>/<name>'.
|
||||
func ArtifactDir(kind, namespace, name string) string {
|
||||
kind = strings.ToLower(kind)
|
||||
return path.Join(kind, namespace, name)
|
||||
}
|
||||
|
||||
// ArtifactPath returns the artifact path in the form of
|
||||
// '<kind>/<namespace>/name>/<filename>'.
|
||||
func ArtifactPath(kind, namespace, name, filename string) string {
|
||||
return path.Join(ArtifactDir(kind, namespace, name), filename)
|
||||
}
|
||||
|
||||
// TransformLegacyRevision transforms a "legacy" revision string into a "new"
|
||||
// revision string. It accepts the following formats:
|
||||
//
|
||||
// - main/5394cb7f48332b2de7c17dd8b8384bbc84b7e738
|
||||
// - feature/branch/5394cb7f48332b2de7c17dd8b8384bbc84b7e738
|
||||
// - HEAD/5394cb7f48332b2de7c17dd8b8384bbc84b7e738
|
||||
// - tag/55609ff9d959589ed917ce32e6bc0f0a36809565f308602c15c3668965979edc
|
||||
// - d52bde83c5b2bd0fa7910264e0afc3ac9cfe9b6636ca29c05c09742f01d5a4bd
|
||||
//
|
||||
// Which are transformed into the following formats respectively:
|
||||
//
|
||||
// - main@sha1:5394cb7f48332b2de7c17dd8b8384bbc84b7e738
|
||||
// - feature/branch@sha1:5394cb7f48332b2de7c17dd8b8384bbc84b7e738
|
||||
// - sha1:5394cb7f48332b2de7c17dd8b8384bbc84b7e738
|
||||
// - tag@sha256:55609ff9d959589ed917ce32e6bc0f0a36809565f308602c15c3668965979edc
|
||||
// - sha256:d52bde83c5b2bd0fa7910264e0afc3ac9cfe9b6636ca29c05c09742f01d5a4bd
|
||||
//
|
||||
// Deprecated, this function exists for backwards compatibility with existing
|
||||
// resources, and to provide a transition period. Will be removed in a future
|
||||
// release.
|
||||
func TransformLegacyRevision(rev string) string {
|
||||
if rev != "" && strings.LastIndex(rev, ":") == -1 {
|
||||
if i := strings.LastIndex(rev, "/"); i >= 0 {
|
||||
sha := rev[i+1:]
|
||||
if algo := determineSHAType(sha); algo != "" {
|
||||
if name := rev[:i]; name != "HEAD" {
|
||||
return name + "@" + algo + ":" + sha
|
||||
}
|
||||
return algo + ":" + sha
|
||||
}
|
||||
}
|
||||
if algo := determineSHAType(rev); algo != "" {
|
||||
return algo + ":" + rev
|
||||
}
|
||||
}
|
||||
return rev
|
||||
}
|
||||
|
||||
// isAlphaNumHex returns true if the given string only contains 0-9 and a-f
|
||||
// characters.
|
||||
var isAlphaNumHex = regexp.MustCompile(`^[0-9a-f]+$`).MatchString
|
||||
|
||||
// determineSHAType returns the SHA algorithm used to compute the provided hex.
|
||||
// The determination is heuristic and based on the length of the hex string. If
|
||||
// the size is not recognized, an empty string is returned.
|
||||
func determineSHAType(hex string) string {
|
||||
if isAlphaNumHex(hex) {
|
||||
switch len(hex) {
|
||||
case 40:
|
||||
return "sha1"
|
||||
case 64:
|
||||
return "sha256"
|
||||
}
|
||||
}
|
||||
return ""
|
||||
}
|
|
@ -0,0 +1,78 @@
|
|||
/*
|
||||
Copyright 2023 The Flux 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.
|
||||
*/
|
||||
|
||||
package v1beta2
|
||||
|
||||
import "testing"
|
||||
|
||||
func TestTransformLegacyRevision(t *testing.T) {
|
||||
tests := []struct {
|
||||
rev string
|
||||
want string
|
||||
}{
|
||||
{
|
||||
rev: "HEAD/5394cb7f48332b2de7c17dd8b8384bbc84b7e738",
|
||||
want: "sha1:5394cb7f48332b2de7c17dd8b8384bbc84b7e738",
|
||||
},
|
||||
{
|
||||
rev: "main/5394cb7f48332b2de7c17dd8b8384bbc84b7e738",
|
||||
want: "main@sha1:5394cb7f48332b2de7c17dd8b8384bbc84b7e738",
|
||||
},
|
||||
{
|
||||
rev: "main@sha1:5394cb7f48332b2de7c17dd8b8384bbc84b7e738",
|
||||
want: "main@sha1:5394cb7f48332b2de7c17dd8b8384bbc84b7e738",
|
||||
},
|
||||
{
|
||||
rev: "feature/branch/5394cb7f48332b2de7c17dd8b8384bbc84b7e738",
|
||||
want: "feature/branch@sha1:5394cb7f48332b2de7c17dd8b8384bbc84b7e738",
|
||||
},
|
||||
{
|
||||
rev: "feature/branch@sha1:5394cb7f48332b2de7c17dd8b8384bbc84b7e738",
|
||||
want: "feature/branch@sha1:5394cb7f48332b2de7c17dd8b8384bbc84b7e738",
|
||||
},
|
||||
{
|
||||
rev: "5ac85ca617f3774baff4ae0a420b810b2546dbc9af9f346b1d55c5ed9873c55c",
|
||||
want: "sha256:5ac85ca617f3774baff4ae0a420b810b2546dbc9af9f346b1d55c5ed9873c55c",
|
||||
},
|
||||
{
|
||||
rev: "v1.0.0",
|
||||
want: "v1.0.0",
|
||||
},
|
||||
{
|
||||
rev: "v1.0.0-rc1",
|
||||
want: "v1.0.0-rc1",
|
||||
},
|
||||
{
|
||||
rev: "v1.0.0-rc1+metadata",
|
||||
want: "v1.0.0-rc1+metadata",
|
||||
},
|
||||
{
|
||||
rev: "arbitrary/revision",
|
||||
want: "arbitrary/revision",
|
||||
},
|
||||
{
|
||||
rev: "5394cb7f48332b2de7c17dd8b8384bbc84b7xxxx",
|
||||
want: "5394cb7f48332b2de7c17dd8b8384bbc84b7xxxx",
|
||||
},
|
||||
}
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.rev, func(t *testing.T) {
|
||||
if got := TransformLegacyRevision(tt.rev); got != tt.want {
|
||||
t.Errorf("TransformLegacyRevision() = %v, want %v", got, tt.want)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
|
@ -0,0 +1,107 @@
|
|||
/*
|
||||
Copyright 2022 The Flux 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.
|
||||
*/
|
||||
|
||||
package v1beta2
|
||||
|
||||
const SourceFinalizer = "finalizers.fluxcd.io"
|
||||
|
||||
const (
|
||||
// ArtifactInStorageCondition indicates the availability of the Artifact in
|
||||
// the storage.
|
||||
// If True, the Artifact is stored successfully.
|
||||
// This Condition is only present on the resource if the Artifact is
|
||||
// successfully stored.
|
||||
ArtifactInStorageCondition string = "ArtifactInStorage"
|
||||
|
||||
// ArtifactOutdatedCondition indicates the current Artifact of the Source
|
||||
// is outdated.
|
||||
// This is a "negative polarity" or "abnormal-true" type, and is only
|
||||
// present on the resource if it is True.
|
||||
ArtifactOutdatedCondition string = "ArtifactOutdated"
|
||||
|
||||
// SourceVerifiedCondition indicates the integrity verification of the
|
||||
// Source.
|
||||
// If True, the integrity check succeeded. If False, it failed.
|
||||
// This Condition is only present on the resource if the integrity check
|
||||
// is enabled.
|
||||
SourceVerifiedCondition string = "SourceVerified"
|
||||
|
||||
// FetchFailedCondition indicates a transient or persistent fetch failure
|
||||
// of an upstream Source.
|
||||
// If True, observations on the upstream Source revision may be impossible,
|
||||
// and the Artifact available for the Source may be outdated.
|
||||
// This is a "negative polarity" or "abnormal-true" type, and is only
|
||||
// present on the resource if it is True.
|
||||
FetchFailedCondition string = "FetchFailed"
|
||||
|
||||
// BuildFailedCondition indicates a transient or persistent build failure
|
||||
// of a Source's Artifact.
|
||||
// If True, the Source can be in an ArtifactOutdatedCondition.
|
||||
// This is a "negative polarity" or "abnormal-true" type, and is only
|
||||
// present on the resource if it is True.
|
||||
BuildFailedCondition string = "BuildFailed"
|
||||
|
||||
// StorageOperationFailedCondition indicates a transient or persistent
|
||||
// failure related to storage. If True, the reconciliation failed while
|
||||
// performing some filesystem operation.
|
||||
// This is a "negative polarity" or "abnormal-true" type, and is only
|
||||
// present on the resource if it is True.
|
||||
StorageOperationFailedCondition string = "StorageOperationFailed"
|
||||
)
|
||||
|
||||
// Reasons are provided as utility, and not part of the declarative API.
|
||||
const (
|
||||
// URLInvalidReason signals that a given Source has an invalid URL.
|
||||
URLInvalidReason string = "URLInvalid"
|
||||
|
||||
// AuthenticationFailedReason signals that a Secret does not have the
|
||||
// required fields, or the provided credentials do not match.
|
||||
AuthenticationFailedReason string = "AuthenticationFailed"
|
||||
|
||||
// VerificationError signals that the Source's verification
|
||||
// check failed.
|
||||
VerificationError string = "VerificationError"
|
||||
|
||||
// DirCreationFailedReason signals a failure caused by a directory creation
|
||||
// operation.
|
||||
DirCreationFailedReason string = "DirectoryCreationFailed"
|
||||
|
||||
// StatOperationFailedReason signals a failure caused by a stat operation on
|
||||
// a path.
|
||||
StatOperationFailedReason string = "StatOperationFailed"
|
||||
|
||||
// ReadOperationFailedReason signals a failure caused by a read operation.
|
||||
ReadOperationFailedReason string = "ReadOperationFailed"
|
||||
|
||||
// AcquireLockFailedReason signals a failure in acquiring lock.
|
||||
AcquireLockFailedReason string = "AcquireLockFailed"
|
||||
|
||||
// InvalidPathReason signals a failure caused by an invalid path.
|
||||
InvalidPathReason string = "InvalidPath"
|
||||
|
||||
// ArchiveOperationFailedReason signals a failure in archive operation.
|
||||
ArchiveOperationFailedReason string = "ArchiveOperationFailed"
|
||||
|
||||
// SymlinkUpdateFailedReason signals a failure in updating a symlink.
|
||||
SymlinkUpdateFailedReason string = "SymlinkUpdateFailed"
|
||||
|
||||
// ArtifactUpToDateReason signals that an existing Artifact is up-to-date
|
||||
// with the Source.
|
||||
ArtifactUpToDateReason string = "ArtifactUpToDate"
|
||||
|
||||
// CacheOperationFailedReason signals a failure in cache operation.
|
||||
CacheOperationFailedReason string = "CacheOperationFailed"
|
||||
)
|
|
@ -0,0 +1,48 @@
|
|||
/*
|
||||
Copyright 2022 The Flux 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.
|
||||
*/
|
||||
|
||||
package v1beta2
|
||||
|
||||
import (
|
||||
"time"
|
||||
|
||||
"k8s.io/apimachinery/pkg/runtime"
|
||||
)
|
||||
|
||||
const (
|
||||
// SourceIndexKey is the key used for indexing objects based on their
|
||||
// referenced Source.
|
||||
SourceIndexKey string = ".metadata.source"
|
||||
)
|
||||
|
||||
// Source interface must be supported by all API types.
|
||||
// Source is the interface that provides generic access to the Artifact and
|
||||
// interval. It must be supported by all kinds of the source.toolkit.fluxcd.io
|
||||
// API group.
|
||||
//
|
||||
// Deprecated: use the Source interface from api/v1 instead. This type will be
|
||||
// removed in a future release.
|
||||
//
|
||||
// +k8s:deepcopy-gen=false
|
||||
type Source interface {
|
||||
runtime.Object
|
||||
// GetRequeueAfter returns the duration after which the source must be
|
||||
// reconciled again.
|
||||
GetRequeueAfter() time.Duration
|
||||
// GetArtifact returns the latest artifact from the source if present in
|
||||
// the status sub-resource.
|
||||
GetArtifact() *Artifact
|
||||
}
|
|
@ -26,9 +26,37 @@ import (
|
|||
"github.com/fluxcd/pkg/apis/meta"
|
||||
apiv1 "github.com/fluxcd/source-controller/api/v1"
|
||||
"k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||
runtime "k8s.io/apimachinery/pkg/runtime"
|
||||
"k8s.io/apimachinery/pkg/runtime"
|
||||
)
|
||||
|
||||
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
|
||||
func (in *Artifact) DeepCopyInto(out *Artifact) {
|
||||
*out = *in
|
||||
in.LastUpdateTime.DeepCopyInto(&out.LastUpdateTime)
|
||||
if in.Size != nil {
|
||||
in, out := &in.Size, &out.Size
|
||||
*out = new(int64)
|
||||
**out = **in
|
||||
}
|
||||
if in.Metadata != nil {
|
||||
in, out := &in.Metadata, &out.Metadata
|
||||
*out = make(map[string]string, len(*in))
|
||||
for key, val := range *in {
|
||||
(*out)[key] = val
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Artifact.
|
||||
func (in *Artifact) DeepCopy() *Artifact {
|
||||
if in == nil {
|
||||
return nil
|
||||
}
|
||||
out := new(Artifact)
|
||||
in.DeepCopyInto(out)
|
||||
return out
|
||||
}
|
||||
|
||||
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
|
||||
func (in *Bucket) DeepCopyInto(out *Bucket) {
|
||||
*out = *in
|
||||
|
|
|
@ -1183,6 +1183,127 @@ OCIRepositoryStatus
|
|||
</table>
|
||||
</div>
|
||||
</div>
|
||||
<h3 id="source.toolkit.fluxcd.io/v1beta2.Artifact">Artifact
|
||||
</h3>
|
||||
<p>Artifact represents the output of a Source reconciliation.</p>
|
||||
<p>Deprecated: use Artifact from api/v1 instead. This type will be removed in
|
||||
a future release.</p>
|
||||
<div class="md-typeset__scrollwrap">
|
||||
<div class="md-typeset__table">
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Field</th>
|
||||
<th>Description</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>
|
||||
<code>path</code><br>
|
||||
<em>
|
||||
string
|
||||
</em>
|
||||
</td>
|
||||
<td>
|
||||
<p>Path is the relative file path of the Artifact. It can be used to locate
|
||||
the file in the root of the Artifact storage on the local file system of
|
||||
the controller managing the Source.</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<code>url</code><br>
|
||||
<em>
|
||||
string
|
||||
</em>
|
||||
</td>
|
||||
<td>
|
||||
<p>URL is the HTTP address of the Artifact as exposed by the controller
|
||||
managing the Source. It can be used to retrieve the Artifact for
|
||||
consumption, e.g. by another controller applying the Artifact contents.</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<code>revision</code><br>
|
||||
<em>
|
||||
string
|
||||
</em>
|
||||
</td>
|
||||
<td>
|
||||
<em>(Optional)</em>
|
||||
<p>Revision is a human-readable identifier traceable in the origin source
|
||||
system. It can be a Git commit SHA, Git tag, a Helm chart version, etc.</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<code>checksum</code><br>
|
||||
<em>
|
||||
string
|
||||
</em>
|
||||
</td>
|
||||
<td>
|
||||
<em>(Optional)</em>
|
||||
<p>Checksum is the SHA256 checksum of the Artifact file.
|
||||
Deprecated: use Artifact.Digest instead.</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<code>digest</code><br>
|
||||
<em>
|
||||
string
|
||||
</em>
|
||||
</td>
|
||||
<td>
|
||||
<em>(Optional)</em>
|
||||
<p>Digest is the digest of the file in the form of ‘<algorithm>:<checksum>’.</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<code>lastUpdateTime</code><br>
|
||||
<em>
|
||||
<a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.19/#time-v1-meta">
|
||||
Kubernetes meta/v1.Time
|
||||
</a>
|
||||
</em>
|
||||
</td>
|
||||
<td>
|
||||
<p>LastUpdateTime is the timestamp corresponding to the last update of the
|
||||
Artifact.</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<code>size</code><br>
|
||||
<em>
|
||||
int64
|
||||
</em>
|
||||
</td>
|
||||
<td>
|
||||
<em>(Optional)</em>
|
||||
<p>Size is the number of bytes in the file.</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<code>metadata</code><br>
|
||||
<em>
|
||||
map[string]string
|
||||
</em>
|
||||
</td>
|
||||
<td>
|
||||
<em>(Optional)</em>
|
||||
<p>Metadata holds upstream information such as OCI annotations.</p>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
<h3 id="source.toolkit.fluxcd.io/v1beta2.BucketSpec">BucketSpec
|
||||
</h3>
|
||||
<p>
|
||||
|
@ -3090,6 +3211,14 @@ trusted public keys.</p>
|
|||
</table>
|
||||
</div>
|
||||
</div>
|
||||
<h3 id="source.toolkit.fluxcd.io/v1beta2.Source">Source
|
||||
</h3>
|
||||
<p>Source interface must be supported by all API types.
|
||||
Source is the interface that provides generic access to the Artifact and
|
||||
interval. It must be supported by all kinds of the source.toolkit.fluxcd.io
|
||||
API group.</p>
|
||||
<p>Deprecated: use the Source interface from api/v1 instead. This type will be
|
||||
removed in a future release.</p>
|
||||
<div class="admonition note">
|
||||
<p class="last">This page was automatically generated with <code>gen-crd-api-reference-docs</code></p>
|
||||
</div>
|
||||
|
|
Loading…
Reference in New Issue