Skip to content
Merged
Show file tree
Hide file tree
Changes from 10 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
5 changes: 5 additions & 0 deletions api/aggregation/v1alpha1/doc.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
// Package v1alpha1 contains API schema definitions for the aggregation.coder.com API group.
//
// +k8s:deepcopy-gen=package
// +groupName=aggregation.coder.com
package v1alpha1
34 changes: 34 additions & 0 deletions api/aggregation/v1alpha1/groupversion_info.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
package v1alpha1

import (
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/runtime"
"k8s.io/apimachinery/pkg/runtime/schema"
)

var (
// SchemeGroupVersion is group version used to register these objects.
SchemeGroupVersion = schema.GroupVersion{Group: "aggregation.coder.com", Version: "v1alpha1"}

// SchemeBuilder is used to add go types to the GroupVersionKind scheme.
SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes)

// AddToScheme adds the types in this group-version to the provided scheme.
AddToScheme = SchemeBuilder.AddToScheme
)

func addKnownTypes(scheme *runtime.Scheme) error {
scheme.AddKnownTypes(SchemeGroupVersion,
&CoderWorkspace{},
&CoderWorkspaceList{},
&CoderTemplate{},
&CoderTemplateList{},
)
metav1.AddToGroupVersion(scheme, SchemeGroupVersion)
return nil
}

// Resource takes an unqualified resource and returns a Group-qualified GroupResource.
func Resource(resource string) schema.GroupResource {
return SchemeGroupVersion.WithResource(resource).GroupResource()
}
73 changes: 73 additions & 0 deletions api/aggregation/v1alpha1/types.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
package v1alpha1

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

// CoderWorkspaceSpec defines the desired state of a CoderWorkspace.
type CoderWorkspaceSpec struct {
// Running indicates whether the workspace should be running.
Running bool `json:"running"`
}

// CoderWorkspaceStatus defines the observed state of a CoderWorkspace.
type CoderWorkspaceStatus struct {
// AutoShutdown is the next planned shutdown time for the workspace.
AutoShutdown *metav1.Time `json:"autoShutdown,omitempty"`
}

// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
// +kubebuilder:object:root=true
// +kubebuilder:subresource:status

// CoderWorkspace is the schema for Coder workspace resources.
type CoderWorkspace struct {
metav1.TypeMeta `json:",inline"`
metav1.ObjectMeta `json:"metadata,omitempty"`

Spec CoderWorkspaceSpec `json:"spec,omitempty"`
Status CoderWorkspaceStatus `json:"status,omitempty"`
}

// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
// +kubebuilder:object:root=true

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

// CoderTemplateSpec defines the desired state of a CoderTemplate.
type CoderTemplateSpec struct {
// Running indicates whether the template should be marked as running.
Running bool `json:"running"`
}

// CoderTemplateStatus defines the observed state of a CoderTemplate.
type CoderTemplateStatus struct {
// AutoShutdown is the next planned shutdown time for workspaces created by this template.
AutoShutdown *metav1.Time `json:"autoShutdown,omitempty"`
}

// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
// +kubebuilder:object:root=true
// +kubebuilder:subresource:status

// CoderTemplate is the schema for Coder template resources.
type CoderTemplate struct {
metav1.TypeMeta `json:",inline"`
metav1.ObjectMeta `json:"metadata,omitempty"`

Spec CoderTemplateSpec `json:"spec,omitempty"`
Status CoderTemplateStatus `json:"status,omitempty"`
}

// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
// +kubebuilder:object:root=true

// CoderTemplateList contains a list of CoderTemplate objects.
type CoderTemplateList struct {
metav1.TypeMeta `json:",inline"`
metav1.ListMeta `json:"metadata,omitempty"`
Items []CoderTemplate `json:"items"`
}
204 changes: 204 additions & 0 deletions api/aggregation/v1alpha1/zz_generated.deepcopy.go

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

36 changes: 36 additions & 0 deletions app_dispatch.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
package main

import (
"flag"
"fmt"

ctrl "sigs.k8s.io/controller-runtime"

"github.com/coder/coder-k8s/internal/app/apiserverapp"
"github.com/coder/coder-k8s/internal/app/controllerapp"
)

var (
runControllerApp = controllerapp.Run
runAggregatedAPIServerApp = apiserverapp.Run
)

func run(args []string) error {
fs := flag.NewFlagSet("coder-k8s", flag.ContinueOnError)
var appMode string
fs.StringVar(&appMode, "app", "", "Application mode (controller, aggregated-apiserver)")
if err := fs.Parse(args); err != nil {
return err
}

switch appMode {
case "controller":
return runControllerApp(ctrl.SetupSignalHandler())
case "aggregated-apiserver":
return runAggregatedAPIServerApp(ctrl.SetupSignalHandler())
case "":
return fmt.Errorf("assertion failed: --app flag is required; must be one of: controller, aggregated-apiserver")
Comment thread
ThomasK33 marked this conversation as resolved.
default:
return fmt.Errorf("assertion failed: unsupported --app value %q; must be one of: controller, aggregated-apiserver", appMode)
}
}
13 changes: 13 additions & 0 deletions deploy/apiserver-apiservice.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
apiVersion: apiregistration.k8s.io/v1
kind: APIService
metadata:
name: v1alpha1.aggregation.coder.com
spec:
group: aggregation.coder.com
version: v1alpha1
service:
name: coder-k8s-apiserver
namespace: coder-system
groupPriorityMinimum: 1000
versionPriority: 100
insecureSkipTLSVerify: true
23 changes: 23 additions & 0 deletions deploy/apiserver-deployment.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
apiVersion: apps/v1
kind: Deployment
metadata:
name: coder-k8s-apiserver
namespace: coder-system
spec:
replicas: 1
selector:
matchLabels:
app: coder-k8s-apiserver
template:
metadata:
labels:
app: coder-k8s-apiserver
spec:
serviceAccountName: coder-k8s-apiserver
containers:
- name: apiserver
image: ghcr.io/coder/coder-k8s:latest
args: ["--app=aggregated-apiserver"]
ports:
- containerPort: 6443
name: https
Loading
Loading