66 _ "embed"
77 "fmt"
88 "strconv"
9+ "strings"
910
1011 "k8s.io/apimachinery/pkg/runtime/schema"
1112 "sigs.k8s.io/yaml"
@@ -29,12 +30,12 @@ type Labelling interface {
2930 SetAnnotations (namespace string , name string , kind string , annotations map [string ]string ) bool
3031}
3132
32- func resourceTemplates (site * skupperv2alpha1.Site , group string , size sizing.Sizing , labelling Labelling ) []resource.Template {
33+ func resourceTemplates (clients internalclient. Clients , site * skupperv2alpha1.Site , group string , size sizing.Sizing , labelling Labelling ) []resource.Template {
3334 templates := []resource.Template {
3435 {
3536 Name : "deployment" ,
3637 Template : routerDeploymentTemplate ,
37- Parameters : getCoreParams (site , group , size ).setLabelsAndAnnotations (labelling , site .Namespace , "skupper-router" , "Deployment" ),
38+ Parameters : getCoreParams (clients , site , group , size ).setLabelsAndAnnotations (labelling , site .Namespace , "skupper-router" , "Deployment" ),
3839 Resource : schema.GroupVersionResource {
3940 Group : "apps" ,
4041 Version : "v1" ,
@@ -44,7 +45,7 @@ func resourceTemplates(site *skupperv2alpha1.Site, group string, size sizing.Siz
4445 {
4546 Name : "localService" ,
4647 Template : routerLocalServiceTemplate ,
47- Parameters : getCoreParams (site , group , size ).setLabelsAndAnnotations (labelling , site .Namespace , "skupper-router-local" , "Service" ),
48+ Parameters : getCoreParams (clients , site , group , size ).setLabelsAndAnnotations (labelling , site .Namespace , "skupper-router-local" , "Service" ),
4849 Resource : schema.GroupVersionResource {
4950 Group : "" ,
5051 Version : "v1" ,
@@ -68,6 +69,7 @@ type CoreParams struct {
6869 Labels map [string ]string
6970 Annotations map [string ]string
7071 EnableAntiAffinity bool
72+ AddPodSecurity bool
7173}
7274
7375func (p * CoreParams ) setLabelsAndAnnotations (labelling Labelling , namespace string , name string , kind string ) * CoreParams {
@@ -149,7 +151,7 @@ func configDigest(config *skupperv2alpha1.SiteSpec) string {
149151 return ""
150152}
151153
152- func getCoreParams (site * skupperv2alpha1.Site , group string , size sizing.Sizing ) * CoreParams {
154+ func getCoreParams (clients internalclient. Clients , site * skupperv2alpha1.Site , group string , size sizing.Sizing ) * CoreParams {
153155 return & CoreParams {
154156 SiteId : site .GetSiteId (),
155157 SiteName : site .Name ,
@@ -162,11 +164,26 @@ func getCoreParams(site *skupperv2alpha1.Site, group string, size sizing.Sizing)
162164 Sizing : size ,
163165 Labels : map [string ]string {},
164166 EnableAntiAffinity : enableAntiAffinity (site ),
167+ AddPodSecurity : addPodSecurityContext (clients ),
168+ }
169+ }
170+
171+ // addPodSecurityContext Only added if server version is >=1.24
172+ func addPodSecurityContext (cli internalclient.Clients ) bool {
173+ vi , err := cli .GetKubeClient ().Discovery ().ServerVersion ()
174+ if err != nil {
175+ return false
176+ }
177+ // for kubernetes versions 1.24+
178+ if vi .Major == "1" && strings .Compare (vi .Minor , "24" ) >= 0 {
179+ return true
180+ } else {
181+ return false
165182 }
166183}
167184
168185func Apply (clients internalclient.Clients , ctx context.Context , site * skupperv2alpha1.Site , group string , size sizing.Sizing , labelling Labelling ) error {
169- for _ , t := range resourceTemplates (site , group , size , labelling ) {
186+ for _ , t := range resourceTemplates (clients , site , group , size , labelling ) {
170187 _ , err := t .Apply (clients .GetDynamicClient (), ctx , site .Namespace )
171188 if err != nil {
172189 return err
0 commit comments