diff --git a/kyaml/openapi/Makefile b/kyaml/openapi/Makefile index 8de66aa298c..3443e076d8a 100644 --- a/kyaml/openapi/Makefile +++ b/kyaml/openapi/Makefile @@ -5,7 +5,6 @@ MYGOBIN = $(shell go env GOBIN) ifeq ($(MYGOBIN),) MYGOBIN = $(shell go env GOPATH)/bin endif -API_VERSION := "v1.21.2" KIND_VERSION := "v0.11.1" .PHONY: all @@ -46,10 +45,6 @@ kustomizationapi/swagger.go: $(MYGOBIN)/go-bindata kustomizationapi/swagger.json -o kustomizationapi/swagger.go \ kustomizationapi/swagger.json -.PHONY: kubernetesapi/openapiinfo.go -kubernetesapi/openapiinfo.go: - ./scripts/makeOpenApiInfoDotGo.sh - .PHONY: kubernetesapi/swagger.json kubernetesapi/swagger.json: $(MYGOBIN)/kind $(MYGOBIN)/kustomize ./scripts/fetchSchemaFromCluster.sh $(API_VERSION) diff --git a/kyaml/openapi/README.md b/kyaml/openapi/README.md index fbe8103c3fe..b6bedab6f10 100644 --- a/kyaml/openapi/README.md +++ b/kyaml/openapi/README.md @@ -67,11 +67,25 @@ make kubernetesapi/swagger.go API_VERSION=v1.21.2 While the above commands generate the swagger.go files, they do not make them available for use nor do they update the info field reported by `kustomize openapi info`. To make the -newly fetched schema and swagger.go available: +newly fetched schema and swagger.go available, update the +file [`kubernetesapi/openapiinfo.go`](https://github.com/kubernetes-sigs/kustomize/blob/master/kyaml/openapi/kubernetesapi/openapiinfo.go). + +Here is an example of what it looks like with v1.21.2. The version number needs to be updated in all five places that it appears: ``` -rm kubernetesapi/openapiinfo.go -make kubernetesapi/openapiinfo.go +package kubernetesapi + +import ( + "sigs.k8s.io/kustomize/kyaml/openapi/kubernetesapi/v1212" +) + +const Info = "{title:Kubernetes,version:v1.21.2}" + +var OpenAPIMustAsset = map[string]func(string) []byte{ +"v1212": v1212.MustAsset, +} + +const DefaultOpenAPI = "v1212" ``` ## Partial regeneration diff --git a/kyaml/openapi/openapi_benchmark_test.go b/kyaml/openapi/openapi_benchmark_test.go index d78ba82fc73..3d45cd872ac 100644 --- a/kyaml/openapi/openapi_benchmark_test.go +++ b/kyaml/openapi/openapi_benchmark_test.go @@ -11,7 +11,6 @@ import ( "google.golang.org/protobuf/proto" "k8s.io/kube-openapi/pkg/validation/spec" "sigs.k8s.io/kustomize/kyaml/openapi/kubernetesapi" - "sigs.k8s.io/kustomize/kyaml/openapi/kubernetesapi/v1218pb" ) // Benchmark for swagger parsing (UnmarshalJSON) @@ -53,12 +52,15 @@ func BenchmarkOpenAPIV2ParseDocument(t *testing.B) { } func BenchmarkProtoUnmarshal(t *testing.B) { + version := kubernetesOpenAPIDefaultVersion + + // parse the swagger, this should never fail assetName := filepath.Join( "kubernetesapi", - "v1218pb", + version, "swagger.pb") - b := v1218pb.MustAsset(assetName) + b := kubernetesapi.OpenAPIMustAsset[version](assetName) for i := 0; i < t.N; i++ { // We parse protobuf and get an openapiv2.Document here. diff --git a/kyaml/openapi/scripts/fetchSchemaFromCluster.sh b/kyaml/openapi/scripts/fetchSchemaFromCluster.sh index 1b1c68a3a99..b1939364864 100755 --- a/kyaml/openapi/scripts/fetchSchemaFromCluster.sh +++ b/kyaml/openapi/scripts/fetchSchemaFromCluster.sh @@ -8,8 +8,12 @@ VERSION=$1 cp $HOME/.kube/config /tmp/kubeconfig.txt | true $MYGOBIN/kind create cluster --image kindest/node:$VERSION --name=getopenapidata -$MYGOBIN/kustomize openapi fetch > /tmp/new_swagger.json + +# TODO (natasha41575) Add a `kustomize openapi fetch --proto` option +kubectl proxy & +curl -k -H "Accept: application/com.github.proto-openapi.spec.v2@v1.0+protobuf" http://localhost:8001/openapi/v2 > /tmp/new_swagger.pb + $MYGOBIN/kind delete cluster --name=getopenapidata cp /tmp/kubeconfig.txt $HOME/.kube/config | true mkdir -p kubernetesapi/"${VERSION//.}" -cp /tmp/new_swagger.json kubernetesapi/"${VERSION//.}"/swagger.json +cp /tmp/new_swagger.pb kubernetesapi/"${VERSION//.}"/swagger.pb diff --git a/kyaml/openapi/scripts/generateSwaggerDotGo.sh b/kyaml/openapi/scripts/generateSwaggerDotGo.sh index e055c072750..024491a1dc3 100755 --- a/kyaml/openapi/scripts/generateSwaggerDotGo.sh +++ b/kyaml/openapi/scripts/generateSwaggerDotGo.sh @@ -9,4 +9,4 @@ VERSION=$1 $MYGOBIN/go-bindata \ --pkg "${VERSION//.}" \ -o kubernetesapi/"${VERSION//.}"/swagger.go \ - kubernetesapi/"${VERSION//.}"/swagger.json + kubernetesapi/"${VERSION//.}"/swagger.pb diff --git a/kyaml/openapi/scripts/makeOpenApiInfoDotGo.sh b/kyaml/openapi/scripts/makeOpenApiInfoDotGo.sh deleted file mode 100755 index 93098a140af..00000000000 --- a/kyaml/openapi/scripts/makeOpenApiInfoDotGo.sh +++ /dev/null @@ -1,84 +0,0 @@ -#!/bin/bash -# Copyright 2020 The Kubernetes Authors. -# SPDX-License-Identifier: Apache-2.0 - -# This will read from the directory kubernetesapi -# and use subdirectory names to generate -# kubernetesapi/openapiinfo.go -# -# This script should only be run after the -# swagger.json and swagger.go files are generated. - -set -e - -if ! command -v jq &> /dev/null ; then - echo Please install jq - echo on ubuntu: sudo apt-get install jq - exit 1 -fi - -info_list=() -version_list=() - -V=`ls kubernetesapi | grep v.*` -for VERSION in $V -do - openapiinfo=$(\ - jq -r '.info' kubernetesapi/$VERSION/swagger.json | \ - sed 's/[\" *]//g' | \ - tr -d '\n' ) - info_list+=( $openapiinfo ) - version_list+=( ${VERSION} ) -done - - -# add imports to openapiinfo.go -cat <kubernetesapi/openapiinfo.go -// Copyright 2020 The Kubernetes Authors. -// SPDX-License-Identifier: Apache-2.0 - -// Code generated by $0; DO NOT EDIT. - -package kubernetesapi - -import ( -EOF - -for version in ${version_list[@]} -do - cat <>kubernetesapi/openapiinfo.go - "sigs.k8s.io/kustomize/kyaml/openapi/kubernetesapi/$version" -EOF -done - -# add info string for `kustomize openapi info` command -OPEN_API_INFO=`echo ${info_list[@]} | sed 's/ /\\\n/g'` -cat <>kubernetesapi/openapiinfo.go -) - -const Info = "$OPEN_API_INFO" -EOF - -# add map for `initSchema` in openapi.go to use -cat <>kubernetesapi/openapiinfo.go - -var OpenAPIMustAsset = map[string]func(string)[]byte{ -EOF - -latest="" -for version in ${version_list[@]} -do - latest=$version - cat <>kubernetesapi/openapiinfo.go - "$version": $version.MustAsset, -EOF -done - -# add latest version to be used as a default -cat <>kubernetesapi/openapiinfo.go -} - -const DefaultOpenAPI = "$latest" -EOF - -