mirror of
https://github.com/kubernetes-sigs/kustomize.git
synced 2026-05-17 18:25:26 +00:00
135 lines
2.9 KiB
Go
135 lines
2.9 KiB
Go
// Copyright 2020 The Kubernetes Authors.
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
|
|
package krusty_test
|
|
|
|
import (
|
|
"fmt"
|
|
"testing"
|
|
|
|
kusttest_test "sigs.k8s.io/kustomize/api/testutils/kusttest"
|
|
)
|
|
|
|
func TestPodDisruptionBudgetBasics(t *testing.T) {
|
|
th := kusttest_test.MakeHarness(t)
|
|
th.WriteF("pdbLiteral.yaml", `
|
|
apiVersion: policy/v1beta1
|
|
kind: PodDisruptionBudget
|
|
metadata:
|
|
name: pdbLiteral
|
|
spec:
|
|
maxUnavailable: 90
|
|
`)
|
|
th.WriteF("pdbPercentage.yaml", `
|
|
apiVersion: policy/v1beta1
|
|
kind: PodDisruptionBudget
|
|
metadata:
|
|
name: pdbPercentage
|
|
spec:
|
|
maxUnavailable: 90%
|
|
`)
|
|
th.WriteK(".", `
|
|
resources:
|
|
- pdbLiteral.yaml
|
|
- pdbPercentage.yaml
|
|
`)
|
|
m := th.Run(".", th.MakeDefaultOptions())
|
|
// In a PodDisruptionBudget, the fields maxUnavailable
|
|
// minAvailable are mutually exclusive, and both can hold
|
|
// either an integer, i.e. 10, or string that has to be
|
|
// an int followed by a percent sign, e.g. 10%.
|
|
th.AssertActualEqualsExpected(m, `
|
|
apiVersion: policy/v1beta1
|
|
kind: PodDisruptionBudget
|
|
metadata:
|
|
name: pdbLiteral
|
|
spec:
|
|
maxUnavailable: 90
|
|
---
|
|
apiVersion: policy/v1beta1
|
|
kind: PodDisruptionBudget
|
|
metadata:
|
|
name: pdbPercentage
|
|
spec:
|
|
maxUnavailable: 90%
|
|
`)
|
|
}
|
|
|
|
func TestPodDisruptionBudgetMerging(t *testing.T) {
|
|
th := kusttest_test.MakeHarness(t)
|
|
opts := th.MakeDefaultOptions()
|
|
th.WriteF("pdb-patch.yaml", `
|
|
apiVersion: policy/v1beta1
|
|
kind: PodDisruptionBudget
|
|
metadata:
|
|
name: generic-pdb
|
|
spec:
|
|
maxUnavailable: 1
|
|
`)
|
|
th.WriteF("my_file.yaml", `
|
|
apiVersion: policy/v1beta1
|
|
kind: PodDisruptionBudget
|
|
metadata:
|
|
name: championships-api
|
|
labels:
|
|
faceit-pdb: default
|
|
spec:
|
|
maxUnavailable: 100%
|
|
---
|
|
apiVersion: policy/v1beta1
|
|
kind: PodDisruptionBudget
|
|
metadata:
|
|
name: championships-api-2
|
|
labels:
|
|
faceit-pdb: default
|
|
spec:
|
|
maxUnavailable: 100%
|
|
`)
|
|
th.WriteK(".", `
|
|
apiVersion: kustomize.config.k8s.io/v1beta1
|
|
kind: Kustomization
|
|
patches:
|
|
- path: pdb-patch.yaml
|
|
target:
|
|
kind: PodDisruptionBudget
|
|
labelSelector: faceit-pdb=default
|
|
|
|
resources:
|
|
- my_file.yaml
|
|
`)
|
|
m := th.Run(".", opts)
|
|
expFmt := `
|
|
apiVersion: policy/v1beta1
|
|
kind: PodDisruptionBudget
|
|
metadata:
|
|
labels:
|
|
faceit-pdb: default
|
|
name: championships-api
|
|
spec:
|
|
maxUnavailable: %s
|
|
---
|
|
apiVersion: policy/v1beta1
|
|
kind: PodDisruptionBudget
|
|
metadata:
|
|
labels:
|
|
faceit-pdb: default
|
|
name: championships-api-2
|
|
spec:
|
|
maxUnavailable: %s
|
|
`
|
|
// In a PodDisruptionBudget, the fields maxUnavailable
|
|
// minAvailable are mutually exclusive, and both can hold
|
|
// either an integer, i.e. 10, or string that has to be
|
|
// an int followed by a percent sign, e.g. 10%.
|
|
// In the former case - bare integer - they should NOT be quoted
|
|
// as the api server will reject it. In the latter case with
|
|
// the percent sign, quotes can be added and the API server will
|
|
// accept it, but they don't have to be added.
|
|
th.AssertActualEqualsExpected(
|
|
m,
|
|
// TODO(#3304): DECISION - kyaml better; not a bug.
|
|
opts.IfApiMachineryElseKyaml(
|
|
fmt.Sprintf(expFmt, `"1"`, `"1"`),
|
|
fmt.Sprintf(expFmt, `1`, `1`)))
|
|
}
|