Skip to content

Commit 57fa12f

Browse files
Cr 6076 (#96)
* add argo-agent installation as part of v2 cli * add argo-agent installation as part of v2 cli * bump version * fix linter * trigger ci * regenerate util * replace gotmpl with kustomize
1 parent 28873ba commit 57fa12f

File tree

6 files changed

+355
-35
lines changed

6 files changed

+355
-35
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.93
1+
VERSION=v0.0.95
22
OUT_DIR=dist
33
YEAR?=$(shell date +"%Y")
44

cmd/commands/runtime.go

Lines changed: 81 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ import (
2626
"github.com/codefresh-io/cli-v2/pkg/runtime"
2727
"github.com/codefresh-io/cli-v2/pkg/store"
2828
"github.com/codefresh-io/cli-v2/pkg/util"
29+
argodashboardutil "github.com/codefresh-io/cli-v2/pkg/util/argo-agent"
2930
cdutil "github.com/codefresh-io/cli-v2/pkg/util/cd"
3031
eventsutil "github.com/codefresh-io/cli-v2/pkg/util/events"
3132
ingressutil "github.com/codefresh-io/cli-v2/pkg/util/ingress"
@@ -274,6 +275,10 @@ func RunRuntimeInstall(ctx context.Context, opts *RuntimeInstallOptions) error {
274275
}
275276
}
276277

278+
if err = createCodefreshArgoAgentReporter(ctx, opts.insCloneOpts, opts, rt); err != nil {
279+
return fmt.Errorf("failed to create argocd-agent-reporter: %w", err)
280+
}
281+
277282
if err = createEventsReporter(ctx, opts.insCloneOpts, opts, rt); err != nil {
278283
return fmt.Errorf("failed to create events-reporter: %w", err)
279284
}
@@ -745,7 +750,12 @@ func createEventsReporter(ctx context.Context, cloneOpts *git.CloneOptions, opts
745750
return fmt.Errorf("failed to create argocd token secret: %w", err)
746751
}
747752

748-
if err = opts.KubeFactory.Apply(ctx, opts.RuntimeName, aputil.JoinManifests(runtimeTokenSecret, argoTokenSecret)); err != nil {
753+
argoAgentCFTokenSecret, err := getArgoCDAgentTokenSecret(ctx, cfConfig.GetCurrentContext().Token, opts.RuntimeName)
754+
if err != nil {
755+
return fmt.Errorf("failed to create argocd token secret: %w", err)
756+
}
757+
758+
if err = opts.KubeFactory.Apply(ctx, opts.RuntimeName, aputil.JoinManifests(runtimeTokenSecret, argoTokenSecret, argoAgentCFTokenSecret)); err != nil {
749759
return fmt.Errorf("failed to create codefresh token: %w", err)
750760
}
751761

@@ -778,6 +788,41 @@ func createEventsReporter(ctx context.Context, cloneOpts *git.CloneOptions, opts
778788
return err
779789
}
780790

791+
func createCodefreshArgoAgentReporter(ctx context.Context, cloneOpts *git.CloneOptions, opts *RuntimeInstallOptions, rt *runtime.Runtime) error {
792+
argoAgentCFTokenSecret, err := getArgoCDAgentTokenSecret(ctx, cfConfig.GetCurrentContext().Token, opts.RuntimeName)
793+
if err != nil {
794+
return fmt.Errorf("failed to create argocd token secret: %w", err)
795+
}
796+
797+
if err = opts.KubeFactory.Apply(ctx, opts.RuntimeName, aputil.JoinManifests(argoAgentCFTokenSecret)); err != nil {
798+
return fmt.Errorf("failed to create codefresh token: %w", err)
799+
}
800+
801+
resPath := cloneOpts.FS.Join(apstore.Default.AppsDir, store.Get().ArgoCDAgentReporterName, opts.RuntimeName, "resources")
802+
appDef := &runtime.AppDef{
803+
Name: store.Get().ArgoCDAgentReporterName,
804+
Type: application.AppTypeDirectory,
805+
URL: cloneOpts.URL() + "/" + resPath,
806+
}
807+
if err := appDef.CreateApp(ctx, opts.KubeFactory, cloneOpts, opts.RuntimeName, store.Get().CFComponentType); err != nil {
808+
return err
809+
}
810+
811+
r, _, err := cloneOpts.GetRepo(ctx)
812+
if err != nil {
813+
return err
814+
}
815+
816+
if err := createCodefreshArgoDashboardAgent(ctx, resPath, cloneOpts, rt); err != nil {
817+
return err
818+
}
819+
820+
_, err = r.Persist(ctx, &git.PushOptions{
821+
CommitMsg: "Created ArgoCD Agent Reporter",
822+
})
823+
return err
824+
}
825+
781826
func createWorkflowReporter(ctx context.Context, cloneOpts *git.CloneOptions, opts *RuntimeInstallOptions) error {
782827
resPath := cloneOpts.FS.Join(apstore.Default.AppsDir, store.Get().WorkflowReporterName, opts.RuntimeName, "resources")
783828
appDef := &runtime.AppDef{
@@ -875,6 +920,22 @@ func getArgoCDTokenSecret(ctx context.Context, namespace string, insecure bool)
875920
})
876921
}
877922

923+
func getArgoCDAgentTokenSecret(ctx context.Context, token string, namespace string) ([]byte, error) {
924+
return yaml.Marshal(&v1.Secret{
925+
TypeMeta: metav1.TypeMeta{
926+
APIVersion: "v1",
927+
Kind: "Secret",
928+
},
929+
ObjectMeta: metav1.ObjectMeta{
930+
Name: store.Get().ArgoCDAgentCFTokenSecret,
931+
Namespace: namespace,
932+
},
933+
Data: map[string][]byte{
934+
store.Get().ArgoCDAgentCFTokenKey: []byte(token),
935+
},
936+
})
937+
}
938+
878939
func createWorkflowReporterRBAC(repofs fs.FS, path, runtimeName string) error {
879940
serviceAccount := &v1.ServiceAccount{
880941
TypeMeta: metav1.TypeMeta{
@@ -982,3 +1043,22 @@ func createSensor(repofs fs.FS, name, path, namespace, eventSourceName, trigger,
9821043
})
9831044
return repofs.WriteYamls(repofs.Join(path, "sensor.yaml"), sensor)
9841045
}
1046+
1047+
func createCodefreshArgoDashboardAgent(ctx context.Context, path string, cloneOpts *git.CloneOptions, rt *runtime.Runtime) error {
1048+
_, fs, err := cloneOpts.GetRepo(ctx)
1049+
if err != nil {
1050+
return err
1051+
}
1052+
resource, err := argodashboardutil.CreateAgentResource()
1053+
if err != nil {
1054+
return err
1055+
}
1056+
1057+
kust := argodashboardutil.CreateAgentResourceKustomize(&argodashboardutil.CreateAgentOptions{Namespace: rt.Namespace, Name: rt.Name})
1058+
1059+
if err = kustutil.WriteKustomization(fs, &kust, path); err != nil {
1060+
return err
1061+
}
1062+
1063+
return billyUtils.WriteFile(fs, fs.Join(path, "argocd-agent.yaml"), resource, 0666)
1064+
}

manifests/argo-agent/agent.yaml

Lines changed: 122 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,122 @@
1+
apiVersion: v1
2+
kind: ServiceAccount
3+
metadata:
4+
labels:
5+
app: cf-argocd-agent
6+
name: cf-argocd-agent
7+
---
8+
apiVersion: rbac.authorization.k8s.io/v1
9+
kind: ClusterRole
10+
metadata:
11+
labels:
12+
app: cf-argocd-agent
13+
name: cf-argocd-agent
14+
rules:
15+
- apiGroups:
16+
- argoproj.io
17+
resources:
18+
- applications
19+
- appprojects
20+
verbs:
21+
- get
22+
- list
23+
- watch
24+
---
25+
apiVersion: rbac.authorization.k8s.io/v1
26+
kind: ClusterRoleBinding
27+
metadata:
28+
labels:
29+
app: cf-argocd-agent
30+
name: cf-argocd-agent
31+
roleRef:
32+
apiGroup: rbac.authorization.k8s.io
33+
kind: ClusterRole
34+
name: cf-argocd-agent
35+
subjects:
36+
- kind: ServiceAccount
37+
name: cf-argocd-agent
38+
---
39+
apiVersion: v1
40+
kind: ConfigMap
41+
metadata:
42+
name: argocd-agent-cm
43+
data:
44+
host: https://argocd-server
45+
integration: argocd
46+
---
47+
apiVersion: apps/v1
48+
kind: Deployment
49+
metadata:
50+
labels:
51+
app: cf-argocd-agent
52+
name: cf-argocd-agent
53+
spec:
54+
selector:
55+
matchLabels:
56+
app: cf-argocd-agent
57+
replicas: 1
58+
revisionHistoryLimit: 5
59+
strategy:
60+
rollingUpdate:
61+
maxSurge: 50%
62+
maxUnavailable: 50%
63+
type: RollingUpdate
64+
template:
65+
metadata:
66+
labels:
67+
app: cf-argocd-agent
68+
spec:
69+
serviceAccountName: cf-argocd-agent
70+
containers:
71+
- env:
72+
- name: AGENT_VERSION
73+
value: "1.72.3"
74+
- name: ARGO_HOST
75+
valueFrom:
76+
configMapKeyRef:
77+
name: argocd-agent-cm
78+
key: host
79+
- name: ARGO_TOKEN
80+
valueFrom:
81+
secretKeyRef:
82+
name: argocd-token
83+
key: token
84+
- name: ENV_NAME
85+
value: kubernetes
86+
- name: CODEFRESH_HOST
87+
value: https://g.codefresh.io
88+
- name: CODEFRESH_TOKEN
89+
valueFrom:
90+
secretKeyRef:
91+
name: cf-argocd-agent
92+
key: token
93+
- name: IN_CLUSTER
94+
value: "true"
95+
- name: CREATE_INTEGRATION_IF_NOT_EXIST
96+
value: "true"
97+
- name: MASTERURL
98+
value: ""
99+
- name: SYNC_MODE
100+
value: "CONTINUE_SYNC"
101+
- name: APPLICATIONS_FOR_SYNC
102+
value: ""
103+
- name: CODEFRESH_INTEGRATION
104+
valueFrom:
105+
configMapKeyRef:
106+
name: argocd-agent-cm
107+
key: integration
108+
- name: CODEFRESH_GIT_INTEGRATION
109+
value: github
110+
image: codefresh/argocd-agent:stable
111+
imagePullPolicy: Always
112+
name: cf-argocd-agent
113+
resources:
114+
requests:
115+
memory: "256Mi"
116+
cpu: "0.4"
117+
limits:
118+
memory: "512Mi"
119+
cpu: "0.8"
120+
restartPolicy: Always
121+
nodeSelector:
122+
kubernetes.io/arch: amd64

out.txt

Whitespace-only changes.

pkg/store/store.go

Lines changed: 42 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -43,39 +43,43 @@ type Version struct {
4343
}
4444

4545
type Store struct {
46-
ArgoCDServerName string
47-
ArgoCDTokenKey string
48-
ArgoCDTokenSecret string
49-
ArgoWFServiceName string
50-
ArgoWFServicePort int32
51-
BinaryName string
52-
Codefresh string
53-
CFComponentType string
54-
CFGitSourceType string
55-
CFRuntimeDefType string
56-
CFRuntimeType string
57-
CFTokenSecret string
58-
CFTokenSecretKey string
59-
CodefreshCM string
60-
CodefreshSA string
61-
ComponentsReporterName string
62-
ComponentsReporterSA string
63-
ComponentsReporterURL string
64-
DefaultAPI string
65-
EventBusName string
66-
EventReportingEndpoint string
67-
EventsReporterName string
68-
GitSourceName string
69-
IngressName string
70-
IngressPath string
71-
LabelKeyCFType string
72-
MaxDefVersion *semver.Version
73-
RuntimeDefURL string
74-
RuntimeFilename string
75-
Version Version
76-
WaitTimeout time.Duration
77-
WorkflowName string
78-
WorkflowReporterName string
46+
ArgoCDServerName string
47+
ArgoCDTokenKey string
48+
ArgoCDTokenSecret string
49+
ArgoCDAgentCFTokenKey string
50+
ArgoCDAgentCFTokenSecret string
51+
ArgoCDAgentSA string
52+
ArgoWFServiceName string
53+
ArgoWFServicePort int32
54+
BinaryName string
55+
Codefresh string
56+
CFComponentType string
57+
CFGitSourceType string
58+
CFRuntimeDefType string
59+
CFRuntimeType string
60+
CFTokenSecret string
61+
CFTokenSecretKey string
62+
CodefreshCM string
63+
CodefreshSA string
64+
ComponentsReporterName string
65+
ComponentsReporterSA string
66+
ComponentsReporterURL string
67+
DefaultAPI string
68+
EventBusName string
69+
EventReportingEndpoint string
70+
EventsReporterName string
71+
ArgoCDAgentReporterName string
72+
GitSourceName string
73+
IngressName string
74+
IngressPath string
75+
LabelKeyCFType string
76+
MaxDefVersion *semver.Version
77+
RuntimeDefURL string
78+
RuntimeFilename string
79+
Version Version
80+
WaitTimeout time.Duration
81+
WorkflowName string
82+
WorkflowReporterName string
7983
}
8084

8185
// Get returns the global store
@@ -96,6 +100,10 @@ func init() {
96100
s.CFRuntimeDefType = "runtimeDef"
97101
s.CFRuntimeType = "runtime"
98102
s.CFTokenSecret = "codefresh-token"
103+
s.ArgoCDAgentCFTokenKey = "token"
104+
s.ArgoCDAgentCFTokenSecret = "cf-argocd-agent"
105+
s.ArgoCDAgentReporterName = "argocd-agent"
106+
s.ArgoCDAgentSA = "argocd-agent"
99107
s.CFTokenSecretKey = "token"
100108
s.CodefreshCM = "codefresh-cm"
101109
s.CodefreshSA = "codefresh-sa"
@@ -115,6 +123,7 @@ func init() {
115123
s.WaitTimeout = 8 * time.Minute
116124
s.WorkflowName = "workflow"
117125
s.WorkflowReporterName = "workflow-reporter"
126+
118127
initVersion()
119128
}
120129

0 commit comments

Comments
 (0)