@@ -40,9 +40,17 @@ function scaffold_test_project {
40
40
header_text ' Creating APIs ...'
41
41
$kb create api --group crew --version v1 --kind Captain --controller=true --resource=true --make=false
42
42
$kb create api --group crew --version v1 --kind Captain --controller=true --resource=true --make=false --force
43
- $kb create webhook --group crew --version v1 --kind Captain --defaulting --programmatic-validation
43
+ $kb create webhook --group crew --version v1 --kind Captain --defaulting --programmatic-validation --make=false
44
+
45
+ # Create API to test conversion from v1 to v2
44
46
$kb create api --group crew --version v1 --kind FirstMate --controller=true --resource=true --make=false
45
- $kb create webhook --group crew --version v1 --kind FirstMate --conversion
47
+ $kb create api --group crew --version v2 --kind FirstMate --controller=false --resource=true --make=false
48
+ $kb create webhook --group crew --version v1 --kind FirstMate --conversion --make=false
49
+
50
+ # TODO: Remove it when we have the hub and spoke scaffolded by Kubebuilder
51
+ # Apply the sed command based on project type
52
+ insert_kubebuilder_annotations " api/v1/firstmate_types.go"
53
+
46
54
$kb create api --group crew --version v1 --kind Admiral --plural=admirales --controller=true --resource=true --namespaced=false --make=false
47
55
$kb create webhook --group crew --version v1 --kind Admiral --plural=admirales --defaulting
48
56
# Controller for External types
@@ -59,14 +67,13 @@ function scaffold_test_project {
59
67
60
68
header_text ' Creating APIs ...'
61
69
$kb create api --group crew --version v1 --kind Captain --controller=true --resource=true --make=false
62
- $kb create webhook --group crew --version v1 --kind Captain --defaulting --programmatic-validation
70
+ $kb create webhook --group crew --version v1 --kind Captain --defaulting --programmatic-validation --make=false
63
71
64
72
$kb create api --group ship --version v1beta1 --kind Frigate --controller=true --resource=true --make=false
65
- $kb create webhook --group ship --version v1beta1 --kind Frigate --conversion
66
73
$kb create api --group ship --version v1 --kind Destroyer --controller=true --resource=true --namespaced=false --make=false
67
- $kb create webhook --group ship --version v1 --kind Destroyer --defaulting
74
+ $kb create webhook --group ship --version v1 --kind Destroyer --defaulting --make=false
68
75
$kb create api --group ship --version v2alpha1 --kind Cruiser --controller=true --resource=true --namespaced=false --make=false
69
- $kb create webhook --group ship --version v2alpha1 --kind Cruiser --programmatic-validation
76
+ $kb create webhook --group ship --version v2alpha1 --kind Cruiser --programmatic-validation --make=false
70
77
71
78
$kb create api --group sea-creatures --version v1beta1 --kind Kraken --controller=true --resource=true --make=false
72
79
$kb create api --group sea-creatures --version v1beta2 --kind Leviathan --controller=true --resource=true --make=false
@@ -80,15 +87,30 @@ function scaffold_test_project {
80
87
# Webhook for External types
81
88
$kb create webhook --group " cert-manager" --version v1 --kind Issuer --defaulting --external-api-path=github.com/cert-manager/cert-manager/pkg/apis/certmanager/v1 --external-api-domain=io
82
89
# Webhook for Core type
83
- $kb create webhook --group core --version v1 --kind Pod --programmatic-validation
90
+ $kb create webhook --group core --version v1 --kind Pod --programmatic-validation --make=false
84
91
fi
85
92
86
93
if [[ $project =~ multigroup ]] || [[ $project =~ with-plugins ]] ; then
87
94
header_text ' With Optional Plugins ...'
88
95
header_text ' Creating APIs with deploy-image plugin ...'
89
96
$kb create api --group example.com --version v1alpha1 --kind Memcached --image=memcached:1.6.26-alpine3.19 --image-container-command=" memcached,--memory-limit=64,-o,modern,-v" --image-container-port=" 11211" --run-as-user=" 1001" --plugins=" deploy-image/v1-alpha" --make=false
90
97
$kb create api --group example.com --version v1alpha1 --kind Busybox --image=busybox:1.36.1 --plugins=" deploy-image/v1-alpha" --make=false
91
- $kb create webhook --group example.com --version v1alpha1 --kind Memcached --programmatic-validation
98
+ # Create only validation webhook for Memcached
99
+ $kb create webhook --group example.com --version v1alpha1 --kind Memcached --programmatic-validation --make=false
100
+ # Create API to check webhook --conversion from v1 to v2
101
+ $kb create api --group example.com --version v1 --kind Wordpress --controller=true --resource=true --make=false
102
+ $kb create api --group example.com --version v2 --kind Wordpress --controller=false --resource=true --make=false
103
+ $kb create webhook --group example.com --version v1 --kind Wordpress --conversion --make=false
104
+
105
+ # TODO: Remove it when we have the hub and spoke scaffolded by Kubebuilder
106
+ # Apply the sed command based on project type
107
+ if [[ $project =~ multigroup ]]; then
108
+ insert_kubebuilder_annotations " api/example.com/v1/wordpress_types.go"
109
+ fi
110
+ if [[ $project =~ with-plugins ]]; then
111
+ insert_kubebuilder_annotations " api/v1/wordpress_types.go"
112
+ fi
113
+
92
114
header_text ' Editing project with Grafana plugin ...'
93
115
$kb edit --plugins=grafana.kubebuilder.io/v1-alpha
94
116
fi
@@ -101,6 +123,16 @@ function scaffold_test_project {
101
123
popd
102
124
}
103
125
126
+ # TODO: Remove when hub and spoke be scaffolded by Kubebuilder
127
+ function insert_kubebuilder_annotations {
128
+ local file=$1
129
+ local line=43 # The target line to insert text before
130
+ local annotations=" // +kubebuilder:storageversion\n// +kubebuilder:conversion:hub"
131
+
132
+ # Create a temporary file to avoid using -i flag, which varies between macOS and Linux
133
+ awk -v insert=" $annotations " -v line=$line ' NR==line{print insert} 1' " $file " > " $file .tmp" && mv " $file .tmp" " $file "
134
+ }
135
+
104
136
build_kb
105
137
106
138
scaffold_test_project project-v4 --plugins=" go/v4"
0 commit comments