@@ -18,6 +18,33 @@ import (
18
18
"k8s.io/utils/pointer"
19
19
)
20
20
21
+ var bootstrapTolerations = & []corev1.Toleration {
22
+ {
23
+ Key : "node.kubernetes.io/not-ready" ,
24
+ Effect : "NoSchedule" ,
25
+ },
26
+ {
27
+ Key : "node.cloudprovider.kubernetes.io/uninitialized" ,
28
+ Operator : "Equal" ,
29
+ Value : "true" ,
30
+ Effect : "NoSchedule" ,
31
+ },
32
+ {
33
+ Key : "CriticalAddonsOnly" ,
34
+ Operator : "Exists" ,
35
+ },
36
+ {
37
+ Key : "node-role.kubernetes.io/etcd" ,
38
+ Operator : "Exists" ,
39
+ Effect : "NoExecute" ,
40
+ },
41
+ {
42
+ Key : "node-role.kubernetes.io/control-plane" ,
43
+ Operator : "Exists" ,
44
+ Effect : "NoSchedule" ,
45
+ },
46
+ }
47
+
21
48
var _ = Describe ("Helm Tests" , Ordered , func () {
22
49
framework , _ := framework .New ()
23
50
@@ -755,4 +782,230 @@ var _ = Describe("Helm Tests", Ordered, func() {
755
782
}, 120 * time .Second , 5 * time .Second ).Should (BeTrue ())
756
783
})
757
784
})
785
+
786
+ Context ("When no tolerations are specified (non-boostrap)" , func () {
787
+ var (
788
+ err error
789
+ chart * v1.HelmChart
790
+ job * batchv1.Job
791
+ )
792
+ BeforeEach (func () {
793
+ chart = framework .NewHelmChart ("traefik-example-no-tolerations" ,
794
+ "stable/traefik" ,
795
+ "1.86.1" ,
796
+ "v3" ,
797
+ map [string ]intstr.IntOrString {
798
+ "rbac.enabled" : {
799
+ Type : intstr .String ,
800
+ StrVal : "true" ,
801
+ },
802
+ "ssl.enabled" : {
803
+ Type : intstr .String ,
804
+ StrVal : "true" ,
805
+ },
806
+ })
807
+ chart , err = framework .CreateHelmChart (chart , framework .Namespace )
808
+ Expect (err ).ToNot (HaveOccurred ())
809
+
810
+ labelSelector := labels .SelectorFromSet (labels.Set {
811
+ "owner" : "helm" ,
812
+ "name" : chart .Name ,
813
+ })
814
+ _ , err = framework .WaitForRelease (chart , labelSelector , 120 * time .Second , 1 )
815
+ Expect (err ).ToNot (HaveOccurred ())
816
+
817
+ chart , err = framework .GetHelmChart (chart .Name , chart .Namespace )
818
+ Expect (err ).ToNot (HaveOccurred ())
819
+ job , err = framework .GetJob (chart )
820
+ Expect (err ).ToNot (HaveOccurred ())
821
+ })
822
+ FIt ("Should have no tolerations set" , func () {
823
+ Expect (job .Spec .Template .Spec .Tolerations ).To (BeEmpty ())
824
+ })
825
+ AfterEach (func () {
826
+ err = framework .DeleteHelmChart (chart .Name , framework .Namespace )
827
+ Expect (err ).ToNot (HaveOccurred ())
828
+
829
+ Eventually (func () bool {
830
+ _ , err := framework .GetHelmChart (chart .Name , framework .Namespace )
831
+ return err != nil && apierrors .IsNotFound (err )
832
+ }, 120 * time .Second , 5 * time .Second ).Should (BeTrue ())
833
+ })
834
+ })
835
+
836
+ Context ("When custom tolerations are specified (non-boostrap)" , func () {
837
+ var (
838
+ err error
839
+ chart * v1.HelmChart
840
+ job * batchv1.Job
841
+ tolerations = & []corev1.Toleration {
842
+ {
843
+ Key : "test-1" ,
844
+ Effect : corev1 .TaintEffectNoSchedule ,
845
+ },
846
+ {
847
+ Key : "test-2" ,
848
+ Effect : corev1 .TaintEffectNoExecute ,
849
+ },
850
+ }
851
+ )
852
+ BeforeEach (func () {
853
+ chart = framework .NewHelmChart ("traefik-example-custom-tolerations" ,
854
+ "stable/traefik" ,
855
+ "1.86.1" ,
856
+ "v3" ,
857
+ map [string ]intstr.IntOrString {
858
+ "rbac.enabled" : {
859
+ Type : intstr .String ,
860
+ StrVal : "true" ,
861
+ },
862
+ "ssl.enabled" : {
863
+ Type : intstr .String ,
864
+ StrVal : "true" ,
865
+ },
866
+ })
867
+ chart .Spec .Tolerations = * tolerations
868
+ chart , err = framework .CreateHelmChart (chart , framework .Namespace )
869
+ Expect (err ).ToNot (HaveOccurred ())
870
+
871
+ labelSelector := labels .SelectorFromSet (labels.Set {
872
+ "owner" : "helm" ,
873
+ "name" : chart .Name ,
874
+ })
875
+ _ , err = framework .WaitForRelease (chart , labelSelector , 120 * time .Second , 1 )
876
+ Expect (err ).ToNot (HaveOccurred ())
877
+
878
+ chart , err = framework .GetHelmChart (chart .Name , chart .Namespace )
879
+ Expect (err ).ToNot (HaveOccurred ())
880
+ job , err = framework .GetJob (chart )
881
+ Expect (err ).ToNot (HaveOccurred ())
882
+ })
883
+ FIt ("Should have tolerations set" , func () {
884
+ Expect (job .Spec .Template .Spec .Tolerations ).To (Equal (* tolerations ))
885
+ })
886
+ AfterEach (func () {
887
+ err = framework .DeleteHelmChart (chart .Name , framework .Namespace )
888
+ Expect (err ).ToNot (HaveOccurred ())
889
+
890
+ Eventually (func () bool {
891
+ _ , err := framework .GetHelmChart (chart .Name , framework .Namespace )
892
+ return err != nil && apierrors .IsNotFound (err )
893
+ }, 120 * time .Second , 5 * time .Second ).Should (BeTrue ())
894
+ })
895
+ })
896
+
897
+ Context ("When no tolerations are specified (boostrap)" , func () {
898
+ var (
899
+ err error
900
+ chart * v1.HelmChart
901
+ job * batchv1.Job
902
+ )
903
+ BeforeEach (func () {
904
+ chart = framework .NewHelmChart ("traefik-example-bootstrap-default-tolerations" ,
905
+ "stable/traefik" ,
906
+ "1.86.1" ,
907
+ "v3" ,
908
+ map [string ]intstr.IntOrString {
909
+ "rbac.enabled" : {
910
+ Type : intstr .String ,
911
+ StrVal : "true" ,
912
+ },
913
+ "ssl.enabled" : {
914
+ Type : intstr .String ,
915
+ StrVal : "true" ,
916
+ },
917
+ })
918
+ chart .Spec .Bootstrap = true
919
+ chart , err = framework .CreateHelmChart (chart , framework .Namespace )
920
+ Expect (err ).ToNot (HaveOccurred ())
921
+
922
+ labelSelector := labels .SelectorFromSet (labels.Set {
923
+ "owner" : "helm" ,
924
+ "name" : chart .Name ,
925
+ })
926
+ _ , err = framework .WaitForRelease (chart , labelSelector , 120 * time .Second , 1 )
927
+ Expect (err ).ToNot (HaveOccurred ())
928
+
929
+ chart , err = framework .GetHelmChart (chart .Name , chart .Namespace )
930
+ Expect (err ).ToNot (HaveOccurred ())
931
+ job , err = framework .GetJob (chart )
932
+ Expect (err ).ToNot (HaveOccurred ())
933
+ })
934
+ FIt ("Should have default tolerations set" , func () {
935
+ Expect (job .Spec .Template .Spec .Tolerations ).To (Equal (* bootstrapTolerations ))
936
+ })
937
+ AfterEach (func () {
938
+ err = framework .DeleteHelmChart (chart .Name , framework .Namespace )
939
+ Expect (err ).ToNot (HaveOccurred ())
940
+
941
+ Eventually (func () bool {
942
+ _ , err := framework .GetHelmChart (chart .Name , framework .Namespace )
943
+ return err != nil && apierrors .IsNotFound (err )
944
+ }, 120 * time .Second , 5 * time .Second ).Should (BeTrue ())
945
+ })
946
+ })
947
+
948
+ Context ("When custom tolerations are specified (boostrap)" , func () {
949
+ var (
950
+ err error
951
+ chart * v1.HelmChart
952
+ job * batchv1.Job
953
+ specTolerations = & []corev1.Toleration {
954
+ {
955
+ Key : "test-1" ,
956
+ Effect : corev1 .TaintEffectNoSchedule ,
957
+ },
958
+ {
959
+ Key : "test-2" ,
960
+ Effect : corev1 .TaintEffectNoExecute ,
961
+ },
962
+ }
963
+ finalTolerations = append (* bootstrapTolerations , * specTolerations ... )
964
+ )
965
+ BeforeEach (func () {
966
+ chart = framework .NewHelmChart ("traefik-example-bootstrap-custom-tolerations" ,
967
+ "stable/traefik" ,
968
+ "1.86.1" ,
969
+ "v3" ,
970
+ map [string ]intstr.IntOrString {
971
+ "rbac.enabled" : {
972
+ Type : intstr .String ,
973
+ StrVal : "true" ,
974
+ },
975
+ "ssl.enabled" : {
976
+ Type : intstr .String ,
977
+ StrVal : "true" ,
978
+ },
979
+ })
980
+ chart .Spec .Tolerations = * specTolerations
981
+ chart .Spec .Bootstrap = true
982
+ chart , err = framework .CreateHelmChart (chart , framework .Namespace )
983
+ Expect (err ).ToNot (HaveOccurred ())
984
+
985
+ labelSelector := labels .SelectorFromSet (labels.Set {
986
+ "owner" : "helm" ,
987
+ "name" : chart .Name ,
988
+ })
989
+ _ , err = framework .WaitForRelease (chart , labelSelector , 120 * time .Second , 1 )
990
+ Expect (err ).ToNot (HaveOccurred ())
991
+
992
+ chart , err = framework .GetHelmChart (chart .Name , chart .Namespace )
993
+ Expect (err ).ToNot (HaveOccurred ())
994
+ job , err = framework .GetJob (chart )
995
+ Expect (err ).ToNot (HaveOccurred ())
996
+ })
997
+ FIt ("Should have tolerations set" , func () {
998
+ Expect (job .Spec .Template .Spec .Tolerations ).To (Equal (finalTolerations ))
999
+ })
1000
+ AfterEach (func () {
1001
+ err = framework .DeleteHelmChart (chart .Name , framework .Namespace )
1002
+ Expect (err ).ToNot (HaveOccurred ())
1003
+
1004
+ Eventually (func () bool {
1005
+ _ , err := framework .GetHelmChart (chart .Name , framework .Namespace )
1006
+ return err != nil && apierrors .IsNotFound (err )
1007
+ }, 120 * time .Second , 5 * time .Second ).Should (BeTrue ())
1008
+ })
1009
+ })
1010
+
758
1011
})
0 commit comments