-
Notifications
You must be signed in to change notification settings - Fork 70
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #139 from fluxcd/v1alpha2-api
Add v1alpha2 API version
- Loading branch information
Showing
18 changed files
with
1,908 additions
and
208 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,25 @@ | ||
/* | ||
Copyright 2020 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 v1alpha2 contains API types for the image v1alpha2 API | ||
// group. The types here are concerned with automated updates to git, | ||
// based on metadata from OCI image registries gathered by the | ||
// image-reflector-controller. There is some rearrangement from | ||
// v1alpha1 to make room for future enhancements. | ||
// | ||
// +kubebuilder:object:generate=true | ||
// +groupName=image.toolkit.fluxcd.io | ||
package v1alpha2 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,90 @@ | ||
/* | ||
Copyright 2020 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 v1alpha2 | ||
|
||
import ( | ||
"github.com/fluxcd/pkg/apis/meta" | ||
sourcev1 "github.com/fluxcd/source-controller/api/v1beta1" | ||
) | ||
|
||
type GitSpec struct { | ||
// Checkout gives the parameters for cloning the git repository, | ||
// ready to make changes. If not present, the `spec.ref` field from the | ||
// referenced `GitRepository` or its default will be used. | ||
// +optional | ||
Checkout *GitCheckoutSpec `json:"checkout,omitempty"` | ||
|
||
// Commit specifies how to commit to the git repository. | ||
// +required | ||
Commit CommitSpec `json:"commit"` | ||
|
||
// Push specifies how and where to push commits made by the | ||
// automation. If missing, commits are pushed (back) to | ||
// `.spec.checkout.branch` or its default. | ||
// +optional | ||
Push *PushSpec `json:"push,omitempty"` | ||
} | ||
|
||
type GitCheckoutSpec struct { | ||
// Reference gives a branch, tag or commit to clone from the Git | ||
// repository. | ||
// +required | ||
Reference sourcev1.GitRepositoryRef `json:"ref"` | ||
} | ||
|
||
// CommitSpec specifies how to commit changes to the git repository | ||
type CommitSpec struct { | ||
// Author gives the email and optionally the name to use as the | ||
// author of commits. | ||
// +required | ||
Author CommitUser `json:"author"` | ||
// SigningKey provides the option to sign commits with a GPG key | ||
// +optional | ||
SigningKey *SigningKey `json:"signingKey,omitempty"` | ||
// MessageTemplate provides a template for the commit message, | ||
// into which will be interpolated the details of the change made. | ||
// +optional | ||
MessageTemplate string `json:"messageTemplate,omitempty"` | ||
} | ||
|
||
type CommitUser struct { | ||
// Name gives the name to provide when making a commit. | ||
// +optional | ||
Name string `json:"name,omitempty"` | ||
// Email gives the email to provide when making a commit. | ||
// +required | ||
Email string `json:"email"` | ||
} | ||
|
||
// SigningKey references a Kubernetes secret that contains a GPG keypair | ||
type SigningKey struct { | ||
// SecretRef holds the name to a secret that contains a 'git.asc' key | ||
// corresponding to the ASCII Armored file containing the GPG signing | ||
// keypair as the value. It must be in the same namespace as the | ||
// ImageUpdateAutomation. | ||
// +required | ||
SecretRef meta.LocalObjectReference `json:"secretRef,omitempty"` | ||
} | ||
|
||
// PushSpec specifies how and where to push commits. | ||
type PushSpec struct { | ||
// Branch specifies that commits should be pushed to the branch | ||
// named. The branch is created using `.spec.checkout.branch` as the | ||
// starting point, if it doesn't already exist. | ||
// +required | ||
Branch string `json:"branch"` | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,36 @@ | ||
/* | ||
Copyright 2020 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 v1alpha2 contains API Schema definitions for the image v1alpha2 API group | ||
//+kubebuilder:object:generate=true | ||
//+groupName=image.toolkit.fluxcd.io | ||
package v1alpha2 | ||
|
||
import ( | ||
"k8s.io/apimachinery/pkg/runtime/schema" | ||
"sigs.k8s.io/controller-runtime/pkg/scheme" | ||
) | ||
|
||
var ( | ||
// GroupVersion is group version used to register these objects | ||
GroupVersion = schema.GroupVersion{Group: "image.toolkit.fluxcd.io", Version: "v1alpha2"} | ||
|
||
// SchemeBuilder is used to add go types to the GroupVersionKind scheme | ||
SchemeBuilder = &scheme.Builder{GroupVersion: GroupVersion} | ||
|
||
// AddToScheme adds the types in this group-version to the given scheme. | ||
AddToScheme = SchemeBuilder.AddToScheme | ||
) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,151 @@ | ||
/* | ||
Copyright 2020 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 v1alpha2 | ||
|
||
import ( | ||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" | ||
|
||
"github.com/fluxcd/pkg/apis/meta" | ||
) | ||
|
||
const ImageUpdateAutomationKind = "ImageUpdateAutomation" | ||
|
||
// ImageUpdateAutomationSpec defines the desired state of ImageUpdateAutomation | ||
type ImageUpdateAutomationSpec struct { | ||
// SourceRef refers to the resource giving access details | ||
// to a git repository. | ||
// +required | ||
SourceRef SourceReference `json:"sourceRef"` | ||
// GitSpec contains all the git-specific definitions. This is | ||
// technically optional, but in practice mandatory until there are | ||
// other kinds of source allowed. | ||
// +optional | ||
GitSpec *GitSpec `json:"git,omitempty"` | ||
|
||
// Interval gives an lower bound for how often the automation | ||
// run should be attempted. | ||
// +required | ||
Interval metav1.Duration `json:"interval"` | ||
|
||
// Update gives the specification for how to update the files in | ||
// the repository. This can be left empty, to use the default | ||
// value. | ||
// +kubebuilder:default={"strategy":"Setters"} | ||
Update *UpdateStrategy `json:"update,omitempty"` | ||
|
||
// Suspend tells the controller to not run this automation, until | ||
// it is unset (or set to false). Defaults to false. | ||
// +optional | ||
Suspend bool `json:"suspend,omitempty"` | ||
} | ||
|
||
// UpdateStrategyName is the type for names that go in | ||
// .update.strategy. NB the value in the const immediately below. | ||
// +kubebuilder:validation:Enum=Setters | ||
type UpdateStrategyName string | ||
|
||
const ( | ||
// UpdateStrategySetters is the name of the update strategy that | ||
// uses kyaml setters. NB the value in the enum annotation for the | ||
// type, above. | ||
UpdateStrategySetters UpdateStrategyName = "Setters" | ||
) | ||
|
||
// UpdateStrategy is a union of the various strategies for updating | ||
// the Git repository. Parameters for each strategy (if any) can be | ||
// inlined here. | ||
type UpdateStrategy struct { | ||
// Strategy names the strategy to be used. | ||
// +required | ||
// +kubebuilder:default=Setters | ||
Strategy UpdateStrategyName `json:"strategy"` | ||
|
||
// Path to the directory containing the manifests to be updated. | ||
// Defaults to 'None', which translates to the root path | ||
// of the GitRepositoryRef. | ||
// +optional | ||
Path string `json:"path,omitempty"` | ||
} | ||
|
||
// ImageUpdateAutomationStatus defines the observed state of ImageUpdateAutomation | ||
type ImageUpdateAutomationStatus struct { | ||
// LastAutomationRunTime records the last time the controller ran | ||
// this automation through to completion (even if no updates were | ||
// made). | ||
// +optional | ||
LastAutomationRunTime *metav1.Time `json:"lastAutomationRunTime,omitempty"` | ||
// LastPushCommit records the SHA1 of the last commit made by the | ||
// controller, for this automation object | ||
// +optional | ||
LastPushCommit string `json:"lastPushCommit,omitempty"` | ||
// LastPushTime records the time of the last pushed change. | ||
// +optional | ||
LastPushTime *metav1.Time `json:"lastPushTime,omitempty"` | ||
// +optional | ||
ObservedGeneration int64 `json:"observedGeneration,omitempty"` | ||
// +optional | ||
Conditions []metav1.Condition `json:"conditions,omitempty"` | ||
meta.ReconcileRequestStatus `json:",inline"` | ||
} | ||
|
||
const ( | ||
// GitNotAvailableReason is used for ConditionReady when the | ||
// automation run cannot proceed because the git repository is | ||
// missing or cannot be cloned. | ||
GitNotAvailableReason = "GitRepositoryNotAvailable" | ||
// NoStrategyReason is used for ConditionReady when the automation | ||
// run cannot proceed because there is no update strategy given in | ||
// the spec. | ||
NoStrategyReason = "MissingUpdateStrategy" | ||
) | ||
|
||
// SetImageUpdateAutomationReadiness sets the ready condition with the given status, reason and message. | ||
func SetImageUpdateAutomationReadiness(auto *ImageUpdateAutomation, status metav1.ConditionStatus, reason, message string) { | ||
auto.Status.ObservedGeneration = auto.ObjectMeta.Generation | ||
meta.SetResourceCondition(auto, meta.ReadyCondition, status, reason, message) | ||
} | ||
|
||
//+kubebuilder:storageversion | ||
//+kubebuilder:object:root=true | ||
//+kubebuilder:subresource:status | ||
//+kubebuilder:printcolumn:name="Last run",type=string,JSONPath=`.status.lastAutomationRunTime` | ||
|
||
// ImageUpdateAutomation is the Schema for the imageupdateautomations API | ||
type ImageUpdateAutomation struct { | ||
metav1.TypeMeta `json:",inline"` | ||
metav1.ObjectMeta `json:"metadata,omitempty"` | ||
|
||
Spec ImageUpdateAutomationSpec `json:"spec,omitempty"` | ||
Status ImageUpdateAutomationStatus `json:"status,omitempty"` | ||
} | ||
|
||
func (auto *ImageUpdateAutomation) GetStatusConditions() *[]metav1.Condition { | ||
return &auto.Status.Conditions | ||
} | ||
|
||
//+kubebuilder:object:root=true | ||
|
||
// ImageUpdateAutomationList contains a list of ImageUpdateAutomation | ||
type ImageUpdateAutomationList struct { | ||
metav1.TypeMeta `json:",inline"` | ||
metav1.ListMeta `json:"metadata,omitempty"` | ||
Items []ImageUpdateAutomation `json:"items"` | ||
} | ||
|
||
func init() { | ||
SchemeBuilder.Register(&ImageUpdateAutomation{}, &ImageUpdateAutomationList{}) | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,35 @@ | ||
/* | ||
Copyright 2020 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 v1alpha2 | ||
|
||
// SourceReference contains enough information to let you locate the | ||
// typed, referenced source object. | ||
type SourceReference struct { | ||
// API version of the referent | ||
// +optional | ||
APIVersion string `json:"apiVersion,omitempty"` | ||
|
||
// Kind of the referent | ||
// +kubebuilder:validation:Enum=GitRepository | ||
// +kubebuilder:default=GitRepository | ||
// +required | ||
Kind string `json:"kind"` | ||
|
||
// Name of the referent | ||
// +required | ||
Name string `json:"name"` | ||
} |
Oops, something went wrong.