[cozystack-operator] Add PackageSet types

Signed-off-by: Andrei Kvapil <kvapss@gmail.com>
This commit is contained in:
Andrei Kvapil 2025-12-18 19:19:22 +01:00
parent 0377bd3d29
commit e963e480a7
No known key found for this signature in database
GPG key ID: 931CF7FEACEAF765
23 changed files with 1495 additions and 0 deletions

View file

@ -0,0 +1,89 @@
/*
Copyright 2025.
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 v1alpha1
import (
apiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)
// +kubebuilder:object:root=true
// +kubebuilder:resource:scope=Cluster,shortName=ps
// +kubebuilder:subresource:status
// +kubebuilder:printcolumn:name="Variant",type="string",JSONPath=".status.variant",description="Selected variant"
// +kubebuilder:printcolumn:name="Ready",type="string",JSONPath=".status.conditions[?(@.type=='Ready')].status",description="Ready status"
// +kubebuilder:printcolumn:name="Status",type="string",JSONPath=".status.conditions[?(@.type=='Ready')].message",description="Ready message"
// PackageSet is the Schema for the packagesets API
type PackageSet struct {
metav1.TypeMeta `json:",inline"`
metav1.ObjectMeta `json:"metadata,omitempty"`
Spec PackageSetSpec `json:"spec,omitempty"`
Status PackageSetStatus `json:"status,omitempty"`
}
// +kubebuilder:object:root=true
// PackageSetList contains a list of PackageSets
type PackageSetList struct {
metav1.TypeMeta `json:",inline"`
metav1.ListMeta `json:"metadata,omitempty"`
Items []PackageSet `json:"items"`
}
func init() {
SchemeBuilder.Register(&PackageSet{}, &PackageSetList{})
}
// PackageSetSpec defines the desired state of PackageSet
type PackageSetSpec struct {
// IgnoreDependencies is a list of package set dependencies to ignore
// Dependencies listed here will not be installed even if they are specified in the PackageSetDefinition
// +optional
IgnoreDependencies []string `json:"ignoreDependencies,omitempty"`
// Packages is a map of package name to package overrides
// Allows overriding values and enabling/disabling specific packages from the PackageSetDefinition
// +optional
Packages map[string]PackageSetPackageOverride `json:"packages,omitempty"`
}
// PackageSetPackageOverride defines overrides for a specific package
type PackageSetPackageOverride struct {
// Enabled indicates whether this package should be installed
// If false, the package will be disabled even if it's defined in the PackageSetDefinition
// +optional
Enabled *bool `json:"enabled,omitempty"`
// Values contains Helm chart values as a JSON object
// These values will be merged with the default values from the PackageSetDefinition
// +optional
Values *apiextensionsv1.JSON `json:"values,omitempty"`
}
// PackageSetStatus defines the observed state of PackageSet
type PackageSetStatus struct {
// Variant is the selected variant name, or "default" if not specified
// This field is populated by the controller based on spec.packageSetDefinitionRef.variant
// +optional
Variant string `json:"variant,omitempty"`
// Conditions represents the latest available observations of a PackageSet's state
// +optional
Conditions []metav1.Condition `json:"conditions,omitempty"`
}

View file

@ -0,0 +1,202 @@
/*
Copyright 2025.
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 v1alpha1
import (
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)
// +kubebuilder:object:root=true
// +kubebuilder:resource:scope=Cluster,shortName=psd
// +kubebuilder:subresource:status
// +kubebuilder:printcolumn:name="Variants",type="string",JSONPath=".status.variants",description="Package variants (comma-separated)"
// +kubebuilder:printcolumn:name="Ready",type="string",JSONPath=".status.conditions[?(@.type=='Ready')].status",description="Ready status"
// +kubebuilder:printcolumn:name="Status",type="string",JSONPath=".status.conditions[?(@.type=='Ready')].message",description="Ready message"
// PackageSetDefinition is the Schema for the packagesetdefinitions API
type PackageSetDefinition struct {
metav1.TypeMeta `json:",inline"`
metav1.ObjectMeta `json:"metadata,omitempty"`
Spec PackageSetDefinitionSpec `json:"spec,omitempty"`
Status PackageSetDefinitionStatus `json:"status,omitempty"`
}
// +kubebuilder:object:root=true
// PackageSetDefinitionList contains a list of PackageSetDefinitions
type PackageSetDefinitionList struct {
metav1.TypeMeta `json:",inline"`
metav1.ListMeta `json:"metadata,omitempty"`
Items []PackageSetDefinition `json:"items"`
}
func init() {
SchemeBuilder.Register(&PackageSetDefinition{}, &PackageSetDefinitionList{})
}
// PackageSetDefinitionSpec defines the desired state of PackageSetDefinition
type PackageSetDefinitionSpec struct {
// SourceRef is the source reference for the package set charts
// +optional
SourceRef *PackageSetDefinitionSourceRef `json:"sourceRef,omitempty"`
// Variants is a list of package set variants
// Each variant defines packages, sources, dependencies, and libraries for a specific configuration
// +optional
Variants []PackageSetDefinitionVariant `json:"variants,omitempty"`
}
// PackageSetDefinitionVariant defines a single variant configuration
type PackageSetDefinitionVariant struct {
// Name is the unique identifier for this variant
// +required
Name string `json:"name"`
// DependsOn is a list of package set dependencies in the format "packageSetName/target"
// For example: "cozystack-system/network"
// If specified, the dependencies listed in the target's packages will be taken
// from the specified package set and added to all packages in this variant
// +optional
DependsOn []string `json:"dependsOn,omitempty"`
// Libraries is a list of Helm library charts used by packages in this variant
// +optional
Libraries []PackageSetDefinitionLibrary `json:"libraries,omitempty"`
// Packages is a list of Helm releases to be installed as part of this variant
// +optional
Packages []PackageSetDefinitionPackage `json:"packages,omitempty"`
// Sources is a list of application sources for this variant
// +optional
Sources []PackageSetDefinitionApplication `json:"sources,omitempty"`
}
// PackageSetDefinitionDependencyTarget defines a named group of packages that can be referenced
// by other package sets via dependsOn
type PackageSetDefinitionDependencyTarget struct {
// Name is the unique identifier for this dependency target
// +required
Name string `json:"name"`
// Packages is a list of package names that belong to this target
// These packages will be added as dependencies when this target is referenced
// +required
Packages []string `json:"packages"`
}
// PackageSetDefinitionLibrary defines a Helm library chart
type PackageSetDefinitionLibrary struct {
// Name is the optional name for library placed in charts
// +optional
Name string `json:"name,omitempty"`
// Path is the path to the library chart directory
// +required
Path string `json:"path"`
}
// PackageSetDefinitionSourceRef defines the source reference for package set charts
type PackageSetDefinitionSourceRef struct {
// Kind of the source reference
// +kubebuilder:validation:Enum=GitRepository;OCIRepository
// +required
Kind string `json:"kind"`
// Name of the source reference
// +required
Name string `json:"name"`
// Namespace of the source reference
// +required
Namespace string `json:"namespace"`
// BasePath is the base path where packages are located in the source.
// For GitRepository, defaults to "packages" if not specified.
// For OCIRepository, defaults to empty string (root) if not specified.
// +optional
Path string `json:"path,omitempty"`
}
// PackageSetDefinitionPackage defines a single Helm release within a package set
type PackageSetDefinitionPackage struct {
// Name is the unique identifier for this package within the package set
// +required
Name string `json:"name"`
// ReleaseName is the name of the HelmRelease resource that will be created
// If not specified, defaults to the Name field
// +optional
ReleaseName string `json:"releaseName,omitempty"`
// Path is the path to the Helm chart directory
// +required
Path string `json:"path"`
// Namespace is the Kubernetes namespace where the release will be installed
// +required
Namespace string `json:"namespace"`
// Privileged indicates whether this release requires privileged access
// +optional
Privileged bool `json:"privileged,omitempty"`
// Disabled indicates whether this release is disabled (should not be installed)
// +optional
Disabled bool `json:"disabled,omitempty"`
// DependsOn is a list of release names that must be installed before this release
// +optional
DependsOn []string `json:"dependsOn,omitempty"`
// Libraries is a list of library charts that this package depends on
// +optional
Libraries []PackageSetDefinitionLibrary `json:"libraries,omitempty"`
// ValuesFiles is a list of values file names to use
// +optional
ValuesFiles []string `json:"valuesFiles,omitempty"`
}
// PackageSetDefinitionApplication defines a single application release within a package set
type PackageSetDefinitionApplication struct {
// Name is the unique identifier for this application within the package set
// +required
Name string `json:"name"`
// Path is the path to the Helm chart directory
// +required
Path string `json:"path"`
// Libraries is a list of library names that this application depends on
// These libraries must be defined at the variant level
// +optional
Libraries []string `json:"libraries,omitempty"`
}
// PackageSetDefinitionStatus defines the observed state of PackageSetDefinition
type PackageSetDefinitionStatus struct {
// Variants is a comma-separated list of package variant names
// This field is populated by the controller based on spec.packages keys
// +optional
Variants string `json:"variants,omitempty"`
// Conditions represents the latest available observations of a PackageSetDefinition's state
// +optional
Conditions []metav1.Condition `json:"conditions,omitempty"`
}

View file

@ -21,7 +21,9 @@ limitations under the License.
package v1alpha1
import (
"k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1"
"k8s.io/apimachinery/pkg/api/resource"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
runtime "k8s.io/apimachinery/pkg/runtime"
)
@ -256,6 +258,386 @@ func (in *CozystackResourceDefinitionSpec) DeepCopy() *CozystackResourceDefiniti
return out
}
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in *PackageSet) DeepCopyInto(out *PackageSet) {
*out = *in
out.TypeMeta = in.TypeMeta
in.ObjectMeta.DeepCopyInto(&out.ObjectMeta)
in.Spec.DeepCopyInto(&out.Spec)
in.Status.DeepCopyInto(&out.Status)
}
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PackageSet.
func (in *PackageSet) DeepCopy() *PackageSet {
if in == nil {
return nil
}
out := new(PackageSet)
in.DeepCopyInto(out)
return out
}
// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
func (in *PackageSet) DeepCopyObject() runtime.Object {
if c := in.DeepCopy(); c != nil {
return c
}
return nil
}
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in *PackageSetDefinition) DeepCopyInto(out *PackageSetDefinition) {
*out = *in
out.TypeMeta = in.TypeMeta
in.ObjectMeta.DeepCopyInto(&out.ObjectMeta)
in.Spec.DeepCopyInto(&out.Spec)
in.Status.DeepCopyInto(&out.Status)
}
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PackageSetDefinition.
func (in *PackageSetDefinition) DeepCopy() *PackageSetDefinition {
if in == nil {
return nil
}
out := new(PackageSetDefinition)
in.DeepCopyInto(out)
return out
}
// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
func (in *PackageSetDefinition) DeepCopyObject() runtime.Object {
if c := in.DeepCopy(); c != nil {
return c
}
return nil
}
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in *PackageSetDefinitionApplication) DeepCopyInto(out *PackageSetDefinitionApplication) {
*out = *in
if in.Libraries != nil {
in, out := &in.Libraries, &out.Libraries
*out = make([]PackageSetDefinitionLibrary, len(*in))
copy(*out, *in)
}
}
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PackageSetDefinitionApplication.
func (in *PackageSetDefinitionApplication) DeepCopy() *PackageSetDefinitionApplication {
if in == nil {
return nil
}
out := new(PackageSetDefinitionApplication)
in.DeepCopyInto(out)
return out
}
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in *PackageSetDefinitionDependencyTarget) DeepCopyInto(out *PackageSetDefinitionDependencyTarget) {
*out = *in
if in.Packages != nil {
in, out := &in.Packages, &out.Packages
*out = make([]string, len(*in))
copy(*out, *in)
}
}
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PackageSetDefinitionDependencyTarget.
func (in *PackageSetDefinitionDependencyTarget) DeepCopy() *PackageSetDefinitionDependencyTarget {
if in == nil {
return nil
}
out := new(PackageSetDefinitionDependencyTarget)
in.DeepCopyInto(out)
return out
}
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in *PackageSetDefinitionLibrary) DeepCopyInto(out *PackageSetDefinitionLibrary) {
*out = *in
}
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PackageSetDefinitionLibrary.
func (in *PackageSetDefinitionLibrary) DeepCopy() *PackageSetDefinitionLibrary {
if in == nil {
return nil
}
out := new(PackageSetDefinitionLibrary)
in.DeepCopyInto(out)
return out
}
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in *PackageSetDefinitionList) DeepCopyInto(out *PackageSetDefinitionList) {
*out = *in
out.TypeMeta = in.TypeMeta
in.ListMeta.DeepCopyInto(&out.ListMeta)
if in.Items != nil {
in, out := &in.Items, &out.Items
*out = make([]PackageSetDefinition, len(*in))
for i := range *in {
(*in)[i].DeepCopyInto(&(*out)[i])
}
}
}
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PackageSetDefinitionList.
func (in *PackageSetDefinitionList) DeepCopy() *PackageSetDefinitionList {
if in == nil {
return nil
}
out := new(PackageSetDefinitionList)
in.DeepCopyInto(out)
return out
}
// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
func (in *PackageSetDefinitionList) DeepCopyObject() runtime.Object {
if c := in.DeepCopy(); c != nil {
return c
}
return nil
}
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in *PackageSetDefinitionPackage) DeepCopyInto(out *PackageSetDefinitionPackage) {
*out = *in
if in.DependsOn != nil {
in, out := &in.DependsOn, &out.DependsOn
*out = make([]string, len(*in))
copy(*out, *in)
}
if in.Libraries != nil {
in, out := &in.Libraries, &out.Libraries
*out = make([]PackageSetDefinitionLibrary, len(*in))
copy(*out, *in)
}
if in.ValuesFiles != nil {
in, out := &in.ValuesFiles, &out.ValuesFiles
*out = make([]string, len(*in))
copy(*out, *in)
}
}
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PackageSetDefinitionPackage.
func (in *PackageSetDefinitionPackage) DeepCopy() *PackageSetDefinitionPackage {
if in == nil {
return nil
}
out := new(PackageSetDefinitionPackage)
in.DeepCopyInto(out)
return out
}
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in *PackageSetDefinitionSourceRef) DeepCopyInto(out *PackageSetDefinitionSourceRef) {
*out = *in
}
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PackageSetDefinitionSourceRef.
func (in *PackageSetDefinitionSourceRef) DeepCopy() *PackageSetDefinitionSourceRef {
if in == nil {
return nil
}
out := new(PackageSetDefinitionSourceRef)
in.DeepCopyInto(out)
return out
}
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in *PackageSetDefinitionSpec) DeepCopyInto(out *PackageSetDefinitionSpec) {
*out = *in
if in.SourceRef != nil {
in, out := &in.SourceRef, &out.SourceRef
*out = new(PackageSetDefinitionSourceRef)
**out = **in
}
if in.Variants != nil {
in, out := &in.Variants, &out.Variants
*out = make([]PackageSetDefinitionVariant, len(*in))
for i := range *in {
(*in)[i].DeepCopyInto(&(*out)[i])
}
}
}
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PackageSetDefinitionSpec.
func (in *PackageSetDefinitionSpec) DeepCopy() *PackageSetDefinitionSpec {
if in == nil {
return nil
}
out := new(PackageSetDefinitionSpec)
in.DeepCopyInto(out)
return out
}
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in *PackageSetDefinitionStatus) DeepCopyInto(out *PackageSetDefinitionStatus) {
*out = *in
if in.Conditions != nil {
in, out := &in.Conditions, &out.Conditions
*out = make([]metav1.Condition, len(*in))
for i := range *in {
(*in)[i].DeepCopyInto(&(*out)[i])
}
}
}
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PackageSetDefinitionStatus.
func (in *PackageSetDefinitionStatus) DeepCopy() *PackageSetDefinitionStatus {
if in == nil {
return nil
}
out := new(PackageSetDefinitionStatus)
in.DeepCopyInto(out)
return out
}
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in *PackageSetDefinitionVariant) DeepCopyInto(out *PackageSetDefinitionVariant) {
*out = *in
if in.DependsOn != nil {
in, out := &in.DependsOn, &out.DependsOn
*out = make([]string, len(*in))
copy(*out, *in)
}
if in.Libraries != nil {
in, out := &in.Libraries, &out.Libraries
*out = make([]PackageSetDefinitionLibrary, len(*in))
copy(*out, *in)
}
if in.Packages != nil {
in, out := &in.Packages, &out.Packages
*out = make([]PackageSetDefinitionPackage, len(*in))
for i := range *in {
(*in)[i].DeepCopyInto(&(*out)[i])
}
}
if in.Applications != nil {
in, out := &in.Applications, &out.Applications
*out = make([]PackageSetDefinitionApplication, len(*in))
for i := range *in {
(*in)[i].DeepCopyInto(&(*out)[i])
}
}
}
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PackageSetDefinitionVariant.
func (in *PackageSetDefinitionVariant) DeepCopy() *PackageSetDefinitionVariant {
if in == nil {
return nil
}
out := new(PackageSetDefinitionVariant)
in.DeepCopyInto(out)
return out
}
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in *PackageSetList) DeepCopyInto(out *PackageSetList) {
*out = *in
out.TypeMeta = in.TypeMeta
in.ListMeta.DeepCopyInto(&out.ListMeta)
if in.Items != nil {
in, out := &in.Items, &out.Items
*out = make([]PackageSet, len(*in))
for i := range *in {
(*in)[i].DeepCopyInto(&(*out)[i])
}
}
}
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PackageSetList.
func (in *PackageSetList) DeepCopy() *PackageSetList {
if in == nil {
return nil
}
out := new(PackageSetList)
in.DeepCopyInto(out)
return out
}
// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
func (in *PackageSetList) DeepCopyObject() runtime.Object {
if c := in.DeepCopy(); c != nil {
return c
}
return nil
}
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in *PackageSetPackageOverride) DeepCopyInto(out *PackageSetPackageOverride) {
*out = *in
if in.Enabled != nil {
in, out := &in.Enabled, &out.Enabled
*out = new(bool)
**out = **in
}
if in.Values != nil {
in, out := &in.Values, &out.Values
*out = new(v1.JSON)
(*in).DeepCopyInto(*out)
}
}
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PackageSetPackageOverride.
func (in *PackageSetPackageOverride) DeepCopy() *PackageSetPackageOverride {
if in == nil {
return nil
}
out := new(PackageSetPackageOverride)
in.DeepCopyInto(out)
return out
}
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in *PackageSetSpec) DeepCopyInto(out *PackageSetSpec) {
*out = *in
if in.IgnoreDependencies != nil {
in, out := &in.IgnoreDependencies, &out.IgnoreDependencies
*out = make([]string, len(*in))
copy(*out, *in)
}
if in.Packages != nil {
in, out := &in.Packages, &out.Packages
*out = make(map[string]PackageSetPackageOverride, len(*in))
for key, val := range *in {
(*out)[key] = *val.DeepCopy()
}
}
}
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PackageSetSpec.
func (in *PackageSetSpec) DeepCopy() *PackageSetSpec {
if in == nil {
return nil
}
out := new(PackageSetSpec)
in.DeepCopyInto(out)
return out
}
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in *PackageSetStatus) DeepCopyInto(out *PackageSetStatus) {
*out = *in
if in.Conditions != nil {
in, out := &in.Conditions, &out.Conditions
*out = make([]metav1.Condition, len(*in))
for i := range *in {
(*in)[i].DeepCopyInto(&(*out)[i])
}
}
}
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PackageSetStatus.
func (in *PackageSetStatus) DeepCopy() *PackageSetStatus {
if in == nil {
return nil
}
out := new(PackageSetStatus)
in.DeepCopyInto(out)
return out
}
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in Selector) DeepCopyInto(out *Selector) {
{

View file

@ -0,0 +1,52 @@
---
apiVersion: cozystack.io/v1alpha1
kind: PackageSetDefinition
metadata:
name: cozystack.clickhouse-operator
spec:
sourceRef:
kind: OCIRepository
name: cozystack-packages
namespace: cozy-system
path: /
variants:
- name: default
dependsOn:
- cozystack.networking
- cozystack.monitoring
- cozystack.cozystack-core
packages:
- name: clickhouse-operator
path: system/clickhouse-operator
releaseName: clickhouse-operator
namespace: cozy-clickhouse-operator
dependsOn:
- victoria-metrics-operator
---
apiVersion: cozystack.io/v1alpha1
kind: PackageSetDefinition
metadata:
name: cozystack.clickhouse-application
spec:
sourceRef:
kind: OCIRepository
name: cozystack-packages
namespace: cozy-system
path: /
variants:
- name: default
dependsOn:
- cozystack.clickhouse-operator
libraries:
- name: cozy-lib
path: library/cozy-lib
packages:
- name: clickhouse-application
path: system/clickhouse-application
releaseName: clickhouse-application
namespace: cozy-system
sources:
- name: clickhouse
path: apps/clickhouse
libraries:
- cozy-lib

View file

@ -0,0 +1,67 @@
---
apiVersion: cozystack.io/v1alpha1
kind: PackageSetDefinition
metadata:
name: cozystack.cozystack-core
spec:
variants:
- name: default
libraries:
- name: cozy-lib
path: library/cozy-lib
packages:
- name: cozystack-controller
releaseName: cozystack-controller
path: system/cozystack-controller
namespace: cozy-system
dependsOn: []
- name: cozystack-api
releaseName: cozystack-api
path: system/cozystack-api
namespace: cozy-system
dependsOn: [cozystack-controller]
- name: lineage-controller-webhook
releaseName: lineage-controller-webhook
path: system/lineage-controller-webhook
namespace: cozy-system
dependsOn: [cozystack-controller]
- name: dashboard
releaseName: dashboard
path: system/dashboard
namespace: cozy-dashboard
dependsOn: [cozystack-api,cozystack-controller]
- name: cozystack-controller
releaseName: cozystack-controller
path: system/cozystack-controller
namespace: cozy-system
dependsOn: []
- name: cozystack-api
releaseName: cozystack-api
path: system/cozystack-api
namespace: cozy-system
dependsOn: [cozystack-controller]
- name: lineage-controller-webhook
releaseName: lineage-controller-webhook
path: system/lineage-controller-webhook
namespace: cozy-system
dependsOn: [cozystack-controller]
- name: dashboard
releaseName: dashboard
path: system/dashboard
namespace: cozy-dashboard
dependsOn: [cozystack-api,cozystack-controller,keycloak-configure]
- name: keycloak-configure
releaseName: keycloak-configure
path: system/keycloak-configure
namespace: cozy-keycloak
dependsOn: [keycloak-operator]
- name: keycloak
releaseName: keycloak
path: system/keycloak
namespace: cozy-keycloak
dependsOn: [postgres-operator]
- name: keycloak-operator
releaseName: keycloak-operator
path: system/keycloak-operator
namespace: cozy-keycloak
dependsOn: [keycloak]

View file

@ -0,0 +1,28 @@
---
apiVersion: cozystack.io/v1alpha1
kind: PackageSetDefinition
metadata:
name: cozystack.ferretdb
spec:
sourceRef:
kind: OCIRepository
name: cozystack-packages
namespace: cozy-system
path: /
variants:
- name: default
dependsOn:
- cozystack.networking
libraries:
- name: cozy-lib
path: library/cozy-lib
packages:
- name: ferretdb-application
path: system/ferretdb-application
releaseName: ferretdb-application
namespace: cozy-system
sources:
- name: ferretdb
path: apps/ferretdb
libraries:
- cozy-lib

View file

@ -0,0 +1,24 @@
---
apiVersion: cozystack.io/v1alpha1
kind: PackageSetDefinition
metadata:
name: cozystack.foundationdb-operator
spec:
sourceRef:
kind: OCIRepository
name: cozystack-packages
namespace: cozy-system
path: /
variants:
- name: default
dependsOn:
- cozystack.networking
- cozystack.cert-manager
packages:
- name: foundationdb-operator
path: system/foundationdb-operator
releaseName: foundationdb-operator
namespace: cozy-foundationdb-operator
dependsOn:
- cert-manager

View file

@ -0,0 +1,30 @@
---
apiVersion: cozystack.io/v1alpha1
kind: PackageSetDefinition
metadata:
name: cozystack.foundationdb
spec:
sourceRef:
kind: OCIRepository
name: cozystack-packages
namespace: cozy-system
path: /
variants:
- name: default
dependsOn:
- cozystack.networking
- cozystack.foundationdb-operator
libraries:
- name: cozy-lib
path: library/cozy-lib
packages:
- name: foundationdb-application
path: system/foundationdb-application
releaseName: foundationdb-application
namespace: cozy-system
sources:
- name: foundationdb
path: apps/foundationdb
libraries:
- cozy-lib

View file

@ -0,0 +1,28 @@
---
apiVersion: cozystack.io/v1alpha1
kind: PackageSetDefinition
metadata:
name: cozystack.http-cache-application
spec:
sourceRef:
kind: OCIRepository
name: cozystack-packages
namespace: cozy-system
path: /
variants:
- name: default
dependsOn:
- cozystack.networking
libraries:
- name: cozy-lib
path: library/cozy-lib
packages:
- name: http-cache-application
path: system/http-cache-application
releaseName: http-cache
namespace: cozy-system
sources:
- name: http-cache
path: apps/http-cache
libraries:
- cozy-lib

View file

@ -0,0 +1,24 @@
---
apiVersion: cozystack.io/v1alpha1
kind: PackageSetDefinition
metadata:
name: cozystack.kafka-operator
spec:
sourceRef:
kind: OCIRepository
name: cozystack-packages
namespace: cozy-system
path: /
variants:
- name: default
dependsOn:
- cozystack.networking
- cozystack.monitoring
packages:
- name: kafka-operator
path: system/kafka-operator
releaseName: kafka-operator
namespace: cozy-kafka-operator
dependsOn:
- victoria-metrics-operator

View file

@ -0,0 +1,30 @@
---
apiVersion: cozystack.io/v1alpha1
kind: PackageSetDefinition
metadata:
name: cozystack.kafka
spec:
sourceRef:
kind: OCIRepository
name: cozystack-packages
namespace: cozy-system
path: /
variants:
- name: default
dependsOn:
- cozystack.networking
- cozystack.kafka-operator
libraries:
- name: cozy-lib
path: library/cozy-lib
packages:
- name: kafka-application
path: system/kafka-application
releaseName: kafka-application
namespace: cozy-system
sources:
- name: kafka
path: apps/kafka
libraries:
- cozy-lib

View file

@ -0,0 +1,26 @@
---
apiVersion: cozystack.io/v1alpha1
kind: PackageSetDefinition
metadata:
name: cozystack.mariadb-operator
spec:
sourceRef:
kind: OCIRepository
name: cozystack-packages
namespace: cozy-system
path: /
variants:
- name: default
dependsOn:
- cozystack.networking
- cozystack.monitoring
- cozystack.cert-manager
packages:
- name: mariadb-operator
path: system/mariadb-operator
releaseName: mariadb-operator
namespace: cozy-mariadb-operator
dependsOn:
- cert-manager
- victoria-metrics-operator

View file

@ -0,0 +1,30 @@
---
apiVersion: cozystack.io/v1alpha1
kind: PackageSetDefinition
metadata:
name: cozystack.mysql
spec:
sourceRef:
kind: OCIRepository
name: cozystack-packages
namespace: cozy-system
path: /
variants:
- name: default
dependsOn:
- cozystack.networking
- cozystack.mariadb-operator
libraries:
- name: cozy-lib
path: library/cozy-lib
packages:
- name: mysql-application
path: system/mysql-application
releaseName: mysql-application
namespace: cozy-system
sources:
- name: mysql
path: apps/mysql
libraries:
- cozy-lib

View file

@ -0,0 +1,30 @@
---
apiVersion: cozystack.io/v1alpha1
kind: PackageSetDefinition
metadata:
name: cozystack.nats
spec:
sourceRef:
kind: OCIRepository
name: cozystack-packages
namespace: cozy-system
path: /
variants:
- name: default
dependsOn:
- cozystack.networking
libraries:
- name: cozy-lib
path: library/cozy-lib
packages:
- name: nats-application
path: system/nats-application
releaseName: nats-application
namespace: cozy-system
sources:
- name: nats
path: apps/nats
libraries:
- cozy-lib
- name: nats-system
path: system/nats

View file

@ -0,0 +1,65 @@
---
apiVersion: cozystack.io/v1alpha1
kind: PackageSetDefinition
metadata:
name: cozystack.networking
spec:
variants:
- name: noop
packages: []
- name: cilium
dependsOn:
- cozystack.cert-manager
packages:
- name: cilium
releaseName: cilium
path: system/cilium
namespace: cozy-cilium
privileged: true
dependsOn: []
valuesFiles:
- values.yaml
- values-talos.yaml
- name: cilium-networkpolicy
releaseName: cilium-networkpolicy
path: system/cilium-networkpolicy
namespace: cozy-cilium
privileged: true
dependsOn: [cilium]
- name: kubeovn-cilium
dependsOn:
- cozystack.cert-manager
packages:
- name: cilium
releaseName: cilium
path: system/cilium
namespace: cozy-cilium
privileged: true
dependsOn: []
valuesFiles:
- values.yaml
- values-talos.yaml
- values-kubeovn.yaml
- name: cilium-networkpolicy
releaseName: cilium-networkpolicy
path: system/cilium-networkpolicy
namespace: cozy-cilium
privileged: true
dependsOn: [cilium]
- name: kubeovn
releaseName: kubeovn
path: system/kubeovn
namespace: cozy-kubeovn
privileged: true
dependsOn: [cilium]
- name: kubeovn-plunger
releaseName: kubeovn-plunger
path: system/kubeovn-plunger
namespace: cozy-kubeovn
dependsOn: [cilium,kubeovn]
- name: kubeovn-webhook
releaseName: kubeovn-webhook
path: system/kubeovn-webhook
namespace: cozy-kubeovn
privileged: true
dependsOn: [cilium,kubeovn]

View file

@ -0,0 +1,29 @@
---
apiVersion: cozystack.io/v1alpha1
kind: PackageSetDefinition
metadata:
name: cozystack.postgres
spec:
sourceRef:
kind: OCIRepository
name: cozystack-packages
namespace: cozy-system
path: /
variants:
- name: default
dependsOn:
- cozystack.networking
libraries:
- name: cozy-lib
path: library/cozy-lib
packages:
- name: postgres-application
path: system/postgres-application
releaseName: postgres-application
namespace: cozy-system
sources:
- name: postgres
path: apps/postgres
libraries:
- cozy-lib

View file

@ -0,0 +1,21 @@
---
apiVersion: cozystack.io/v1alpha1
kind: PackageSetDefinition
metadata:
name: cozystack.rabbitmq-operator
spec:
sourceRef:
kind: OCIRepository
name: cozystack-packages
namespace: cozy-system
path: /
variants:
- name: default
dependsOn:
- cozystack.networking
packages:
- name: rabbitmq-operator
path: system/rabbitmq-operator
releaseName: rabbitmq-operator
namespace: cozy-rabbitmq-operator

View file

@ -0,0 +1,30 @@
---
apiVersion: cozystack.io/v1alpha1
kind: PackageSetDefinition
metadata:
name: cozystack.rabbitmq
spec:
sourceRef:
kind: OCIRepository
name: cozystack-packages
namespace: cozy-system
path: /
variants:
- name: default
dependsOn:
- cozystack.networking
- cozystack.rabbitmq-operator
libraries:
- name: cozy-lib
path: library/cozy-lib
packages:
- name: rabbitmq-application
path: system/rabbitmq-application
releaseName: rabbitmq-application
namespace: cozy-system
sources:
- name: rabbitmq
path: apps/rabbitmq
libraries:
- cozy-lib

View file

@ -0,0 +1,21 @@
---
apiVersion: cozystack.io/v1alpha1
kind: PackageSetDefinition
metadata:
name: cozystack.redis-operator
spec:
sourceRef:
kind: OCIRepository
name: cozystack-packages
namespace: cozy-system
path: /
variants:
- name: default
dependsOn:
- cozystack.networking
packages:
- name: redis-operator
path: system/redis-operator
releaseName: redis-operator
namespace: cozy-redis-operator

View file

@ -0,0 +1,30 @@
---
apiVersion: cozystack.io/v1alpha1
kind: PackageSetDefinition
metadata:
name: cozystack.redis
spec:
sourceRef:
kind: OCIRepository
name: cozystack-packages
namespace: cozy-system
path: /
variants:
- name: default
dependsOn:
- cozystack.networking
- cozystack.redis-operator
libraries:
- name: cozy-lib
path: library/cozy-lib
packages:
- name: redis-application
path: system/redis-application
releaseName: redis-application
namespace: cozy-system
sources:
- name: redis
path: apps/redis
libraries:
- cozy-lib

View file

@ -0,0 +1,29 @@
---
apiVersion: cozystack.io/v1alpha1
kind: PackageSetDefinition
metadata:
name: cozystack.tcp-balancer-application
spec:
sourceRef:
kind: OCIRepository
name: cozystack-packages
namespace: cozy-system
path: /
variants:
- name: default
dependsOn:
- cozystack.networking
libraries:
- name: cozy-lib
path: library/cozy-lib
packages:
- name: tcp-balancer-application
path: system/tcp-balancer-application
releaseName: tcp-balancer
namespace: cozy-system
sources:
- name: tcp-balancer
path: apps/tcp-balancer
libraries:
- cozy-lib

View file

@ -0,0 +1,29 @@
---
apiVersion: cozystack.io/v1alpha1
kind: PackageSetDefinition
metadata:
name: cozystack.vpn-application
spec:
sourceRef:
kind: OCIRepository
name: cozystack-packages
namespace: cozy-system
path: /
variants:
- name: default
dependsOn:
- cozystack.networking
libraries:
- name: cozy-lib
path: library/cozy-lib
packages:
- name: vpn-application
path: system/vpn-application
releaseName: vpn
namespace: cozy-system
sources:
- name: vpn
path: apps/vpn
libraries:
- cozy-lib

199
packages/packages.yaml Normal file
View file

@ -0,0 +1,199 @@
---
apiVersion: cozystack.io/v1alpha1
kind: PackageSetDefinition
metadata:
name: cozystack.clickhouse-operator
spec:
sourceRef:
kind: OCIRepository
name: cozystack-packages
namespace: cozy-system
path: /
dependsOn:
- cozystack.networking
- cozystack.monitoring
- cozystack.cozystack-core
packages:
default:
- name: clickhouse-operator
path: system/clickhouse-operator
releaseName: clickhouse-operator
namespace: cozy-clickhouse-operator
---
apiVersion: cozystack.io/v1alpha1
kind: PackageSetDefinition
metadata:
name: cozystack.clickhouse-application
spec:
sourceRef:
kind: OCIRepository
name: cozystack-packages
namespace: cozy-system
path: /
dependsOn:
- cozystack.clickhouse-operator
packages:
default:
- name: clickhouse-application
path: system/clickhouse-application
releaseName: clickhouse-application
namespace: cozy-system
applications:
default:
- name: clickhouse-application
path: apps/clickhouse
libraries:
- path: library/cozy-lib
---
apiVersion: cozystack.io/v1alpha1
kind: PackageSetDefinition
metadata:
name: cozystack.networking
spec:
dependsOn:
- cozystack.cert-manager
packages:
noop: []
cilium:
- name: cilium
releaseName: cilium
path: system/cilium
namespace: cozy-cilium
privileged: true
dependsOn: []
valuesFiles:
- values.yaml
- values-talos.yaml
- name: cilium-networkpolicy
releaseName: cilium-networkpolicy
path: system/cilium-networkpolicy
namespace: cozy-cilium
privileged: true
dependsOn: [cilium]
kubeovn-cilium:
- name: cilium
releaseName: cilium
path: system/cilium
namespace: cozy-cilium
privileged: true
dependsOn: []
valuesFiles:
- values.yaml
- values-talos.yaml
- values-kubeovn.yaml
- name: cilium-networkpolicy
releaseName: cilium-networkpolicy
path: system/cilium-networkpolicy
namespace: cozy-cilium
privileged: true
dependsOn: [cilium]
- name: kubeovn
releaseName: kubeovn
path: system/kubeovn
namespace: cozy-kubeovn
privileged: true
dependsOn: [cilium]
- name: kubeovn-plunger
releaseName: kubeovn-plunger
path: system/kubeovn-plunger
namespace: cozy-kubeovn
dependsOn: [cilium,kubeovn]
- name: kubeovn-webhook
releaseName: kubeovn-webhook
path: system/kubeovn-webhook
namespace: cozy-kubeovn
privileged: true
dependsOn: [cilium,kubeovn]
# PackageSetDefinition --> ArtifactGenerator --> ExternalArtifact (many)
# PackageSet --> HelmRelease (many)
---
apiVersion: cozystack.io/v1alpha1
kind: PackageSet
metadata:
name: cozystack.networking
spec:
#ignoreDependencies:
#- cozystack.networking
packages:
cilium:
enabled: false
values:
kubeProxyReplacement: strict
k8sServiceHost: api.example.org
k8sServicePort: 6443
kubeovn:
values:
kube-ovn:
ipv4:
POD_CIDR: "10.244.0.0/16"
POD_GATEWAY: "10.244.0.1"
SVC_CIDR: "10.96.0.0/16"
JOIN_CIDR: "100.64.0.0/16"
---
apiVersion: cozystack.io/v1alpha1
kind: PackageSetDefinition
metadata:
name: cozystack.cozystack-core
spec:
packages:
default:
- name: cozystack-controller
releaseName: cozystack-controller
path: system/cozystack-controller
namespace: cozy-system
dependsOn: []
- name: cozystack-api
releaseName: cozystack-api
path: system/cozystack-api
namespace: cozy-system
dependsOn: [cozystack-controller]
- name: lineage-controller-webhook
releaseName: lineage-controller-webhook
path: system/lineage-controller-webhook
namespace: cozy-system
dependsOn: [cozystack-controller]
- name: dashboard
releaseName: dashboard
path: system/dashboard
namespace: cozy-dashboard
dependsOn: [cozystack-api,cozystack-controller]
oidc:
- name: cozystack-controller
releaseName: cozystack-controller
path: system/cozystack-controller
namespace: cozy-system
dependsOn: []
- name: cozystack-api
releaseName: cozystack-api
path: system/cozystack-api
namespace: cozy-system
dependsOn: [cozystack-controller]
- name: lineage-controller-webhook
releaseName: lineage-controller-webhook
path: system/lineage-controller-webhook
namespace: cozy-system
dependsOn: [cozystack-controller]
- name: dashboard
releaseName: dashboard
path: system/dashboard
namespace: cozy-dashboard
dependsOn: [cozystack-api,cozystack-controller,keycloak-configure]
- name: keycloak-configure
releaseName: keycloak-configure
path: system/keycloak-configure
namespace: cozy-keycloak
dependsOn: [keycloak-operator]
- name: keycloak
releaseName: keycloak
path: system/keycloak
namespace: cozy-keycloak
dependsOn: [postgres-operator]
libraries:
- path: library/cozy-lib
- name: keycloak-operator
releaseName: keycloak-operator
path: system/keycloak-operator
namespace: cozy-keycloak
dependsOn: [keycloak]