Skip to content
This repository was archived by the owner on Jun 11, 2025. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
28 commits
Select commit Hold shift + click to select a range
ae52e57
chore: updates event details in reconcile filter
nxtcoder17 Mar 25, 2025
33abde4
WIP: workspaces and workmachines
nxtcoder17 Mar 28, 2025
d431f2c
feat: workspaces and workmachines operator and CRDs
nxtcoder17 Apr 2, 2025
eb51e19
chore: router updates
nxtcoder17 Apr 2, 2025
5aef30d
WIP: workmachine ssh jumpserver
nxtcoder17 Apr 9, 2025
17824dd
workspace changes in progress
Apr 10, 2025
ea0e77b
workspace changes in progress
Apr 10, 2025
7a4723d
added headless service for service intercepts
karthik1729 Apr 10, 2025
d25d47a
changed KloudliteDeviceFQDN to point to headless service
karthik1729 Apr 10, 2025
ccb12cd
updated ingress class
karthik1729 Apr 10, 2025
22aceb7
workspace type changes
karthik1729 Apr 10, 2025
f423239
added SessionSecretName to workmachine spec
karthik1729 Apr 12, 2025
11e94fe
removed subnet id from workmachine spec. It will be same subnet as cl…
karthik1729 Apr 13, 2025
81cba8e
wip
karthik1729 Apr 13, 2025
5b8a435
wip
karthik1729 Apr 13, 2025
42dc061
wm changes
karthik1729 Apr 16, 2025
9bd7ab6
Merge branch 'feat/workspace-and-workmachine' of github.com:kloudlite…
karthik1729 Apr 16, 2025
370362b
workspace updated
nxtcoder36 Apr 17, 2025
79b058b
workspace types updated
nxtcoder36 Apr 17, 2025
96a25ca
workmachine updated
nxtcoder36 Apr 17, 2025
86e6a95
feat: workmachine ssh gen
nxtcoder17 Apr 18, 2025
c3c67cd
templates file updated
nxtcoder36 Apr 18, 2025
244f007
small change
nxtcoder36 Apr 18, 2025
609e729
resouceWatcher adde
nxtcoder36 Apr 18, 2025
e43b8f0
minor changes
nxtcoder36 Apr 21, 2025
f03add4
feat: adds job tracker functions and job status checks
nxtcoder17 May 20, 2025
fc7be10
feat: router spec and app-controller controller updates
nxtcoder17 Jun 4, 2025
5f31210
fix: resolves PR review comments, and refactorings
nxtcoder17 Jun 4, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 15 additions & 0 deletions .vscode/launch.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
{
"configurations": [
{
"name": "Run Agent Operator",
"type": "go",
"request": "launch",
"mode": "debug",
"envFile": "${workspaceFolder}/cmd/agent-operator/.secrets/env",
"program": "${workspaceFolder}/cmd/agent-operator/main.go",
"args": [
"--dev","--serverHost", "localhost:8080"
]
}
]
}
22 changes: 21 additions & 1 deletion PROJECT
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
# More info: https://book.kubebuilder.io/reference/project-config.html
domain: kloudlite.io
layout:
- go.kubebuilder.io/v3
- go.kubebuilder.io/v4
multigroup: true
plugins:
manifests.sdk.operatorframework.io/v2: {}
Expand Down Expand Up @@ -515,8 +515,28 @@ resources:
domain: kloudlite.io
group: crds
kind: ServiceIntercept
version: ""
- api:
crdVersion: v1
namespaced: true
group: mongodb.msvc
kind: Backup
path: github.com/kloudlite/operator/apis/mongodb.msvc/v1
version: v1
- api:
crdVersion: v1
namespaced: true
domain: kloudlite.io
group: crds
kind: Workspace
path: github.com/kloudlite/operator/api/crds/v1
version: v1
- api:
crdVersion: v1
namespaced: true
domain: kloudlite.io
group: crds
kind: WorkMachine
path: github.com/kloudlite/operator/api/crds/v1
version: v1
version: "3"
5 changes: 5 additions & 0 deletions apis/common-types/types.go
Original file line number Diff line number Diff line change
Expand Up @@ -117,7 +117,12 @@ type MinMaxInt struct {
// +kubebuilder:validation:Enum=aws;do;azure;gcp
type CloudProvider string

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

const (
CloudProviderUnknown CloudProvider = "unknown"
CloudProviderAWS CloudProvider = "aws"
CloudProviderDigitalOcean CloudProvider = "digitalocean"
CloudProviderAzure CloudProvider = "azure"
Expand Down
60 changes: 0 additions & 60 deletions apis/crds/v1/app_webhook.go

This file was deleted.

35 changes: 16 additions & 19 deletions apis/crds/v1/router_types.go
Original file line number Diff line number Diff line change
@@ -1,19 +1,17 @@
package v1

import (
"strings"

metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"

"github.com/kloudlite/operator/pkg/constants"
"github.com/kloudlite/operator/toolkit/reconciler"
)

type Route struct {
App string `json:"app"`
// Lambda string `json:"lambda,omitempty"`
Path string `json:"path"`
Port uint16 `json:"port"`
Host string `json:"host"`
Service string `json:"service"`
Path string `json:"path"`
Port uint16 `json:"port"`

// +kubebuilder:default=false
Rewrite bool `json:"rewrite,omitempty"`
}
Expand Down Expand Up @@ -50,14 +48,18 @@ type RouterSpec struct {
IngressClass string `json:"ingressClass,omitempty"`
BackendProtocol *string `json:"backendProtocol,omitempty"`
Https *Https `json:"https,omitempty"`
// +kubebuilder:validation:Optional

RateLimit *RateLimit `json:"rateLimit,omitempty"`
MaxBodySizeInMB *int `json:"maxBodySizeInMB,omitempty"`
Domains []string `json:"domains"`
Routes []Route `json:"routes,omitempty"`
BasicAuth *BasicAuth `json:"basicAuth,omitempty"`
Cors *Cors `json:"cors,omitempty"`

BasicAuth *BasicAuth `json:"basicAuth,omitempty"`
Cors *Cors `json:"cors,omitempty"`

// NginxIngressAnnotations is additional list of annotations on ingress resource
// INFO: must be used when router does not have direct support for it
NginxIngressAnnotations map[string]string `json:"nginxIngressAnnotations,omitempty"`

Routes []Route `json:"routes,omitempty"`
}

// +kubebuilder:object:root=true
Expand Down Expand Up @@ -91,16 +93,11 @@ func (r *Router) GetStatus() *reconciler.Status {
}

func (r *Router) GetEnsuredLabels() map[string]string {
return map[string]string{
constants.RouterNameKey: r.Name,
}
return map[string]string{}
}

func (m *Router) GetEnsuredAnnotations() map[string]string {
return map[string]string{
"kloudlite.io/router.domains": strings.Join(m.Spec.Domains, ","),
"kloudlite.io/router.ingress-class": m.Spec.IngressClass,
}
return map[string]string{}
}

// +kubebuilder:object:root=true
Expand Down
120 changes: 120 additions & 0 deletions apis/crds/v1/workmachine_types.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,120 @@
package v1

import (
ct "github.com/kloudlite/operator/apis/common-types"
rApi "github.com/kloudlite/operator/toolkit/reconciler"
corev1 "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)

type AWSMachineConfig struct {
// Region string `json:"region" graphql:"noinput"`
// AvailabilityZone string `json:"availabilityZone"`

AMI string `json:"ami"`
InstanceType string `json:"instanceType"`
// PublicSubnetID string `json:"publicSubnetID"`

//+kubebuilder:default=50
RootVolumeSize int `json:"rootVolumeSize" graphql:"noinput"`

//+kubebuilder:default=gp3
RootVolumeType string `json:"rootVolumeType" graphql:"noinput"`

ExternalVolumeSize int `json:"externalVolumeSize"`

//+kubebuilder:default=gp3
ExternalVolumeType string `json:"externalVolumeType" graphql:"noinput"`

IAMInstanceProfileRole *string `json:"iamInstanceProfileRole,omitempty" graphql:"noinput"`
}

// +kubebuilder:validation:Enum=ON;OFF;
// +kubebuilder:default=ON
type WorkMachineState string

const (
WorkMachineStateOn WorkMachineState = "ON"
WorkMachineStateOff WorkMachineState = "OFF"
)

type WorkMachineJobParams struct {
NodeSelector map[string]string `json:"nodeSelector,omitempty"`
Tolerations []corev1.Toleration `json:"tolerations,omitempty"`
}

// WorkMachineSpec defines the desired state of WorkMachine
type WorkMachineSpec struct {
State WorkMachineState `json:"state"`
SSHPublicKeys []string `json:"sshPublicKeys"`

JobParams WorkMachineJobParams `json:"jobParams,omitempty"`

TargetNamespace string `json:"targetNamespace,omitempty"`

AWSMachineConfig *AWSMachineConfig `json:"aws"`
}

func (wms *WorkMachineSpec) GetCloudProvider() ct.CloudProvider {
if wms.AWSMachineConfig != nil {
return ct.CloudProviderAWS
}

return ct.CloudProviderUnknown
}

type WorkMachineStatus struct {
rApi.Status `json:"status,omitempty"`
MachinePublicSSHKey string `json:"machineSSHKey,omitempty"`
}

// +kubebuilder:object:root=true
// +kubebuilder:subresource:status
// +kubebuilder:resource:scope=Cluster
// +kubebuilder:printcolumn:JSONPath=".spec.targetNamespace",name=TargetNamespace,type=string
// +kubebuilder:printcolumn:JSONPath=".status.status.lastReconcileTime",name=Seen,type=date
// +kubebuilder:printcolumn:JSONPath=".metadata.annotations.kloudlite\\.io\\/operator\\.checks",name=Checks,type=string
// +kubebuilder:printcolumn:JSONPath=".metadata.annotations.kloudlite\\.io\\/operator\\.resource\\.ready",name=Ready,type=string
// +kubebuilder:printcolumn:JSONPath=".metadata.creationTimestamp",name=Age,type=date

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

Spec WorkMachineSpec `json:"spec,omitempty"`
Status WorkMachineStatus `json:"status,omitempty"`
}

func (r *WorkMachine) EnsureGVK() {
if r != nil {
r.SetGroupVersionKind(GroupVersion.WithKind("WorkMachine"))
}
}

func (w *WorkMachine) GetStatus() *rApi.Status {
return &w.Status.Status
}

func (w *WorkMachine) GetEnsuredLabels() map[string]string {
return map[string]string{
"kloudlite.io/workmachine.name": w.Name,
}
}

func (w *WorkMachine) GetEnsuredAnnotations() map[string]string {
return map[string]string{}
}

// +kubebuilder:object:root=true

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

func init() {
SchemeBuilder.Register(&WorkMachine{}, &WorkMachineList{})
}
Loading
Loading