Feat(addon): Add source and patch to kustomize definition (#2138)

* add more source to kustomize

* add patch to kustomize

* fix

* add patch trait

* remove param
This commit is contained in:
qiaozp
2021-08-20 20:40:15 +08:00
committed by GitHub
parent 37bd10d762
commit af04ca37a5
6 changed files with 374 additions and 51 deletions
+97 -15
View File
@@ -5967,6 +5967,50 @@ data:
workload:
type: autodetects.core.oam.dev
type: raw
- name: kustomize-json-patch
properties:
apiVersion: core.oam.dev/v1beta1
kind: TraitDefinition
metadata:
annotations:
definition.oam.dev/description: A list of JSON6902 patch to selected
target
name: kustomize-json-patch
spec:
schematic:
cue:
template: "patch: {\n\tspec: {\n\t\tpatchesJson6902: parameter.patchesJson\n\t}\n}\n\nparameter:
{\n\t// +usage=A list of JSON6902 patch.\n\tpatchesJson: [...#jsonPatchItem]\n}\n\n//
+usage=Contains a JSON6902 patch\n#jsonPatchItem: {\n\ttarget: #selector\n\tpatch:
{\n\t\top: string\n\t\tpath: string\n\t\tvalue?: string\n\t}\n}\n\n//
+usage=Selector specifies a set of resources\n#selector: {\n\tgroup?:
\ string\n\tversion?: string\n\tkind?: string\n\tnamespace?:
\ string\n\tname?: string\n\tannotationSelector?:
string\n\tlabelSelector?: string\n}\n"
type: raw
- name: kustomize-patch
properties:
apiVersion: core.oam.dev/v1beta1
kind: TraitDefinition
metadata:
annotations:
definition.oam.dev/description: A list of StrategicMerge or JSON6902
patch to selected target
name: kustomize-patch
spec:
schematic:
cue:
template: "patch: {\n\tspec: {\n\t\tpatches: parameter.patches\n\t}\n}\nparameter:
{\n\t// +usage=a list of StrategicMerge or JSON6902 patch to selected
target\n\tpatches: [...#patchItem]\n}\n\n// +usage=Contains a strategicMerge
or JSON6902 patch\n#patchItem: {\n\t// +usage=Inline patch string,
in yaml style\n\tpatch: string\n\t// +usage=Specify the target the
patch should be applied to\n\ttarget: #selector\n}\n\n// +usage=Selector
specifies a set of resources\n#selector: {\n\tgroup?: string\n\tversion?:
\ string\n\tkind?: string\n\tnamespace?:
\ string\n\tname?: string\n\tannotationSelector?:
string\n\tlabelSelector?: string\n}\n"
type: raw
- name: kustomize
properties:
apiVersion: core.oam.dev/v1beta1
@@ -5980,24 +6024,62 @@ data:
spec:
schematic:
cue:
template: "output: {\n\tapiVersion: \"source.toolkit.fluxcd.io/v1beta1\"\n\tkind:
\ \"GitRepository\"\n\tmetadata: {\n\t\tname: context.name\n\t}\n\tspec:
{\n\t\tinterval: parameter.pullInterval\n\t\turl: parameter.repoUrl\n\t\tref:
branch: parameter.branch\n\t}\n}\noutputs: kustomize: {\n\tapiVersion:
\"kustomize.toolkit.fluxcd.io/v1beta1\"\n\tkind: \"Kustomization\"\n\tmetadata:
{\n\t\tname: context.name\n\t}\n\tspec: {\n\t\tinterval: parameter.pullInterval\n\t\tsourceRef:
{\n\t\t\tkind: \"GitRepository\"\n\t\t\tname: context.name\n\t\t}\n\t\tpath:
\ parameter.path\n\t\tprune: true\n\t\tvalidation: \"client\"\n\t}\n}\nparameter:
{\n\t//+usage=The repository URL, can be a HTTP/S or SSH address.\n\trepoUrl:
string\n\t//+usage=The interval at which to check for repository
updates.\n\tpullInterval: *\"1m\" | string\n\t//+usage=The Git reference
to checkout and monitor for changes, defaults to master branch.\n\tbranch:
*\"master\" | string\n\t//+usage=Path to the directory containing
the kustomization.yaml file, or the set of plain YAMLs a kustomization.yaml
should be generated for.\n\tpath: string\n}\n"
template: "output: {\n\tapiVersion: \"kustomize.toolkit.fluxcd.io/v1beta1\"\n\tkind:
\ \"Kustomization\"\n\tmetadata: {\n\t\tname: context.name\n\t}\n\tspec:
{\n\t\tinterval: parameter.pullInterval\n\t\tsourceRef: {\n\t\t\tif
parameter.repoType == \"git\" {\n\t\t\t\tkind: \"GitRepository\"\n\t\t\t}\n\t\t\tif
parameter.repoType == \"oss\" {\n\t\t\t\tkind: \"Bucket\"\n\t\t\t}\n\t\t\tname:
\ context.name\n\t\t\tnamespace: context.namespace\n\t\t}\n\t\tpath:
\ parameter.path\n\t\tprune: true\n\t\tvalidation: \"client\"\n\t}\n}\n\noutputs:
repo:{\n\tapiVersion: \"source.toolkit.fluxcd.io/v1beta1\"\n\tmetadata:
{\n\t\tname: context.name\n\t}\n\tif parameter.repoType == \"git\"
{\n\t\tkind: \"GitRepository\"\n\t\tspec: {\n\t\t\turl: parameter.url\n\t\t\tif
parameter.git.branch != _|_ {\n\t\t\t\tref: branch: parameter.git.branch\n\t\t\t}\n\t\t\t_secret\n\t\t\t_sourceCommonArgs\n\t\t}\n\t}\n\tif
parameter.repoType == \"oss\" {\n\t\tkind: \"Bucket\"\n\t\tspec:
{\n\t\t\tendpoint: parameter.url\n\t\t\tbucketName: parameter.oss.bucketName\n\t\t\tprovider:
\ parameter.oss.provider\n\t\t\tif parameter.oss.region != _|_
{\n\t\t\t\tregion: parameter.oss.region\n\t\t\t}\n\t\t\t_secret\n\t\t\t_sourceCommonArgs\n\t\t}\n\t}\n}\n\n_secret:
{\n\tif parameter.secretRef != _|_ {\n\t\tsecretRef: {\n\t\t\tname:
parameter.secretRef\n\t\t}\n\t}\n}\n\n_sourceCommonArgs: {\n\tinterval:
parameter.pullInterval\n\tif parameter.timeout != _|_ {\n\t\ttimeout:
parameter.timeout\n\t}\n}\n\nparameter: {\n\trepoType: *\"git\"
| \"oss\"\n\t// +usage=The interval at which to check for repository/bucket
and relese updates, default to 5m\n\tpullInterval: *\"5m\" | string\n\t//
+usage=The Git or Helm repository URL, OSS endpoint, accept HTTP/S
or SSH address as git url,\n\turl: string\n\t// +usage=The name
of the secret containing authentication credentials\n\tsecretRef?:
string\n\t// +usage=The timeout for operations like download index/clone
repository, optional\n\ttimeout?: string\n\tgit?: {\n\t\t// +usage=The
Git reference to checkout and monitor for changes, defaults to master
branch\n\t\tbranch: string\n\t}\n\toss?: {\n\t\t// +usage=The bucket's
name, required if repoType is oss\n\t\tbucketName: string\n\t\t//
+usage=\"generic\" for Minio, Amazon S3, Google Cloud Storage, Alibaba
Cloud OSS, \"aws\" for retrieve credentials from the EC2 service
when credentials not specified, default \"generic\"\n\t\tprovider:
*\"generic\" | \"aws\"\n\t\t// +usage=The bucket region, optional\n\t\tregion?:
string\n\t}\n\t//+usage=Path to the directory containing the kustomization.yaml
file, or the set of plain YAMLs a kustomization.yaml should be generated
for.\n\tpath: string\n} \n"
workload:
type: autodetects.core.oam.dev
type: raw
- name: kustomize-strategy-merge
properties:
apiVersion: core.oam.dev/v1beta1
kind: TraitDefinition
metadata:
annotations:
definition.oam.dev/description: A list of strategic merge to kustomize
config
name: kustomize-strategy-merge
spec:
schematic:
cue:
template: "patch: {\n\tspec: {\n\t\tpatchesStrategicMerge: parameter.patchesStrategicMerge\n\t}\n}\n\nparameter:
{\n\t// +usage=a list of strategicmerge, defined as inline yaml
objects.\n\tpatchesStrategicMerge: [...#nestedmap]\n}\n\n#nestedmap:
{\n\t...\n}\n"
type: raw
status:
rollout:
batchRollingState: ""
+97 -15
View File
@@ -5964,6 +5964,50 @@ spec:
workload:
type: autodetects.core.oam.dev
type: raw
- name: kustomize-json-patch
properties:
apiVersion: core.oam.dev/v1beta1
kind: TraitDefinition
metadata:
annotations:
definition.oam.dev/description: A list of JSON6902 patch to selected
target
name: kustomize-json-patch
spec:
schematic:
cue:
template: "patch: {\n\tspec: {\n\t\tpatchesJson6902: parameter.patchesJson\n\t}\n}\n\nparameter:
{\n\t// +usage=A list of JSON6902 patch.\n\tpatchesJson: [...#jsonPatchItem]\n}\n\n//
+usage=Contains a JSON6902 patch\n#jsonPatchItem: {\n\ttarget: #selector\n\tpatch:
{\n\t\top: string\n\t\tpath: string\n\t\tvalue?: string\n\t}\n}\n\n//
+usage=Selector specifies a set of resources\n#selector: {\n\tgroup?:
\ string\n\tversion?: string\n\tkind?: string\n\tnamespace?:
\ string\n\tname?: string\n\tannotationSelector?:
string\n\tlabelSelector?: string\n}\n"
type: raw
- name: kustomize-patch
properties:
apiVersion: core.oam.dev/v1beta1
kind: TraitDefinition
metadata:
annotations:
definition.oam.dev/description: A list of StrategicMerge or JSON6902
patch to selected target
name: kustomize-patch
spec:
schematic:
cue:
template: "patch: {\n\tspec: {\n\t\tpatches: parameter.patches\n\t}\n}\nparameter:
{\n\t// +usage=a list of StrategicMerge or JSON6902 patch to selected
target\n\tpatches: [...#patchItem]\n}\n\n// +usage=Contains a strategicMerge
or JSON6902 patch\n#patchItem: {\n\t// +usage=Inline patch string,
in yaml style\n\tpatch: string\n\t// +usage=Specify the target the
patch should be applied to\n\ttarget: #selector\n}\n\n// +usage=Selector
specifies a set of resources\n#selector: {\n\tgroup?: string\n\tversion?:
\ string\n\tkind?: string\n\tnamespace?:
\ string\n\tname?: string\n\tannotationSelector?:
string\n\tlabelSelector?: string\n}\n"
type: raw
- name: kustomize
properties:
apiVersion: core.oam.dev/v1beta1
@@ -5977,24 +6021,62 @@ spec:
spec:
schematic:
cue:
template: "output: {\n\tapiVersion: \"source.toolkit.fluxcd.io/v1beta1\"\n\tkind:
\ \"GitRepository\"\n\tmetadata: {\n\t\tname: context.name\n\t}\n\tspec:
{\n\t\tinterval: parameter.pullInterval\n\t\turl: parameter.repoUrl\n\t\tref:
branch: parameter.branch\n\t}\n}\noutputs: kustomize: {\n\tapiVersion:
\"kustomize.toolkit.fluxcd.io/v1beta1\"\n\tkind: \"Kustomization\"\n\tmetadata:
{\n\t\tname: context.name\n\t}\n\tspec: {\n\t\tinterval: parameter.pullInterval\n\t\tsourceRef:
{\n\t\t\tkind: \"GitRepository\"\n\t\t\tname: context.name\n\t\t}\n\t\tpath:
\ parameter.path\n\t\tprune: true\n\t\tvalidation: \"client\"\n\t}\n}\nparameter:
{\n\t//+usage=The repository URL, can be a HTTP/S or SSH address.\n\trepoUrl:
string\n\t//+usage=The interval at which to check for repository
updates.\n\tpullInterval: *\"1m\" | string\n\t//+usage=The Git reference
to checkout and monitor for changes, defaults to master branch.\n\tbranch:
*\"master\" | string\n\t//+usage=Path to the directory containing
the kustomization.yaml file, or the set of plain YAMLs a kustomization.yaml
should be generated for.\n\tpath: string\n}\n"
template: "output: {\n\tapiVersion: \"kustomize.toolkit.fluxcd.io/v1beta1\"\n\tkind:
\ \"Kustomization\"\n\tmetadata: {\n\t\tname: context.name\n\t}\n\tspec:
{\n\t\tinterval: parameter.pullInterval\n\t\tsourceRef: {\n\t\t\tif
parameter.repoType == \"git\" {\n\t\t\t\tkind: \"GitRepository\"\n\t\t\t}\n\t\t\tif
parameter.repoType == \"oss\" {\n\t\t\t\tkind: \"Bucket\"\n\t\t\t}\n\t\t\tname:
\ context.name\n\t\t\tnamespace: context.namespace\n\t\t}\n\t\tpath:
\ parameter.path\n\t\tprune: true\n\t\tvalidation: \"client\"\n\t}\n}\n\noutputs:
repo:{\n\tapiVersion: \"source.toolkit.fluxcd.io/v1beta1\"\n\tmetadata:
{\n\t\tname: context.name\n\t}\n\tif parameter.repoType == \"git\"
{\n\t\tkind: \"GitRepository\"\n\t\tspec: {\n\t\t\turl: parameter.url\n\t\t\tif
parameter.git.branch != _|_ {\n\t\t\t\tref: branch: parameter.git.branch\n\t\t\t}\n\t\t\t_secret\n\t\t\t_sourceCommonArgs\n\t\t}\n\t}\n\tif
parameter.repoType == \"oss\" {\n\t\tkind: \"Bucket\"\n\t\tspec:
{\n\t\t\tendpoint: parameter.url\n\t\t\tbucketName: parameter.oss.bucketName\n\t\t\tprovider:
\ parameter.oss.provider\n\t\t\tif parameter.oss.region != _|_
{\n\t\t\t\tregion: parameter.oss.region\n\t\t\t}\n\t\t\t_secret\n\t\t\t_sourceCommonArgs\n\t\t}\n\t}\n}\n\n_secret:
{\n\tif parameter.secretRef != _|_ {\n\t\tsecretRef: {\n\t\t\tname:
parameter.secretRef\n\t\t}\n\t}\n}\n\n_sourceCommonArgs: {\n\tinterval:
parameter.pullInterval\n\tif parameter.timeout != _|_ {\n\t\ttimeout:
parameter.timeout\n\t}\n}\n\nparameter: {\n\trepoType: *\"git\"
| \"oss\"\n\t// +usage=The interval at which to check for repository/bucket
and relese updates, default to 5m\n\tpullInterval: *\"5m\" | string\n\t//
+usage=The Git or Helm repository URL, OSS endpoint, accept HTTP/S
or SSH address as git url,\n\turl: string\n\t// +usage=The name
of the secret containing authentication credentials\n\tsecretRef?:
string\n\t// +usage=The timeout for operations like download index/clone
repository, optional\n\ttimeout?: string\n\tgit?: {\n\t\t// +usage=The
Git reference to checkout and monitor for changes, defaults to master
branch\n\t\tbranch: string\n\t}\n\toss?: {\n\t\t// +usage=The bucket's
name, required if repoType is oss\n\t\tbucketName: string\n\t\t//
+usage=\"generic\" for Minio, Amazon S3, Google Cloud Storage, Alibaba
Cloud OSS, \"aws\" for retrieve credentials from the EC2 service
when credentials not specified, default \"generic\"\n\t\tprovider:
*\"generic\" | \"aws\"\n\t\t// +usage=The bucket region, optional\n\t\tregion?:
string\n\t}\n\t//+usage=Path to the directory containing the kustomization.yaml
file, or the set of plain YAMLs a kustomization.yaml should be generated
for.\n\tpath: string\n} \n"
workload:
type: autodetects.core.oam.dev
type: raw
- name: kustomize-strategy-merge
properties:
apiVersion: core.oam.dev/v1beta1
kind: TraitDefinition
metadata:
annotations:
definition.oam.dev/description: A list of strategic merge to kustomize
config
name: kustomize-strategy-merge
spec:
schematic:
cue:
template: "patch: {\n\tspec: {\n\t\tpatchesStrategicMerge: parameter.patchesStrategicMerge\n\t}\n}\n\nparameter:
{\n\t// +usage=a list of strategicmerge, defined as inline yaml
objects.\n\tpatchesStrategicMerge: [...#nestedmap]\n}\n\n#nestedmap:
{\n\t...\n}\n"
type: raw
status:
rollout:
batchRollingState: ""
@@ -0,0 +1,41 @@
apiVersion: core.oam.dev/v1beta1
kind: TraitDefinition
metadata:
annotations:
definition.oam.dev/description: "A list of JSON6902 patch to selected target"
name: kustomize-json-patch
spec:
schematic:
cue:
template: |
patch: {
spec: {
patchesJson6902: parameter.patchesJson
}
}
parameter: {
// +usage=A list of JSON6902 patch.
patchesJson: [...#jsonPatchItem]
}
// +usage=Contains a JSON6902 patch
#jsonPatchItem: {
target: #selector
patch: {
op: string
path: string
value?: string
}
}
// +usage=Selector specifies a set of resources
#selector: {
group?: string
version?: string
kind?: string
namespace?: string
name?: string
annotationSelector?: string
labelSelector?: string
}
@@ -0,0 +1,38 @@
apiVersion: core.oam.dev/v1beta1
kind: TraitDefinition
metadata:
annotations:
definition.oam.dev/description: "A list of StrategicMerge or JSON6902 patch to selected target"
name: kustomize-patch
spec:
schematic:
cue:
template: |
patch: {
spec: {
patches: parameter.patches
}
}
parameter: {
// +usage=a list of StrategicMerge or JSON6902 patch to selected target
patches: [...#patchItem]
}
// +usage=Contains a strategicMerge or JSON6902 patch
#patchItem: {
// +usage=Inline patch string, in yaml style
patch: string
// +usage=Specify the target the patch should be applied to
target: #selector
}
// +usage=Selector specifies a set of resources
#selector: {
group?: string
version?: string
kind?: string
namespace?: string
name?: string
annotationSelector?: string
labelSelector?: string
}
@@ -12,18 +12,6 @@ spec:
cue:
template: |
output: {
apiVersion: "source.toolkit.fluxcd.io/v1beta1"
kind: "GitRepository"
metadata: {
name: context.name
}
spec: {
interval: parameter.pullInterval
url: parameter.repoUrl
ref: branch: parameter.branch
}
}
outputs: kustomize: {
apiVersion: "kustomize.toolkit.fluxcd.io/v1beta1"
kind: "Kustomization"
metadata: {
@@ -32,21 +20,89 @@ spec:
spec: {
interval: parameter.pullInterval
sourceRef: {
kind: "GitRepository"
name: context.name
if parameter.repoType == "git" {
kind: "GitRepository"
}
if parameter.repoType == "oss" {
kind: "Bucket"
}
name: context.name
namespace: context.namespace
}
path: parameter.path
prune: true
validation: "client"
}
}
outputs: repo:{
apiVersion: "source.toolkit.fluxcd.io/v1beta1"
metadata: {
name: context.name
}
if parameter.repoType == "git" {
kind: "GitRepository"
spec: {
url: parameter.url
if parameter.git.branch != _|_ {
ref: branch: parameter.git.branch
}
_secret
_sourceCommonArgs
}
}
if parameter.repoType == "oss" {
kind: "Bucket"
spec: {
endpoint: parameter.url
bucketName: parameter.oss.bucketName
provider: parameter.oss.provider
if parameter.oss.region != _|_ {
region: parameter.oss.region
}
_secret
_sourceCommonArgs
}
}
}
_secret: {
if parameter.secretRef != _|_ {
secretRef: {
name: parameter.secretRef
}
}
}
_sourceCommonArgs: {
interval: parameter.pullInterval
if parameter.timeout != _|_ {
timeout: parameter.timeout
}
}
parameter: {
//+usage=The repository URL, can be a HTTP/S or SSH address.
repoUrl: string
//+usage=The interval at which to check for repository updates.
pullInterval: *"1m" | string
//+usage=The Git reference to checkout and monitor for changes, defaults to master branch.
branch: *"master" | string
repoType: *"git" | "oss"
// +usage=The interval at which to check for repository/bucket and relese updates, default to 5m
pullInterval: *"5m" | string
// +usage=The Git or Helm repository URL, OSS endpoint, accept HTTP/S or SSH address as git url,
url: string
// +usage=The name of the secret containing authentication credentials
secretRef?: string
// +usage=The timeout for operations like download index/clone repository, optional
timeout?: string
git?: {
// +usage=The Git reference to checkout and monitor for changes, defaults to master branch
branch: string
}
oss?: {
// +usage=The bucket's name, required if repoType is oss
bucketName: string
// +usage="generic" for Minio, Amazon S3, Google Cloud Storage, Alibaba Cloud OSS, "aws" for retrieve credentials from the EC2 service when credentials not specified, default "generic"
provider: *"generic" | "aws"
// +usage=The bucket region, optional
region?: string
}
//+usage=Path to the directory containing the kustomization.yaml file, or the set of plain YAMLs a kustomization.yaml should be generated for.
path: string
}
}
@@ -0,0 +1,24 @@
apiVersion: core.oam.dev/v1beta1
kind: TraitDefinition
metadata:
annotations:
definition.oam.dev/description: "A list of strategic merge to kustomize config"
name: kustomize-strategy-merge
spec:
schematic:
cue:
template: |
patch: {
spec: {
patchesStrategicMerge: parameter.patchesStrategicMerge
}
}
parameter: {
// +usage=a list of strategicmerge, defined as inline yaml objects.
patchesStrategicMerge: [...#nestedmap]
}
#nestedmap: {
...
}