Skip to content

Commit dddb1df

Browse files
Merge pull request #34 from itdove/custom-func-map2
Add Custom func map
2 parents 0963690 + 4b33244 commit dddb1df

File tree

8 files changed

+159
-106
lines changed

8 files changed

+159
-106
lines changed

.github/workflows/dco.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
# Copyright Contributors to the Open Cluster Management project
2+
13
name: DCO
24
on:
35
workflow_dispatch: {}

pkg/cmd/get/token/exec.go

Lines changed: 11 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@ import (
1313
"open-cluster-management.io/clusteradm/pkg/helpers/apply"
1414
"open-cluster-management.io/clusteradm/pkg/helpers/asset"
1515

16-
"github.com/openshift/library-go/pkg/operator/resource/resourceapply"
1716
"github.com/spf13/cobra"
1817

1918
apiextensionsclient "k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset"
@@ -54,29 +53,13 @@ func (o *Options) run() error {
5453
output := make([]string, 0)
5554
reader := scenario.GetScenarioResourcesReader()
5655

57-
kubeClient, err := o.ClusteradmFlags.KubectlFactory.KubernetesClientSet()
58-
if err != nil {
59-
return err
60-
}
61-
dynamicClient, err := o.ClusteradmFlags.KubectlFactory.DynamicClient()
56+
kubeClient, apiExtensionsClient, dynamicClient, err := helpers.GetClients(o.ClusteradmFlags.KubectlFactory)
6257
if err != nil {
6358
return err
6459
}
6560

66-
restConfig, err := o.ClusteradmFlags.KubectlFactory.ToRESTConfig()
67-
if err != nil {
68-
return err
69-
}
70-
71-
apiExtensionsClient, err := apiextensionsclient.NewForConfig(restConfig)
72-
if err != nil {
73-
return err
74-
}
75-
76-
clientHolder := resourceapply.NewClientHolder().
77-
WithAPIExtensionsClient(apiExtensionsClient).
78-
WithKubernetes(kubeClient).
79-
WithDynamicClient(dynamicClient)
61+
applierBuilder := &apply.ApplierBuilder{}
62+
applier := applierBuilder.WithClient(kubeClient, apiExtensionsClient, dynamicClient).Build()
8063

8164
//Retrieve token from service-account/bootstrap-token
8265
// and if not found create it
@@ -88,7 +71,7 @@ func (o *Options) run() error {
8871
}
8972
switch {
9073
case errors.IsNotFound(err):
91-
out, err := o.applyToken(clientHolder, reader)
74+
out, err := o.applyToken(applier, reader)
9275
output = append(output, out...)
9376
if err != nil {
9477
return err
@@ -101,12 +84,16 @@ func (o *Options) run() error {
10184
files := []string{
10285
"init/bootstrap_cluster_role.yaml",
10386
}
104-
out, err := apply.ApplyDirectly(clientHolder, reader, o.values, o.ClusteradmFlags.DryRun, "", files...)
87+
out, err := applier.ApplyDirectly(reader, o.values, o.ClusteradmFlags.DryRun, "", files...)
10588
if err != nil {
10689
return err
10790
}
10891
output = append(output, out...)
10992

93+
restConfig, err := o.ClusteradmFlags.KubectlFactory.ToRESTConfig()
94+
if err != nil {
95+
return err
96+
}
11097
// if dry-run then there is nothing else to do
11198
if o.ClusteradmFlags.DryRun {
11299
return o.writeResult(token, restConfig.Host, output)
@@ -149,7 +136,7 @@ func waitForBootstrapToken(kubeClient kubernetes.Interface) (bool, error) {
149136
return true, nil
150137
}
151138

152-
func (o *Options) applyToken(clientHolder *resourceapply.ClientHolder, reader *asset.ScenarioResourcesReader) ([]string, error) {
139+
func (o *Options) applyToken(applier apply.Applier, reader *asset.ScenarioResourcesReader) ([]string, error) {
153140
files := []string{
154141
"init/namespace.yaml",
155142
}
@@ -166,7 +153,7 @@ func (o *Options) applyToken(clientHolder *resourceapply.ClientHolder, reader *a
166153
"init/bootstrap_sa_cluster_role_binding.yaml",
167154
)
168155
}
169-
out, err := apply.ApplyDirectly(clientHolder, reader, o.values, o.ClusteradmFlags.DryRun, "", files...)
156+
out, err := applier.ApplyDirectly(reader, o.values, o.ClusteradmFlags.DryRun, "", files...)
170157
if err != nil {
171158
return nil, err
172159
}

pkg/cmd/init/exec.go

Lines changed: 12 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ import (
55
"fmt"
66
"time"
77

8-
"github.com/openshift/library-go/pkg/operator/resource/resourceapply"
98
"open-cluster-management.io/clusteradm/pkg/cmd/init/scenario"
109
"open-cluster-management.io/clusteradm/pkg/helpers"
1110
"open-cluster-management.io/clusteradm/pkg/helpers/apply"
@@ -15,7 +14,6 @@ import (
1514
apiextensionsclient "k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset"
1615
"k8s.io/apimachinery/pkg/api/errors"
1716
"k8s.io/apimachinery/pkg/util/wait"
18-
"k8s.io/client-go/discovery"
1917
"k8s.io/client-go/kubernetes"
2018
"k8s.io/client-go/util/retry"
2119
)
@@ -57,29 +55,13 @@ func (o *Options) run() error {
5755
output := make([]string, 0)
5856
reader := scenario.GetScenarioResourcesReader()
5957

60-
kubeClient, err := o.ClusteradmFlags.KubectlFactory.KubernetesClientSet()
61-
if err != nil {
62-
return err
63-
}
64-
dynamicClient, err := o.ClusteradmFlags.KubectlFactory.DynamicClient()
65-
if err != nil {
66-
return err
67-
}
68-
69-
restConfig, err := o.ClusteradmFlags.KubectlFactory.ToRESTConfig()
70-
if err != nil {
71-
return err
72-
}
73-
74-
apiExtensionsClient, err := apiextensionsclient.NewForConfig(restConfig)
58+
kubeClient, apiExtensionsClient, dynamicClient, err := helpers.GetClients(o.ClusteradmFlags.KubectlFactory)
7559
if err != nil {
7660
return err
7761
}
7862

79-
clientHolder := resourceapply.NewClientHolder().
80-
WithAPIExtensionsClient(apiExtensionsClient).
81-
WithKubernetes(kubeClient).
82-
WithDynamicClient(dynamicClient)
63+
applierBuilder := &apply.ApplierBuilder{}
64+
applier := applierBuilder.WithClient(kubeClient, apiExtensionsClient, dynamicClient).Build()
8365

8466
files := []string{
8567
"init/namespace.yaml",
@@ -105,7 +87,7 @@ func (o *Options) run() error {
10587
"init/clustermanager_sa.yaml",
10688
)
10789

108-
out, err := apply.ApplyDirectly(clientHolder, reader, o.values, o.ClusteradmFlags.DryRun, "", files...)
90+
out, err := applier.ApplyDirectly(reader, o.values, o.ClusteradmFlags.DryRun, "", files...)
10991
if err != nil {
11092
return err
11193
}
@@ -125,7 +107,7 @@ func (o *Options) run() error {
125107
}
126108
}
127109

128-
out, err = apply.ApplyDeployments(kubeClient, reader, o.values, o.ClusteradmFlags.DryRun, "", "init/operator.yaml")
110+
out, err = applier.ApplyDeployments(reader, o.values, o.ClusteradmFlags.DryRun, "", "init/operator.yaml")
129111
if err != nil {
130112
return err
131113
}
@@ -134,19 +116,23 @@ func (o *Options) run() error {
134116
if !o.ClusteradmFlags.DryRun {
135117
b := retry.DefaultBackoff
136118
b.Duration = 200 * time.Millisecond
137-
err = helpers.WaitCRDToBeReady(*apiExtensionsClient, "clustermanagers.operator.open-cluster-management.io", b)
119+
err = helpers.WaitCRDToBeReady(apiExtensionsClient, "clustermanagers.operator.open-cluster-management.io", b)
138120
if err != nil {
139121
return err
140122
}
141123
}
142124

143-
discoveryClient := discovery.NewDiscoveryClientForConfigOrDie(restConfig)
144-
out, err = apply.ApplyCustomResouces(dynamicClient, discoveryClient, reader, o.values, o.ClusteradmFlags.DryRun, "", "init/clustermanager.cr.yaml")
125+
out, err = applier.ApplyCustomResouces(reader, o.values, o.ClusteradmFlags.DryRun, "", "init/clustermanager.cr.yaml")
145126
if err != nil {
146127
return err
147128
}
148129
output = append(output, out...)
149130

131+
restConfig, err := o.ClusteradmFlags.KubectlFactory.ToRESTConfig()
132+
if err != nil {
133+
return nil
134+
}
135+
150136
fmt.Printf("please log on spoke and run:\n%s join --hub-token %s --hub-apiserver %s --cluster-name <cluster_name>\n",
151137
helpers.GetExampleHeader(),
152138
token,

pkg/cmd/join/exec.go

Lines changed: 9 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,10 @@ import (
66
"time"
77

88
"github.com/ghodss/yaml"
9-
"github.com/openshift/library-go/pkg/operator/resource/resourceapply"
10-
apiextensionsclient "k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset"
119
"k8s.io/apimachinery/pkg/api/errors"
1210

1311
// "k8s.io/apimachinery/pkg/util/wait"
14-
"k8s.io/client-go/discovery"
12+
1513
"k8s.io/client-go/kubernetes"
1614
"k8s.io/client-go/tools/clientcmd"
1715
clientcmdapiv1 "k8s.io/client-go/tools/clientcmd/api/v1"
@@ -67,29 +65,12 @@ func (o *Options) run() error {
6765
return err
6866
}
6967

70-
kubeClient, err := o.ClusteradmFlags.KubectlFactory.KubernetesClientSet()
71-
if err != nil {
72-
return err
73-
}
74-
dynamicClient, err := o.ClusteradmFlags.KubectlFactory.DynamicClient()
68+
kubeClient, apiExtensionsClient, dynamicClient, err := helpers.GetClients(o.ClusteradmFlags.KubectlFactory)
7569
if err != nil {
7670
return err
7771
}
78-
79-
restConfig, err := o.ClusteradmFlags.KubectlFactory.ToRESTConfig()
80-
if err != nil {
81-
return err
82-
}
83-
84-
apiExtensionsClient, err := apiextensionsclient.NewForConfig(restConfig)
85-
if err != nil {
86-
return err
87-
}
88-
89-
clientHolder := resourceapply.NewClientHolder().
90-
WithAPIExtensionsClient(apiExtensionsClient).
91-
WithKubernetes(kubeClient).
92-
WithDynamicClient(dynamicClient)
72+
applierBuilder := &apply.ApplierBuilder{}
73+
applier := applierBuilder.WithClient(kubeClient, apiExtensionsClient, dynamicClient).Build()
9374

9475
files := []string{
9576
"join/namespace_agent.yaml",
@@ -101,13 +82,13 @@ func (o *Options) run() error {
10182
"join/service_account.yaml",
10283
}
10384

104-
out, err := apply.ApplyDirectly(clientHolder, reader, o.values, o.ClusteradmFlags.DryRun, "", files...)
85+
out, err := applier.ApplyDirectly(reader, o.values, o.ClusteradmFlags.DryRun, "", files...)
10586
if err != nil {
10687
return err
10788
}
10889
output = append(output, out...)
10990

110-
out, err = apply.ApplyDeployments(kubeClient, reader, o.values, o.ClusteradmFlags.DryRun, "", "join/operator.yaml")
91+
out, err = applier.ApplyDeployments(reader, o.values, o.ClusteradmFlags.DryRun, "", "join/operator.yaml")
11192
if err != nil {
11293
return err
11394
}
@@ -117,14 +98,14 @@ func (o *Options) run() error {
11798
b := retry.DefaultBackoff
11899
b.Duration = 200 * time.Millisecond
119100

120-
err = helpers.WaitCRDToBeReady(*apiExtensionsClient, "klusterlets.operator.open-cluster-management.io", b)
101+
err = helpers.WaitCRDToBeReady(
102+
apiExtensionsClient, "klusterlets.operator.open-cluster-management.io", b)
121103
if err != nil {
122104
return err
123105
}
124106
}
125107

126-
discoveryClient := discovery.NewDiscoveryClientForConfigOrDie(restConfig)
127-
out, err = apply.ApplyCustomResouces(dynamicClient, discoveryClient, reader, o.values, o.ClusteradmFlags.DryRun, "", "join/klusterlets.cr.yaml")
108+
out, err = applier.ApplyCustomResouces(reader, o.values, o.ClusteradmFlags.DryRun, "", "join/klusterlets.cr.yaml")
128109
if err != nil {
129110
return err
130111
}
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
// Copyright Contributors to the Open Cluster Management project
2+
package apply
3+
4+
import (
5+
"text/template"
6+
7+
apiextensionsclient "k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset"
8+
9+
"k8s.io/client-go/dynamic"
10+
"k8s.io/client-go/kubernetes"
11+
)
12+
13+
type Applier struct {
14+
kubeClient kubernetes.Interface
15+
apiExtensionsClient apiextensionsclient.Interface
16+
dynamicClient dynamic.Interface
17+
templateFuncMap template.FuncMap
18+
}
19+
20+
//ApplierBuilder a builder to build the applier
21+
type ApplierBuilder struct {
22+
Applier
23+
}
24+
25+
type iApplierBuilder interface {
26+
//Build returns the builded applier
27+
Build() Applier
28+
//WithClient adds the several clients to the applier
29+
WithClient(
30+
kubeClient kubernetes.Interface,
31+
apiExtensionsClient apiextensionsclient.Interface,
32+
dynamicClient dynamic.Interface) *ApplierBuilder
33+
//WithTemplateFuncMap add template.FuncMap to the applier.
34+
WithTemplateFuncMap(fm template.FuncMap) *ApplierBuilder
35+
}
36+
37+
var _ iApplierBuilder = &ApplierBuilder{}
38+
39+
//Build returns the builded applier
40+
func (a *ApplierBuilder) Build() Applier {
41+
return a.Applier
42+
}
43+
44+
//WithClient adds the several clients to the applier
45+
func (a *ApplierBuilder) WithClient(
46+
kubeClient kubernetes.Interface,
47+
apiExtensionsClient apiextensionsclient.Interface,
48+
dynamicClient dynamic.Interface) *ApplierBuilder {
49+
a.kubeClient = kubeClient
50+
a.apiExtensionsClient = apiExtensionsClient
51+
a.dynamicClient = dynamicClient
52+
return a
53+
}
54+
55+
//WithTemplateFuncMap add template.FuncMap to the applier.
56+
func (a *ApplierBuilder) WithTemplateFuncMap(fm template.FuncMap) *ApplierBuilder {
57+
a.templateFuncMap = fm
58+
return a
59+
}

0 commit comments

Comments
 (0)