Skip to content

Commit

Permalink
Merge pull request #19 from kraken-iac/config-export
Browse files Browse the repository at this point in the history
Add ConfigExport API and controller
  • Loading branch information
eoinfennessy committed Apr 1, 2024
2 parents 3dc0bba + 5705442 commit 999a2c8
Show file tree
Hide file tree
Showing 16 changed files with 1,078 additions and 4 deletions.
9 changes: 9 additions & 0 deletions PROJECT
Original file line number Diff line number Diff line change
Expand Up @@ -26,4 +26,13 @@ resources:
kind: StateDeclaration
path: github.com/kraken-iac/kraken/api/v1alpha1
version: v1alpha1
- api:
crdVersion: v1
namespaced: true
controller: true
domain: kraken-iac.eoinfennessy.com
group: configexport
kind: ConfigExport
path: github.com/kraken-iac/kraken/api/configexport/v1alpha1
version: v1alpha1
version: "3"
107 changes: 107 additions & 0 deletions api/configexport/v1alpha1/configexport_types.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,107 @@
/*
Copyright 2024.
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 (
"fmt"
"reflect"

"github.com/kraken-iac/common/types/option"
corev1alpha1 "github.com/kraken-iac/kraken/api/core/v1alpha1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)

const (
ConditionTypeReady string = "Ready"

ConfigTypeConfigMap string = "ConfigMap"
ConfigTypeSecret string = "Secret"
)

type ConfigExportEntry struct {
Key string `json:"key"`
option.String `json:",inline"`
}

type ConfigMeta struct {
Name string `json:"name"`
Namespace string `json:"namespace"`
}

// ConfigExportSpec defines the desired state of ConfigExport
type ConfigExportSpec struct {

// +kubebuilder:validation:Enum=ConfigMap;Secret
ConfigType string `json:"configType"`

ConfigMeta ConfigMeta `json:"configMetadata"`
Entries []ConfigExportEntry `json:"entries,omitempty"`
}

func (s ConfigExportSpec) GenerateDependencyRequestSpec() corev1alpha1.DependencyRequestSpec {
dr := corev1alpha1.DependencyRequestSpec{}
for _, entry := range s.Entries {
if entry.ValueFrom != nil {
entry.ValueFrom.AddToDependencyRequestSpec(&dr, reflect.String)
}
}
return dr
}

func (s ConfigExportSpec) ToApplicableValues(depValues corev1alpha1.DependentValues) (map[string]string, error) {
av := make(map[string]string, len(s.Entries))
for _, entry := range s.Entries {
if val, err := entry.ToApplicableValue(depValues); err != nil {
return nil, err
} else if val == nil {
return nil, fmt.Errorf("no applicable value provided for %s", entry.Key)
} else {
av[entry.Key] = *val
}
}
return av, nil
}

// ConfigExportStatus defines the observed state of ConfigExport
type ConfigExportStatus struct {
Conditions []metav1.Condition `json:"conditions,omitempty" patchStrategy:"merge" patchMergeKey:"type" protobuf:"bytes,1,rep,name=conditions"`
}

//+kubebuilder:object:root=true
//+kubebuilder:subresource:status

// ConfigExport is the Schema for the configexports API
type ConfigExport struct {
metav1.TypeMeta `json:",inline"`
metav1.ObjectMeta `json:"metadata,omitempty"`

Spec ConfigExportSpec `json:"spec,omitempty"`
Status ConfigExportStatus `json:"status,omitempty"`
}

//+kubebuilder:object:root=true

// ConfigExportList contains a list of ConfigExport
type ConfigExportList struct {
metav1.TypeMeta `json:",inline"`
metav1.ListMeta `json:"metadata,omitempty"`
Items []ConfigExport `json:"items"`
}

func init() {
SchemeBuilder.Register(&ConfigExport{}, &ConfigExportList{})
}
36 changes: 36 additions & 0 deletions api/configexport/v1alpha1/groupversion_info.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
/*
Copyright 2024.
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 contains API Schema definitions for the configexport v1alpha1 API group
// +kubebuilder:object:generate=true
// +groupName=configexport.kraken-iac.eoinfennessy.com
package v1alpha1

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: "configexport.kraken-iac.eoinfennessy.com", Version: "v1alpha1"}

// 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
)
161 changes: 161 additions & 0 deletions api/configexport/v1alpha1/zz_generated.deepcopy.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

10 changes: 10 additions & 0 deletions cmd/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,9 @@ import (
"sigs.k8s.io/controller-runtime/pkg/log/zap"
metricsserver "sigs.k8s.io/controller-runtime/pkg/metrics/server"

configexportv1alpha1 "github.com/kraken-iac/kraken/api/configexport/v1alpha1"
corev1alpha1 "github.com/kraken-iac/kraken/api/core/v1alpha1"
configexportcontroller "github.com/kraken-iac/kraken/internal/controller/configexport"
controller "github.com/kraken-iac/kraken/internal/controller/core"
//+kubebuilder:scaffold:imports
)
Expand All @@ -46,6 +48,7 @@ func init() {
utilruntime.Must(clientgoscheme.AddToScheme(scheme))

utilruntime.Must(corev1alpha1.AddToScheme(scheme))
utilruntime.Must(configexportv1alpha1.AddToScheme(scheme))
//+kubebuilder:scaffold:scheme
}

Expand Down Expand Up @@ -96,6 +99,13 @@ func main() {
setupLog.Error(err, "unable to create controller", "controller", "DependencyRequest")
os.Exit(1)
}
if err = (&configexportcontroller.ConfigExportReconciler{
Client: mgr.GetClient(),
Scheme: mgr.GetScheme(),
}).SetupWithManager(mgr); err != nil {
setupLog.Error(err, "unable to create controller", "controller", "ConfigExport")
os.Exit(1)
}
//+kubebuilder:scaffold:builder

if err := mgr.AddHealthzCheck("healthz", healthz.Ping); err != nil {
Expand Down
Loading

0 comments on commit 999a2c8

Please sign in to comment.