mirror of
https://github.com/onepanelio/onepanel.git
synced 2025-10-08 15:10:06 +08:00
222 lines
5.3 KiB
Go
222 lines
5.3 KiB
Go
package argo
|
|
|
|
import (
|
|
"flag"
|
|
"os"
|
|
"testing"
|
|
|
|
"github.com/onepanelio/core/util/ptr"
|
|
)
|
|
|
|
var TestInstanceWorkflowManifest = []byte(`
|
|
apiVersion: argoproj.io/v1alpha1
|
|
kind: Workflow
|
|
metadata:
|
|
generateName: vscode-
|
|
spec:
|
|
podGC:
|
|
strategy: OnWorkflowCompletion
|
|
entrypoint: instance-tmpl
|
|
arguments:
|
|
parameters:
|
|
- name: name
|
|
- name: action
|
|
- name: machine-type
|
|
templates:
|
|
- name: instance-tmpl
|
|
steps:
|
|
- - name: instance-service
|
|
template: instance-service-tmpl
|
|
- - name: instance-virtual-service
|
|
template: instance-virtual-service-tmpl
|
|
- - name: instance-statefulset
|
|
template: instance-statefulset-tmpl
|
|
- name: instance-service-tmpl
|
|
metadata:
|
|
annotations:
|
|
sidecar.istio.io/inject: "false"
|
|
nodeSelector:
|
|
cloud.google.com/gke-nodepool: default-pool
|
|
resource:
|
|
action: "{{workflow.parameters.action}}"
|
|
manifest: |
|
|
apiVersion: v1
|
|
kind: Service
|
|
metadata:
|
|
name: {{workflow.parameters.name}}
|
|
spec:
|
|
ports:
|
|
- name: http
|
|
port: 80
|
|
protocol: TCP
|
|
targetPort: 8080
|
|
selector:
|
|
instanceUID: {{workflow.parameters.name}}
|
|
type: ClusterIP
|
|
- name: instance-virtual-service-tmpl
|
|
metadata:
|
|
annotations:
|
|
sidecar.istio.io/inject: "false"
|
|
nodeSelector:
|
|
cloud.google.com/gke-nodepool: default-pool
|
|
resource:
|
|
action: "{{workflow.parameters.action}}"
|
|
manifest: |
|
|
apiVersion: networking.istio.io/v1alpha3
|
|
kind: VirtualService
|
|
metadata:
|
|
name: {{workflow.parameters.name}}
|
|
spec:
|
|
hosts:
|
|
- {{workflow.parameters.name}}.{{workflow.parameters.host}}
|
|
gateways:
|
|
- istio-system/ingressgateway
|
|
http:
|
|
- match:
|
|
- uri:
|
|
prefix: /
|
|
route:
|
|
- destination:
|
|
port:
|
|
number: 80
|
|
host: {{workflow.parameters.name}}
|
|
- name: instance-statefulset-tmpl
|
|
metadata:
|
|
annotations:
|
|
sidecar.istio.io/inject: "false"
|
|
nodeSelector:
|
|
cloud.google.com/gke-nodepool: default-pool
|
|
resource:
|
|
action: "{{workflow.parameters.action}}"
|
|
manifest: |
|
|
apiVersion: apps/v1
|
|
kind: StatefulSet
|
|
metadata:
|
|
name: {{workflow.parameters.name}}
|
|
spec:
|
|
replicas: 1
|
|
serviceName: {{workflow.parameters.name}}
|
|
selector:
|
|
matchLabels:
|
|
instanceUID: {{workflow.parameters.name}}
|
|
template:
|
|
metadata:
|
|
labels:
|
|
instanceUID: {{workflow.parameters.name}}
|
|
spec:
|
|
nodeSelector:
|
|
cloud.google.com/gke-nodepool: {{workflow.parameters.machine-type}}
|
|
containers:
|
|
- name: main
|
|
image: codercom/code-server:v2
|
|
args: ["--auth", "none"]
|
|
ports:
|
|
- containerPort: 80
|
|
name: http
|
|
volumeMounts:
|
|
- name: vol1
|
|
mountPath: /home/coder
|
|
volumeClaimTemplates:
|
|
- metadata:
|
|
name: vol1
|
|
spec:
|
|
accessModes: ["ReadWriteOnce"]
|
|
storageClassName: default
|
|
resources:
|
|
requests:
|
|
storage: 1Gi
|
|
`)
|
|
|
|
var (
|
|
namespace = flag.String("namespace", "default", "namespace of workflows")
|
|
options = &Options{
|
|
Namespace: *namespace,
|
|
Parameters: []Parameter{
|
|
{
|
|
Name: "name",
|
|
Value: ptr.String("vscode"),
|
|
},
|
|
{
|
|
Name: "machine-type",
|
|
Value: ptr.String("default-pool"),
|
|
},
|
|
{
|
|
Name: "host",
|
|
Value: ptr.String("test-cluster-11.onepanel.io"),
|
|
},
|
|
},
|
|
}
|
|
)
|
|
|
|
func TestUnmarshalWorkflows(t *testing.T) {
|
|
wfs, err := unmarshalWorkflows([]byte(TestInstanceWorkflowManifest), true)
|
|
if err != nil {
|
|
t.Error(err)
|
|
return
|
|
}
|
|
|
|
t.Log(wfs[0])
|
|
}
|
|
|
|
func TestCreateOrResumeInstance(t *testing.T) {
|
|
c := NewClient(os.Getenv("KUBECONFIG"))
|
|
|
|
options.Parameters = append(options.Parameters, Parameter{
|
|
Name: "action",
|
|
Value: ptr.String("create"),
|
|
})
|
|
|
|
wf, err := c.CreateWorkflow(TestInstanceWorkflowManifest, options)
|
|
if err != nil {
|
|
t.Error(err)
|
|
return
|
|
}
|
|
|
|
t.Log(wf)
|
|
}
|
|
|
|
func TestPauseInstance(t *testing.T) {
|
|
c := NewClient(os.Getenv("KUBECONFIG"))
|
|
|
|
options.Parameters = append(options.Parameters, Parameter{
|
|
Name: "action",
|
|
Value: ptr.String("delete"),
|
|
})
|
|
|
|
wf, err := c.CreateWorkflow(TestInstanceWorkflowManifest, options)
|
|
if err != nil {
|
|
t.Error(err)
|
|
return
|
|
}
|
|
|
|
t.Log(wf)
|
|
}
|
|
|
|
func TestChangeInstanceMachineType(t *testing.T) {
|
|
c := NewClient(os.Getenv("KUBECONFIG"))
|
|
|
|
options.Parameters = append(options.Parameters, Parameter{
|
|
Name: "action",
|
|
Value: ptr.String("apply"),
|
|
}, Parameter{
|
|
Name: "machine-type",
|
|
Value: ptr.String("cpu-1-4"),
|
|
})
|
|
|
|
wf, err := c.CreateWorkflow(TestInstanceWorkflowManifest, options)
|
|
if err != nil {
|
|
t.Error(err)
|
|
return
|
|
}
|
|
|
|
t.Log(wf)
|
|
}
|
|
|
|
/**** Some other test scenarios
|
|
- System-wide environment variables
|
|
- System-wide parameters like `host`
|
|
- Startup script that can be executed in:
|
|
- Init Container: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/
|
|
- LifeCycle Hooks: https://kubernetes.io/docs/concepts/containers/container-lifecycle-hooks/#container-hooks
|
|
****/
|