mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-23 11:50:44 +00:00
Update Godep for kube-openapi
This commit is contained in:
parent
76e24f216f
commit
72ce8773a4
12
Godeps/Godeps.json
generated
12
Godeps/Godeps.json
generated
@ -3099,27 +3099,27 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/kube-openapi/pkg/aggregator",
|
"ImportPath": "k8s.io/kube-openapi/pkg/aggregator",
|
||||||
"Rev": "80f07ef71bb4f781233c65aa8d0369e4ecafab87"
|
"Rev": "868f2f29720b192240e18284659231b440f9cda5"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/kube-openapi/pkg/builder",
|
"ImportPath": "k8s.io/kube-openapi/pkg/builder",
|
||||||
"Rev": "80f07ef71bb4f781233c65aa8d0369e4ecafab87"
|
"Rev": "868f2f29720b192240e18284659231b440f9cda5"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/kube-openapi/pkg/common",
|
"ImportPath": "k8s.io/kube-openapi/pkg/common",
|
||||||
"Rev": "80f07ef71bb4f781233c65aa8d0369e4ecafab87"
|
"Rev": "868f2f29720b192240e18284659231b440f9cda5"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/kube-openapi/pkg/generators",
|
"ImportPath": "k8s.io/kube-openapi/pkg/generators",
|
||||||
"Rev": "80f07ef71bb4f781233c65aa8d0369e4ecafab87"
|
"Rev": "868f2f29720b192240e18284659231b440f9cda5"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/kube-openapi/pkg/handler",
|
"ImportPath": "k8s.io/kube-openapi/pkg/handler",
|
||||||
"Rev": "80f07ef71bb4f781233c65aa8d0369e4ecafab87"
|
"Rev": "868f2f29720b192240e18284659231b440f9cda5"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/kube-openapi/pkg/util",
|
"ImportPath": "k8s.io/kube-openapi/pkg/util",
|
||||||
"Rev": "80f07ef71bb4f781233c65aa8d0369e4ecafab87"
|
"Rev": "868f2f29720b192240e18284659231b440f9cda5"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/utils/exec",
|
"ImportPath": "k8s.io/utils/exec",
|
||||||
|
131
vendor/k8s.io/kube-openapi/pkg/aggregator/aggregator.go
generated
vendored
131
vendor/k8s.io/kube-openapi/pkg/aggregator/aggregator.go
generated
vendored
@ -154,8 +154,28 @@ func (s *referenceWalker) Start() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// FilterSpecByPaths remove unnecessary paths and unused definitions.
|
// usedDefinitionForSpec returns a map with all used definition in the provided spec as keys and true as values.
|
||||||
|
func usedDefinitionForSpec(sp *spec.Swagger) map[string]bool {
|
||||||
|
usedDefinitions := map[string]bool{}
|
||||||
|
walkOnAllReferences(func(ref spec.Ref) spec.Ref {
|
||||||
|
if refStr := ref.String(); refStr != "" && strings.HasPrefix(refStr, definitionPrefix) {
|
||||||
|
usedDefinitions[refStr[len(definitionPrefix):]] = true
|
||||||
|
}
|
||||||
|
return ref
|
||||||
|
}, sp)
|
||||||
|
return usedDefinitions
|
||||||
|
}
|
||||||
|
|
||||||
|
// FilterSpecByPaths removes unnecessary paths and definitions used by those paths.
|
||||||
|
// i.e. if a Path removed by this function, all definition used by it and not used
|
||||||
|
// anywhere else will also be removed.
|
||||||
func FilterSpecByPaths(sp *spec.Swagger, keepPathPrefixes []string) {
|
func FilterSpecByPaths(sp *spec.Swagger, keepPathPrefixes []string) {
|
||||||
|
// Walk all references to find all used definitions. This function
|
||||||
|
// want to only deal with unused definitions resulted from filtering paths.
|
||||||
|
// Thus a definition will be removed only if it has been used before but
|
||||||
|
// it is unused because of a path prune.
|
||||||
|
initialUsedDefinitions := usedDefinitionForSpec(sp)
|
||||||
|
|
||||||
// First remove unwanted paths
|
// First remove unwanted paths
|
||||||
prefixes := util.NewTrie(keepPathPrefixes)
|
prefixes := util.NewTrie(keepPathPrefixes)
|
||||||
orgPaths := sp.Paths
|
orgPaths := sp.Paths
|
||||||
@ -174,34 +194,24 @@ func FilterSpecByPaths(sp *spec.Swagger, keepPathPrefixes []string) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Walk all references to find all definition references.
|
// Walk all references to find all definition references.
|
||||||
usedDefinitions := map[string]bool{}
|
usedDefinitions := usedDefinitionForSpec(sp)
|
||||||
|
|
||||||
walkOnAllReferences(func(ref spec.Ref) spec.Ref {
|
|
||||||
if ref.String() != "" {
|
|
||||||
refStr := ref.String()
|
|
||||||
if strings.HasPrefix(refStr, definitionPrefix) {
|
|
||||||
usedDefinitions[refStr[len(definitionPrefix):]] = true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return ref
|
|
||||||
}, sp)
|
|
||||||
|
|
||||||
// Remove unused definitions
|
// Remove unused definitions
|
||||||
orgDefinitions := sp.Definitions
|
orgDefinitions := sp.Definitions
|
||||||
sp.Definitions = spec.Definitions{}
|
sp.Definitions = spec.Definitions{}
|
||||||
for k, v := range orgDefinitions {
|
for k, v := range orgDefinitions {
|
||||||
if usedDefinitions[k] {
|
if usedDefinitions[k] || !initialUsedDefinitions[k] {
|
||||||
sp.Definitions[k] = v
|
sp.Definitions[k] = v
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func renameDefinition(s *spec.Swagger, old, new string) {
|
func renameDefinition(s *spec.Swagger, old, new string) {
|
||||||
old_ref := definitionPrefix + old
|
oldRef := definitionPrefix + old
|
||||||
new_ref := definitionPrefix + new
|
newRef := definitionPrefix + new
|
||||||
walkOnAllReferences(func(ref spec.Ref) spec.Ref {
|
walkOnAllReferences(func(ref spec.Ref) spec.Ref {
|
||||||
if ref.String() == old_ref {
|
if ref.String() == oldRef {
|
||||||
return spec.MustCreateRef(new_ref)
|
return spec.MustCreateRef(newRef)
|
||||||
}
|
}
|
||||||
return ref
|
return ref
|
||||||
}, s)
|
}, s)
|
||||||
@ -209,19 +219,70 @@ func renameDefinition(s *spec.Swagger, old, new string) {
|
|||||||
delete(s.Definitions, old)
|
delete(s.Definitions, old)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Copy paths and definitions from source to dest, rename definitions if needed.
|
// MergeSpecsIgnorePathConflict is the same as MergeSpecs except it will ignore any path
|
||||||
// dest will be mutated, and source will not be changed.
|
// conflicts by keeping the paths of destination. It will rename definition conflicts.
|
||||||
|
func MergeSpecsIgnorePathConflict(dest, source *spec.Swagger) error {
|
||||||
|
return mergeSpecs(dest, source, true, true)
|
||||||
|
}
|
||||||
|
|
||||||
|
// MergeSpecsFailOnDefinitionConflict is differ from MergeSpecs as it fails if there is
|
||||||
|
// a definition conflict.
|
||||||
|
func MergeSpecsFailOnDefinitionConflict(dest, source *spec.Swagger) error {
|
||||||
|
return mergeSpecs(dest, source, false, false)
|
||||||
|
}
|
||||||
|
|
||||||
|
// MergeSpecs copies paths and definitions from source to dest, rename definitions if needed.
|
||||||
|
// dest will be mutated, and source will not be changed. It will fail on path conflicts.
|
||||||
func MergeSpecs(dest, source *spec.Swagger) error {
|
func MergeSpecs(dest, source *spec.Swagger) error {
|
||||||
sourceCopy, err := CloneSpec(source)
|
return mergeSpecs(dest, source, true, false)
|
||||||
|
}
|
||||||
|
|
||||||
|
func mergeSpecs(dest, source *spec.Swagger, renameModelConflicts, ignorePathConflicts bool) (err error) {
|
||||||
|
specCloned := false
|
||||||
|
if ignorePathConflicts {
|
||||||
|
keepPaths := []string{}
|
||||||
|
hasConflictingPath := false
|
||||||
|
for k := range source.Paths.Paths {
|
||||||
|
if _, found := dest.Paths.Paths[k]; !found {
|
||||||
|
keepPaths = append(keepPaths, k)
|
||||||
|
} else {
|
||||||
|
hasConflictingPath = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if len(keepPaths) == 0 {
|
||||||
|
// There is nothing to merge. All paths are conflicting.
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
if hasConflictingPath {
|
||||||
|
source, err = CloneSpec(source)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
for k, v := range sourceCopy.Paths.Paths {
|
specCloned = true
|
||||||
if _, found := dest.Paths.Paths[k]; found {
|
FilterSpecByPaths(source, keepPaths)
|
||||||
return fmt.Errorf("unable to merge: duplicated path %s", k)
|
|
||||||
}
|
}
|
||||||
dest.Paths.Paths[k] = v
|
|
||||||
}
|
}
|
||||||
|
// Check for model conflicts
|
||||||
|
conflicts := false
|
||||||
|
for k, v := range source.Definitions {
|
||||||
|
v2, found := dest.Definitions[k]
|
||||||
|
if found && !reflect.DeepEqual(v, v2) {
|
||||||
|
if !renameModelConflicts {
|
||||||
|
return fmt.Errorf("model name conflict in merging OpenAPI spec: %s", k)
|
||||||
|
}
|
||||||
|
conflicts = true
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if conflicts {
|
||||||
|
if !specCloned {
|
||||||
|
source, err = CloneSpec(source)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
specCloned = true
|
||||||
usedNames := map[string]bool{}
|
usedNames := map[string]bool{}
|
||||||
for k := range dest.Definitions {
|
for k := range dest.Definitions {
|
||||||
usedNames[k] = true
|
usedNames[k] = true
|
||||||
@ -230,7 +291,7 @@ func MergeSpecs(dest, source *spec.Swagger) error {
|
|||||||
from, to string
|
from, to string
|
||||||
}
|
}
|
||||||
renames := []Rename{}
|
renames := []Rename{}
|
||||||
for k, v := range sourceCopy.Definitions {
|
for k, v := range source.Definitions {
|
||||||
if usedNames[k] {
|
if usedNames[k] {
|
||||||
v2, found := dest.Definitions[k]
|
v2, found := dest.Definitions[k]
|
||||||
// Reuse model iff they are exactly the same.
|
// Reuse model iff they are exactly the same.
|
||||||
@ -239,28 +300,36 @@ func MergeSpecs(dest, source *spec.Swagger) error {
|
|||||||
}
|
}
|
||||||
i := 2
|
i := 2
|
||||||
newName := fmt.Sprintf("%s_v%d", k, i)
|
newName := fmt.Sprintf("%s_v%d", k, i)
|
||||||
_, foundInSource := sourceCopy.Definitions[newName]
|
_, foundInSource := source.Definitions[newName]
|
||||||
for usedNames[newName] || foundInSource {
|
for usedNames[newName] || foundInSource {
|
||||||
i += 1
|
i++
|
||||||
newName = fmt.Sprintf("%s_v%d", k, i)
|
newName = fmt.Sprintf("%s_v%d", k, i)
|
||||||
_, foundInSource = sourceCopy.Definitions[newName]
|
_, foundInSource = source.Definitions[newName]
|
||||||
}
|
}
|
||||||
renames = append(renames, Rename{from: k, to: newName})
|
renames = append(renames, Rename{from: k, to: newName})
|
||||||
usedNames[newName] = true
|
usedNames[newName] = true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for _, r := range renames {
|
for _, r := range renames {
|
||||||
renameDefinition(sourceCopy, r.from, r.to)
|
renameDefinition(source, r.from, r.to)
|
||||||
}
|
}
|
||||||
for k, v := range sourceCopy.Definitions {
|
}
|
||||||
|
for k, v := range source.Definitions {
|
||||||
if _, found := dest.Definitions[k]; !found {
|
if _, found := dest.Definitions[k]; !found {
|
||||||
dest.Definitions[k] = v
|
dest.Definitions[k] = v
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// Check for path conflicts
|
||||||
|
for k, v := range source.Paths.Paths {
|
||||||
|
if _, found := dest.Paths.Paths[k]; found {
|
||||||
|
return fmt.Errorf("unable to merge: duplicated path %s", k)
|
||||||
|
}
|
||||||
|
dest.Paths.Paths[k] = v
|
||||||
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// Clone OpenAPI spec
|
// CloneSpec clones OpenAPI spec
|
||||||
func CloneSpec(source *spec.Swagger) (*spec.Swagger, error) {
|
func CloneSpec(source *spec.Swagger) (*spec.Swagger, error) {
|
||||||
// TODO(mehdy): Find a faster way to clone an spec
|
// TODO(mehdy): Find a faster way to clone an spec
|
||||||
bytes, err := json.Marshal(source)
|
bytes, err := json.Marshal(source)
|
||||||
|
1
vendor/k8s.io/kube-openapi/pkg/generators/openapi.go
generated
vendored
1
vendor/k8s.io/kube-openapi/pkg/generators/openapi.go
generated
vendored
@ -328,6 +328,7 @@ func (g openAPITypeWriter) generateMembers(t *types.Type, required []string) ([]
|
|||||||
required = append(required, name)
|
required = append(required, name)
|
||||||
}
|
}
|
||||||
if err = g.generateProperty(&m, t); err != nil {
|
if err = g.generateProperty(&m, t); err != nil {
|
||||||
|
glog.Errorf("Error when generating: %v, %v\n", name, m)
|
||||||
return required, err
|
return required, err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user