-
Notifications
You must be signed in to change notification settings - Fork 0
/
main.go
122 lines (102 loc) · 3.17 KB
/
main.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
package main
import (
"context"
"fmt"
"log"
"os"
"time"
v1alpha1 "github.com/argoproj/argo-workflows/v3/pkg/apis/workflow/v1alpha1"
argo "github.com/argoproj/argo-workflows/v3/pkg/client/clientset/versioned"
apiv1 "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/client-go/rest"
"k8s.io/client-go/tools/clientcmd"
clientcmdapi "k8s.io/client-go/tools/clientcmd/api"
)
func getClientset() (*argo.Clientset, error) {
var config *rest.Config
var err error
// Check if the program is running inside a Kubernetes cluster.
if _, err = rest.InClusterConfig(); err != nil {
kubeconfig := os.Getenv("KUBECONFIG")
if kubeconfig == "" {
kubeconfig = clientcmd.RecommendedHomeFile
}
config, err = clientcmd.NewNonInteractiveDeferredLoadingClientConfig(
&clientcmd.ClientConfigLoadingRules{ExplicitPath: kubeconfig},
&clientcmd.ConfigOverrides{ClusterInfo: clientcmdapi.Cluster{Server: ""}}).ClientConfig()
if err != nil {
log.Fatalf("Failed to load Kubernetes configuration: %v", err)
}
} else {
config, err = rest.InClusterConfig()
if err != nil {
log.Fatalf("Failed to load in-cluster configuration: %v", err)
}
}
//return kubernetes.NewForConfig(config)
return argo.NewForConfig(config)
}
func deleteCronWorkflow(argoClientset *argo.Clientset, ctx context.Context, namespace, name string) error {
err := argoClientset.ArgoprojV1alpha1().CronWorkflows(namespace).Delete(ctx, name, metav1.DeleteOptions{})
if err != nil {
return err
}
return nil
}
func main() {
namespace := "argo"
argoClientset, err := getClientset()
if err != nil {
log.Fatalf("Error creating Argo clientset: %v", err)
}
ctx := context.Background()
cronWorkflow := &v1alpha1.CronWorkflow{
ObjectMeta: metav1.ObjectMeta{
GenerateName: "hello-world-cron-",
},
Spec: v1alpha1.CronWorkflowSpec{
Schedule: "* * * * *", // Run every minute
ConcurrencyPolicy: "Forbid",
WorkflowSpec: v1alpha1.WorkflowSpec{
Entrypoint: "hello-world",
Templates: []v1alpha1.Template{
{
Name: "hello-world",
Script: &v1alpha1.ScriptTemplate{
Container: apiv1.Container{
Image: "python:alpine3.6",
Command: []string{"python"},
},
Source: "print('Hello, world!')",
},
},
},
},
},
}
result, err := argoClientset.ArgoprojV1alpha1().CronWorkflows(namespace).Create(ctx, cronWorkflow,
metav1.CreateOptions{})
if err != nil {
log.Fatalf("Error creating Argo Cron Workflow: %v", err)
}
fmt.Printf("Cron Workflow created: %s", result.Name)
fmt.Println("Cron Workflow created successfully.")
for i := 0; i < 4; i++ {
time.Sleep(30 * time.Second)
workflows, err := argoClientset.ArgoprojV1alpha1().Workflows(namespace).List(ctx, metav1.ListOptions{})
if err != nil {
log.Printf("Error listing Argo Workflows: %v", err)
continue
}
fmt.Println("Workflows:")
for _, wf := range workflows.Items {
fmt.Printf(" - Name: %s, Status: %s\n", wf.Name, wf.Status.Phase)
}
}
err = deleteCronWorkflow(argoClientset, ctx, namespace, result.Name)
if err != nil {
log.Fatalf("Error deleting Argo Cron Workflow: %v", err)
}
fmt.Println("Cron Workflow deleted successfully.")
}