You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
We plan to add more formats in upcoming releases.
This tracks which formats are introduced at a version.
Unrecognized formats remain ignored. That is,
if a format is not supported at the emulated version,
the format is not enforced. This differs from typical
field handling, where unsupported field values are
forbidden. This is pre-existing behavior and is
in compliance with JSON Schema's format handling.
Ratcheting of custom resources helps with the introduction
of new formats. When a cluster is upgraded to a version
of Kubernetes that supports a format already set (but not enforced)
in a custom resource definition, the format will start
being enforced against custom resources. Ratcheting will
tolerate unchanged values of custom resources, even
if the value is not valid according to the format.
@@ -17,49 +17,120 @@ limitations under the License.
17
17
package validation
18
18
19
19
import (
20
+
"fmt"
20
21
"strings"
22
+
"sync"
23
+
24
+
"golang.org/x/sync/singleflight"
21
25
22
26
"k8s.io/apimachinery/pkg/util/sets"
27
+
"k8s.io/apimachinery/pkg/util/version"
23
28
"k8s.io/kube-openapi/pkg/validation/spec"
24
29
)
25
30
26
-
varsupportedFormats=sets.NewString(
27
-
"bsonobjectid", // bson object ID
28
-
"uri", // an URI as parsed by Golang net/url.ParseRequestURI
29
-
"email", // an email address as parsed by Golang net/mail.ParseAddress
30
-
"hostname", // a valid representation for an Internet host name, as defined by RFC 1034, section 3.1 [RFC1034].
31
-
"ipv4", // an IPv4 IP as parsed by Golang net.ParseIP
32
-
"ipv6", // an IPv6 IP as parsed by Golang net.ParseIP
33
-
"cidr", // a CIDR as parsed by Golang net.ParseCIDR
34
-
"mac", // a MAC address as parsed by Golang net.ParseMAC
35
-
"uuid", // an UUID that allows uppercase defined by the regex (?i)^[0-9a-f]{8}-?[0-9a-f]{4}-?[0-9a-f]{4}-?[0-9a-f]{4}-?[0-9a-f]{12}$
36
-
"uuid3", // an UUID3 that allows uppercase defined by the regex (?i)^[0-9a-f]{8}-?[0-9a-f]{4}-?3[0-9a-f]{3}-?[0-9a-f]{4}-?[0-9a-f]{12}$
37
-
"uuid4", // an UUID4 that allows uppercase defined by the regex (?i)^[0-9a-f]{8}-?[0-9a-f]{4}-?4[0-9a-f]{3}-?[89ab][0-9a-f]{3}-?[0-9a-f]{12}$
38
-
"uuid5", // an UUID6 that allows uppercase defined by the regex (?i)^[0-9a-f]{8}-?[0-9a-f]{4}-?5[0-9a-f]{3}-?[89ab][0-9a-f]{3}-?[0-9a-f]{12}$
39
-
"isbn", // an ISBN10 or ISBN13 number string like "0321751043" or "978-0321751041"
40
-
"isbn10", // an ISBN10 number string like "0321751043"
41
-
"isbn13", // an ISBN13 number string like "978-0321751041"
42
-
"creditcard", // a credit card number defined by the regex ^(?:4[0-9]{12}(?:[0-9]{3})?|5[1-5][0-9]{14}|6(?:011|5[0-9][0-9])[0-9]{12}|3[47][0-9]{13}|3(?:0[0-5]|[68][0-9])[0-9]{11}|(?:2131|1800|35\\d{3})\\d{11})$ with any non digit characters mixed in
43
-
"ssn", // a U.S. social security number following the regex ^\\d{3}[- ]?\\d{2}[- ]?\\d{4}$
44
-
"hexcolor", // an hexadecimal color code like "#FFFFFF", following the regex ^#?([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
45
-
"rgbcolor", // an RGB color code like rgb like "rgb(255,255,2559"
46
-
"byte", // base64 encoded binary data
47
-
"password", // any kind of string
48
-
"date", // a date string like "2006-01-02" as defined by full-date in RFC3339
49
-
"duration", // a duration string like "22 ns" as parsed by Golang time.ParseDuration or compatible with Scala duration format
50
-
"datetime", // a date time string like "2014-12-15T19:30:20.000Z" as defined by date-time in RFC3339
51
-
)
31
+
// supportedVersionedFormats tracks the formats supported by CRD schemas, and the version at which support was introduced.
32
+
// Formats in CRD schemas are ignored when used in versions where they are not supported.
33
+
varsupportedVersionedFormats= []versionedFormats{
34
+
{
35
+
introducedVersion: version.MajorMinor(1, 0),
36
+
formats: sets.New(
37
+
"bsonobjectid", // bson object ID
38
+
"uri", // an URI as parsed by Golang net/url.ParseRequestURI
39
+
"email", // an email address as parsed by Golang net/mail.ParseAddress
40
+
"hostname", // a valid representation for an Internet host name, as defined by RFC 1034, section 3.1 [RFC1034].
41
+
"ipv4", // an IPv4 IP as parsed by Golang net.ParseIP
42
+
"ipv6", // an IPv6 IP as parsed by Golang net.ParseIP
43
+
"cidr", // a CIDR as parsed by Golang net.ParseCIDR
44
+
"mac", // a MAC address as parsed by Golang net.ParseMAC
45
+
"uuid", // an UUID that allows uppercase defined by the regex (?i)^[0-9a-f]{8}-?[0-9a-f]{4}-?[0-9a-f]{4}-?[0-9a-f]{4}-?[0-9a-f]{12}$
46
+
"uuid3", // an UUID3 that allows uppercase defined by the regex (?i)^[0-9a-f]{8}-?[0-9a-f]{4}-?3[0-9a-f]{3}-?[0-9a-f]{4}-?[0-9a-f]{12}$
47
+
"uuid4", // an UUID4 that allows uppercase defined by the regex (?i)^[0-9a-f]{8}-?[0-9a-f]{4}-?4[0-9a-f]{3}-?[89ab][0-9a-f]{3}-?[0-9a-f]{12}$
48
+
"uuid5", // an UUID6 that allows uppercase defined by the regex (?i)^[0-9a-f]{8}-?[0-9a-f]{4}-?5[0-9a-f]{3}-?[89ab][0-9a-f]{3}-?[0-9a-f]{12}$
49
+
"isbn", // an ISBN10 or ISBN13 number string like "0321751043" or "978-0321751041"
50
+
"isbn10", // an ISBN10 number string like "0321751043"
51
+
"isbn13", // an ISBN13 number string like "978-0321751041"
52
+
"creditcard", // a credit card number defined by the regex ^(?:4[0-9]{12}(?:[0-9]{3})?|5[1-5][0-9]{14}|6(?:011|5[0-9][0-9])[0-9]{12}|3[47][0-9]{13}|3(?:0[0-5]|[68][0-9])[0-9]{11}|(?:2131|1800|35\\d{3})\\d{11})$ with any non digit characters mixed in
53
+
"ssn", // a U.S. social security number following the regex ^\\d{3}[- ]?\\d{2}[- ]?\\d{4}$
54
+
"hexcolor", // an hexadecimal color code like "#FFFFFF", following the regex ^#?([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
55
+
"rgbcolor", // an RGB color code like rgb like "rgb(255,255,2559"
56
+
"byte", // base64 encoded binary data
57
+
"password", // any kind of string
58
+
"date", // a date string like "2006-01-02" as defined by full-date in RFC3339
59
+
"duration", // a duration string like "22 ns" as parsed by Golang time.ParseDuration or compatible with Scala duration format
60
+
"datetime", // a date time string like "2014-12-15T19:30:20.000Z" as defined by date-time in RFC3339
61
+
),
62
+
},
63
+
}
52
64
53
65
// StripUnsupportedFormatsPostProcess sets unsupported formats to empty string.
66
+
// Only supports formats supported by all known version of Kubernetes.
67
+
// Deprecated: Use StripUnsupportedFormatsPostProcessorForVersion instead.
0 commit comments