Skip to content

Commit

Permalink
add lua script support (#106)
Browse files Browse the repository at this point in the history
* add lua script support

* fix unit test

* change lua function name

* change lua function name

* change to CustomHealth
  • Loading branch information
zreigz authored Jan 17, 2024
1 parent 70e715f commit b841f73
Show file tree
Hide file tree
Showing 29 changed files with 1,124 additions and 18 deletions.
3 changes: 3 additions & 0 deletions .dockerignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# More info: https://docs.docker.com/engine/reference/builder/#dockerignore-file
# Ignore build and test binaries.
bin/
35 changes: 34 additions & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,13 @@ IMG ?= deployment-agent:latest

ENVTEST ?= $(shell which setup-envtest)

## Location to install dependencies to
LOCALBIN ?= $(shell pwd)/bin
$(LOCALBIN):
mkdir -p $(LOCALBIN)

ENVTEST_K8S_VERSION := 1.28.3
CONTROLLER_GEN ?= $(LOCALBIN)/controller-gen

include tools.mk

Expand All @@ -22,9 +28,22 @@ PRE = --ensure
##@ General

.PHONY: help
help: ## show help
help: ## Display this help.
@awk 'BEGIN {FS = ":.*##"; printf "\nUsage:\n make \033[36m<target>\033[0m\n"} /^[a-zA-Z_0-9-]+:.*?##/ { printf " \033[36m%-15s\033[0m %s\n", $$1, $$2 } /^##@/ { printf "\n\033[1m%s\033[0m\n", substr($$0, 5) } ' $(MAKEFILE_LIST)

controller-gen: ## Download controller-gen locally if necessary.
$(call go-get-tool,$(CONTROLLER_GEN),sigs.k8s.io/controller-tools/cmd/[email protected])

##@ Development

.PHONY: manifests
manifests: controller-gen ## Generate WebhookConfiguration, ClusterRole and CustomResourceDefinition objects.
$(CONTROLLER_GEN) rbac:roleName=manager-role crd webhook paths="./..." output:crd:artifacts:config=config/crd/bases

.PHONY: generate
generate: controller-gen ## Generate code containing DeepCopy, DeepCopyInto, and DeepCopyObject method implementations.
$(CONTROLLER_GEN) object:headerFile="hack/boilerplate.go.txt" paths="./..."

##@ Run

.PHONY: run
Expand Down Expand Up @@ -86,3 +105,17 @@ envtest: --tool ## Download and install setup-envtest in the $GOPATH/bin
.PHONY: mockery
mockery: TOOL = mockery
mockery: --tool

# go-get-tool will 'go get' any package $2 and install it to $1.
PROJECT_DIR := $(shell dirname $(abspath $(lastword $(MAKEFILE_LIST))))
define go-get-tool
@[ -f $(1) ] || { \
set -e ;\
TMP_DIR=$$(mktemp -d) ;\
cd $$TMP_DIR ;\
go mod init tmp ;\
echo "Downloading $(2)" ;\
GOBIN=$(PROJECT_DIR)/bin go install $(2) ;\
rm -rf $$TMP_DIR ;\
}
endef
20 changes: 20 additions & 0 deletions PROJECT
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
# Code generated by tool. DO NOT EDIT.
# This file is used to track the info used to scaffold your project
# and allow the plugins properly work.
# More info: https://book.kubebuilder.io/reference/project-config.html
domain: plural.sh
layout:
- go.kubebuilder.io/v4
projectName: kubebilder
repo: github.com/pluralsh/deployment-operator
resources:
- api:
crdVersion: v1
namespaced: true
controller: true
domain: plural.sh
group: deployments
kind: CustomHealth
path: github.com/pluralsh/deployment-operator/api/v1alpha1
version: v1alpha1
version: "3"
27 changes: 27 additions & 0 deletions api/v1alpha1/common_types.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package v1alpha1

type ConditionType string

func (c ConditionType) String() string {
return string(c)
}

const (
ReadyConditionType ConditionType = "Ready"
)

type ConditionReason string

func (c ConditionReason) String() string {
return string(c)
}

const (
ReadyConditionReason ConditionReason = "Ready"
)

type ConditionMessage string

func (c ConditionMessage) String() string {
return string(c)
}
66 changes: 66 additions & 0 deletions api/v1alpha1/customhealth_types.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
/*
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 (
"k8s.io/apimachinery/pkg/api/meta"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)

// CustomHealthSpec defines the desired state of CustomHealth
type CustomHealthSpec struct {
Script string `json:"script,omitempty"`
}

// CustomHealthStatus defines the observed state of CustomHealth
type CustomHealthStatus struct {
// Represents the observations of a HealthConvert current state.
// +patchMergeKey=type
// +patchStrategy=merge
// +listType=map
// +listMapKey=type
Conditions []metav1.Condition `json:"conditions,omitempty" patchStrategy:"merge" patchMergeKey:"type"`
}

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

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

Spec CustomHealthSpec `json:"spec,omitempty"`
Status CustomHealthStatus `json:"status,omitempty"`
}

//+kubebuilder:object:root=true

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

func init() {
SchemeBuilder.Register(&CustomHealth{}, &CustomHealthList{})
}

func (c *CustomHealth) SetCondition(condition metav1.Condition) {
meta.SetStatusCondition(&c.Status.Conditions, condition)
}
36 changes: 36 additions & 0 deletions api/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 deployments v1alpha1 API group
// +kubebuilder:object:generate=true
// +groupName=deployments.plural.sh
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: "deployments.plural.sh", 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
)
123 changes: 123 additions & 0 deletions api/v1alpha1/zz_generated.deepcopy.go

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

Loading

0 comments on commit b841f73

Please sign in to comment.