Skip to content

Commit bb0a4be

Browse files
CR-6453-k8s-resources-in-installed-git-source (#106)
* bump * timeout error message fix * eventsource and sensor created in git-src-repo as part of installation * removed redundant * paths as variables * persists in right path * updated workflowTemplate * PodGC syntax * adjustments * create Spec Template * fixed spec template * with wf util * added wfutil * using NewResource * debug * dependencyName * refactor * removed redundant * removed redundant * refactor * removed label * removed redundant * es name * caps * error as second param * naming * bump * codegen * fix conflicts * fix conflicts * fix conflicts * removed redundant * tidy * private vars * using store more * lint fix * removed redundant
1 parent 448508e commit bb0a4be

File tree

10 files changed

+315
-100
lines changed

10 files changed

+315
-100
lines changed

Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
VERSION=v0.0.105
1+
VERSION=v0.0.106
22
OUT_DIR=dist
33
YEAR?=$(shell date +"%Y")
44

cmd/commands/git-source.go

Lines changed: 170 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,14 @@ import (
2020
"os"
2121
"time"
2222

23+
apicommon "github.com/argoproj/argo-events/pkg/apis/common"
24+
sensorreg "github.com/argoproj/argo-events/pkg/apis/sensor"
2325
"github.com/codefresh-io/cli-v2/pkg/log"
2426
"github.com/codefresh-io/cli-v2/pkg/runtime"
2527
"github.com/codefresh-io/cli-v2/pkg/store"
2628
"github.com/codefresh-io/cli-v2/pkg/util"
29+
apu "github.com/codefresh-io/cli-v2/pkg/util/aputil"
30+
wfutil "github.com/codefresh-io/cli-v2/pkg/util/workflow"
2731
"github.com/juju/ansiterm"
2832

2933
apcmd "github.com/argoproj-labs/argocd-autopilot/cmd/commands"
@@ -32,21 +36,23 @@ import (
3236
"github.com/argoproj-labs/argocd-autopilot/pkg/git"
3337
apstore "github.com/argoproj-labs/argocd-autopilot/pkg/store"
3438
aputil "github.com/argoproj-labs/argocd-autopilot/pkg/util"
39+
eventsourcereg "github.com/argoproj/argo-events/pkg/apis/eventsource"
40+
eventsourcev1alpha1 "github.com/argoproj/argo-events/pkg/apis/eventsource/v1alpha1"
41+
sensorsv1alpha1 "github.com/argoproj/argo-events/pkg/apis/sensor/v1alpha1"
3542
wf "github.com/argoproj/argo-workflows/v3/pkg/apis/workflow"
3643
wfv1alpha1 "github.com/argoproj/argo-workflows/v3/pkg/apis/workflow/v1alpha1"
37-
apu "github.com/codefresh-io/cli-v2/pkg/util/aputil"
3844
"github.com/spf13/cobra"
3945
v1 "k8s.io/api/core/v1"
4046
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
4147
)
4248

4349
type (
4450
GitSourceCreateOptions struct {
45-
insCloneOpts *git.CloneOptions
46-
gsCloneOpts *git.CloneOptions
47-
gsName string
48-
runtimeName string
49-
fullGsPath string
51+
InsCloneOpts *git.CloneOptions
52+
GsCloneOpts *git.CloneOptions
53+
GsName string
54+
RuntimeName string
55+
FullGsPath string
5056
}
5157

5258
GitSourceDeleteOptions struct {
@@ -62,6 +68,12 @@ type (
6268
InsCloneOpts *git.CloneOptions
6369
GsCloneOpts *git.CloneOptions
6470
}
71+
72+
gitSourceCronExampleOptions struct {
73+
runtimeName string
74+
gsCloneOpts *git.CloneOptions
75+
gsFs fs.FS
76+
}
6577
)
6678

6779
func NewGitSourceCommand() *cobra.Command {
@@ -130,11 +142,11 @@ func NewGitSourceCreateCommand() *cobra.Command {
130142
ctx := cmd.Context()
131143

132144
return RunGitSourceCreate(ctx, &GitSourceCreateOptions{
133-
insCloneOpts: insCloneOpts,
134-
gsCloneOpts: gsCloneOpts,
135-
gsName: args[1],
136-
runtimeName: args[0],
137-
fullGsPath: gsCloneOpts.Path(),
145+
InsCloneOpts: insCloneOpts,
146+
GsCloneOpts: gsCloneOpts,
147+
GsName: args[1],
148+
RuntimeName: args[0],
149+
FullGsPath: gsCloneOpts.Path(),
138150
})
139151
},
140152
}
@@ -152,7 +164,7 @@ func NewGitSourceCreateCommand() *cobra.Command {
152164
}
153165

154166
func RunGitSourceCreate(ctx context.Context, opts *GitSourceCreateOptions) error {
155-
gsRepo, gsFs, err := opts.gsCloneOpts.GetRepo(ctx)
167+
gsRepo, gsFs, err := opts.GsCloneOpts.GetRepo(ctx)
156168
if err != nil {
157169
return err
158170
}
@@ -163,11 +175,16 @@ func RunGitSourceCreate(ctx context.Context, opts *GitSourceCreateOptions) error
163175
}
164176

165177
if len(fi) == 0 {
166-
if err = createDemoWorkflowTemplate(gsFs, opts.runtimeName); err != nil {
167-
return fmt.Errorf("failed to create demo workflowTemplate: %w", err)
178+
err = createCronExamplePipeline(&gitSourceCronExampleOptions{
179+
runtimeName: opts.RuntimeName,
180+
gsCloneOpts: opts.GsCloneOpts,
181+
gsFs: gsFs,
182+
})
183+
if err != nil {
184+
return fmt.Errorf("failed to create cron example pipeline. Error: %w", err)
168185
}
169186

170-
commitMsg := fmt.Sprintf("Created demo workflow template in %s Directory", opts.gsCloneOpts.Path())
187+
commitMsg := fmt.Sprintf("Created demo workflow template in %s Directory", opts.GsCloneOpts.Path())
171188

172189
log.G(ctx).Info("Pushing a demo workflow-template to the new git-source repo")
173190
if err := apu.PushWithMessage(ctx, gsRepo, commitMsg); err != nil {
@@ -176,19 +193,137 @@ func RunGitSourceCreate(ctx context.Context, opts *GitSourceCreateOptions) error
176193
}
177194

178195
appDef := &runtime.AppDef{
179-
Name: opts.gsName,
196+
Name: opts.GsName,
180197
Type: application.AppTypeDirectory,
181-
URL: opts.gsCloneOpts.Repo,
198+
URL: opts.GsCloneOpts.Repo,
182199
}
183-
if err := appDef.CreateApp(ctx, nil, opts.insCloneOpts, opts.runtimeName, store.Get().CFGitSourceType); err != nil {
200+
if err := appDef.CreateApp(ctx, nil, opts.InsCloneOpts, opts.RuntimeName, store.Get().CFGitSourceType); err != nil {
184201
return fmt.Errorf("failed to create git-source application. Err: %w", err)
185202
}
203+
log.G(ctx).Infof("Successfully created the git-source: '%s'", opts.GsName)
204+
205+
return nil
206+
}
207+
208+
func createCronExamplePipeline(opts *gitSourceCronExampleOptions) error {
209+
err := createDemoWorkflowTemplate(opts.gsFs, opts.runtimeName)
210+
if err != nil {
211+
return fmt.Errorf("failed to create demo workflowTemplate: %w", err)
212+
}
213+
214+
eventSourceFilePath := opts.gsFs.Join("resources", store.Get().CronExampleEventSourceFileName)
215+
sensorFilePath := opts.gsFs.Join("resources",store.Get().CronExampleSensorFileName)
216+
217+
eventSource := &eventsourcev1alpha1.EventSource{
218+
TypeMeta: metav1.TypeMeta{
219+
Kind: eventsourcereg.Kind,
220+
APIVersion: eventsourcereg.Group + "/v1alpha1",
221+
},
222+
ObjectMeta: metav1.ObjectMeta{
223+
Name: store.Get().CronExampleEventSourceName,
224+
Namespace: opts.runtimeName,
225+
},
226+
Spec: eventsourcev1alpha1.EventSourceSpec{
227+
EventBusName: store.Get().EventBusName,
228+
Calendar: map[string]eventsourcev1alpha1.CalendarEventSource{
229+
store.Get().CronExampleEventName: {
230+
Interval: "5m",
231+
},
232+
},
233+
},
234+
}
235+
236+
err = opts.gsCloneOpts.FS.WriteYamls(eventSourceFilePath, eventSource)
237+
if err != nil {
238+
return fmt.Errorf("failed to write yaml of eventsource. Error: %w", err)
239+
}
240+
241+
trigger, err := createCronExampleTrigger()
242+
triggers := []sensorsv1alpha1.Trigger{*trigger}
243+
if err != nil {
244+
return fmt.Errorf("failed to create cron example trigger. Error: %w", err)
245+
}
246+
247+
sensor, err := createCronExampleSensor(triggers, opts.runtimeName)
248+
if err != nil {
249+
return fmt.Errorf("failed to create cron example sensor. Error: %w", err)
250+
}
186251

187-
log.G(ctx).Infof("Successfully created the git-source: '%s'", opts.gsName)
252+
err = opts.gsCloneOpts.FS.WriteYamls(sensorFilePath, sensor)
253+
if err != nil {
254+
return fmt.Errorf("failed to write yaml of cron example sensor. Error: %w", err)
255+
}
188256

189257
return nil
190258
}
191259

260+
func createCronExampleSensor(triggers []sensorsv1alpha1.Trigger, runtimeName string) (*sensorsv1alpha1.Sensor, error) {
261+
dependencies := []sensorsv1alpha1.EventDependency{
262+
{
263+
Name: store.Get().CronExampleDependencyName,
264+
EventSourceName: store.Get().CronExampleEventSourceName,
265+
EventName: store.Get().CronExampleEventName,
266+
},
267+
}
268+
269+
return &sensorsv1alpha1.Sensor{
270+
TypeMeta: metav1.TypeMeta{
271+
Kind: sensorreg.Kind,
272+
APIVersion: sensorreg.Group + "/v1alpha1",
273+
},
274+
ObjectMeta: metav1.ObjectMeta{
275+
Name: "cron",
276+
Namespace: runtimeName,
277+
},
278+
Spec: sensorsv1alpha1.SensorSpec{
279+
EventBusName: "codefresh-eventbus",
280+
Template: &sensorsv1alpha1.Template{
281+
ServiceAccountName: "argo-server",
282+
},
283+
Dependencies: dependencies,
284+
Triggers: triggers,
285+
},
286+
}, nil
287+
}
288+
289+
func createCronExampleTrigger() (*sensorsv1alpha1.Trigger, error) {
290+
workflow := wfutil.CreateWorkflow(&wfutil.CreateWorkflowOptions{
291+
GenerateName: "cron-",
292+
SpecWfTemplateRefName: store.Get().CronExampleTriggerTemplateName,
293+
Parameters: []string{
294+
"message",
295+
},
296+
})
297+
298+
workflowResource := apicommon.NewResource(workflow)
299+
300+
return &sensorsv1alpha1.Trigger{
301+
Template: &sensorsv1alpha1.TriggerTemplate{
302+
Name: store.Get().CronExampleTriggerTemplateName,
303+
ArgoWorkflow: &sensorsv1alpha1.ArgoWorkflowTrigger{
304+
GroupVersionResource: metav1.GroupVersionResource{
305+
Group: "argoproj.io",
306+
Version: "v1alpha1",
307+
Resource: "workflows",
308+
},
309+
Operation: sensorsv1alpha1.Submit,
310+
Source: &sensorsv1alpha1.ArtifactLocation{
311+
Resource: &workflowResource,
312+
},
313+
Parameters: []sensorsv1alpha1.TriggerParameter{
314+
{
315+
Src: &sensorsv1alpha1.TriggerParameterSource{
316+
DependencyName: store.Get().CronExampleDependencyName,
317+
DataKey: "eventTime",
318+
},
319+
Dest: "spec.arguments.parameters.0.value",
320+
},
321+
},
322+
},
323+
},
324+
}, nil
325+
}
326+
192327
func NewGitSourceListCommand() *cobra.Command {
193328
cmd := &cobra.Command{
194329
Use: "list runtime_name",
@@ -404,25 +539,35 @@ func createDemoWorkflowTemplate(gsFs fs.FS, runtimeName string) error {
404539
APIVersion: wfv1alpha1.SchemeGroupVersion.String(),
405540
},
406541
ObjectMeta: metav1.ObjectMeta{
407-
Name: "demo-workflow-template",
408-
Namespace: runtimeName,
542+
Name: store.Get().CronExampleTriggerTemplateName,
409543
},
410544
Spec: wfv1alpha1.WorkflowTemplateSpec{
411545
WorkflowSpec: wfv1alpha1.WorkflowSpec{
412-
Entrypoint: "whalesay",
546+
Arguments: wfv1alpha1.Arguments{
547+
Parameters: []wfv1alpha1.Parameter{{Name: "message"}},
548+
},
549+
Entrypoint: "whalesay",
550+
ServiceAccountName: store.Get().CodefreshSA,
551+
PodGC: &wfv1alpha1.PodGC{
552+
Strategy: wfv1alpha1.PodGCOnWorkflowCompletion,
553+
},
413554
Templates: []wfv1alpha1.Template{
414555
{
415556
Name: "whalesay",
557+
Inputs: wfv1alpha1.Inputs{
558+
Parameters: []wfv1alpha1.Parameter{{Name: "message", Value: wfv1alpha1.AnyStringPtr("hello world")}},
559+
Artifacts: wfv1alpha1.Artifacts{},
560+
},
416561
Container: &v1.Container{
417-
Image: "docker/whalesay",
562+
Image: "docker/whalesay:latest",
418563
Command: []string{"cowsay"},
419-
Args: []string{"Hello World"},
564+
Args: []string{"{{inputs.parameters.message}}"},
420565
},
421566
},
422567
},
423568
},
424569
},
425570
}
426571

427-
return gsFs.WriteYamls("demo-wf-template.yaml", wfTemplate)
572+
return gsFs.WriteYamls(store.Get().CronExampleWfTemplateFileName, wfTemplate)
428573
}

0 commit comments

Comments
 (0)