diff --git a/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/openapi/BUILD b/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/openapi/BUILD index 2d347cfc283..cd6e61f53f9 100644 --- a/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/openapi/BUILD +++ b/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/openapi/BUILD @@ -1,75 +1,25 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library", "go_test") +load("@io_bazel_rules_go//go:def.bzl", "go_library") go_library( name = "go_default_library", - srcs = [ - "aggregator.go", - "builder.go", - "controller.go", - "conversion.go", - ], + srcs = ["controller.go"], importmap = "k8s.io/kubernetes/vendor/k8s.io/apiextensions-apiserver/pkg/controller/openapi", importpath = "k8s.io/apiextensions-apiserver/pkg/controller/openapi", visibility = ["//visibility:public"], deps = [ - "//staging/src/k8s.io/api/autoscaling/v1:go_default_library", "//staging/src/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions:go_default_library", - "//staging/src/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/validation:go_default_library", - "//staging/src/k8s.io/apiextensions-apiserver/pkg/apiserver/schema:go_default_library", "//staging/src/k8s.io/apiextensions-apiserver/pkg/client/informers/internalversion/apiextensions/internalversion:go_default_library", "//staging/src/k8s.io/apiextensions-apiserver/pkg/client/listers/apiextensions/internalversion:go_default_library", - "//staging/src/k8s.io/apiextensions-apiserver/pkg/generated/openapi:go_default_library", + "//staging/src/k8s.io/apiextensions-apiserver/pkg/controller/openapi/builder:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/api/errors:go_default_library", - "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", - "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1beta1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/labels:go_default_library", - "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", - "//staging/src/k8s.io/apimachinery/pkg/types:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/runtime:go_default_library", - "//staging/src/k8s.io/apimachinery/pkg/util/sets:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/wait:go_default_library", - "//staging/src/k8s.io/apiserver/pkg/endpoints:go_default_library", - "//staging/src/k8s.io/apiserver/pkg/endpoints/openapi:go_default_library", - "//staging/src/k8s.io/apiserver/pkg/features:go_default_library", - "//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library", "//staging/src/k8s.io/client-go/tools/cache:go_default_library", "//staging/src/k8s.io/client-go/util/workqueue:go_default_library", - "//vendor/github.com/emicklei/go-restful:go_default_library", "//vendor/github.com/go-openapi/spec:go_default_library", "//vendor/k8s.io/klog:go_default_library", - "//vendor/k8s.io/kube-openapi/pkg/builder:go_default_library", - "//vendor/k8s.io/kube-openapi/pkg/common:go_default_library", "//vendor/k8s.io/kube-openapi/pkg/handler:go_default_library", - "//vendor/k8s.io/kube-openapi/pkg/util:go_default_library", - ], -) - -go_test( - name = "go_default_test", - srcs = [ - "builder_test.go", - "conversion_test.go", - ], - embed = [":go_default_library"], - deps = [ - "//staging/src/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions:go_default_library", - "//staging/src/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1:go_default_library", - "//staging/src/k8s.io/apiextensions-apiserver/pkg/apiserver/schema:go_default_library", - "//staging/src/k8s.io/apimachinery/pkg/util/diff:go_default_library", - "//staging/src/k8s.io/apimachinery/pkg/util/json:go_default_library", - "//staging/src/k8s.io/apimachinery/pkg/util/sets:go_default_library", - "//staging/src/k8s.io/apiserver/pkg/endpoints:go_default_library", - "//staging/src/k8s.io/apiserver/pkg/features:go_default_library", - "//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library", - "//vendor/github.com/go-openapi/spec:go_default_library", - "//vendor/github.com/google/go-cmp/cmp:go_default_library", - "//vendor/github.com/google/gofuzz:go_default_library", - "//vendor/github.com/googleapis/gnostic/OpenAPIv2:go_default_library", - "//vendor/github.com/googleapis/gnostic/compiler:go_default_library", - "//vendor/github.com/stretchr/testify/assert:go_default_library", - "//vendor/github.com/stretchr/testify/require:go_default_library", - "//vendor/gopkg.in/yaml.v2:go_default_library", - "//vendor/k8s.io/kube-openapi/pkg/util/proto:go_default_library", ], ) @@ -82,7 +32,11 @@ filegroup( filegroup( name = "all-srcs", - srcs = [":package-srcs"], + srcs = [ + ":package-srcs", + "//staging/src/k8s.io/apiextensions-apiserver/pkg/controller/openapi/builder:all-srcs", + "//staging/src/k8s.io/apiextensions-apiserver/pkg/controller/openapi/v2:all-srcs", + ], tags = ["automanaged"], visibility = ["//visibility:public"], ) diff --git a/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/openapi/builder/BUILD b/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/openapi/builder/BUILD new file mode 100644 index 00000000000..32405eed904 --- /dev/null +++ b/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/openapi/builder/BUILD @@ -0,0 +1,68 @@ +load("@io_bazel_rules_go//go:def.bzl", "go_library", "go_test") + +go_library( + name = "go_default_library", + srcs = [ + "builder.go", + "merge.go", + ], + importmap = "k8s.io/kubernetes/vendor/k8s.io/apiextensions-apiserver/pkg/controller/openapi/builder", + importpath = "k8s.io/apiextensions-apiserver/pkg/controller/openapi/builder", + visibility = ["//visibility:public"], + deps = [ + "//staging/src/k8s.io/api/autoscaling/v1:go_default_library", + "//staging/src/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions:go_default_library", + "//staging/src/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/validation:go_default_library", + "//staging/src/k8s.io/apiextensions-apiserver/pkg/apiserver/schema:go_default_library", + "//staging/src/k8s.io/apiextensions-apiserver/pkg/controller/openapi/v2:go_default_library", + "//staging/src/k8s.io/apiextensions-apiserver/pkg/generated/openapi:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1beta1:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/types:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/util/sets:go_default_library", + "//staging/src/k8s.io/apiserver/pkg/endpoints:go_default_library", + "//staging/src/k8s.io/apiserver/pkg/endpoints/openapi:go_default_library", + "//staging/src/k8s.io/apiserver/pkg/features:go_default_library", + "//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library", + "//vendor/github.com/emicklei/go-restful:go_default_library", + "//vendor/github.com/go-openapi/spec:go_default_library", + "//vendor/k8s.io/kube-openapi/pkg/builder:go_default_library", + "//vendor/k8s.io/kube-openapi/pkg/common:go_default_library", + "//vendor/k8s.io/kube-openapi/pkg/util:go_default_library", + ], +) + +go_test( + name = "go_default_test", + srcs = ["builder_test.go"], + embed = [":go_default_library"], + deps = [ + "//staging/src/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions:go_default_library", + "//staging/src/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1:go_default_library", + "//staging/src/k8s.io/apiextensions-apiserver/pkg/apiserver/schema:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/util/diff:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/util/json:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/util/sets:go_default_library", + "//staging/src/k8s.io/apiserver/pkg/endpoints:go_default_library", + "//staging/src/k8s.io/apiserver/pkg/features:go_default_library", + "//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library", + "//vendor/github.com/go-openapi/spec:go_default_library", + "//vendor/github.com/stretchr/testify/assert:go_default_library", + "//vendor/github.com/stretchr/testify/require:go_default_library", + ], +) + +filegroup( + name = "package-srcs", + srcs = glob(["**"]), + tags = ["automanaged"], + visibility = ["//visibility:private"], +) + +filegroup( + name = "all-srcs", + srcs = [":package-srcs"], + tags = ["automanaged"], + visibility = ["//visibility:public"], +) diff --git a/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/openapi/builder.go b/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/openapi/builder/builder.go similarity index 99% rename from staging/src/k8s.io/apiextensions-apiserver/pkg/controller/openapi/builder.go rename to staging/src/k8s.io/apiextensions-apiserver/pkg/controller/openapi/builder/builder.go index de9e7e39e6f..c4cc20c3cb5 100644 --- a/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/openapi/builder.go +++ b/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/openapi/builder/builder.go @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -package openapi +package builder import ( "fmt" @@ -29,6 +29,7 @@ import ( "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions" "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/validation" structuralschema "k8s.io/apiextensions-apiserver/pkg/apiserver/schema" + openapiv2 "k8s.io/apiextensions-apiserver/pkg/controller/openapi/v2" generatedopenapi "k8s.io/apiextensions-apiserver/pkg/generated/openapi" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" metav1beta1 "k8s.io/apimachinery/pkg/apis/meta/v1beta1" @@ -324,7 +325,7 @@ func (b *builder) buildKubeNative(schema *structuralschema.Structural, v2 bool) // unknown fields for anything else. } else { if v2 { - schema = ToStructuralOpenAPIV2(schema) + schema = openapiv2.ToStructuralOpenAPIV2(schema) } ret = schema.ToGoOpenAPI() ret.SetProperty("metadata", *spec.RefSchema(objectMetaSchemaRef). diff --git a/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/openapi/builder_test.go b/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/openapi/builder/builder_test.go similarity index 99% rename from staging/src/k8s.io/apiextensions-apiserver/pkg/controller/openapi/builder_test.go rename to staging/src/k8s.io/apiextensions-apiserver/pkg/controller/openapi/builder/builder_test.go index 2a1d2f01862..2a95a0de9bd 100644 --- a/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/openapi/builder_test.go +++ b/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/openapi/builder/builder_test.go @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -package openapi +package builder import ( "reflect" diff --git a/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/openapi/aggregator.go b/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/openapi/builder/merge.go similarity index 87% rename from staging/src/k8s.io/apiextensions-apiserver/pkg/controller/openapi/aggregator.go rename to staging/src/k8s.io/apiextensions-apiserver/pkg/controller/openapi/builder/merge.go index 1dc355fd94c..f2cc8135b51 100644 --- a/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/openapi/aggregator.go +++ b/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/openapi/builder/merge.go @@ -14,14 +14,16 @@ See the License for the specific language governing permissions and limitations under the License. */ -package openapi +package builder import ( "github.com/go-openapi/spec" ) -// mergeSpecs aggregates all OpenAPI specs, reusing the metadata of the first, static spec as the basis. -func mergeSpecs(staticSpec *spec.Swagger, crdSpecs ...*spec.Swagger) *spec.Swagger { +// MergeSpecs aggregates all OpenAPI specs, reusing the metadata of the first, static spec as the basis. +// Later paths and definitions override earlier ones. None of the input is mutated, but input +// and output share data structures. +func MergeSpecs(staticSpec *spec.Swagger, crdSpecs ...*spec.Swagger) *spec.Swagger { // create shallow copy of staticSpec, but replace paths and definitions because we modify them. specToReturn := *staticSpec if staticSpec.Definitions != nil { diff --git a/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/openapi/controller.go b/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/openapi/controller.go index 4d5e9ed5359..f0c41e349f9 100644 --- a/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/openapi/controller.go +++ b/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/openapi/controller.go @@ -23,6 +23,7 @@ import ( "time" "github.com/go-openapi/spec" + "k8s.io/apimachinery/pkg/api/errors" "k8s.io/apimachinery/pkg/labels" utilruntime "k8s.io/apimachinery/pkg/util/runtime" @@ -35,6 +36,7 @@ import ( "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions" informers "k8s.io/apiextensions-apiserver/pkg/client/informers/internalversion/apiextensions/internalversion" listers "k8s.io/apiextensions-apiserver/pkg/client/listers/apiextensions/internalversion" + "k8s.io/apiextensions-apiserver/pkg/controller/openapi/builder" ) // Controller watches CustomResourceDefinitions and publishes validation schema @@ -191,7 +193,7 @@ func buildVersionSpecs(crd *apiextensions.CustomResourceDefinition, oldSpecs map if !v.Served { continue } - spec, err := BuildSwagger(crd, v.Name) + spec, err := builder.BuildSwagger(crd, v.Name) if err != nil { return nil, false, err } @@ -216,7 +218,7 @@ func (c *Controller) updateSpecLocked() error { crdSpecs = append(crdSpecs, s) } } - return c.openAPIService.UpdateSpec(mergeSpecs(c.staticSpec, crdSpecs...)) + return c.openAPIService.UpdateSpec(builder.MergeSpecs(c.staticSpec, crdSpecs...)) } func (c *Controller) addCustomResourceDefinition(obj interface{}) { diff --git a/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/openapi/v2/BUILD b/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/openapi/v2/BUILD new file mode 100644 index 00000000000..71274252b2d --- /dev/null +++ b/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/openapi/v2/BUILD @@ -0,0 +1,42 @@ +load("@io_bazel_rules_go//go:def.bzl", "go_library", "go_test") + +go_library( + name = "go_default_library", + srcs = ["conversion.go"], + importmap = "k8s.io/kubernetes/vendor/k8s.io/apiextensions-apiserver/pkg/controller/openapi/v2", + importpath = "k8s.io/apiextensions-apiserver/pkg/controller/openapi/v2", + visibility = ["//visibility:public"], + deps = ["//staging/src/k8s.io/apiextensions-apiserver/pkg/apiserver/schema:go_default_library"], +) + +go_test( + name = "go_default_test", + srcs = ["conversion_test.go"], + embed = [":go_default_library"], + deps = [ + "//staging/src/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions:go_default_library", + "//staging/src/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1:go_default_library", + "//staging/src/k8s.io/apiextensions-apiserver/pkg/apiserver/schema:go_default_library", + "//vendor/github.com/go-openapi/spec:go_default_library", + "//vendor/github.com/google/go-cmp/cmp:go_default_library", + "//vendor/github.com/google/gofuzz:go_default_library", + "//vendor/github.com/googleapis/gnostic/OpenAPIv2:go_default_library", + "//vendor/github.com/googleapis/gnostic/compiler:go_default_library", + "//vendor/gopkg.in/yaml.v2:go_default_library", + "//vendor/k8s.io/kube-openapi/pkg/util/proto:go_default_library", + ], +) + +filegroup( + name = "package-srcs", + srcs = glob(["**"]), + tags = ["automanaged"], + visibility = ["//visibility:private"], +) + +filegroup( + name = "all-srcs", + srcs = [":package-srcs"], + tags = ["automanaged"], + visibility = ["//visibility:public"], +) diff --git a/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/openapi/conversion.go b/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/openapi/v2/conversion.go similarity index 99% rename from staging/src/k8s.io/apiextensions-apiserver/pkg/controller/openapi/conversion.go rename to staging/src/k8s.io/apiextensions-apiserver/pkg/controller/openapi/v2/conversion.go index 5b998e65bd7..f5c342a8e82 100644 --- a/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/openapi/conversion.go +++ b/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/openapi/v2/conversion.go @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -package openapi +package v2 import ( structuralschema "k8s.io/apiextensions-apiserver/pkg/apiserver/schema" diff --git a/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/openapi/conversion_test.go b/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/openapi/v2/conversion_test.go similarity index 99% rename from staging/src/k8s.io/apiextensions-apiserver/pkg/controller/openapi/conversion_test.go rename to staging/src/k8s.io/apiextensions-apiserver/pkg/controller/openapi/v2/conversion_test.go index f88e070a010..1793842af0d 100644 --- a/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/openapi/conversion_test.go +++ b/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/openapi/v2/conversion_test.go @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -package openapi +package v2 import ( "encoding/json"