diff --git a/kubernetes/structures_pod.go b/kubernetes/structures_pod.go index 989fd0460d..7429746f16 100644 --- a/kubernetes/structures_pod.go +++ b/kubernetes/structures_pod.go @@ -4,13 +4,23 @@ import ( "fmt" "log" "strconv" - "strings" "github.com/hashicorp/terraform-plugin-sdk/helper/schema" v1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/api/resource" ) +// https://kubernetes.io/docs/concepts/scheduling-eviction/taint-and-toleration/#taint-based-evictions +var builtInTolerations = map[string]string{ + "node.kubernetes.io/not-ready": "", + "node.kubernetes.io/unreachable": "", + "node.kubernetes.io/out-of-disk": "", + "node.kubernetes.io/memory-pressure": "", + "node.kubernetes.io/disk-pressure": "", + "node.kubernetes.io/network-unavailable": "", + "node.kubernetes.io/unschedulable": "", +} + // Flatteners func flattenPodSpec(in v1.PodSpec) ([]interface{}, error) { @@ -219,7 +229,7 @@ func flattenTolerations(tolerations []v1.Toleration) []interface{} { att := []interface{}{} for _, v := range tolerations { // The API Server may automatically add several Tolerations to pods, strip these to avoid TF diff. - if strings.Contains(v.Key, "node.kubernetes.io/") { + if _, ok := builtInTolerations[v.Key]; ok { log.Printf("[INFO] ignoring toleration with key: %s", v.Key) continue }