Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
K
k3s
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Jacklull
k3s
Commits
9eebfe7a
Unverified
Commit
9eebfe7a
authored
Mar 06, 2019
by
Kubernetes Prow Robot
Committed by
GitHub
Mar 06, 2019
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #75005 from Liujingfang1/vendor
update vendoring of kustomize
parents
c80e45f8
b891e528
Hide whitespace changes
Inline
Side-by-side
Showing
34 changed files
with
453 additions
and
258 deletions
+453
-258
Godeps.json
Godeps/Godeps.json
+44
-44
Godeps.json
staging/src/k8s.io/cli-runtime/Godeps/Godeps.json
+22
-22
builder_test.go
...li-runtime/pkg/genericclioptions/resource/builder_test.go
+1
-1
configmapfactory.go
.../kustomize/k8sdeps/configmapandsecret/configmapfactory.go
+2
-2
secretfactory.go
...pkg/kustomize/k8sdeps/configmapandsecret/secretfactory.go
+2
-2
factory.go
...io/cli-runtime/pkg/kustomize/k8sdeps/kunstruct/factory.go
+1
-1
factory_test.go
...i-runtime/pkg/kustomize/k8sdeps/kunstruct/factory_test.go
+27
-0
patch.go
...-runtime/pkg/kustomize/k8sdeps/transformer/patch/patch.go
+1
-1
Godeps.json
staging/src/k8s.io/sample-cli-plugin/Godeps/Godeps.json
+22
-22
build.go
vendor/sigs.k8s.io/kustomize/pkg/commands/build/build.go
+1
-1
expand.go
vendor/sigs.k8s.io/kustomize/pkg/expansion/expand.go
+4
-2
confirmeddir.go
vendor/sigs.k8s.io/kustomize/pkg/fs/confirmeddir.go
+10
-2
repospec.go
vendor/sigs.k8s.io/kustomize/pkg/git/repospec.go
+8
-1
gvk.go
vendor/sigs.k8s.io/kustomize/pkg/gvk/gvk.go
+2
-0
BUILD
vendor/sigs.k8s.io/kustomize/pkg/patch/transformer/BUILD
+1
-1
factory.go
...or/sigs.k8s.io/kustomize/pkg/patch/transformer/factory.go
+1
-15
patchjson6902json.go
...s.io/kustomize/pkg/patch/transformer/patchjson6902json.go
+54
-7
util.go
vendor/sigs.k8s.io/kustomize/pkg/patch/transformer/util.go
+0
-46
resid.go
vendor/sigs.k8s.io/kustomize/pkg/resid/resid.go
+27
-14
factory.go
vendor/sigs.k8s.io/kustomize/pkg/resmap/factory.go
+2
-2
resmap.go
vendor/sigs.k8s.io/kustomize/pkg/resmap/resmap.go
+7
-13
factory.go
vendor/sigs.k8s.io/kustomize/pkg/resource/factory.go
+6
-1
resource.go
vendor/sigs.k8s.io/kustomize/pkg/resource/resource.go
+1
-1
BUILD
vendor/sigs.k8s.io/kustomize/pkg/target/BUILD
+0
-1
kusttarget.go
vendor/sigs.k8s.io/kustomize/pkg/target/kusttarget.go
+21
-12
resaccumulator.go
vendor/sigs.k8s.io/kustomize/pkg/target/resaccumulator.go
+36
-9
BUILD
vendor/sigs.k8s.io/kustomize/pkg/transformers/config/BUILD
+1
-0
varreference.go
...ize/pkg/transformers/config/defaultconfig/varreference.go
+53
-0
factorycrd.go
...gs.k8s.io/kustomize/pkg/transformers/config/factorycrd.go
+2
-1
image.go
vendor/sigs.k8s.io/kustomize/pkg/transformers/image.go
+31
-15
namereference.go
...r/sigs.k8s.io/kustomize/pkg/transformers/namereference.go
+2
-2
refvars.go
vendor/sigs.k8s.io/kustomize/pkg/transformers/refvars.go
+40
-15
genargs.go
vendor/sigs.k8s.io/kustomize/pkg/types/genargs.go
+17
-0
var.go
vendor/sigs.k8s.io/kustomize/pkg/types/var.go
+4
-2
No files found.
Godeps/Godeps.json
View file @
9eebfe7a
...
...
@@ -4343,113 +4343,113 @@
},
{
"ImportPath"
:
"sigs.k8s.io/kustomize/pkg/commands/build"
,
"Comment"
:
"v2.0.
1
"
,
"Rev"
:
"
ce7e5ee2c30cc5856fea01fe423cf167f2a2d0c3
"
"Comment"
:
"v2.0.
3
"
,
"Rev"
:
"
a6f65144121d1955266b0cd836ce954c04122dc8
"
},
{
"ImportPath"
:
"sigs.k8s.io/kustomize/pkg/constants"
,
"Comment"
:
"v2.0.
1
"
,
"Rev"
:
"
ce7e5ee2c30cc5856fea01fe423cf167f2a2d0c3
"
"Comment"
:
"v2.0.
3
"
,
"Rev"
:
"
a6f65144121d1955266b0cd836ce954c04122dc8
"
},
{
"ImportPath"
:
"sigs.k8s.io/kustomize/pkg/expansion"
,
"Comment"
:
"v2.0.
1
"
,
"Rev"
:
"
ce7e5ee2c30cc5856fea01fe423cf167f2a2d0c3
"
"Comment"
:
"v2.0.
3
"
,
"Rev"
:
"
a6f65144121d1955266b0cd836ce954c04122dc8
"
},
{
"ImportPath"
:
"sigs.k8s.io/kustomize/pkg/factory"
,
"Comment"
:
"v2.0.
1
"
,
"Rev"
:
"
ce7e5ee2c30cc5856fea01fe423cf167f2a2d0c3
"
"Comment"
:
"v2.0.
3
"
,
"Rev"
:
"
a6f65144121d1955266b0cd836ce954c04122dc8
"
},
{
"ImportPath"
:
"sigs.k8s.io/kustomize/pkg/fs"
,
"Comment"
:
"v2.0.
1
"
,
"Rev"
:
"
ce7e5ee2c30cc5856fea01fe423cf167f2a2d0c3
"
"Comment"
:
"v2.0.
3
"
,
"Rev"
:
"
a6f65144121d1955266b0cd836ce954c04122dc8
"
},
{
"ImportPath"
:
"sigs.k8s.io/kustomize/pkg/git"
,
"Comment"
:
"v2.0.
1
"
,
"Rev"
:
"
ce7e5ee2c30cc5856fea01fe423cf167f2a2d0c3
"
"Comment"
:
"v2.0.
3
"
,
"Rev"
:
"
a6f65144121d1955266b0cd836ce954c04122dc8
"
},
{
"ImportPath"
:
"sigs.k8s.io/kustomize/pkg/gvk"
,
"Comment"
:
"v2.0.
1
"
,
"Rev"
:
"
ce7e5ee2c30cc5856fea01fe423cf167f2a2d0c3
"
"Comment"
:
"v2.0.
3
"
,
"Rev"
:
"
a6f65144121d1955266b0cd836ce954c04122dc8
"
},
{
"ImportPath"
:
"sigs.k8s.io/kustomize/pkg/ifc"
,
"Comment"
:
"v2.0.
1
"
,
"Rev"
:
"
ce7e5ee2c30cc5856fea01fe423cf167f2a2d0c3
"
"Comment"
:
"v2.0.
3
"
,
"Rev"
:
"
a6f65144121d1955266b0cd836ce954c04122dc8
"
},
{
"ImportPath"
:
"sigs.k8s.io/kustomize/pkg/ifc/transformer"
,
"Comment"
:
"v2.0.
1
"
,
"Rev"
:
"
ce7e5ee2c30cc5856fea01fe423cf167f2a2d0c3
"
"Comment"
:
"v2.0.
3
"
,
"Rev"
:
"
a6f65144121d1955266b0cd836ce954c04122dc8
"
},
{
"ImportPath"
:
"sigs.k8s.io/kustomize/pkg/image"
,
"Comment"
:
"v2.0.
1
"
,
"Rev"
:
"
ce7e5ee2c30cc5856fea01fe423cf167f2a2d0c3
"
"Comment"
:
"v2.0.
3
"
,
"Rev"
:
"
a6f65144121d1955266b0cd836ce954c04122dc8
"
},
{
"ImportPath"
:
"sigs.k8s.io/kustomize/pkg/internal/error"
,
"Comment"
:
"v2.0.
1
"
,
"Rev"
:
"
ce7e5ee2c30cc5856fea01fe423cf167f2a2d0c3
"
"Comment"
:
"v2.0.
3
"
,
"Rev"
:
"
a6f65144121d1955266b0cd836ce954c04122dc8
"
},
{
"ImportPath"
:
"sigs.k8s.io/kustomize/pkg/loader"
,
"Comment"
:
"v2.0.
1
"
,
"Rev"
:
"
ce7e5ee2c30cc5856fea01fe423cf167f2a2d0c3
"
"Comment"
:
"v2.0.
3
"
,
"Rev"
:
"
a6f65144121d1955266b0cd836ce954c04122dc8
"
},
{
"ImportPath"
:
"sigs.k8s.io/kustomize/pkg/patch"
,
"Comment"
:
"v2.0.
1
"
,
"Rev"
:
"
ce7e5ee2c30cc5856fea01fe423cf167f2a2d0c3
"
"Comment"
:
"v2.0.
3
"
,
"Rev"
:
"
a6f65144121d1955266b0cd836ce954c04122dc8
"
},
{
"ImportPath"
:
"sigs.k8s.io/kustomize/pkg/patch/transformer"
,
"Comment"
:
"v2.0.
1
"
,
"Rev"
:
"
ce7e5ee2c30cc5856fea01fe423cf167f2a2d0c3
"
"Comment"
:
"v2.0.
3
"
,
"Rev"
:
"
a6f65144121d1955266b0cd836ce954c04122dc8
"
},
{
"ImportPath"
:
"sigs.k8s.io/kustomize/pkg/resid"
,
"Comment"
:
"v2.0.
1
"
,
"Rev"
:
"
ce7e5ee2c30cc5856fea01fe423cf167f2a2d0c3
"
"Comment"
:
"v2.0.
3
"
,
"Rev"
:
"
a6f65144121d1955266b0cd836ce954c04122dc8
"
},
{
"ImportPath"
:
"sigs.k8s.io/kustomize/pkg/resmap"
,
"Comment"
:
"v2.0.
1
"
,
"Rev"
:
"
ce7e5ee2c30cc5856fea01fe423cf167f2a2d0c3
"
"Comment"
:
"v2.0.
3
"
,
"Rev"
:
"
a6f65144121d1955266b0cd836ce954c04122dc8
"
},
{
"ImportPath"
:
"sigs.k8s.io/kustomize/pkg/resource"
,
"Comment"
:
"v2.0.
1
"
,
"Rev"
:
"
ce7e5ee2c30cc5856fea01fe423cf167f2a2d0c3
"
"Comment"
:
"v2.0.
3
"
,
"Rev"
:
"
a6f65144121d1955266b0cd836ce954c04122dc8
"
},
{
"ImportPath"
:
"sigs.k8s.io/kustomize/pkg/target"
,
"Comment"
:
"v2.0.
1
"
,
"Rev"
:
"
ce7e5ee2c30cc5856fea01fe423cf167f2a2d0c3
"
"Comment"
:
"v2.0.
3
"
,
"Rev"
:
"
a6f65144121d1955266b0cd836ce954c04122dc8
"
},
{
"ImportPath"
:
"sigs.k8s.io/kustomize/pkg/transformers"
,
"Comment"
:
"v2.0.
1
"
,
"Rev"
:
"
ce7e5ee2c30cc5856fea01fe423cf167f2a2d0c3
"
"Comment"
:
"v2.0.
3
"
,
"Rev"
:
"
a6f65144121d1955266b0cd836ce954c04122dc8
"
},
{
"ImportPath"
:
"sigs.k8s.io/kustomize/pkg/transformers/config"
,
"Comment"
:
"v2.0.
1
"
,
"Rev"
:
"
ce7e5ee2c30cc5856fea01fe423cf167f2a2d0c3
"
"Comment"
:
"v2.0.
3
"
,
"Rev"
:
"
a6f65144121d1955266b0cd836ce954c04122dc8
"
},
{
"ImportPath"
:
"sigs.k8s.io/kustomize/pkg/transformers/config/defaultconfig"
,
"Comment"
:
"v2.0.
1
"
,
"Rev"
:
"
ce7e5ee2c30cc5856fea01fe423cf167f2a2d0c3
"
"Comment"
:
"v2.0.
3
"
,
"Rev"
:
"
a6f65144121d1955266b0cd836ce954c04122dc8
"
},
{
"ImportPath"
:
"sigs.k8s.io/kustomize/pkg/types"
,
"Comment"
:
"v2.0.
1
"
,
"Rev"
:
"
ce7e5ee2c30cc5856fea01fe423cf167f2a2d0c3
"
"Comment"
:
"v2.0.
3
"
,
"Rev"
:
"
a6f65144121d1955266b0cd836ce954c04122dc8
"
},
{
"ImportPath"
:
"sigs.k8s.io/structured-merge-diff/fieldpath"
,
...
...
staging/src/k8s.io/cli-runtime/Godeps/Godeps.json
View file @
9eebfe7a
...
...
@@ -716,91 +716,91 @@
},
{
"ImportPath"
:
"sigs.k8s.io/kustomize/pkg/commands/build"
,
"Rev"
:
"
ce7e5ee2c30cc5856fea01fe423cf167f2a2d0c3
"
"Rev"
:
"
a6f65144121d1955266b0cd836ce954c04122dc8
"
},
{
"ImportPath"
:
"sigs.k8s.io/kustomize/pkg/constants"
,
"Rev"
:
"
ce7e5ee2c30cc5856fea01fe423cf167f2a2d0c3
"
"Rev"
:
"
a6f65144121d1955266b0cd836ce954c04122dc8
"
},
{
"ImportPath"
:
"sigs.k8s.io/kustomize/pkg/expansion"
,
"Rev"
:
"
ce7e5ee2c30cc5856fea01fe423cf167f2a2d0c3
"
"Rev"
:
"
a6f65144121d1955266b0cd836ce954c04122dc8
"
},
{
"ImportPath"
:
"sigs.k8s.io/kustomize/pkg/factory"
,
"Rev"
:
"
ce7e5ee2c30cc5856fea01fe423cf167f2a2d0c3
"
"Rev"
:
"
a6f65144121d1955266b0cd836ce954c04122dc8
"
},
{
"ImportPath"
:
"sigs.k8s.io/kustomize/pkg/fs"
,
"Rev"
:
"
ce7e5ee2c30cc5856fea01fe423cf167f2a2d0c3
"
"Rev"
:
"
a6f65144121d1955266b0cd836ce954c04122dc8
"
},
{
"ImportPath"
:
"sigs.k8s.io/kustomize/pkg/git"
,
"Rev"
:
"
ce7e5ee2c30cc5856fea01fe423cf167f2a2d0c3
"
"Rev"
:
"
a6f65144121d1955266b0cd836ce954c04122dc8
"
},
{
"ImportPath"
:
"sigs.k8s.io/kustomize/pkg/gvk"
,
"Rev"
:
"
ce7e5ee2c30cc5856fea01fe423cf167f2a2d0c3
"
"Rev"
:
"
a6f65144121d1955266b0cd836ce954c04122dc8
"
},
{
"ImportPath"
:
"sigs.k8s.io/kustomize/pkg/ifc"
,
"Rev"
:
"
ce7e5ee2c30cc5856fea01fe423cf167f2a2d0c3
"
"Rev"
:
"
a6f65144121d1955266b0cd836ce954c04122dc8
"
},
{
"ImportPath"
:
"sigs.k8s.io/kustomize/pkg/ifc/transformer"
,
"Rev"
:
"
ce7e5ee2c30cc5856fea01fe423cf167f2a2d0c3
"
"Rev"
:
"
a6f65144121d1955266b0cd836ce954c04122dc8
"
},
{
"ImportPath"
:
"sigs.k8s.io/kustomize/pkg/image"
,
"Rev"
:
"
ce7e5ee2c30cc5856fea01fe423cf167f2a2d0c3
"
"Rev"
:
"
a6f65144121d1955266b0cd836ce954c04122dc8
"
},
{
"ImportPath"
:
"sigs.k8s.io/kustomize/pkg/internal/error"
,
"Rev"
:
"
ce7e5ee2c30cc5856fea01fe423cf167f2a2d0c3
"
"Rev"
:
"
a6f65144121d1955266b0cd836ce954c04122dc8
"
},
{
"ImportPath"
:
"sigs.k8s.io/kustomize/pkg/loader"
,
"Rev"
:
"
ce7e5ee2c30cc5856fea01fe423cf167f2a2d0c3
"
"Rev"
:
"
a6f65144121d1955266b0cd836ce954c04122dc8
"
},
{
"ImportPath"
:
"sigs.k8s.io/kustomize/pkg/patch"
,
"Rev"
:
"
ce7e5ee2c30cc5856fea01fe423cf167f2a2d0c3
"
"Rev"
:
"
a6f65144121d1955266b0cd836ce954c04122dc8
"
},
{
"ImportPath"
:
"sigs.k8s.io/kustomize/pkg/patch/transformer"
,
"Rev"
:
"
ce7e5ee2c30cc5856fea01fe423cf167f2a2d0c3
"
"Rev"
:
"
a6f65144121d1955266b0cd836ce954c04122dc8
"
},
{
"ImportPath"
:
"sigs.k8s.io/kustomize/pkg/resid"
,
"Rev"
:
"
ce7e5ee2c30cc5856fea01fe423cf167f2a2d0c3
"
"Rev"
:
"
a6f65144121d1955266b0cd836ce954c04122dc8
"
},
{
"ImportPath"
:
"sigs.k8s.io/kustomize/pkg/resmap"
,
"Rev"
:
"
ce7e5ee2c30cc5856fea01fe423cf167f2a2d0c3
"
"Rev"
:
"
a6f65144121d1955266b0cd836ce954c04122dc8
"
},
{
"ImportPath"
:
"sigs.k8s.io/kustomize/pkg/resource"
,
"Rev"
:
"
ce7e5ee2c30cc5856fea01fe423cf167f2a2d0c3
"
"Rev"
:
"
a6f65144121d1955266b0cd836ce954c04122dc8
"
},
{
"ImportPath"
:
"sigs.k8s.io/kustomize/pkg/target"
,
"Rev"
:
"
ce7e5ee2c30cc5856fea01fe423cf167f2a2d0c3
"
"Rev"
:
"
a6f65144121d1955266b0cd836ce954c04122dc8
"
},
{
"ImportPath"
:
"sigs.k8s.io/kustomize/pkg/transformers"
,
"Rev"
:
"
ce7e5ee2c30cc5856fea01fe423cf167f2a2d0c3
"
"Rev"
:
"
a6f65144121d1955266b0cd836ce954c04122dc8
"
},
{
"ImportPath"
:
"sigs.k8s.io/kustomize/pkg/transformers/config"
,
"Rev"
:
"
ce7e5ee2c30cc5856fea01fe423cf167f2a2d0c3
"
"Rev"
:
"
a6f65144121d1955266b0cd836ce954c04122dc8
"
},
{
"ImportPath"
:
"sigs.k8s.io/kustomize/pkg/transformers/config/defaultconfig"
,
"Rev"
:
"
ce7e5ee2c30cc5856fea01fe423cf167f2a2d0c3
"
"Rev"
:
"
a6f65144121d1955266b0cd836ce954c04122dc8
"
},
{
"ImportPath"
:
"sigs.k8s.io/kustomize/pkg/types"
,
"Rev"
:
"
ce7e5ee2c30cc5856fea01fe423cf167f2a2d0c3
"
"Rev"
:
"
a6f65144121d1955266b0cd836ce954c04122dc8
"
},
{
"ImportPath"
:
"sigs.k8s.io/yaml"
,
...
...
staging/src/k8s.io/cli-runtime/pkg/genericclioptions/resource/builder_test.go
View file @
9eebfe7a
...
...
@@ -666,7 +666,7 @@ func TestKustomizeDirectoryBuilder(t *testing.T) {
{
directory
:
"../../../artifacts/guestbook"
,
expectErr
:
true
,
errMsg
:
"
No kustomization file found
"
,
errMsg
:
"
unable to find one of 'kustomization.yaml', 'kustomization.yml' or 'Kustomization'
"
,
},
{
directory
:
dir
,
...
...
staging/src/k8s.io/cli-runtime/pkg/kustomize/k8sdeps/configmapandsecret/configmapfactory.go
View file @
9eebfe7a
...
...
@@ -81,8 +81,8 @@ func (f *ConfigMapFactory) MakeConfigMap(
}
all
=
append
(
all
,
pairs
...
)
for
_
,
kv
:=
range
all
{
err
=
addKvToConfigMap
(
cm
,
kv
.
Key
,
kv
.
Value
)
for
_
,
p
:=
range
all
{
err
=
addKvToConfigMap
(
cm
,
p
.
Key
,
p
.
Value
)
if
err
!=
nil
{
return
nil
,
err
}
...
...
staging/src/k8s.io/cli-runtime/pkg/kustomize/k8sdeps/configmapandsecret/secretfactory.go
View file @
9eebfe7a
...
...
@@ -80,8 +80,8 @@ func (f *SecretFactory) MakeSecret(args *types.SecretArgs, options *types.Genera
}
all
=
append
(
all
,
pairs
...
)
for
_
,
kv
:=
range
all
{
err
=
addKvToSecret
(
s
,
kv
.
Key
,
kv
.
Value
)
for
_
,
p
:=
range
all
{
err
=
addKvToSecret
(
s
,
p
.
Key
,
p
.
Value
)
if
err
!=
nil
{
return
nil
,
err
}
...
...
staging/src/k8s.io/cli-runtime/pkg/kustomize/k8sdeps/kunstruct/factory.go
View file @
9eebfe7a
...
...
@@ -108,7 +108,7 @@ func (kf *KunstructuredFactoryImpl) validate(u unstructured.Unstructured) error
kind
:=
u
.
GetKind
()
if
kind
==
""
{
return
fmt
.
Errorf
(
"missing kind in object %v"
,
u
)
}
else
if
kind
==
"List"
{
}
else
if
strings
.
HasSuffix
(
kind
,
"List"
)
{
return
nil
}
if
u
.
GetName
()
==
""
{
...
...
staging/src/k8s.io/cli-runtime/pkg/kustomize/k8sdeps/kunstruct/factory_test.go
View file @
9eebfe7a
...
...
@@ -42,6 +42,15 @@ func TestSliceFromBytes(t *testing.T) {
testConfigMap
.
Map
(),
},
})
testConfigMapList
:=
factory
.
FromMap
(
map
[
string
]
interface
{}{
"apiVersion"
:
"v1"
,
"kind"
:
"ConfigMapList"
,
"items"
:
[]
interface
{}{
testConfigMap
.
Map
(),
testConfigMap
.
Map
(),
},
})
tests
:=
[]
struct
{
name
string
...
...
@@ -151,6 +160,24 @@ items:
expectedOut
:
[]
ifc
.
Kunstructured
{
testList
},
expectedErr
:
false
,
},
{
name
:
"ConfigMapList"
,
input
:
[]
byte
(
`
apiVersion: v1
kind: ConfigMapList
items:
- apiVersion: v1
kind: ConfigMap
metadata:
name: winnie
- apiVersion: v1
kind: ConfigMap
metadata:
name: winnie
`
),
expectedOut
:
[]
ifc
.
Kunstructured
{
testConfigMapList
},
expectedErr
:
false
,
},
}
for
_
,
test
:=
range
tests
{
...
...
staging/src/k8s.io/cli-runtime/pkg/kustomize/k8sdeps/transformer/patch/patch.go
View file @
9eebfe7a
...
...
@@ -60,7 +60,7 @@ func (pt *patchTransformer) Transform(baseResourceMap resmap.ResMap) error {
for
_
,
patch
:=
range
patches
{
// Merge patches with base resource.
id
:=
patch
.
Id
()
matchedIds
:=
baseResourceMap
.
FindByGVKN
(
id
)
matchedIds
:=
baseResourceMap
.
GetMatchingIds
(
id
.
GvknEquals
)
if
len
(
matchedIds
)
==
0
{
return
fmt
.
Errorf
(
"failed to find an object with %s to apply the patch"
,
id
.
GvknString
())
}
...
...
staging/src/k8s.io/sample-cli-plugin/Godeps/Godeps.json
View file @
9eebfe7a
...
...
@@ -740,91 +740,91 @@
},
{
"ImportPath"
:
"sigs.k8s.io/kustomize/pkg/commands/build"
,
"Rev"
:
"
ce7e5ee2c30cc5856fea01fe423cf167f2a2d0c3
"
"Rev"
:
"
a6f65144121d1955266b0cd836ce954c04122dc8
"
},
{
"ImportPath"
:
"sigs.k8s.io/kustomize/pkg/constants"
,
"Rev"
:
"
ce7e5ee2c30cc5856fea01fe423cf167f2a2d0c3
"
"Rev"
:
"
a6f65144121d1955266b0cd836ce954c04122dc8
"
},
{
"ImportPath"
:
"sigs.k8s.io/kustomize/pkg/expansion"
,
"Rev"
:
"
ce7e5ee2c30cc5856fea01fe423cf167f2a2d0c3
"
"Rev"
:
"
a6f65144121d1955266b0cd836ce954c04122dc8
"
},
{
"ImportPath"
:
"sigs.k8s.io/kustomize/pkg/factory"
,
"Rev"
:
"
ce7e5ee2c30cc5856fea01fe423cf167f2a2d0c3
"
"Rev"
:
"
a6f65144121d1955266b0cd836ce954c04122dc8
"
},
{
"ImportPath"
:
"sigs.k8s.io/kustomize/pkg/fs"
,
"Rev"
:
"
ce7e5ee2c30cc5856fea01fe423cf167f2a2d0c3
"
"Rev"
:
"
a6f65144121d1955266b0cd836ce954c04122dc8
"
},
{
"ImportPath"
:
"sigs.k8s.io/kustomize/pkg/git"
,
"Rev"
:
"
ce7e5ee2c30cc5856fea01fe423cf167f2a2d0c3
"
"Rev"
:
"
a6f65144121d1955266b0cd836ce954c04122dc8
"
},
{
"ImportPath"
:
"sigs.k8s.io/kustomize/pkg/gvk"
,
"Rev"
:
"
ce7e5ee2c30cc5856fea01fe423cf167f2a2d0c3
"
"Rev"
:
"
a6f65144121d1955266b0cd836ce954c04122dc8
"
},
{
"ImportPath"
:
"sigs.k8s.io/kustomize/pkg/ifc"
,
"Rev"
:
"
ce7e5ee2c30cc5856fea01fe423cf167f2a2d0c3
"
"Rev"
:
"
a6f65144121d1955266b0cd836ce954c04122dc8
"
},
{
"ImportPath"
:
"sigs.k8s.io/kustomize/pkg/ifc/transformer"
,
"Rev"
:
"
ce7e5ee2c30cc5856fea01fe423cf167f2a2d0c3
"
"Rev"
:
"
a6f65144121d1955266b0cd836ce954c04122dc8
"
},
{
"ImportPath"
:
"sigs.k8s.io/kustomize/pkg/image"
,
"Rev"
:
"
ce7e5ee2c30cc5856fea01fe423cf167f2a2d0c3
"
"Rev"
:
"
a6f65144121d1955266b0cd836ce954c04122dc8
"
},
{
"ImportPath"
:
"sigs.k8s.io/kustomize/pkg/internal/error"
,
"Rev"
:
"
ce7e5ee2c30cc5856fea01fe423cf167f2a2d0c3
"
"Rev"
:
"
a6f65144121d1955266b0cd836ce954c04122dc8
"
},
{
"ImportPath"
:
"sigs.k8s.io/kustomize/pkg/loader"
,
"Rev"
:
"
ce7e5ee2c30cc5856fea01fe423cf167f2a2d0c3
"
"Rev"
:
"
a6f65144121d1955266b0cd836ce954c04122dc8
"
},
{
"ImportPath"
:
"sigs.k8s.io/kustomize/pkg/patch"
,
"Rev"
:
"
ce7e5ee2c30cc5856fea01fe423cf167f2a2d0c3
"
"Rev"
:
"
a6f65144121d1955266b0cd836ce954c04122dc8
"
},
{
"ImportPath"
:
"sigs.k8s.io/kustomize/pkg/patch/transformer"
,
"Rev"
:
"
ce7e5ee2c30cc5856fea01fe423cf167f2a2d0c3
"
"Rev"
:
"
a6f65144121d1955266b0cd836ce954c04122dc8
"
},
{
"ImportPath"
:
"sigs.k8s.io/kustomize/pkg/resid"
,
"Rev"
:
"
ce7e5ee2c30cc5856fea01fe423cf167f2a2d0c3
"
"Rev"
:
"
a6f65144121d1955266b0cd836ce954c04122dc8
"
},
{
"ImportPath"
:
"sigs.k8s.io/kustomize/pkg/resmap"
,
"Rev"
:
"
ce7e5ee2c30cc5856fea01fe423cf167f2a2d0c3
"
"Rev"
:
"
a6f65144121d1955266b0cd836ce954c04122dc8
"
},
{
"ImportPath"
:
"sigs.k8s.io/kustomize/pkg/resource"
,
"Rev"
:
"
ce7e5ee2c30cc5856fea01fe423cf167f2a2d0c3
"
"Rev"
:
"
a6f65144121d1955266b0cd836ce954c04122dc8
"
},
{
"ImportPath"
:
"sigs.k8s.io/kustomize/pkg/target"
,
"Rev"
:
"
ce7e5ee2c30cc5856fea01fe423cf167f2a2d0c3
"
"Rev"
:
"
a6f65144121d1955266b0cd836ce954c04122dc8
"
},
{
"ImportPath"
:
"sigs.k8s.io/kustomize/pkg/transformers"
,
"Rev"
:
"
ce7e5ee2c30cc5856fea01fe423cf167f2a2d0c3
"
"Rev"
:
"
a6f65144121d1955266b0cd836ce954c04122dc8
"
},
{
"ImportPath"
:
"sigs.k8s.io/kustomize/pkg/transformers/config"
,
"Rev"
:
"
ce7e5ee2c30cc5856fea01fe423cf167f2a2d0c3
"
"Rev"
:
"
a6f65144121d1955266b0cd836ce954c04122dc8
"
},
{
"ImportPath"
:
"sigs.k8s.io/kustomize/pkg/transformers/config/defaultconfig"
,
"Rev"
:
"
ce7e5ee2c30cc5856fea01fe423cf167f2a2d0c3
"
"Rev"
:
"
a6f65144121d1955266b0cd836ce954c04122dc8
"
},
{
"ImportPath"
:
"sigs.k8s.io/kustomize/pkg/types"
,
"Rev"
:
"
ce7e5ee2c30cc5856fea01fe423cf167f2a2d0c3
"
"Rev"
:
"
a6f65144121d1955266b0cd836ce954c04122dc8
"
},
{
"ImportPath"
:
"sigs.k8s.io/yaml"
,
...
...
vendor/sigs.k8s.io/kustomize/pkg/commands/build/build.go
View file @
9eebfe7a
...
...
@@ -108,7 +108,7 @@ func (o *Options) RunBuild(
return
err
}
defer
ldr
.
Cleanup
()
kt
,
err
:=
target
.
NewKustTarget
(
ldr
,
fSys
,
rf
,
ptf
)
kt
,
err
:=
target
.
NewKustTarget
(
ldr
,
rf
,
ptf
)
if
err
!=
nil
{
return
err
}
...
...
vendor/sigs.k8s.io/kustomize/pkg/expansion/expand.go
View file @
9eebfe7a
...
...
@@ -36,15 +36,17 @@ func syntaxWrap(input string) string {
// implements the expansion semantics defined in the expansion spec; it
// returns the input string wrapped in the expansion syntax if no mapping
// for the input is found.
func
MappingFuncFor
(
context
...
map
[
string
]
string
)
func
(
string
)
string
{
func
MappingFuncFor
(
counts
map
[
string
]
int
,
context
...
map
[
string
]
string
)
func
(
string
)
string
{
return
func
(
input
string
)
string
{
for
_
,
vars
:=
range
context
{
val
,
ok
:=
vars
[
input
]
if
ok
{
counts
[
input
]
++
return
val
}
}
return
syntaxWrap
(
input
)
}
}
...
...
vendor/sigs.k8s.io/kustomize/pkg/fs/confirmeddir.go
View file @
9eebfe7a
...
...
@@ -26,7 +26,7 @@ import (
// that was confirmed to point to an existing directory.
type
ConfirmedDir
string
//
Return
a temporary dir, else error.
//
NewTmpConfirmedDir returns
a temporary dir, else error.
// The directory is cleaned, no symlinks, etc. so its
// returned as a ConfirmedDir.
func
NewTmpConfirmedDir
()
(
ConfirmedDir
,
error
)
{
...
...
@@ -34,7 +34,15 @@ func NewTmpConfirmedDir() (ConfirmedDir, error) {
if
err
!=
nil
{
return
""
,
err
}
return
ConfirmedDir
(
n
),
nil
// In MacOs `ioutil.TempDir` creates a directory
// with root in the `/var` folder, which is in turn a symlinked path
// to `/private/var`.
// Function `filepath.EvalSymlinks`is used to
// resolve the real absolute path.
deLinked
,
err
:=
filepath
.
EvalSymlinks
(
n
)
return
ConfirmedDir
(
deLinked
),
err
}
// HasPrefix returns true if the directory argument
...
...
vendor/sigs.k8s.io/kustomize/pkg/git/repospec.go
View file @
9eebfe7a
...
...
@@ -24,6 +24,13 @@ import (
"sigs.k8s.io/kustomize/pkg/fs"
)
// Used as a temporary non-empty occupant of the cloneDir
// field, as something distinguishable from the empty string
// in various outputs (especially tests). Not using an
// actual directory name here, as that's a temporary directory
// with a unique name that isn't created until clone time.
const
notCloned
=
fs
.
ConfirmedDir
(
"/notCloned"
)
// RepoSpec specifies a git repository and a branch and path therein.
type
RepoSpec
struct
{
// Raw, original spec, used to look for cycles.
...
...
@@ -88,7 +95,7 @@ func NewRepoSpecFromUrl(n string) (*RepoSpec, error) {
}
return
&
RepoSpec
{
raw
:
n
,
host
:
host
,
orgRepo
:
orgRepo
,
path
:
path
,
ref
:
gitRef
},
nil
cloneDir
:
notCloned
,
path
:
path
,
ref
:
gitRef
},
nil
}
const
(
...
...
vendor/sigs.k8s.io/kustomize/pkg/gvk/gvk.go
View file @
9eebfe7a
...
...
@@ -73,6 +73,8 @@ var order = []string{
"Namespace"
,
"StorageClass"
,
"CustomResourceDefinition"
,
"MutatingWebhookConfiguration"
,
"ValidatingWebhookConfiguration"
,
"ServiceAccount"
,
"Role"
,
"ClusterRole"
,
...
...
vendor/sigs.k8s.io/kustomize/pkg/patch/transformer/BUILD
View file @
9eebfe7a
...
...
@@ -5,7 +5,6 @@ go_library(
srcs = [
"factory.go",
"patchjson6902json.go",
"util.go",
],
importmap = "k8s.io/kubernetes/vendor/sigs.k8s.io/kustomize/pkg/patch/transformer",
importpath = "sigs.k8s.io/kustomize/pkg/patch/transformer",
...
...
@@ -13,6 +12,7 @@ go_library(
deps = [
"//vendor/github.com/evanphx/json-patch:go_default_library",
"//vendor/github.com/ghodss/yaml:go_default_library",
"//vendor/github.com/pkg/errors:go_default_library",
"//vendor/sigs.k8s.io/kustomize/pkg/gvk:go_default_library",
"//vendor/sigs.k8s.io/kustomize/pkg/ifc:go_default_library",
"//vendor/sigs.k8s.io/kustomize/pkg/patch:go_default_library",
...
...
vendor/sigs.k8s.io/kustomize/pkg/patch/transformer/factory.go
View file @
9eebfe7a
...
...
@@ -21,8 +21,6 @@ import (
"sigs.k8s.io/kustomize/pkg/ifc"
"sigs.k8s.io/kustomize/pkg/resid"
"github.com/evanphx/json-patch"
"github.com/ghodss/yaml"
"sigs.k8s.io/kustomize/pkg/gvk"
"sigs.k8s.io/kustomize/pkg/patch"
"sigs.k8s.io/kustomize/pkg/transformers"
...
...
@@ -77,19 +75,7 @@ func (f PatchJson6902Factory) makeOnePatchJson6902Transformer(p patch.Json6902)
return
nil
,
err
}
if
!
isJsonFormat
(
rawOp
)
{
// if it isn't JSON, try to parse it as YAML
rawOp
,
err
=
yaml
.
YAMLToJSON
(
rawOp
)
if
err
!=
nil
{
return
nil
,
err
}
}
decodedPatch
,
err
:=
jsonpatch
.
DecodePatch
(
rawOp
)
if
err
!=
nil
{
return
nil
,
err
}
return
newPatchJson6902JSONTransformer
(
targetId
,
decodedPatch
)
return
newPatchJson6902JSONTransformer
(
targetId
,
rawOp
)
}
func
isJsonFormat
(
data
[]
byte
)
bool
{
...
...
vendor/sigs.k8s.io/kustomize/pkg/patch/transformer/patchjson6902json.go
View file @
9eebfe7a
...
...
@@ -17,9 +17,14 @@ limitations under the License.
package
transformer
import
(
"fmt"
"github.com/evanphx/json-patch"
"github.com/ghodss/yaml"
"github.com/pkg/errors"
"sigs.k8s.io/kustomize/pkg/resid"
"sigs.k8s.io/kustomize/pkg/resmap"
"sigs.k8s.io/kustomize/pkg/resource"
"sigs.k8s.io/kustomize/pkg/transformers"
)
...
...
@@ -27,22 +32,37 @@ import (
type
patchJson6902JSONTransformer
struct
{
target
resid
.
ResId
patch
jsonpatch
.
Patch
rawOp
[]
byte
}
var
_
transformers
.
Transformer
=
&
patchJson6902JSONTransformer
{}
// newPatchJson6902JSONTransformer constructs a PatchJson6902 transformer.
func
newPatchJson6902JSONTransformer
(
t
resid
.
ResId
,
p
jsonpatch
.
Patch
)
(
transformers
.
Transformer
,
error
)
{
if
len
(
p
)
==
0
{
func
newPatchJson6902JSONTransformer
(
id
resid
.
ResId
,
rawOp
[]
byte
)
(
transformers
.
Transformer
,
error
)
{
op
:=
rawOp
var
err
error
if
!
isJsonFormat
(
op
)
{
// if it isn't JSON, try to parse it as YAML
op
,
err
=
yaml
.
YAMLToJSON
(
rawOp
)
if
err
!=
nil
{
return
nil
,
err
}
}
decodedPatch
,
err
:=
jsonpatch
.
DecodePatch
(
op
)
if
err
!=
nil
{
return
nil
,
err
}
if
len
(
decodedPatch
)
==
0
{
return
transformers
.
NewNoOpTransformer
(),
nil
}
return
&
patchJson6902JSONTransformer
{
target
:
t
,
patch
:
p
},
nil
return
&
patchJson6902JSONTransformer
{
target
:
id
,
patch
:
decodedPatch
,
rawOp
:
rawO
p
},
nil
}
// Transform apply the json patches on top of the base resources.
func
(
t
*
patchJson6902JSONTransformer
)
Transform
(
baseResourceMap
resmap
.
ResMap
)
error
{
obj
,
err
:=
findTargetObj
(
baseResourceMap
,
t
.
target
)
if
obj
=
=
nil
{
func
(
t
*
patchJson6902JSONTransformer
)
Transform
(
m
resmap
.
ResMap
)
error
{
obj
,
err
:=
t
.
findTargetObj
(
m
)
if
err
!
=
nil
{
return
err
}
rawObj
,
err
:=
obj
.
MarshalJSON
()
...
...
@@ -51,7 +71,7 @@ func (t *patchJson6902JSONTransformer) Transform(baseResourceMap resmap.ResMap)
}
modifiedObj
,
err
:=
t
.
patch
.
Apply
(
rawObj
)
if
err
!=
nil
{
return
err
return
err
ors
.
Wrapf
(
err
,
"failed to apply json patch '%s'"
,
string
(
t
.
rawOp
))
}
err
=
obj
.
UnmarshalJSON
(
modifiedObj
)
if
err
!=
nil
{
...
...
@@ -59,3 +79,30 @@ func (t *patchJson6902JSONTransformer) Transform(baseResourceMap resmap.ResMap)
}
return
nil
}
func
(
t
*
patchJson6902JSONTransformer
)
findTargetObj
(
m
resmap
.
ResMap
)
(
*
resource
.
Resource
,
error
)
{
var
matched
[]
resid
.
ResId
// TODO(monopole): namespace bug in json patch?
// Since introduction in PR #300
// (see pkg/patch/transformer/util.go),
// this code has treated an empty namespace like a wildcard
// rather than like an additional restriction to match
// only the empty namespace. No test coverage to confirm.
// Not sure if desired, keeping it for now.
if
t
.
target
.
Namespace
()
!=
""
{
matched
=
m
.
GetMatchingIds
(
t
.
target
.
NsGvknEquals
)
}
else
{
matched
=
m
.
GetMatchingIds
(
t
.
target
.
GvknEquals
)
}
if
len
(
matched
)
==
0
{
return
nil
,
fmt
.
Errorf
(
"couldn't find target %v for json patch"
,
t
.
target
)
}
if
len
(
matched
)
>
1
{
return
nil
,
fmt
.
Errorf
(
"found multiple targets %v matching %v for json patch"
,
matched
,
t
.
target
)
}
return
m
[
matched
[
0
]],
nil
}
vendor/sigs.k8s.io/kustomize/pkg/patch/transformer/util.go
deleted
100644 → 0
View file @
c80e45f8
/*
Copyright 2018 The Kubernetes Authors.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
package
transformer
import
(
"fmt"
"sigs.k8s.io/kustomize/pkg/resid"
"sigs.k8s.io/kustomize/pkg/resmap"
"sigs.k8s.io/kustomize/pkg/resource"
)
func
findTargetObj
(
m
resmap
.
ResMap
,
targetId
resid
.
ResId
)
(
*
resource
.
Resource
,
error
)
{
matchedIds
:=
m
.
FindByGVKN
(
targetId
)
if
targetId
.
Namespace
()
!=
""
{
var
ids
[]
resid
.
ResId
for
_
,
id
:=
range
matchedIds
{
if
id
.
Namespace
()
==
targetId
.
Namespace
()
{
ids
=
append
(
ids
,
id
)
}
}
matchedIds
=
ids
}
if
len
(
matchedIds
)
==
0
{
return
nil
,
fmt
.
Errorf
(
"couldn't find any object to apply the json patch %v"
,
targetId
)
}
if
len
(
matchedIds
)
>
1
{
return
nil
,
fmt
.
Errorf
(
"found multiple objects that the patch can apply %v"
,
matchedIds
)
}
return
m
[
matchedIds
[
0
]],
nil
}
vendor/sigs.k8s.io/kustomize/pkg/resid/resid.go
View file @
9eebfe7a
...
...
@@ -22,23 +22,30 @@ import (
"sigs.k8s.io/kustomize/pkg/gvk"
)
// ResId
conflates GroupVersionKind with a textual name to uniquely identify a kubernetes resource (object)
.
// ResId
is an immutable identifier of a k8s resource object
.
type
ResId
struct
{
// Gvk of the resource.
gvKind
gvk
.
Gvk
// original name of the resource before transformation.
// name of the resource before transformation.
name
string
// namePrefix of the resource
// an untransformed resource has no prefix, fully transformed resource has an arbitrary number of prefixes
// concatenated together.
// namePrefix of the resource.
// An untransformed resource has no prefix.
// A fully transformed resource has an arbitrary
// number of prefixes concatenated together.
prefix
string
// nameSuffix of the resource
// an untransformed resource has no suffix, fully transformed resource has an arbitrary number of suffixes
// concatenated together.
// nameSuffix of the resource.
// An untransformed resource has no suffix.
// A fully transformed resource has an arbitrary
// number of suffixes concatenated together.
suffix
string
// namespace the resource belongs to
// an untransformed resource has no namespace, fully transformed resource has the namespace from
// the top most overlay
// Namespace the resource belongs to.
// An untransformed resource has no namespace.
// A fully transformed resource has the namespace
// from the top most overlay.
namespace
string
}
...
...
@@ -108,10 +115,16 @@ func (n ResId) GvknString() string {
return
n
.
gvKind
.
String
()
+
separator
+
n
.
name
}
// GvknEquals return
if two ResId have the same Group/Version/Kind and name
//
The comparison excludes prefix and suffix
// GvknEquals return
s true if the other id matches
//
Group/Version/Kind/name.
func
(
n
ResId
)
GvknEquals
(
id
ResId
)
bool
{
return
n
.
gvKind
.
Equals
(
id
.
gvKind
)
&&
n
.
name
==
id
.
name
return
n
.
name
==
id
.
name
&&
n
.
gvKind
.
Equals
(
id
.
gvKind
)
}
// NsGvknEquals returns true if the other id matches
// namespace/Group/Version/Kind/name.
func
(
n
ResId
)
NsGvknEquals
(
id
ResId
)
bool
{
return
n
.
namespace
==
id
.
namespace
&&
n
.
GvknEquals
(
id
)
}
// Gvk returns Group/Version/Kind of the resource.
...
...
vendor/sigs.k8s.io/kustomize/pkg/resmap/factory.go
View file @
9eebfe7a
...
...
@@ -50,7 +50,7 @@ func (rmF *Factory) FromFiles(
if
err
!=
nil
{
return
nil
,
errors
.
Wrap
(
err
,
"Load from path "
+
path
+
" failed"
)
}
res
,
err
:=
rmF
.
n
ewResMapFromBytes
(
content
)
res
,
err
:=
rmF
.
N
ewResMapFromBytes
(
content
)
if
err
!=
nil
{
return
nil
,
internal
.
Handler
(
err
,
path
)
}
...
...
@@ -60,7 +60,7 @@ func (rmF *Factory) FromFiles(
}
// newResMapFromBytes decodes a list of objects in byte array format.
func
(
rmF
*
Factory
)
n
ewResMapFromBytes
(
b
[]
byte
)
(
ResMap
,
error
)
{
func
(
rmF
*
Factory
)
N
ewResMapFromBytes
(
b
[]
byte
)
(
ResMap
,
error
)
{
resources
,
err
:=
rmF
.
resF
.
SliceFromBytes
(
b
)
if
err
!=
nil
{
return
nil
,
err
...
...
vendor/sigs.k8s.io/kustomize/pkg/resmap/resmap.go
View file @
9eebfe7a
...
...
@@ -32,26 +32,20 @@ import (
// ResMap is a map from ResId to Resource.
type
ResMap
map
[
resid
.
ResId
]
*
resource
.
Resource
// FindByGVKN find the matched ResIds by Group/Version/Kind and Name
func
(
m
ResMap
)
FindByGVKN
(
inputId
resid
.
ResId
)
[]
resid
.
ResId
{
type
IdMatcher
func
(
resid
.
ResId
)
bool
// GetMatchingIds returns a slice of ResId keys from the map
// that all satisfy the given matcher function.
func
(
m
ResMap
)
GetMatchingIds
(
matches
IdMatcher
)
[]
resid
.
ResId
{
var
result
[]
resid
.
ResId
for
id
:=
range
m
{
if
id
.
GvknEquals
(
inputI
d
)
{
if
matches
(
i
d
)
{
result
=
append
(
result
,
id
)
}
}
return
result
}
// DemandOneMatchForId find the matched resource by Group/Version/Kind and Name
func
(
m
ResMap
)
DemandOneMatchForId
(
inputId
resid
.
ResId
)
(
*
resource
.
Resource
,
bool
)
{
result
:=
m
.
FindByGVKN
(
inputId
)
if
len
(
result
)
==
1
{
return
m
[
result
[
0
]],
true
}
return
nil
,
false
}
// EncodeAsYaml encodes a ResMap to YAML; encoded objects separated by `---`.
func
(
m
ResMap
)
EncodeAsYaml
()
([]
byte
,
error
)
{
var
ids
[]
resid
.
ResId
...
...
@@ -177,7 +171,7 @@ func MergeWithOverride(maps ...ResMap) (ResMap, error) {
continue
}
for
id
,
r
:=
range
m
{
matchedId
:=
result
.
FindByGVKN
(
id
)
matchedId
:=
result
.
GetMatchingIds
(
id
.
GvknEquals
)
if
len
(
matchedId
)
==
1
{
id
=
matchedId
[
0
]
switch
r
.
Behavior
()
{
...
...
vendor/sigs.k8s.io/kustomize/pkg/resource/factory.go
View file @
9eebfe7a
...
...
@@ -20,6 +20,7 @@ import (
"encoding/json"
"fmt"
"log"
"strings"
"sigs.k8s.io/kustomize/pkg/ifc"
internal
"sigs.k8s.io/kustomize/pkg/internal/error"
...
...
@@ -94,10 +95,14 @@ func (rf *Factory) SliceFromBytes(in []byte) ([]*Resource, error) {
for
len
(
kunStructs
)
>
0
{
u
:=
kunStructs
[
0
]
kunStructs
=
kunStructs
[
1
:
]
if
u
.
GetKind
()
==
"List"
{
if
strings
.
HasSuffix
(
u
.
GetKind
(),
"List"
)
{
items
:=
u
.
Map
()[
"items"
]
itemsSlice
,
ok
:=
items
.
([]
interface
{})
if
!
ok
{
if
items
==
nil
{
// an empty list
continue
}
return
nil
,
fmt
.
Errorf
(
"items in List is type %T, expected array"
,
items
)
}
for
_
,
item
:=
range
itemsSlice
{
...
...
vendor/sigs.k8s.io/kustomize/pkg/resource/resource.go
View file @
9eebfe7a
...
...
@@ -38,7 +38,7 @@ func (r *Resource) String() string {
if
err
!=
nil
{
return
"<"
+
err
.
Error
()
+
">"
}
return
strings
.
TrimSpace
(
string
(
bs
))
return
strings
.
TrimSpace
(
string
(
bs
))
+
r
.
options
.
String
()
}
// DeepCopy returns a new copy of resource
...
...
vendor/sigs.k8s.io/kustomize/pkg/target/BUILD
View file @
9eebfe7a
...
...
@@ -13,7 +13,6 @@ go_library(
"//vendor/github.com/ghodss/yaml:go_default_library",
"//vendor/github.com/pkg/errors:go_default_library",
"//vendor/sigs.k8s.io/kustomize/pkg/constants:go_default_library",
"//vendor/sigs.k8s.io/kustomize/pkg/fs:go_default_library",
"//vendor/sigs.k8s.io/kustomize/pkg/ifc:go_default_library",
"//vendor/sigs.k8s.io/kustomize/pkg/ifc/transformer:go_default_library",
"//vendor/sigs.k8s.io/kustomize/pkg/internal/error:go_default_library",
...
...
vendor/sigs.k8s.io/kustomize/pkg/target/kusttarget.go
View file @
9eebfe7a
...
...
@@ -26,7 +26,6 @@ import (
"github.com/ghodss/yaml"
"github.com/pkg/errors"
"sigs.k8s.io/kustomize/pkg/constants"
"sigs.k8s.io/kustomize/pkg/fs"
"sigs.k8s.io/kustomize/pkg/ifc"
"sigs.k8s.io/kustomize/pkg/ifc/transformer"
interror
"sigs.k8s.io/kustomize/pkg/internal/error"
...
...
@@ -42,7 +41,6 @@ import (
type
KustTarget
struct
{
kustomization
*
types
.
Kustomization
ldr
ifc
.
Loader
fSys
fs
.
FileSystem
rFactory
*
resmap
.
Factory
tFactory
transformer
.
Factory
}
...
...
@@ -50,7 +48,6 @@ type KustTarget struct {
// NewKustTarget returns a new instance of KustTarget primed with a Loader.
func
NewKustTarget
(
ldr
ifc
.
Loader
,
fSys
fs
.
FileSystem
,
rFactory
*
resmap
.
Factory
,
tFactory
transformer
.
Factory
)
(
*
KustTarget
,
error
)
{
content
,
err
:=
loadKustFile
(
ldr
)
...
...
@@ -70,12 +67,23 @@ func NewKustTarget(
return
&
KustTarget
{
kustomization
:
&
k
,
ldr
:
ldr
,
fSys
:
fSys
,
rFactory
:
rFactory
,
tFactory
:
tFactory
,
},
nil
}
func
quoted
(
l
[]
string
)
[]
string
{
r
:=
make
([]
string
,
len
(
l
))
for
i
,
v
:=
range
l
{
r
[
i
]
=
"'"
+
v
+
"'"
}
return
r
}
func
commaOr
(
q
[]
string
)
string
{
return
strings
.
Join
(
q
[
:
len
(
q
)
-
1
],
", "
)
+
" or "
+
q
[
len
(
q
)
-
1
]
}
func
loadKustFile
(
ldr
ifc
.
Loader
)
([]
byte
,
error
)
{
var
content
[]
byte
match
:=
0
...
...
@@ -88,8 +96,9 @@ func loadKustFile(ldr ifc.Loader) ([]byte, error) {
}
switch
match
{
case
0
:
return
nil
,
fmt
.
Errorf
(
"No kustomization file found in %s. Kustomize supports the following kustomization files: %s"
,
ldr
.
Root
(),
strings
.
Join
(
constants
.
KustomizationFileNames
,
", "
))
return
nil
,
fmt
.
Errorf
(
"unable to find one of %v in directory '%s'"
,
commaOr
(
quoted
(
constants
.
KustomizationFileNames
)),
ldr
.
Root
())
case
1
:
return
content
,
nil
default
:
...
...
@@ -110,7 +119,7 @@ func unmarshal(y []byte, o interface{}) error {
// MakeCustomizedResMap creates a ResMap per kustomization instructions.
// The Resources in the returned ResMap are fully customized.
func
(
kt
*
KustTarget
)
MakeCustomizedResMap
()
(
resmap
.
ResMap
,
error
)
{
ra
,
err
:=
kt
.
a
ccumulateTarget
()
ra
,
err
:=
kt
.
A
ccumulateTarget
()
if
err
!=
nil
{
return
nil
,
err
}
...
...
@@ -134,11 +143,11 @@ func (kt *KustTarget) shouldAddHashSuffixesToGeneratedResources() bool {
!
kt
.
kustomization
.
GeneratorOptions
.
DisableNameSuffixHash
}
//
a
ccumulateTarget returns a new ResAccumulator,
//
A
ccumulateTarget returns a new ResAccumulator,
// holding customized resources and the data/rules used
// to do so. The name back references and vars are
// not yet fixed.
func
(
kt
*
KustTarget
)
a
ccumulateTarget
()
(
func
(
kt
*
KustTarget
)
A
ccumulateTarget
()
(
ra
*
ResAccumulator
,
err
error
)
{
// TODO(monopole): Get rid of the KustomizationErrors accumulator.
// It's not consistently used, and complicates tests.
...
...
@@ -236,15 +245,15 @@ func (kt *KustTarget) accumulateBases() (
continue
}
subKt
,
err
:=
NewKustTarget
(
ldr
,
kt
.
fSys
,
kt
.
rFactory
,
kt
.
tFactory
)
ldr
,
kt
.
rFactory
,
kt
.
tFactory
)
if
err
!=
nil
{
errs
.
Append
(
errors
.
Wrap
(
err
,
"couldn't make target for "
+
path
))
ldr
.
Cleanup
()
continue
}
subRa
,
err
:=
subKt
.
a
ccumulateTarget
()
subRa
,
err
:=
subKt
.
A
ccumulateTarget
()
if
err
!=
nil
{
errs
.
Append
(
errors
.
Wrap
(
err
,
"
a
ccumulateTarget"
))
errs
.
Append
(
errors
.
Wrap
(
err
,
"
A
ccumulateTarget"
))
ldr
.
Cleanup
()
continue
}
...
...
vendor/sigs.k8s.io/kustomize/pkg/target/resaccumulator.go
View file @
9eebfe7a
...
...
@@ -19,6 +19,8 @@ package target
import
(
"fmt"
"log"
"strings"
"sigs.k8s.io/kustomize/pkg/resid"
"sigs.k8s.io/kustomize/pkg/resmap"
"sigs.k8s.io/kustomize/pkg/transformers"
...
...
@@ -55,6 +57,11 @@ func (ra *ResAccumulator) ResMap() resmap.ResMap {
return
result
}
// Vars returns a copy of underlying vars.
func
(
ra
*
ResAccumulator
)
Vars
()
[]
types
.
Var
{
return
ra
.
varSet
.
Set
()
}
func
(
ra
*
ResAccumulator
)
MergeResourcesWithErrorOnIdCollision
(
resources
resmap
.
ResMap
)
(
err
error
)
{
ra
.
resMap
,
err
=
resmap
.
MergeWithErrorOnIdCollision
(
...
...
@@ -96,17 +103,27 @@ func (ra *ResAccumulator) MergeAccumulator(other *ResAccumulator) (err error) {
// for substitution wherever the $(var.Name) occurs.
func
(
ra
*
ResAccumulator
)
makeVarReplacementMap
()
(
map
[
string
]
string
,
error
)
{
result
:=
map
[
string
]
string
{}
for
_
,
v
:=
range
ra
.
varSet
.
Set
()
{
id
:=
resid
.
NewResId
(
v
.
ObjRef
.
GVK
(),
v
.
ObjRef
.
Name
)
if
r
,
found
:=
ra
.
resMap
.
DemandOneMatchForId
(
id
);
found
{
s
,
err
:=
r
.
GetFieldValue
(
v
.
FieldRef
.
FieldPath
)
for
_
,
v
:=
range
ra
.
Vars
()
{
matched
:=
ra
.
resMap
.
GetMatchingIds
(
resid
.
NewResId
(
v
.
ObjRef
.
GVK
(),
v
.
ObjRef
.
Name
)
.
GvknEquals
)
if
len
(
matched
)
>
1
{
return
nil
,
fmt
.
Errorf
(
"found %d resId matches for var %s "
+
"(unable to disambiguate)"
,
len
(
matched
),
v
)
}
if
len
(
matched
)
==
1
{
s
,
err
:=
ra
.
resMap
[
matched
[
0
]]
.
GetFieldValue
(
v
.
FieldRef
.
FieldPath
)
if
err
!=
nil
{
return
nil
,
fmt
.
Errorf
(
"field path err for var: %+v"
,
v
)
return
nil
,
fmt
.
Errorf
(
"field specified in var '%v' "
+
"not found in corresponding resource"
,
v
)
}
result
[
v
.
Name
]
=
s
}
else
{
// Should this be an error?
log
.
Printf
(
"var %v defined but not used"
,
v
)
return
nil
,
fmt
.
Errorf
(
"var '%v' cannot be mapped to a field "
+
"in the set of known resources"
,
v
)
}
}
return
result
,
nil
...
...
@@ -121,8 +138,18 @@ func (ra *ResAccumulator) ResolveVars() error {
if
err
!=
nil
{
return
err
}
return
ra
.
Transform
(
transformers
.
NewRefVarTransformer
(
replacementMap
,
ra
.
tConfig
.
VarReference
))
if
len
(
replacementMap
)
==
0
{
return
nil
}
t
:=
transformers
.
NewRefVarTransformer
(
replacementMap
,
ra
.
tConfig
.
VarReference
)
err
=
ra
.
Transform
(
t
)
if
len
(
t
.
UnusedVars
())
>
0
{
log
.
Printf
(
"well-defined vars that were never replaced: %s
\n
"
,
strings
.
Join
(
t
.
UnusedVars
(),
","
))
}
return
err
}
func
(
ra
*
ResAccumulator
)
FixBackReferences
()
(
err
error
)
{
...
...
vendor/sigs.k8s.io/kustomize/pkg/transformers/config/BUILD
View file @
9eebfe7a
...
...
@@ -15,6 +15,7 @@ go_library(
deps = [
"//vendor/github.com/ghodss/yaml:go_default_library",
"//vendor/github.com/go-openapi/spec:go_default_library",
"//vendor/github.com/pkg/errors:go_default_library",
"//vendor/k8s.io/kube-openapi/pkg/common:go_default_library",
"//vendor/sigs.k8s.io/kustomize/pkg/gvk:go_default_library",
"//vendor/sigs.k8s.io/kustomize/pkg/ifc:go_default_library",
...
...
vendor/sigs.k8s.io/kustomize/pkg/transformers/config/defaultconfig/varreference.go
View file @
9eebfe7a
...
...
@@ -100,10 +100,63 @@ varReference:
- path: spec/containers/env/value
kind: Pod
- path: spec/initContainers/command
kind: Pod
- path: spec/initContainers/args
kind: Pod
- path: spec/initContainers/env/value
kind: Pod
- path: spec/rules/host
kind: Ingress
- path: spec/tls/hosts
kind: Ingress
- path: spec/template/spec/containers/volumeMounts/mountPath
kind: StatefulSet
- path: spec/template/spec/initContainers/volumeMounts/mountPath
kind: StatefulSet
- path: spec/containers/volumeMounts/mountPath
kind: Pod
- path: spec/initContainers/volumeMounts/mountPath
kind: Pod
- path: spec/template/spec/containers/volumeMounts/mountPath
kind: ReplicaSet
- path: spec/template/spec/initContainers/volumeMounts/mountPath
kind: ReplicaSet
- path: spec/template/spec/containers/volumeMounts/mountPath
kind: Job
- path: spec/template/spec/initContainers/volumeMounts/mountPath
kind: Job
- path: spec/template/spec/containers/volumeMounts/mountPath
kind: CronJob
- path: spec/template/spec/initContainers/volumeMounts/mountPath
kind: CronJob
- path: spec/template/spec/containers/volumeMounts/mountPath
kind: DaemonSet
- path: spec/template/spec/initContainers/volumeMounts/mountPath
kind: DaemonSet
- path: spec/template/spec/containers/volumeMounts/mountPath
kind: Deployment
- path: spec/template/spec/initContainers/volumeMounts/mountPath
kind: Deployment
- path: metadata/labels
`
)
vendor/sigs.k8s.io/kustomize/pkg/transformers/config/factorycrd.go
View file @
9eebfe7a
...
...
@@ -22,6 +22,7 @@ import (
"github.com/ghodss/yaml"
"github.com/go-openapi/spec"
"github.com/pkg/errors"
"k8s.io/kube-openapi/pkg/common"
"sigs.k8s.io/kustomize/pkg/gvk"
"sigs.k8s.io/kustomize/pkg/ifc"
...
...
@@ -41,7 +42,7 @@ func LoadConfigFromCRDs(
}
m
,
err
:=
makeNameToApiMap
(
content
)
if
err
!=
nil
{
return
nil
,
err
return
nil
,
err
ors
.
Wrapf
(
err
,
"unable to parse open API definition from '%s'"
,
path
)
}
otherTc
,
err
:=
makeConfigFromApiMap
(
m
)
if
err
!=
nil
{
...
...
vendor/sigs.k8s.io/kustomize/pkg/transformers/image.go
View file @
9eebfe7a
...
...
@@ -17,6 +17,7 @@ limitations under the License.
package
transformers
import
(
"fmt"
"regexp"
"strings"
...
...
@@ -75,7 +76,10 @@ func (pt *imageTransformer) findAndReplaceImage(obj map[string]interface{}) erro
}
func
(
pt
*
imageTransformer
)
updateContainers
(
obj
map
[
string
]
interface
{},
path
string
)
error
{
containers
:=
obj
[
path
]
.
([]
interface
{})
containers
,
ok
:=
obj
[
path
]
.
([]
interface
{})
if
!
ok
{
return
fmt
.
Errorf
(
"containers path is not of type []interface{} but %T"
,
obj
[
path
])
}
for
i
:=
range
containers
{
container
:=
containers
[
i
]
.
(
map
[
string
]
interface
{})
containerImage
,
found
:=
container
[
"image"
]
...
...
@@ -85,20 +89,21 @@ func (pt *imageTransformer) updateContainers(obj map[string]interface{}, path st
imageName
:=
containerImage
.
(
string
)
for
_
,
img
:=
range
pt
.
images
{
if
isImageMatched
(
imageName
,
img
.
Name
)
{
name
,
tag
:=
split
(
imageName
)
if
img
.
NewName
!=
""
{
name
=
img
.
NewName
}
if
img
.
NewTag
!=
""
{
tag
=
":"
+
img
.
NewTag
}
if
img
.
Digest
!=
""
{
tag
=
"@"
+
img
.
Digest
}
container
[
"image"
]
=
name
+
tag
break
if
!
isImageMatched
(
imageName
,
img
.
Name
)
{
continue
}
name
,
tag
:=
split
(
imageName
)
if
img
.
NewName
!=
""
{
name
=
img
.
NewName
}
if
img
.
NewTag
!=
""
{
tag
=
":"
+
img
.
NewTag
}
if
img
.
Digest
!=
""
{
tag
=
"@"
+
img
.
Digest
}
container
[
"image"
]
=
name
+
tag
break
}
}
return
nil
...
...
@@ -138,7 +143,18 @@ func isImageMatched(s, t string) bool {
// from the image string using either colon `:` or at `@` separators.
// Note that the returned tag keeps its separator.
func
split
(
imageName
string
)
(
name
string
,
tag
string
)
{
ic
:=
strings
.
LastIndex
(
imageName
,
":"
)
// check if image name contains a domain
// if domain is present, ignore domain and check for `:`
ic
:=
-
1
if
slashIndex
:=
strings
.
Index
(
imageName
,
"/"
);
slashIndex
<
0
{
ic
=
strings
.
LastIndex
(
imageName
,
":"
)
}
else
{
lastIc
:=
strings
.
LastIndex
(
imageName
[
slashIndex
:
],
":"
)
// set ic only if `:` is present
if
lastIc
>
0
{
ic
=
slashIndex
+
lastIc
}
}
ia
:=
strings
.
LastIndex
(
imageName
,
"@"
)
if
ic
<
0
&&
ia
<
0
{
return
imageName
,
""
...
...
vendor/sigs.k8s.io/kustomize/pkg/transformers/namereference.go
View file @
9eebfe7a
...
...
@@ -89,7 +89,7 @@ func (o *nameReferenceTransformer) updateNameReference(
s
,
_
:=
in
.
(
string
)
for
id
,
res
:=
range
m
{
if
id
.
Gvk
()
.
IsSelected
(
&
backRef
)
&&
id
.
Name
()
==
s
{
matchedIds
:=
m
.
FindByGVKN
(
id
)
matchedIds
:=
m
.
GetMatchingIds
(
id
.
GvknEquals
)
// If there's more than one match, there's no way
// to know which one to pick, so emit error.
if
len
(
matchedIds
)
>
1
{
...
...
@@ -115,7 +115,7 @@ func (o *nameReferenceTransformer) updateNameReference(
for
id
,
res
:=
range
m
{
indexes
:=
indexOf
(
id
.
Name
(),
names
)
if
id
.
Gvk
()
.
IsSelected
(
&
backRef
)
&&
len
(
indexes
)
>
0
{
matchedIds
:=
m
.
FindByGVKN
(
id
)
matchedIds
:=
m
.
GetMatchingIds
(
id
.
GvknEquals
)
if
len
(
matchedIds
)
>
1
{
return
nil
,
fmt
.
Errorf
(
"Multiple matches for name %s:
\n
%v"
,
id
,
matchedIds
)
...
...
vendor/sigs.k8s.io/kustomize/pkg/transformers/refvars.go
View file @
9eebfe7a
...
...
@@ -2,28 +2,26 @@ package transformers
import
(
"fmt"
"sigs.k8s.io/kustomize/pkg/expansion"
"sigs.k8s.io/kustomize/pkg/resmap"
"sigs.k8s.io/kustomize/pkg/transformers/config"
)
type
refvarTransformer
struct
{
fieldSpecs
[]
config
.
FieldSpec
mappingFunc
func
(
string
)
string
type
RefVarTransformer
struct
{
varMap
map
[
string
]
string
replacementCounts
map
[
string
]
int
fieldSpecs
[]
config
.
FieldSpec
mappingFunc
func
(
string
)
string
}
// NewRefVarTransformer returns a
Transformer that replaces $(VAR) style
// variables with values.
// NewRefVarTransformer returns a
new RefVarTransformer
//
that replaces $(VAR) style
variables with values.
// The fieldSpecs are the places to look for occurrences of $(VAR).
func
NewRefVarTransformer
(
varMap
map
[
string
]
string
,
fs
[]
config
.
FieldSpec
)
Transformer
{
if
len
(
varMap
)
==
0
{
return
NewNoOpTransformer
()
}
return
&
refvarTransformer
{
fieldSpecs
:
fs
,
mappingFunc
:
expansion
.
MappingFuncFor
(
varMap
),
varMap
map
[
string
]
string
,
fs
[]
config
.
FieldSpec
)
*
RefVarTransformer
{
return
&
RefVarTransformer
{
varMap
:
varMap
,
fieldSpecs
:
fs
,
}
}
...
...
@@ -31,7 +29,7 @@ func NewRefVarTransformer(
// embedded instances of $VAR style variables, e.g. a container command string.
// The function returns the string with the variables expanded to their final
// values.
func
(
rv
*
refv
arTransformer
)
replaceVars
(
in
interface
{})
(
interface
{},
error
)
{
func
(
rv
*
RefV
arTransformer
)
replaceVars
(
in
interface
{})
(
interface
{},
error
)
{
switch
vt
:=
in
.
(
type
)
{
case
[]
interface
{}
:
var
xs
[]
string
...
...
@@ -39,6 +37,17 @@ func (rv *refvarTransformer) replaceVars(in interface{}) (interface{}, error) {
xs
=
append
(
xs
,
expansion
.
Expand
(
a
.
(
string
),
rv
.
mappingFunc
))
}
return
xs
,
nil
case
map
[
string
]
interface
{}
:
inMap
:=
in
.
(
map
[
string
]
interface
{})
xs
:=
make
(
map
[
string
]
interface
{},
len
(
inMap
))
for
k
,
v
:=
range
inMap
{
s
,
ok
:=
v
.
(
string
)
if
!
ok
{
return
nil
,
fmt
.
Errorf
(
"%#v is expected to be %T"
,
v
,
s
)
}
xs
[
k
]
=
expansion
.
Expand
(
s
,
rv
.
mappingFunc
)
}
return
xs
,
nil
case
interface
{}
:
s
,
ok
:=
in
.
(
string
)
if
!
ok
{
...
...
@@ -52,8 +61,24 @@ func (rv *refvarTransformer) replaceVars(in interface{}) (interface{}, error) {
}
}
// UnusedVars returns slice of Var names that were unused
// after a Transform run.
func
(
rv
*
RefVarTransformer
)
UnusedVars
()
[]
string
{
var
unused
[]
string
for
k
:=
range
rv
.
varMap
{
_
,
ok
:=
rv
.
replacementCounts
[
k
]
if
!
ok
{
unused
=
append
(
unused
,
k
)
}
}
return
unused
}
// Transform replaces $(VAR) style variables with values.
func
(
rv
*
refvarTransformer
)
Transform
(
m
resmap
.
ResMap
)
error
{
func
(
rv
*
RefVarTransformer
)
Transform
(
m
resmap
.
ResMap
)
error
{
rv
.
replacementCounts
=
make
(
map
[
string
]
int
)
rv
.
mappingFunc
=
expansion
.
MappingFuncFor
(
rv
.
replacementCounts
,
rv
.
varMap
)
for
id
,
res
:=
range
m
{
for
_
,
fieldSpec
:=
range
rv
.
fieldSpecs
{
if
id
.
Gvk
()
.
IsSelected
(
&
fieldSpec
.
Gvk
)
{
...
...
vendor/sigs.k8s.io/kustomize/pkg/types/genargs.go
View file @
9eebfe7a
...
...
@@ -16,6 +16,11 @@ limitations under the License.
package
types
import
(
"strconv"
"strings"
)
// GenArgs contains both generator args and options
type
GenArgs
struct
{
args
*
GeneratorArgs
...
...
@@ -30,6 +35,18 @@ func NewGenArgs(args *GeneratorArgs, opts *GeneratorOptions) *GenArgs {
}
}
func
(
g
*
GenArgs
)
String
()
string
{
if
g
==
nil
{
return
"{nilGenArgs}"
}
return
"{"
+
strings
.
Join
([]
string
{
"nsfx:"
+
strconv
.
FormatBool
(
g
.
NeedsHashSuffix
()),
"beh:"
+
g
.
Behavior
()
.
String
()},
","
)
+
"}"
}
// NeedHashSuffix returns true if the hash suffix is needed.
// It is needed when the two conditions are both met
// 1) GenArgs is not nil
...
...
vendor/sigs.k8s.io/kustomize/pkg/types/var.go
View file @
9eebfe7a
...
...
@@ -75,9 +75,11 @@ type VarSet struct {
set
[]
Var
}
// Set returns the var set.
// Set returns
a copy of
the var set.
func
(
vs
*
VarSet
)
Set
()
[]
Var
{
return
vs
.
set
s
:=
make
([]
Var
,
len
(
vs
.
set
))
copy
(
s
,
vs
.
set
)
return
s
}
// MergeSet absorbs other vars with error on name collision.
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment