mirror of
https://github.com/kubevela/kubevela.git
synced 2026-02-25 07:14:15 +00:00
Compare commits
27 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
b11eb845b2 | ||
|
|
b12968c2ae | ||
|
|
d8d0c91c59 | ||
|
|
5f6209e8de | ||
|
|
a198fa5f9a | ||
|
|
f01639e175 | ||
|
|
b24b52b651 | ||
|
|
ae91006a3d | ||
|
|
42d6791476 | ||
|
|
c85502e54a | ||
|
|
f9a6b22294 | ||
|
|
5085a99a12 | ||
|
|
18639ccbae | ||
|
|
f36c8f8fbb | ||
|
|
c55ac52c4d | ||
|
|
4d4ab9d098 | ||
|
|
14dfca44b4 | ||
|
|
44c6267b76 | ||
|
|
9c81aeed4a | ||
|
|
1a6b7244c8 | ||
|
|
18a5b7c239 | ||
|
|
65e9b549e2 | ||
|
|
b0a0d84030 | ||
|
|
773c4112d9 | ||
|
|
a5d68b2bea | ||
|
|
353e592391 | ||
|
|
c58e3dfea6 |
@@ -333,7 +333,8 @@ type WorkflowStatus struct {
|
||||
Steps []workflowv1alpha1.WorkflowStepStatus `json:"steps,omitempty"`
|
||||
|
||||
StartTime metav1.Time `json:"startTime,omitempty"`
|
||||
EndTime metav1.Time `json:"endTime,omitempty"`
|
||||
// +nullable
|
||||
EndTime metav1.Time `json:"endTime,omitempty"`
|
||||
}
|
||||
|
||||
// DefinitionType describes the type of DefinitionRevision.
|
||||
|
||||
@@ -844,6 +844,7 @@ spec:
|
||||
type: object
|
||||
endTime:
|
||||
format: date-time
|
||||
nullable: true
|
||||
type: string
|
||||
finished:
|
||||
type: boolean
|
||||
@@ -2759,6 +2760,7 @@ spec:
|
||||
type: object
|
||||
endTime:
|
||||
format: date-time
|
||||
nullable: true
|
||||
type: string
|
||||
finished:
|
||||
type: boolean
|
||||
@@ -4813,6 +4815,7 @@ spec:
|
||||
type: object
|
||||
endTime:
|
||||
format: date-time
|
||||
nullable: true
|
||||
type: string
|
||||
finished:
|
||||
type: boolean
|
||||
|
||||
@@ -768,6 +768,7 @@ spec:
|
||||
type: object
|
||||
endTime:
|
||||
format: date-time
|
||||
nullable: true
|
||||
type: string
|
||||
finished:
|
||||
type: boolean
|
||||
@@ -1530,6 +1531,7 @@ spec:
|
||||
type: object
|
||||
endTime:
|
||||
format: date-time
|
||||
nullable: true
|
||||
type: string
|
||||
finished:
|
||||
type: boolean
|
||||
|
||||
@@ -72,7 +72,7 @@ spec:
|
||||
}]
|
||||
}
|
||||
}
|
||||
parameter: close(#PatchParams) | close({
|
||||
parameter: *#PatchParams | close({
|
||||
// +usage=Specify the container image for multiple containers
|
||||
containers: [...#PatchParams]
|
||||
})
|
||||
|
||||
@@ -844,6 +844,7 @@ spec:
|
||||
type: object
|
||||
endTime:
|
||||
format: date-time
|
||||
nullable: true
|
||||
type: string
|
||||
finished:
|
||||
type: boolean
|
||||
@@ -2759,6 +2760,7 @@ spec:
|
||||
type: object
|
||||
endTime:
|
||||
format: date-time
|
||||
nullable: true
|
||||
type: string
|
||||
finished:
|
||||
type: boolean
|
||||
@@ -4813,6 +4815,7 @@ spec:
|
||||
type: object
|
||||
endTime:
|
||||
format: date-time
|
||||
nullable: true
|
||||
type: string
|
||||
finished:
|
||||
type: boolean
|
||||
|
||||
@@ -768,6 +768,7 @@ spec:
|
||||
type: object
|
||||
endTime:
|
||||
format: date-time
|
||||
nullable: true
|
||||
type: string
|
||||
finished:
|
||||
type: boolean
|
||||
@@ -1530,6 +1531,7 @@ spec:
|
||||
type: object
|
||||
endTime:
|
||||
format: date-time
|
||||
nullable: true
|
||||
type: string
|
||||
finished:
|
||||
type: boolean
|
||||
|
||||
@@ -72,7 +72,7 @@ spec:
|
||||
}]
|
||||
}
|
||||
}
|
||||
parameter: close(#PatchParams) | close({
|
||||
parameter: *#PatchParams | close({
|
||||
// +usage=Specify the container image for multiple containers
|
||||
containers: [...#PatchParams]
|
||||
})
|
||||
|
||||
@@ -30,10 +30,10 @@ import (
|
||||
"github.com/go-openapi/spec"
|
||||
"github.com/google/uuid"
|
||||
flag "github.com/spf13/pflag"
|
||||
"k8s.io/klog/v2"
|
||||
|
||||
"github.com/oam-dev/kubevela/pkg/apiserver"
|
||||
"github.com/oam-dev/kubevela/pkg/apiserver/config"
|
||||
"github.com/oam-dev/kubevela/pkg/apiserver/utils/log"
|
||||
"github.com/oam-dev/kubevela/pkg/features"
|
||||
"github.com/oam-dev/kubevela/pkg/utils"
|
||||
"github.com/oam-dev/kubevela/version"
|
||||
@@ -61,24 +61,24 @@ func main() {
|
||||
func() {
|
||||
swagger, err := s.buildSwagger()
|
||||
if err != nil {
|
||||
log.Logger.Fatal(err.Error())
|
||||
klog.Fatal(err.Error())
|
||||
}
|
||||
outData, err := json.MarshalIndent(swagger, "", "\t")
|
||||
if err != nil {
|
||||
log.Logger.Fatal(err.Error())
|
||||
klog.Fatal(err.Error())
|
||||
}
|
||||
swaggerFile, err := os.OpenFile(os.Args[2], os.O_CREATE|os.O_WRONLY|os.O_TRUNC, 0600)
|
||||
if err != nil {
|
||||
log.Logger.Fatal(err.Error())
|
||||
klog.Fatal(err.Error())
|
||||
}
|
||||
defer func() {
|
||||
if err := swaggerFile.Close(); err != nil {
|
||||
log.Logger.Errorf("close swagger file failure %s", err.Error())
|
||||
klog.Errorf("close swagger file failure %s", err.Error())
|
||||
}
|
||||
}()
|
||||
_, err = swaggerFile.Write(outData)
|
||||
if err != nil {
|
||||
log.Logger.Fatal(err.Error())
|
||||
klog.Fatal(err.Error())
|
||||
}
|
||||
fmt.Println("build swagger config file success")
|
||||
}()
|
||||
@@ -107,11 +107,11 @@ func main() {
|
||||
|
||||
select {
|
||||
case <-term:
|
||||
log.Logger.Infof("Received SIGTERM, exiting gracefully...")
|
||||
klog.Infof("Received SIGTERM, exiting gracefully...")
|
||||
case err := <-errChan:
|
||||
log.Logger.Errorf("Received an error: %s, exiting gracefully...", err.Error())
|
||||
klog.Errorf("Received an error: %s, exiting gracefully...", err.Error())
|
||||
}
|
||||
log.Logger.Infof("See you next time!")
|
||||
klog.Infof("See you next time!")
|
||||
}
|
||||
|
||||
// Server apiserver
|
||||
@@ -120,7 +120,7 @@ type Server struct {
|
||||
}
|
||||
|
||||
func (s *Server) run(ctx context.Context, errChan chan error) error {
|
||||
log.Logger.Infof("KubeVela information: version: %v, gitRevision: %v", version.VelaVersion, version.GitRevision)
|
||||
klog.Infof("KubeVela information: version: %v, gitRevision: %v", version.VelaVersion, version.GitRevision)
|
||||
|
||||
server := apiserver.New(s.serverConfig)
|
||||
|
||||
|
||||
24
go.mod
24
go.mod
@@ -14,11 +14,12 @@ require (
|
||||
github.com/alibabacloud-go/tea v1.1.19
|
||||
github.com/aryann/difflib v0.0.0-20210328193216-ff5ff6dc229b
|
||||
github.com/barnettZQG/inject v0.0.1
|
||||
github.com/bluele/gcache v0.0.2
|
||||
github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869
|
||||
github.com/briandowns/spinner v1.11.1
|
||||
github.com/chartmuseum/helm-push v0.10.2
|
||||
github.com/cloudtty/cloudtty v0.2.0
|
||||
github.com/containerd/containerd v1.5.13
|
||||
github.com/containerd/containerd v1.5.16
|
||||
github.com/coreos/go-oidc v2.1.0+incompatible
|
||||
github.com/coreos/prometheus-operator v0.41.1
|
||||
github.com/crossplane/crossplane-runtime v0.14.1-0.20210722005935-0b469fcc77cd
|
||||
@@ -50,7 +51,6 @@ require (
|
||||
github.com/gosuri/uilive v0.0.4
|
||||
github.com/gosuri/uitable v0.0.4
|
||||
github.com/hashicorp/go-version v1.3.0
|
||||
github.com/hashicorp/golang-lru v0.5.4
|
||||
github.com/hashicorp/hcl/v2 v2.9.1
|
||||
github.com/hinshun/vt10x v0.0.0-20180616224451-1954e6464174
|
||||
github.com/imdario/mergo v0.3.12
|
||||
@@ -58,7 +58,7 @@ require (
|
||||
github.com/koding/websocketproxy v0.0.0-20181220232114-7ed82d81a28c
|
||||
github.com/kubevela/pkg v0.0.0-20221024115939-a103acee6db2
|
||||
github.com/kubevela/prism v1.5.1-0.20220915071949-6bf3ad33f84f
|
||||
github.com/kubevela/workflow v0.3.3
|
||||
github.com/kubevela/workflow v0.3.4-0.20230103040208-bca032d481ed
|
||||
github.com/kyokomi/emoji v2.2.4+incompatible
|
||||
github.com/mitchellh/hashstructure/v2 v2.0.1
|
||||
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd
|
||||
@@ -86,11 +86,10 @@ require (
|
||||
github.com/xanzy/go-gitlab v0.60.0
|
||||
github.com/xlab/treeprint v1.1.0
|
||||
go.mongodb.org/mongo-driver v1.5.1
|
||||
go.uber.org/zap v1.21.0
|
||||
golang.org/x/crypto v0.0.0-20220926161630-eccd6366d1be
|
||||
golang.org/x/crypto v0.1.0
|
||||
golang.org/x/oauth2 v0.0.0-20220622183110-fd043fe589d2
|
||||
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211
|
||||
golang.org/x/text v0.3.8
|
||||
golang.org/x/term v0.1.0
|
||||
golang.org/x/text v0.4.0
|
||||
gomodules.xyz/jsonpatch/v2 v2.2.0
|
||||
gopkg.in/src-d/go-git.v4 v4.13.1
|
||||
gopkg.in/yaml.v3 v3.0.1
|
||||
@@ -105,7 +104,6 @@ require (
|
||||
k8s.io/client-go v0.23.6
|
||||
k8s.io/component-base v0.23.6
|
||||
k8s.io/helm v2.17.0+incompatible
|
||||
k8s.io/klog v1.0.0
|
||||
k8s.io/klog/v2 v2.60.1
|
||||
k8s.io/kube-aggregator v0.23.0
|
||||
k8s.io/kubectl v0.23.6
|
||||
@@ -160,7 +158,7 @@ require (
|
||||
github.com/chai2010/gettext-go v0.0.0-20160711120539-c6fed771bfd5 // indirect
|
||||
github.com/clbanning/mxj/v2 v2.5.5 // indirect
|
||||
github.com/cockroachdb/apd/v2 v2.0.2 // indirect
|
||||
github.com/containerd/continuity v0.1.0 // indirect
|
||||
github.com/containerd/continuity v0.3.0 // indirect
|
||||
github.com/coreos/go-semver v0.3.0 // indirect
|
||||
github.com/coreos/go-systemd/v22 v22.3.2 // indirect
|
||||
github.com/cpuguy83/go-md2man/v2 v2.0.2 // indirect
|
||||
@@ -232,7 +230,7 @@ require (
|
||||
github.com/mattn/go-colorable v0.1.11 // indirect
|
||||
github.com/mattn/go-isatty v0.0.14 // indirect
|
||||
github.com/mattn/go-runewidth v0.0.13 // indirect
|
||||
github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369 // indirect
|
||||
github.com/matttproud/golang_protobuf_extensions v1.0.4 // indirect
|
||||
github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b // indirect
|
||||
github.com/mitchellh/copystructure v1.2.0 // indirect
|
||||
github.com/mitchellh/go-homedir v1.1.0 // indirect
|
||||
@@ -294,10 +292,11 @@ require (
|
||||
go.starlark.net v0.0.0-20200306205701-8dd3e2ee1dd5 // indirect
|
||||
go.uber.org/atomic v1.9.0 // indirect
|
||||
go.uber.org/multierr v1.7.0 // indirect
|
||||
go.uber.org/zap v1.21.0 // indirect
|
||||
golang.org/x/mod v0.6.0-dev.0.20220818022119-ed83ed61efb9 // indirect
|
||||
golang.org/x/net v0.0.0-20220906165146-f3363e06e74c // indirect
|
||||
golang.org/x/net v0.1.0 // indirect
|
||||
golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4 // indirect
|
||||
golang.org/x/sys v0.0.0-20220928140112-f11e5e49a4ec // indirect
|
||||
golang.org/x/sys v0.1.0 // indirect
|
||||
golang.org/x/time v0.0.0-20220922220347-f3bd1da661af // indirect
|
||||
golang.org/x/tools v0.1.12 // indirect
|
||||
google.golang.org/appengine v1.6.7 // indirect
|
||||
@@ -315,6 +314,7 @@ require (
|
||||
gopkg.in/warnings.v0 v0.1.2 // indirect
|
||||
istio.io/api v0.0.0-20220512212136-561ffec82582 // indirect
|
||||
istio.io/gogo-genproto v0.0.0-20211208193508-5ab4acc9eb1e // indirect
|
||||
k8s.io/klog v1.0.0 // indirect
|
||||
k8s.io/kube-openapi v0.0.0-20211115234752-e816edb12b65 // indirect
|
||||
oras.land/oras-go v0.4.0 // indirect
|
||||
sigs.k8s.io/apiserver-network-proxy v0.0.30 // indirect
|
||||
|
||||
36
go.sum
36
go.sum
@@ -328,6 +328,8 @@ github.com/blang/semver v3.5.0+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnweb
|
||||
github.com/blang/semver v3.5.1+incompatible h1:cQNTCjp13qL8KC3Nbxr/y2Bqb63oX6wdnnjpJbkM4JQ=
|
||||
github.com/blang/semver v3.5.1+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk=
|
||||
github.com/blizzy78/varnamelen v0.3.0/go.mod h1:hbwRdBvoBqxk34XyQ6HA0UH3G0/1TKuv5AC4eaBT0Ec=
|
||||
github.com/bluele/gcache v0.0.2 h1:WcbfdXICg7G/DGBh1PFfcirkWOQV+v077yF1pSy3DGw=
|
||||
github.com/bluele/gcache v0.0.2/go.mod h1:m15KV+ECjptwSPxKhOhQoAFQVtUFjTVkc3H8o0t/fp0=
|
||||
github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869 h1:DDGfHa7BWjL4YnC6+E63dPcxHo2sUxDIu8g3QgEJdRY=
|
||||
github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869/go.mod h1:Ekp36dRnpXw/yCqJaO+ZrUyxD+3VXMFFr56k5XYrpB4=
|
||||
github.com/bmizerany/pat v0.0.0-20170815010413-6226ea591a40/go.mod h1:8rLXio+WjiTceGBHIoTvn60HIbs7Hm7bcHjyrSqYB9c=
|
||||
@@ -446,16 +448,17 @@ github.com/containerd/containerd v1.5.0-rc.0/go.mod h1:V/IXoMqNGgBlabz3tHD2TWDoT
|
||||
github.com/containerd/containerd v1.5.1/go.mod h1:0DOxVqwDy2iZvrZp2JUx/E+hS0UNTVn7dJnIOwtYR4g=
|
||||
github.com/containerd/containerd v1.5.2/go.mod h1:0DOxVqwDy2iZvrZp2JUx/E+hS0UNTVn7dJnIOwtYR4g=
|
||||
github.com/containerd/containerd v1.5.7/go.mod h1:gyvv6+ugqY25TiXxcZC3L5yOeYgEw0QMhscqVp1AR9c=
|
||||
github.com/containerd/containerd v1.5.13 h1:XqvKw9i4P7/mFrC3TSM7yV5cwFZ9avXe6M3YANKnzEE=
|
||||
github.com/containerd/containerd v1.5.13/go.mod h1:3AlCrzKROjIuP3JALsY14n8YtntaUDBu7vek+rPN5Vc=
|
||||
github.com/containerd/containerd v1.5.16 h1:WsTS9tV0vQmRxkWAiiaoasHJ20jqVxVA15s93Bs4GIU=
|
||||
github.com/containerd/containerd v1.5.16/go.mod h1:bVZZA+0blg2Lw6+I4xDml7L3gum0LsFKe3TnFELlSFw=
|
||||
github.com/containerd/continuity v0.0.0-20190426062206-aaeac12a7ffc/go.mod h1:GL3xCUCBDV3CZiTSEKksMWbLE66hEyuu9qyDOOqM47Y=
|
||||
github.com/containerd/continuity v0.0.0-20190815185530-f2a389ac0a02/go.mod h1:GL3xCUCBDV3CZiTSEKksMWbLE66hEyuu9qyDOOqM47Y=
|
||||
github.com/containerd/continuity v0.0.0-20191127005431-f65d91d395eb/go.mod h1:GL3xCUCBDV3CZiTSEKksMWbLE66hEyuu9qyDOOqM47Y=
|
||||
github.com/containerd/continuity v0.0.0-20200710164510-efbc4488d8fe/go.mod h1:cECdGN1O8G9bgKTlLhuPJimka6Xb/Gg7vYzCTNVxhvo=
|
||||
github.com/containerd/continuity v0.0.0-20201208142359-180525291bb7/go.mod h1:kR3BEg7bDFaEddKm54WSmrol1fKWDU1nKYkgrcgZT7Y=
|
||||
github.com/containerd/continuity v0.0.0-20210208174643-50096c924a4e/go.mod h1:EXlVlkqNba9rJe3j7w3Xa924itAMLgZH4UD/Q4PExuQ=
|
||||
github.com/containerd/continuity v0.1.0 h1:UFRRY5JemiAhPZrr/uE0n8fMTLcZsUvySPr1+D7pgr8=
|
||||
github.com/containerd/continuity v0.1.0/go.mod h1:ICJu0PwR54nI0yPEnJ6jcS+J7CZAUXrLh8lPo2knzsM=
|
||||
github.com/containerd/continuity v0.3.0 h1:nisirsYROK15TAMVukJOUyGJjz4BNQJBVsNvAXZJ/eg=
|
||||
github.com/containerd/continuity v0.3.0/go.mod h1:wJEAIwKOm/pBZuBd0JmeTvnLquTB1Ag8espWhkykbPM=
|
||||
github.com/containerd/fifo v0.0.0-20180307165137-3d5202aec260/go.mod h1:ODA38xgv3Kuk8dQz2ZQXpnv/UZZUHUCL7pnLehbXgQI=
|
||||
github.com/containerd/fifo v0.0.0-20190226154929-a9fb20d87448/go.mod h1:ODA38xgv3Kuk8dQz2ZQXpnv/UZZUHUCL7pnLehbXgQI=
|
||||
github.com/containerd/fifo v0.0.0-20200410184934-f15a3290365b/go.mod h1:jPQ2IAeZRCYxpS/Cm1495vGFww6ecHmMk1YJH2Q5ln0=
|
||||
@@ -1180,7 +1183,6 @@ github.com/hashicorp/go.net v0.0.1/go.mod h1:hjKkEWcCURg++eb33jQU7oqQcI9XDCnUzHA
|
||||
github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
|
||||
github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
|
||||
github.com/hashicorp/golang-lru v0.5.3/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4=
|
||||
github.com/hashicorp/golang-lru v0.5.4 h1:YDjusn29QI/Das2iO9M0BHnIbxPeyuCHsjMW+lJfyTc=
|
||||
github.com/hashicorp/golang-lru v0.5.4/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4=
|
||||
github.com/hashicorp/hcl v0.0.0-20170504190234-a4b07c25de5f/go.mod h1:oZtUIOe8dh44I2q6ScRibXws4Ajl+d+nod3AaR9vL5w=
|
||||
github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4=
|
||||
@@ -1335,8 +1337,8 @@ github.com/kubevela/pkg v0.0.0-20221024115939-a103acee6db2 h1:C3cAfrxst1+dIWgLLh
|
||||
github.com/kubevela/pkg v0.0.0-20221024115939-a103acee6db2/go.mod h1:TgIGEB/r0NOy63Jzem7WsL3AIr34l+ClH9dmPqcZ4d4=
|
||||
github.com/kubevela/prism v1.5.1-0.20220915071949-6bf3ad33f84f h1:1lUtU1alPThdcsn4MI6XjPb7eJLuZPpmlEdgjtnUMKw=
|
||||
github.com/kubevela/prism v1.5.1-0.20220915071949-6bf3ad33f84f/go.mod h1:m724/7ANnB/iukyHW20+DicpeJMEC/JA0ZhgsHY10MA=
|
||||
github.com/kubevela/workflow v0.3.3 h1:NSbQGcABWJIzUV5wfWFJsrO/ffZ4mCVfofUtUHCTojQ=
|
||||
github.com/kubevela/workflow v0.3.3/go.mod h1:5jfZ8T1m/En44wDGRf2YqCSlODfEnAV+9PnzoLoDlFs=
|
||||
github.com/kubevela/workflow v0.3.4-0.20230103040208-bca032d481ed h1:VGeEvL/XOkwADhLS4Upz5zEM6Enjw4yx8JU3Z+UUqXw=
|
||||
github.com/kubevela/workflow v0.3.4-0.20230103040208-bca032d481ed/go.mod h1:5jfZ8T1m/En44wDGRf2YqCSlODfEnAV+9PnzoLoDlFs=
|
||||
github.com/kulti/thelper v0.4.0/go.mod h1:vMu2Cizjy/grP+jmsvOFDx1kYP6+PD1lqg4Yu5exl2U=
|
||||
github.com/kunwardeep/paralleltest v1.0.3/go.mod h1:vLydzomDFpk7yu5UX02RmP0H8QfRPOV/oFhWN85Mjb4=
|
||||
github.com/kylelemons/godebug v0.0.0-20160406211939-eadb3ce320cb/go.mod h1:B69LEHPfb2qLo0BaaOLcbitczOKLWTsrBG9LczfCD4k=
|
||||
@@ -1437,8 +1439,9 @@ github.com/mattn/go-sqlite3 v1.14.8 h1:gDp86IdQsN/xWjIEmr9MF6o9mpksUgh0fu+9ByFxz
|
||||
github.com/mattn/go-tty v0.0.0-20180907095812-13ff1204f104/go.mod h1:XPvLUNfbS4fJH25nqRHfWLMa1ONC8Amw+mIA639KxkE=
|
||||
github.com/mattn/goveralls v0.0.2/go.mod h1:8d1ZMHsd7fW6IRPKQh46F2WRpyib5/X4FOpevwGNQEw=
|
||||
github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
|
||||
github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369 h1:I0XW9+e1XWDxdcEniV4rQAIOPUGDq67JSCiRCgGCZLI=
|
||||
github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4=
|
||||
github.com/matttproud/golang_protobuf_extensions v1.0.4 h1:mmDVorXM7PCGKw94cs5zkfA9PSy5pEvNWRP0ET0TIVo=
|
||||
github.com/matttproud/golang_protobuf_extensions v1.0.4/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4=
|
||||
github.com/mbilski/exhaustivestruct v1.2.0/go.mod h1:OeTBVxQWoEmB2J2JCHmXWPJ0aksxSUOUy+nvtVEfzXc=
|
||||
github.com/mgechev/dots v0.0.0-20210922191527-e955255bf517/go.mod h1:KQ7+USdGKfpPjXk4Ga+5XxQM4Lm4e3gAogrreFAYpOg=
|
||||
github.com/mgechev/revive v1.1.2/go.mod h1:bnXsMr+ZTH09V5rssEI+jHAZ4z+ZdyhgO/zsy3EhK+0=
|
||||
@@ -2201,8 +2204,8 @@ golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97/go.mod h1:GvvjBRRGRdwPK5y
|
||||
golang.org/x/crypto v0.0.0-20210817164053-32db794688a5/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
|
||||
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
|
||||
golang.org/x/crypto v0.0.0-20211108221036-ceb1ce70b4fa/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
|
||||
golang.org/x/crypto v0.0.0-20220926161630-eccd6366d1be h1:fmw3UbQh+nxngCAHrDCCztao/kbYFnWjoqop8dHx05A=
|
||||
golang.org/x/crypto v0.0.0-20220926161630-eccd6366d1be/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
|
||||
golang.org/x/crypto v0.1.0 h1:MDRAIl0xIo9Io2xV565hzXHw3zVseKrJKodhohM5CjU=
|
||||
golang.org/x/crypto v0.1.0/go.mod h1:RecgLatLF4+eUMCP1PoPZQb+cVrJcOPbHkTkbkB9sbw=
|
||||
golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
|
||||
golang.org/x/exp v0.0.0-20180807140117-3d87b88a115f/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
|
||||
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
|
||||
@@ -2327,8 +2330,8 @@ golang.org/x/net v0.0.0-20220325170049-de3da57026de/go.mod h1:CfG3xpIq0wQ8r1q4Su
|
||||
golang.org/x/net v0.0.0-20220412020605-290c469a71a5/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
|
||||
golang.org/x/net v0.0.0-20220425223048-2871e0cb64e4/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
|
||||
golang.org/x/net v0.0.0-20220607020251-c690dde0001d/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
|
||||
golang.org/x/net v0.0.0-20220906165146-f3363e06e74c h1:yKufUcDwucU5urd+50/Opbt4AYpqthk7wHpHok8f1lo=
|
||||
golang.org/x/net v0.0.0-20220906165146-f3363e06e74c/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk=
|
||||
golang.org/x/net v0.1.0 h1:hZ/3BUoy5aId7sCpA/Tc5lt8DkFgdVS2onTpJsZ/fl0=
|
||||
golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco=
|
||||
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
|
||||
golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
|
||||
golang.org/x/oauth2 v0.0.0-20190402181905-9f3314589c9a/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
|
||||
@@ -2520,15 +2523,16 @@ golang.org/x/sys v0.0.0-20220502124256-b6088ccd6cba/go.mod h1:oPkhp1MJrh7nUepCBc
|
||||
golang.org/x/sys v0.0.0-20220503163025-988cb79eb6c6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20220610221304-9f5ed59c137d/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20220928140112-f11e5e49a4ec h1:BkDtF2Ih9xZ7le9ndzTA7KJow28VbQW3odyk/8drmuI=
|
||||
golang.org/x/sys v0.0.0-20220928140112-f11e5e49a4ec/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.1.0 h1:kunALQeHf1/185U1i0GOB/fy1IPRDDpuoOOqRReG57U=
|
||||
golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw=
|
||||
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
|
||||
golang.org/x/term v0.0.0-20201210144234-2321bbc49cbf/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
|
||||
golang.org/x/term v0.0.0-20210220032956-6a3ed077a48d/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
|
||||
golang.org/x/term v0.0.0-20210615171337-6886f2dfbf5b/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
|
||||
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211 h1:JGgROgKl9N8DuW20oFS5gxc+lE67/N3FcwmBPMe7ArY=
|
||||
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
|
||||
golang.org/x/term v0.1.0 h1:g6Z6vPFA9dYBAF7DWcH6sCcOntplXsDKcliusYijMlw=
|
||||
golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
|
||||
golang.org/x/text v0.0.0-20160726164857-2910a502d2bf/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||
golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||
@@ -2541,8 +2545,8 @@ golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
||||
golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
||||
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
||||
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
|
||||
golang.org/x/text v0.3.8 h1:nAL+RVCQ9uMn3vJZbV+MRnydTJFPf8qqY42YiA6MrqY=
|
||||
golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ=
|
||||
golang.org/x/text v0.4.0 h1:BrVqGRd7+k1DiOgtnFvAkoQEWQvBc25ouMJM6429SFg=
|
||||
golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
|
||||
golang.org/x/time v0.0.0-20161028155119-f51c12702a4d/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
||||
golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
||||
golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
||||
|
||||
@@ -844,6 +844,7 @@ spec:
|
||||
type: object
|
||||
endTime:
|
||||
format: date-time
|
||||
nullable: true
|
||||
type: string
|
||||
finished:
|
||||
type: boolean
|
||||
@@ -2759,6 +2760,7 @@ spec:
|
||||
type: object
|
||||
endTime:
|
||||
format: date-time
|
||||
nullable: true
|
||||
type: string
|
||||
finished:
|
||||
type: boolean
|
||||
@@ -4813,6 +4815,7 @@ spec:
|
||||
type: object
|
||||
endTime:
|
||||
format: date-time
|
||||
nullable: true
|
||||
type: string
|
||||
finished:
|
||||
type: boolean
|
||||
|
||||
@@ -769,6 +769,7 @@ spec:
|
||||
type: object
|
||||
endTime:
|
||||
format: date-time
|
||||
nullable: true
|
||||
type: string
|
||||
finished:
|
||||
type: boolean
|
||||
@@ -1531,6 +1532,7 @@ spec:
|
||||
type: object
|
||||
endTime:
|
||||
format: date-time
|
||||
nullable: true
|
||||
type: string
|
||||
finished:
|
||||
type: boolean
|
||||
|
||||
@@ -60,7 +60,6 @@ import (
|
||||
common2 "github.com/oam-dev/kubevela/apis/core.oam.dev/common"
|
||||
"github.com/oam-dev/kubevela/apis/core.oam.dev/v1beta1"
|
||||
"github.com/oam-dev/kubevela/apis/types"
|
||||
"github.com/oam-dev/kubevela/pkg/apiserver/utils/log"
|
||||
"github.com/oam-dev/kubevela/pkg/config"
|
||||
"github.com/oam-dev/kubevela/pkg/cue/script"
|
||||
"github.com/oam-dev/kubevela/pkg/definition"
|
||||
@@ -1400,12 +1399,12 @@ func checkSemVer(actual string, require string) (bool, error) {
|
||||
l := strings.ReplaceAll(require, "v", " ")
|
||||
constraint, err := semver.NewConstraint(l)
|
||||
if err != nil {
|
||||
log.Logger.Errorf("fail to new constraint: %s", err.Error())
|
||||
klog.Errorf("fail to new constraint: %s", err.Error())
|
||||
return false, err
|
||||
}
|
||||
v, err := semver.NewVersion(semVer)
|
||||
if err != nil {
|
||||
log.Logger.Errorf("fail to new version %s: %s", semVer, err.Error())
|
||||
klog.Errorf("fail to new version %s: %s", semVer, err.Error())
|
||||
return false, err
|
||||
}
|
||||
if constraint.Check(v) {
|
||||
@@ -1419,7 +1418,7 @@ func checkSemVer(actual string, require string) (bool, error) {
|
||||
}
|
||||
v, err := semver.NewVersion(semVer)
|
||||
if err != nil {
|
||||
log.Logger.Errorf("fail to new version %s: %s", semVer, err.Error())
|
||||
klog.Errorf("fail to new version %s: %s", semVer, err.Error())
|
||||
return false, err
|
||||
}
|
||||
if constraint.Check(v) {
|
||||
|
||||
@@ -23,7 +23,8 @@ import (
|
||||
"sync"
|
||||
"time"
|
||||
|
||||
"github.com/oam-dev/kubevela/pkg/apiserver/utils/log"
|
||||
"k8s.io/klog/v2"
|
||||
|
||||
"github.com/oam-dev/kubevela/pkg/utils"
|
||||
"github.com/oam-dev/kubevela/pkg/utils/common"
|
||||
)
|
||||
@@ -113,7 +114,7 @@ func (u *Cache) GetUIData(r Registry, addonName, version string) (*UIData, error
|
||||
})
|
||||
addon, err = versionedRegistry.GetAddonUIData(context.Background(), addonName, version)
|
||||
if err != nil {
|
||||
log.Logger.Errorf("fail to get addons from registry %s for cache updating, %v", utils.Sanitize(r.Name), err)
|
||||
klog.Errorf("fail to get addons from registry %s for cache updating, %v", utils.Sanitize(r.Name), err)
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
@@ -278,7 +279,7 @@ func (u *Cache) putVersionedUIData2Cache(registryName, addonName, version string
|
||||
func (u *Cache) discoverAndRefreshRegistry() {
|
||||
registries, err := u.ds.ListRegistries(context.Background())
|
||||
if err != nil {
|
||||
log.Logger.Errorf("fail to get registry %v", err)
|
||||
klog.Errorf("fail to get registry %v", err)
|
||||
return
|
||||
}
|
||||
u.putRegistry2Cache(registries)
|
||||
@@ -301,13 +302,13 @@ func (u *Cache) discoverAndRefreshRegistry() {
|
||||
func (u *Cache) listUIDataAndCache(r Registry) ([]*UIData, error) {
|
||||
registryMeta, err := r.ListAddonMeta()
|
||||
if err != nil {
|
||||
log.Logger.Errorf("fail to list registry %s metadata, %v", r.Name, err)
|
||||
klog.Errorf("fail to list registry %s metadata, %v", r.Name, err)
|
||||
return nil, err
|
||||
}
|
||||
u.putAddonMeta2Cache(r.Name, registryMeta)
|
||||
uiData, err := r.ListUIData(registryMeta, UIMetaOptions)
|
||||
if err != nil {
|
||||
log.Logger.Errorf("fail to get addons from registry %s for cache updating, %v", r.Name, err)
|
||||
klog.Errorf("fail to get addons from registry %s for cache updating, %v", r.Name, err)
|
||||
return nil, err
|
||||
}
|
||||
u.putAddonUIData2Cache(r.Name, uiData)
|
||||
@@ -322,13 +323,13 @@ func (u *Cache) listVersionRegistryUIDataAndCache(r Registry) ([]*UIData, error)
|
||||
})
|
||||
uiDatas, err := versionedRegistry.ListAddon()
|
||||
if err != nil {
|
||||
log.Logger.Errorf("fail to get addons from registry %s for cache updating, %v", r.Name, err)
|
||||
klog.Errorf("fail to get addons from registry %s for cache updating, %v", r.Name, err)
|
||||
return nil, err
|
||||
}
|
||||
for _, addon := range uiDatas {
|
||||
uiData, err := versionedRegistry.GetAddonUIData(context.Background(), addon.Name, addon.Version)
|
||||
if err != nil {
|
||||
log.Logger.Errorf("fail to get addon from versioned registry %s, addon %s version %s for cache updating, %v", r.Name, addon.Name, addon.Version, err)
|
||||
klog.Errorf("fail to get addon from versioned registry %s, addon %s version %s for cache updating, %v", r.Name, addon.Name, addon.Version, err)
|
||||
continue
|
||||
}
|
||||
u.putVersionedUIData2Cache(r.Name, addon.Name, addon.Version, uiData)
|
||||
|
||||
@@ -43,6 +43,9 @@ var (
|
||||
|
||||
// ErrBothCueAndYamlTmpl means yaml and cue app template are exist in addon
|
||||
ErrBothCueAndYamlTmpl = NewAddonError("yaml and cue app template are exist in addon, should only keep one of them")
|
||||
|
||||
// ErrFetch means fetch addon package error(package not exist or parse archive error and so on)
|
||||
ErrFetch = NewAddonError("cannot fetch addon package")
|
||||
)
|
||||
|
||||
// WrapErrRateLimit return ErrRateLimit if is the situation, or return error directly
|
||||
|
||||
@@ -22,13 +22,13 @@ import (
|
||||
"fmt"
|
||||
"path/filepath"
|
||||
|
||||
"k8s.io/client-go/discovery"
|
||||
"k8s.io/klog/v2"
|
||||
|
||||
"github.com/pkg/errors"
|
||||
v1 "k8s.io/api/core/v1"
|
||||
apierrors "k8s.io/apimachinery/pkg/api/errors"
|
||||
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
|
||||
"k8s.io/client-go/discovery"
|
||||
"k8s.io/client-go/rest"
|
||||
"k8s.io/klog/v2"
|
||||
"sigs.k8s.io/controller-runtime/pkg/client"
|
||||
|
||||
commontypes "github.com/oam-dev/kubevela/apis/core.oam.dev/common"
|
||||
@@ -83,7 +83,7 @@ func DisableAddon(ctx context.Context, cli client.Client, name string, config *r
|
||||
return err
|
||||
}
|
||||
if len(usingAddonApp) != 0 {
|
||||
return fmt.Errorf(fmt.Sprintf("%s please delete them first", usingAppsInfo(usingAddonApp)))
|
||||
return errors.New(appsDependsOnAddonErrInfo(usingAddonApp))
|
||||
}
|
||||
}
|
||||
|
||||
@@ -280,8 +280,8 @@ func GetObservabilityAccessibilityInfo(ctx context.Context, k8sClient client.Cli
|
||||
return domains, nil
|
||||
}
|
||||
|
||||
// FindWholeAddonPackagesFromRegistry find addons' WholeInstallPackage from registries, empty registryName indicates matching all
|
||||
func FindWholeAddonPackagesFromRegistry(ctx context.Context, k8sClient client.Client, addonNames []string, registryNames []string) ([]*WholeAddonPackage, error) {
|
||||
// FindAddonPackagesDetailFromRegistry find addons' WholeInstallPackage from registries, empty registryName indicates matching all
|
||||
func FindAddonPackagesDetailFromRegistry(ctx context.Context, k8sClient client.Client, addonNames []string, registryNames []string) ([]*WholeAddonPackage, error) {
|
||||
var addons []*WholeAddonPackage
|
||||
var registries []Registry
|
||||
|
||||
|
||||
@@ -17,9 +17,12 @@ limitations under the License.
|
||||
package addon
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"context"
|
||||
"errors"
|
||||
"net/http"
|
||||
"net/http/httptest"
|
||||
"os"
|
||||
"strings"
|
||||
|
||||
v1 "k8s.io/api/core/v1"
|
||||
@@ -29,33 +32,68 @@ import (
|
||||
. "github.com/onsi/gomega"
|
||||
)
|
||||
|
||||
var _ = Describe("test FindWholeAddonPackagesFromRegistry", func() {
|
||||
func setupMockServer() *httptest.Server {
|
||||
var listenURL string
|
||||
s := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) {
|
||||
fileList := []string{
|
||||
"index.yaml",
|
||||
"fluxcd-test-version-1.0.0.tgz",
|
||||
"fluxcd-test-version-2.0.0.tgz",
|
||||
"vela-workflow-v0.3.5.tgz",
|
||||
"foo-v1.0.0.tgz",
|
||||
"bar-v1.0.0.tgz",
|
||||
"bar-v2.0.0.tgz",
|
||||
"mock-be-dep-addon-v1.0.0.tgz",
|
||||
}
|
||||
for _, f := range fileList {
|
||||
if strings.Contains(req.URL.Path, f) {
|
||||
file, err := os.ReadFile("../../e2e/addon/mock/testrepo/helm-repo/" + f)
|
||||
if err != nil {
|
||||
_, _ = w.Write([]byte(err.Error()))
|
||||
}
|
||||
if f == "index.yaml" {
|
||||
// in index.yaml, url is hardcoded to 127.0.0.1:9098,
|
||||
// so we need to replace it with the real random listen url
|
||||
file = bytes.ReplaceAll(file, []byte("http://127.0.0.1:9098"), []byte(listenURL))
|
||||
}
|
||||
_, _ = w.Write(file)
|
||||
}
|
||||
}
|
||||
}))
|
||||
listenURL = s.URL
|
||||
return s
|
||||
}
|
||||
|
||||
var _ = Describe("test FindAddonPackagesDetailFromRegistry", func() {
|
||||
Describe("when no registry is added, no matter what you do, it will just return error", func() {
|
||||
Context("when empty addonNames and registryNames is supplied", func() {
|
||||
It("should return error", func() {
|
||||
_, err := FindWholeAddonPackagesFromRegistry(context.Background(), k8sClient, []string{}, []string{})
|
||||
_, err := FindAddonPackagesDetailFromRegistry(context.Background(), k8sClient, []string{}, []string{})
|
||||
Expect(err).To(HaveOccurred())
|
||||
})
|
||||
It("should return error", func() {
|
||||
_, err := FindWholeAddonPackagesFromRegistry(context.Background(), k8sClient, nil, nil)
|
||||
_, err := FindAddonPackagesDetailFromRegistry(context.Background(), k8sClient, nil, nil)
|
||||
Expect(err).To(HaveOccurred())
|
||||
})
|
||||
})
|
||||
Context("when non-empty addonNames and registryNames is supplied", func() {
|
||||
It("should return error saying ErrRegistryNotExist", func() {
|
||||
_, err := FindWholeAddonPackagesFromRegistry(context.Background(), k8sClient, []string{"fluxcd"}, []string{"some-registry"})
|
||||
_, err := FindAddonPackagesDetailFromRegistry(context.Background(), k8sClient, []string{"fluxcd"}, []string{"some-registry"})
|
||||
Expect(errors.Is(err, ErrRegistryNotExist)).To(BeTrue())
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
Describe("one versioned registry is added", func() {
|
||||
var s *httptest.Server
|
||||
|
||||
BeforeEach(func() {
|
||||
// Prepare KubeVela registry
|
||||
s = setupMockServer()
|
||||
// Prepare registry
|
||||
reg := &Registry{
|
||||
Name: "KubeVela",
|
||||
Name: "addon_helper_test",
|
||||
Helm: &HelmSource{
|
||||
URL: "https://addons.kubevela.net",
|
||||
URL: s.URL,
|
||||
},
|
||||
}
|
||||
ds := NewRegistryDataStore(k8sClient)
|
||||
@@ -63,44 +101,42 @@ var _ = Describe("test FindWholeAddonPackagesFromRegistry", func() {
|
||||
})
|
||||
|
||||
AfterEach(func() {
|
||||
// Clean up KubeVela registry
|
||||
// Clean up registry
|
||||
ds := NewRegistryDataStore(k8sClient)
|
||||
Expect(ds.DeleteRegistry(context.Background(), "KubeVela")).To(Succeed())
|
||||
Expect(ds.DeleteRegistry(context.Background(), "addon_helper_test")).To(Succeed())
|
||||
s.Close()
|
||||
})
|
||||
|
||||
Context("when empty addonNames and registryNames is supplied", func() {
|
||||
It("should return error, empty addonNames are not allowed", func() {
|
||||
_, err := FindWholeAddonPackagesFromRegistry(context.Background(), k8sClient, []string{}, []string{"KubeVela"})
|
||||
_, err := FindAddonPackagesDetailFromRegistry(context.Background(), k8sClient, []string{}, []string{"addon_helper_test"})
|
||||
Expect(err).To(HaveOccurred())
|
||||
})
|
||||
It("should return error, empty addonNames are not allowed", func() {
|
||||
_, err := FindWholeAddonPackagesFromRegistry(context.Background(), k8sClient, nil, []string{"KubeVela"})
|
||||
_, err := FindAddonPackagesDetailFromRegistry(context.Background(), k8sClient, nil, []string{"addon_helper_test"})
|
||||
Expect(err).To(HaveOccurred())
|
||||
})
|
||||
})
|
||||
|
||||
Context("one existing addon name provided", func() {
|
||||
It("should return one valid result, matching all registries", func() {
|
||||
res, err := FindWholeAddonPackagesFromRegistry(context.Background(), k8sClient, []string{"velaux"}, nil)
|
||||
res, err := FindAddonPackagesDetailFromRegistry(context.Background(), k8sClient, []string{"foo"}, nil)
|
||||
|
||||
Expect(err).To(Succeed())
|
||||
Expect(res).To(HaveLen(1))
|
||||
Expect(res[0].Name).To(Equal("velaux"))
|
||||
Expect(res[0].InstallPackage).ToNot(BeNil())
|
||||
Expect(res[0].APISchema).ToNot(BeNil())
|
||||
Expect(res[0].Name).To(Equal("foo"))
|
||||
})
|
||||
It("should return one valid result, matching one registry", func() {
|
||||
res, err := FindWholeAddonPackagesFromRegistry(context.Background(), k8sClient, []string{"velaux"}, []string{"KubeVela"})
|
||||
res, err := FindAddonPackagesDetailFromRegistry(context.Background(), k8sClient, []string{"foo"}, []string{"addon_helper_test"})
|
||||
Expect(err).To(Succeed())
|
||||
Expect(res).To(HaveLen(1))
|
||||
Expect(res[0].Name).To(Equal("velaux"))
|
||||
Expect(res[0].InstallPackage).ToNot(BeNil())
|
||||
Expect(res[0].APISchema).ToNot(BeNil())
|
||||
Expect(res[0].Name).To(Equal("foo"))
|
||||
})
|
||||
})
|
||||
|
||||
Context("one non-existent addon name provided", func() {
|
||||
It("should return error as ErrNotExist", func() {
|
||||
res, err := FindWholeAddonPackagesFromRegistry(context.Background(), k8sClient, []string{"non-existent-addon"}, nil)
|
||||
res, err := FindAddonPackagesDetailFromRegistry(context.Background(), k8sClient, []string{"non-existent-addon"}, nil)
|
||||
Expect(errors.Is(err, ErrNotExist)).To(BeTrue())
|
||||
Expect(res).To(BeNil())
|
||||
})
|
||||
@@ -108,26 +144,20 @@ var _ = Describe("test FindWholeAddonPackagesFromRegistry", func() {
|
||||
|
||||
Context("two existing addon names provided", func() {
|
||||
It("should return two valid result", func() {
|
||||
res, err := FindWholeAddonPackagesFromRegistry(context.Background(), k8sClient, []string{"velaux", "traefik"}, nil)
|
||||
res, err := FindAddonPackagesDetailFromRegistry(context.Background(), k8sClient, []string{"foo", "bar"}, nil)
|
||||
Expect(err).To(Succeed())
|
||||
Expect(res).To(HaveLen(2))
|
||||
Expect(res[0].Name).To(Equal("velaux"))
|
||||
Expect(res[0].InstallPackage).ToNot(BeNil())
|
||||
Expect(res[0].APISchema).ToNot(BeNil())
|
||||
Expect(res[1].Name).To(Equal("traefik"))
|
||||
Expect(res[1].InstallPackage).ToNot(BeNil())
|
||||
Expect(res[1].APISchema).ToNot(BeNil())
|
||||
Expect(res[0].Name).To(Equal("foo"))
|
||||
Expect(res[1].Name).To(Equal("bar"))
|
||||
})
|
||||
})
|
||||
|
||||
Context("one existing addon name and one non-existent addon name provided", func() {
|
||||
It("should return only one valid result", func() {
|
||||
res, err := FindWholeAddonPackagesFromRegistry(context.Background(), k8sClient, []string{"velaux", "non-existent-addon"}, nil)
|
||||
res, err := FindAddonPackagesDetailFromRegistry(context.Background(), k8sClient, []string{"foo", "non-existent-addon"}, nil)
|
||||
Expect(err).To(Succeed())
|
||||
Expect(res).To(HaveLen(1))
|
||||
Expect(res[0].Name).To(Equal("velaux"))
|
||||
Expect(res[0].InstallPackage).ToNot(BeNil())
|
||||
Expect(res[0].APISchema).ToNot(BeNil())
|
||||
Expect(res[0].Name).To(Equal("foo"))
|
||||
})
|
||||
})
|
||||
})
|
||||
@@ -151,25 +181,25 @@ var _ = Describe("test FindWholeAddonPackagesFromRegistry", func() {
|
||||
|
||||
Context("when empty addonNames and registryNames is supplied", func() {
|
||||
It("should return error, empty addonNames are not allowed", func() {
|
||||
_, err := FindWholeAddonPackagesFromRegistry(context.Background(), k8sClient, []string{}, []string{})
|
||||
_, err := FindAddonPackagesDetailFromRegistry(context.Background(), k8sClient, []string{}, []string{})
|
||||
Expect(err).To(HaveOccurred())
|
||||
})
|
||||
It("should return error, empty addonNames are not allowed", func() {
|
||||
_, err := FindWholeAddonPackagesFromRegistry(context.Background(), k8sClient, nil, []string{"testreg"})
|
||||
_, err := FindAddonPackagesDetailFromRegistry(context.Background(), k8sClient, nil, []string{"testreg"})
|
||||
Expect(err).To(HaveOccurred())
|
||||
})
|
||||
})
|
||||
|
||||
Context("one existing addon name provided", func() {
|
||||
It("should return one valid result, matching all registries", func() {
|
||||
res, err := FindWholeAddonPackagesFromRegistry(context.Background(), k8sClient, []string{"example"}, nil)
|
||||
res, err := FindAddonPackagesDetailFromRegistry(context.Background(), k8sClient, []string{"example"}, nil)
|
||||
Expect(err).To(Succeed())
|
||||
Expect(res).To(HaveLen(1))
|
||||
Expect(res[0].Name).To(Equal("example"))
|
||||
Expect(res[0].InstallPackage).ToNot(BeNil())
|
||||
})
|
||||
It("should return one valid result, matching one registry", func() {
|
||||
res, err := FindWholeAddonPackagesFromRegistry(context.Background(), k8sClient, []string{"example"}, []string{"testreg"})
|
||||
res, err := FindAddonPackagesDetailFromRegistry(context.Background(), k8sClient, []string{"example"}, []string{"testreg"})
|
||||
Expect(err).To(Succeed())
|
||||
Expect(res).To(HaveLen(1))
|
||||
Expect(res[0].Name).To(Equal("example"))
|
||||
@@ -179,7 +209,7 @@ var _ = Describe("test FindWholeAddonPackagesFromRegistry", func() {
|
||||
|
||||
Context("one non-existent addon name provided", func() {
|
||||
It("should return error as ErrNotExist", func() {
|
||||
res, err := FindWholeAddonPackagesFromRegistry(context.Background(), k8sClient, []string{"non-existent-addon"}, nil)
|
||||
res, err := FindAddonPackagesDetailFromRegistry(context.Background(), k8sClient, []string{"non-existent-addon"}, nil)
|
||||
Expect(errors.Is(err, ErrNotExist)).To(BeTrue())
|
||||
Expect(res).To(BeNil())
|
||||
})
|
||||
@@ -187,7 +217,7 @@ var _ = Describe("test FindWholeAddonPackagesFromRegistry", func() {
|
||||
|
||||
Context("one existing addon name and one non-existent addon name provided", func() {
|
||||
It("should return only one valid result", func() {
|
||||
res, err := FindWholeAddonPackagesFromRegistry(context.Background(), k8sClient, []string{"example", "non-existent-addon"}, nil)
|
||||
res, err := FindAddonPackagesDetailFromRegistry(context.Background(), k8sClient, []string{"example", "non-existent-addon"}, nil)
|
||||
Expect(err).To(Succeed())
|
||||
Expect(res).To(HaveLen(1))
|
||||
Expect(res[0].Name).To(Equal("example"))
|
||||
|
||||
@@ -244,18 +244,18 @@ func findLegacyAddonDefs(ctx context.Context, k8sClient client.Client, addonName
|
||||
return nil
|
||||
}
|
||||
|
||||
func usingAppsInfo(apps []v1beta1.Application) string {
|
||||
res := "addon is being used :"
|
||||
appsNamespaceNameList := map[string][]string{}
|
||||
func appsDependsOnAddonErrInfo(apps []v1beta1.Application) string {
|
||||
var appsNamespaceNameList []string
|
||||
i := 0
|
||||
for _, app := range apps {
|
||||
appsNamespaceNameList[app.GetNamespace()] = append(appsNamespaceNameList[app.GetNamespace()], app.GetName())
|
||||
appsNamespaceNameList = append(appsNamespaceNameList, app.Namespace+"/"+app.Name)
|
||||
i++
|
||||
if i > 2 && len(apps) > i {
|
||||
appsNamespaceNameList = append(appsNamespaceNameList, fmt.Sprintf("and other %d more", len(apps)-i))
|
||||
break
|
||||
}
|
||||
}
|
||||
for namespace, appNames := range appsNamespaceNameList {
|
||||
nameStr := strings.Join(appNames, ",")
|
||||
res += fmt.Sprintf("{%s} in namespace:%s,", nameStr, namespace)
|
||||
}
|
||||
res = strings.TrimSuffix(res, ",") + ".Please delete them before disabling the addon."
|
||||
return res
|
||||
return fmt.Sprintf("this addon is being used by: %s applications. Please delete all of them before removing.", strings.Join(appsNamespaceNameList, ", "))
|
||||
}
|
||||
|
||||
// IsVersionRegistry check the repo source if support multi-version addon
|
||||
|
||||
@@ -155,9 +155,31 @@ func TestUsingAddonInfo(t *testing.T) {
|
||||
v1beta1.Application{ObjectMeta: metav1.ObjectMeta{Namespace: "namespace-1", Name: "app-1"}},
|
||||
v1beta1.Application{ObjectMeta: metav1.ObjectMeta{Namespace: "namespace-2", Name: "app-2"}},
|
||||
v1beta1.Application{ObjectMeta: metav1.ObjectMeta{Namespace: "namespace-1", Name: "app-3"}},
|
||||
v1beta1.Application{ObjectMeta: metav1.ObjectMeta{Namespace: "namespace-3", Name: "app-3"}},
|
||||
}
|
||||
res := usingAppsInfo(apps)
|
||||
assert.Equal(t, true, strings.Contains(res, "Please delete them before disabling the addon"))
|
||||
res := appsDependsOnAddonErrInfo(apps)
|
||||
assert.Contains(t, res, "and other 1 more applications. Please delete all of them before removing.")
|
||||
|
||||
apps = []v1beta1.Application{
|
||||
v1beta1.Application{ObjectMeta: metav1.ObjectMeta{Namespace: "namespace-1", Name: "app-1"}},
|
||||
v1beta1.Application{ObjectMeta: metav1.ObjectMeta{Namespace: "namespace-2", Name: "app-2"}},
|
||||
v1beta1.Application{ObjectMeta: metav1.ObjectMeta{Namespace: "namespace-1", Name: "app-3"}},
|
||||
}
|
||||
res = appsDependsOnAddonErrInfo(apps)
|
||||
assert.Contains(t, res, "Please delete all of them before removing.")
|
||||
|
||||
apps = []v1beta1.Application{
|
||||
v1beta1.Application{ObjectMeta: metav1.ObjectMeta{Namespace: "namespace-1", Name: "app-1"}},
|
||||
}
|
||||
res = appsDependsOnAddonErrInfo(apps)
|
||||
assert.Contains(t, res, "this addon is being used by: namespace-1/app-1 applications. Please delete all of them before removing.")
|
||||
|
||||
apps = []v1beta1.Application{
|
||||
v1beta1.Application{ObjectMeta: metav1.ObjectMeta{Namespace: "namespace-1", Name: "app-1"}},
|
||||
v1beta1.Application{ObjectMeta: metav1.ObjectMeta{Namespace: "namespace-2", Name: "app-2"}},
|
||||
}
|
||||
res = appsDependsOnAddonErrInfo(apps)
|
||||
assert.Contains(t, res, ". Please delete all of them before removing.")
|
||||
}
|
||||
|
||||
func TestIsAddonDir(t *testing.T) {
|
||||
|
||||
@@ -26,8 +26,8 @@ import (
|
||||
"github.com/pkg/errors"
|
||||
"helm.sh/helm/v3/pkg/chart/loader"
|
||||
"helm.sh/helm/v3/pkg/repo"
|
||||
"k8s.io/klog/v2"
|
||||
|
||||
"github.com/oam-dev/kubevela/pkg/apiserver/utils/log"
|
||||
"github.com/oam-dev/kubevela/pkg/utils"
|
||||
"github.com/oam-dev/kubevela/pkg/utils/common"
|
||||
"github.com/oam-dev/kubevela/pkg/utils/helm"
|
||||
@@ -149,6 +149,7 @@ func (i versionedRegistry) loadAddon(ctx context.Context, name, version string)
|
||||
if addonVersion == nil {
|
||||
return nil, errors.Errorf("specified version %s not exist", utils.Sanitize(version))
|
||||
}
|
||||
klog.Infof("Addon '%s' with version '%s' found from registry '%s'", addonVersion.Name, addonVersion.Version, i.name)
|
||||
for _, chartURL := range addonVersion.URLs {
|
||||
if !utils.IsValidURL(chartURL) {
|
||||
chartURL, err = utils.JoinURL(i.url, chartURL)
|
||||
@@ -173,7 +174,7 @@ func (i versionedRegistry) loadAddon(ctx context.Context, name, version string)
|
||||
addonPkg.Meta.SystemRequirements = LoadSystemRequirements(addonVersion.Annotations)
|
||||
return addonPkg, nil
|
||||
}
|
||||
return nil, fmt.Errorf("cannot fetch addon package")
|
||||
return nil, ErrFetch
|
||||
}
|
||||
|
||||
// loadAddonVersions Load all available versions of the addon
|
||||
@@ -234,7 +235,6 @@ func chooseVersion(specifiedVersion string, versions []*repo.ChartVersion) (*rep
|
||||
continue
|
||||
}
|
||||
addonVersion = v
|
||||
log.Logger.Infof("Use the latest version %s by default, you can use --version to specify", v.Version)
|
||||
}
|
||||
}
|
||||
return addonVersion, availableVersions
|
||||
|
||||
@@ -23,9 +23,8 @@ import (
|
||||
"time"
|
||||
|
||||
"k8s.io/apimachinery/pkg/runtime"
|
||||
"k8s.io/klog/v2"
|
||||
"sigs.k8s.io/yaml"
|
||||
|
||||
"github.com/oam-dev/kubevela/pkg/apiserver/utils/log"
|
||||
)
|
||||
|
||||
var tableNamePrefix = "vela_"
|
||||
@@ -102,7 +101,7 @@ func NewJSONStructByStruct(object interface{}) (*JSONStruct, error) {
|
||||
func (j *JSONStruct) JSON() string {
|
||||
b, err := json.Marshal(j)
|
||||
if err != nil {
|
||||
log.Logger.Errorf("json marshal failure %s", err.Error())
|
||||
klog.Errorf("json marshal failure %s", err.Error())
|
||||
}
|
||||
return string(b)
|
||||
}
|
||||
@@ -111,12 +110,12 @@ func (j *JSONStruct) JSON() string {
|
||||
func (j *JSONStruct) RawExtension() *runtime.RawExtension {
|
||||
yamlByte, err := yaml.Marshal(j)
|
||||
if err != nil {
|
||||
log.Logger.Errorf("yaml marshal failure %s", err.Error())
|
||||
klog.Errorf("yaml marshal failure %s", err.Error())
|
||||
return nil
|
||||
}
|
||||
b, err := yaml.YAMLToJSON(yamlByte)
|
||||
if err != nil {
|
||||
log.Logger.Errorf("yaml to json failure %s", err.Error())
|
||||
klog.Errorf("yaml to json failure %s", err.Error())
|
||||
return nil
|
||||
}
|
||||
return &runtime.RawExtension{Raw: b}
|
||||
|
||||
@@ -50,7 +50,7 @@ type Workflow struct {
|
||||
|
||||
// WorkflowStep defines how to execute a workflow step.
|
||||
type WorkflowStep struct {
|
||||
WorkflowStepBase `json:",inline"`
|
||||
WorkflowStepBase `json:",inline" bson:",inline"`
|
||||
SubSteps []WorkflowStepBase `json:"subSteps,omitempty"`
|
||||
}
|
||||
|
||||
@@ -123,7 +123,7 @@ type WorkflowRecord struct {
|
||||
|
||||
// WorkflowStepStatus is the workflow step status database model
|
||||
type WorkflowStepStatus struct {
|
||||
StepStatus `json:",inline"`
|
||||
StepStatus `json:",inline" bson:",inline"`
|
||||
SubStepsStatus []StepStatus `json:"subSteps,omitempty"`
|
||||
}
|
||||
|
||||
|
||||
@@ -20,10 +20,11 @@ import (
|
||||
"context"
|
||||
"errors"
|
||||
|
||||
"k8s.io/klog/v2"
|
||||
|
||||
"github.com/oam-dev/kubevela/pkg/apiserver/domain/model"
|
||||
"github.com/oam-dev/kubevela/pkg/apiserver/infrastructure/datastore"
|
||||
"github.com/oam-dev/kubevela/pkg/apiserver/utils/bcode"
|
||||
"github.com/oam-dev/kubevela/pkg/apiserver/utils/log"
|
||||
"github.com/oam-dev/kubevela/pkg/utils"
|
||||
)
|
||||
|
||||
@@ -84,14 +85,14 @@ func ListApplicationCommonPolicies(ctx context.Context, store datastore.DataStor
|
||||
|
||||
// DeleteApplicationEnvPolicies delete the policies via app name and env name
|
||||
func DeleteApplicationEnvPolicies(ctx context.Context, store datastore.DataStore, app *model.Application, envName string) error {
|
||||
log.Logger.Debugf("clear the policies via app name %s and env name %s", app.PrimaryKey(), utils.Sanitize(envName))
|
||||
klog.Infof("clear the policies via app name %s and env name %s", app.PrimaryKey(), utils.Sanitize(envName))
|
||||
policies, err := ListApplicationEnvPolicies(ctx, store, app, envName)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
for _, policy := range policies {
|
||||
if err := store.Delete(ctx, policy); err != nil && !errors.Is(err, datastore.ErrRecordNotExist) {
|
||||
log.Logger.Errorf("fail to clear the policies belong to the env %w", err)
|
||||
klog.Errorf("fail to clear the policies belong to the env %w", err)
|
||||
continue
|
||||
}
|
||||
}
|
||||
|
||||
@@ -20,12 +20,12 @@ import (
|
||||
"context"
|
||||
"errors"
|
||||
|
||||
"k8s.io/klog/v2"
|
||||
"sigs.k8s.io/controller-runtime/pkg/client"
|
||||
|
||||
"github.com/oam-dev/kubevela/pkg/apiserver/domain/model"
|
||||
"github.com/oam-dev/kubevela/pkg/apiserver/infrastructure/datastore"
|
||||
"github.com/oam-dev/kubevela/pkg/apiserver/utils/bcode"
|
||||
"github.com/oam-dev/kubevela/pkg/apiserver/utils/log"
|
||||
"github.com/oam-dev/kubevela/pkg/oam"
|
||||
util "github.com/oam-dev/kubevela/pkg/utils"
|
||||
velaerr "github.com/oam-dev/kubevela/pkg/utils/errors"
|
||||
@@ -38,7 +38,7 @@ func CreateEnv(ctx context.Context, kubeClient client.Client, ds datastore.DataS
|
||||
|
||||
exist, err := ds.IsExist(ctx, tenv)
|
||||
if err != nil {
|
||||
log.Logger.Errorf("check if env name exists failure %s", err.Error())
|
||||
klog.Errorf("check if env name exists failure %s", err.Error())
|
||||
return err
|
||||
}
|
||||
if exist {
|
||||
@@ -59,7 +59,7 @@ func CreateEnv(ctx context.Context, kubeClient client.Client, ds datastore.DataS
|
||||
if velaerr.IsLabelConflict(err) {
|
||||
return bcode.ErrEnvNamespaceAlreadyBound
|
||||
}
|
||||
log.Logger.Errorf("update namespace label failure %s", err.Error())
|
||||
klog.Errorf("update namespace label failure %s", err.Error())
|
||||
return bcode.ErrEnvNamespaceFail
|
||||
}
|
||||
if err = ds.Add(ctx, env); err != nil {
|
||||
|
||||
@@ -19,12 +19,13 @@ package repository
|
||||
import (
|
||||
"context"
|
||||
|
||||
"k8s.io/klog/v2"
|
||||
|
||||
"github.com/oam-dev/kubevela/pkg/apiserver/domain/model"
|
||||
"github.com/oam-dev/kubevela/pkg/apiserver/infrastructure/datastore"
|
||||
assembler "github.com/oam-dev/kubevela/pkg/apiserver/interfaces/api/assembler/v1"
|
||||
apisv1 "github.com/oam-dev/kubevela/pkg/apiserver/interfaces/api/dto/v1"
|
||||
"github.com/oam-dev/kubevela/pkg/apiserver/utils/bcode"
|
||||
"github.com/oam-dev/kubevela/pkg/apiserver/utils/log"
|
||||
)
|
||||
|
||||
const (
|
||||
@@ -70,7 +71,7 @@ func ListFullEnvBinding(ctx context.Context, ds datastore.DataStore, option EnvL
|
||||
for _, eb := range envBindings {
|
||||
env, err := pickEnv(envs, eb.Name)
|
||||
if err != nil {
|
||||
log.Logger.Errorf("envbinding invalid %s", err.Error())
|
||||
klog.Errorf("envbinding invalid %s", err.Error())
|
||||
continue
|
||||
}
|
||||
list = append(list, assembler.ConvertEnvBindingModelToBase(eb, env, targets))
|
||||
|
||||
@@ -20,12 +20,12 @@ import (
|
||||
"context"
|
||||
|
||||
apierror "k8s.io/apimachinery/pkg/api/errors"
|
||||
"k8s.io/klog/v2"
|
||||
"sigs.k8s.io/controller-runtime/pkg/client"
|
||||
|
||||
"github.com/oam-dev/kubevela/pkg/apiserver/domain/model"
|
||||
"github.com/oam-dev/kubevela/pkg/apiserver/infrastructure/datastore"
|
||||
"github.com/oam-dev/kubevela/pkg/apiserver/utils/bcode"
|
||||
"github.com/oam-dev/kubevela/pkg/apiserver/utils/log"
|
||||
"github.com/oam-dev/kubevela/pkg/multicluster"
|
||||
"github.com/oam-dev/kubevela/pkg/oam"
|
||||
"github.com/oam-dev/kubevela/pkg/utils"
|
||||
@@ -43,7 +43,7 @@ func CreateTargetNamespace(ctx context.Context, k8sClient client.Client, cluster
|
||||
oam.LabelNamespaceOfTargetName: targetName,
|
||||
}))
|
||||
if velaerr.IsLabelConflict(err) {
|
||||
log.Logger.Errorf("update namespace for target err %v", err)
|
||||
klog.Errorf("update namespace for target err %v", err)
|
||||
return bcode.ErrTargetNamespaceAlreadyBound
|
||||
}
|
||||
if err != nil {
|
||||
@@ -74,7 +74,7 @@ func CreateTarget(ctx context.Context, ds datastore.DataStore, tg *model.Target)
|
||||
// check Target name.
|
||||
exit, err := ds.IsExist(ctx, tg)
|
||||
if err != nil {
|
||||
log.Logger.Errorf("check target existence failure %s", err.Error())
|
||||
klog.Errorf("check target existence failure %s", err.Error())
|
||||
return err
|
||||
}
|
||||
if exit {
|
||||
@@ -82,7 +82,7 @@ func CreateTarget(ctx context.Context, ds datastore.DataStore, tg *model.Target)
|
||||
}
|
||||
|
||||
if err = ds.Add(ctx, tg); err != nil {
|
||||
log.Logger.Errorf("add target failure %s", err.Error())
|
||||
klog.Errorf("add target failure %s", err.Error())
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
@@ -99,7 +99,7 @@ func ListTarget(ctx context.Context, ds datastore.DataStore, project string, dsO
|
||||
}
|
||||
Targets, err := ds.List(ctx, &target, dsOption)
|
||||
if err != nil {
|
||||
log.Logger.Errorf("list target err %v", err)
|
||||
klog.Errorf("list target err %v", err)
|
||||
return nil, err
|
||||
}
|
||||
var respTargets []*model.Target
|
||||
|
||||
@@ -25,6 +25,7 @@ import (
|
||||
|
||||
workflowv1alpha1 "github.com/kubevela/workflow/api/v1alpha1"
|
||||
k8stypes "k8s.io/apimachinery/pkg/types"
|
||||
"k8s.io/klog/v2"
|
||||
"sigs.k8s.io/controller-runtime/pkg/client"
|
||||
|
||||
"github.com/oam-dev/kubevela/apis/core.oam.dev/common"
|
||||
@@ -36,7 +37,6 @@ import (
|
||||
"github.com/oam-dev/kubevela/pkg/apiserver/infrastructure/datastore"
|
||||
apisv1 "github.com/oam-dev/kubevela/pkg/apiserver/interfaces/api/dto/v1"
|
||||
"github.com/oam-dev/kubevela/pkg/apiserver/utils/bcode"
|
||||
"github.com/oam-dev/kubevela/pkg/apiserver/utils/log"
|
||||
"github.com/oam-dev/kubevela/pkg/oam/util"
|
||||
pkgUtils "github.com/oam-dev/kubevela/pkg/utils"
|
||||
"github.com/oam-dev/kubevela/pkg/workflow/step"
|
||||
@@ -370,20 +370,20 @@ func UpdateEnvWorkflow(ctx context.Context, kubeClient client.Client, ds datasto
|
||||
created, updated, deleted := workflowSteps.getPolicies(existPolicies, policies)
|
||||
for _, d := range deleted {
|
||||
if err := ds.Delete(ctx, d); err != nil {
|
||||
log.Logger.Errorf("fail to delete the policy %s", err.Error())
|
||||
klog.Errorf("fail to delete the policy %s", err.Error())
|
||||
}
|
||||
log.Logger.Infof("deleted a policy %s where update the workflow", d.PrimaryKey())
|
||||
klog.Infof("deleted a policy %s where update the workflow", d.PrimaryKey())
|
||||
}
|
||||
|
||||
if err := ds.BatchAdd(ctx, created); err != nil {
|
||||
log.Logger.Errorf("fail to create the policy %s", err.Error())
|
||||
klog.Errorf("fail to create the policy %s", err.Error())
|
||||
}
|
||||
|
||||
for _, d := range updated {
|
||||
if err := ds.Put(ctx, d); err != nil {
|
||||
log.Logger.Errorf("fail to update the policy %s", err.Error())
|
||||
klog.Errorf("fail to update the policy %s", err.Error())
|
||||
}
|
||||
log.Logger.Infof("updated a policy %s where update the workflow", d.PrimaryKey())
|
||||
klog.Infof("updated a policy %s where update the workflow", d.PrimaryKey())
|
||||
}
|
||||
|
||||
return nil
|
||||
@@ -417,10 +417,10 @@ func UpdateAppEnvWorkflow(ctx context.Context, kubeClient client.Client, ds data
|
||||
}
|
||||
for i := range envs {
|
||||
if err := UpdateEnvWorkflow(ctx, kubeClient, ds, app, envs[i]); err != nil {
|
||||
log.Logger.Errorf("fail to update the env workflow %s", envs[i].PrimaryKey())
|
||||
klog.Errorf("fail to update the env workflow %s", envs[i].PrimaryKey())
|
||||
}
|
||||
}
|
||||
log.Logger.Infof("The env workflows of app %s updated successfully", pkgUtils.Sanitize(app.PrimaryKey()))
|
||||
klog.Infof("The env workflows of app %s updated successfully", pkgUtils.Sanitize(app.PrimaryKey()))
|
||||
return nil
|
||||
}
|
||||
|
||||
@@ -438,7 +438,7 @@ func HaveTerraformWorkload(ctx context.Context, kubeClient client.Client, compon
|
||||
getComponentDeployType := func(component *model.ApplicationComponent) string {
|
||||
definition, err := GetComponentDefinition(ctx, kubeClient, component.Type)
|
||||
if err != nil {
|
||||
log.Logger.Errorf("get component definition %s failure %s", component.Type, err.Error())
|
||||
klog.Errorf("get component definition %s failure %s", component.Type, err.Error())
|
||||
// using Deploy2Env by default
|
||||
}
|
||||
if definition != nil {
|
||||
@@ -508,7 +508,7 @@ func GenEnvWorkflowStepsAndPolicies(ctx context.Context, kubeClient client.Clien
|
||||
var policies []datastore.Entity
|
||||
components, err := ds.List(ctx, &model.ApplicationComponent{AppPrimaryKey: app.PrimaryKey()}, nil)
|
||||
if err != nil {
|
||||
log.Logger.Errorf("list application component list failure %s", err.Error())
|
||||
klog.Errorf("list application component list failure %s", err.Error())
|
||||
}
|
||||
userName, _ := ctx.Value(&apisv1.CtxKeyUser).(string)
|
||||
terraformComponents := HaveTerraformWorkload(ctx, kubeClient, components)
|
||||
@@ -521,7 +521,7 @@ func GenEnvWorkflowStepsAndPolicies(ctx context.Context, kubeClient client.Clien
|
||||
}},
|
||||
}})
|
||||
if err != nil {
|
||||
log.Logger.Errorf("fail to get the targets detail info, %s", err.Error())
|
||||
klog.Errorf("fail to get the targets detail info, %s", err.Error())
|
||||
}
|
||||
if len(terraformComponents) > 0 {
|
||||
appPolicy := &model.ApplicationPolicy{
|
||||
@@ -553,7 +553,7 @@ func GenEnvWorkflowStepsAndPolicies(ctx context.Context, kubeClient client.Clien
|
||||
Envs: envs,
|
||||
})
|
||||
if err != nil {
|
||||
log.Logger.Errorf("fail to create the properties of the topology policy, %s", err.Error())
|
||||
klog.Errorf("fail to create the properties of the topology policy, %s", err.Error())
|
||||
} else {
|
||||
appPolicy.Properties = properties
|
||||
policies = append(policies, appPolicy)
|
||||
@@ -591,7 +591,7 @@ func GenEnvWorkflowStepsAndPolicies(ctx context.Context, kubeClient client.Clien
|
||||
Namespace: target.Cluster.Namespace,
|
||||
})
|
||||
if err != nil {
|
||||
log.Logger.Errorf("fail to create the properties of the topology policy, %s", err.Error())
|
||||
klog.Errorf("fail to create the properties of the topology policy, %s", err.Error())
|
||||
continue
|
||||
}
|
||||
appPolicy.Properties = properties
|
||||
@@ -602,7 +602,7 @@ func GenEnvWorkflowStepsAndPolicies(ctx context.Context, kubeClient client.Clien
|
||||
for _, step := range workflowSteps {
|
||||
base, err := convert.FromCRWorkflowStepBase(step.WorkflowStepBase)
|
||||
if err != nil {
|
||||
log.Logger.Errorf("workflow %s step %s properties is invalid %s", pkgUtils.Sanitize(app.Name), pkgUtils.Sanitize(step.Name), err.Error())
|
||||
klog.Errorf("workflow %s step %s properties is invalid %s", pkgUtils.Sanitize(app.Name), pkgUtils.Sanitize(step.Name), err.Error())
|
||||
continue
|
||||
}
|
||||
targetName := strings.Replace(step.Name, "-cloud-resource", "", 1)
|
||||
|
||||
@@ -25,6 +25,7 @@ import (
|
||||
. "github.com/onsi/gomega"
|
||||
"github.com/stretchr/testify/assert"
|
||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||
"k8s.io/klog/v2"
|
||||
"sigs.k8s.io/controller-runtime/pkg/client"
|
||||
|
||||
"github.com/oam-dev/kubevela/apis/core.oam.dev/common"
|
||||
@@ -33,7 +34,6 @@ import (
|
||||
"github.com/oam-dev/kubevela/apis/types"
|
||||
"github.com/oam-dev/kubevela/pkg/apiserver/domain/model"
|
||||
"github.com/oam-dev/kubevela/pkg/apiserver/infrastructure/datastore"
|
||||
"github.com/oam-dev/kubevela/pkg/apiserver/utils/log"
|
||||
pkgUtils "github.com/oam-dev/kubevela/pkg/utils"
|
||||
)
|
||||
|
||||
@@ -563,7 +563,7 @@ func CreateEnvWorkflow(ctx context.Context, store datastore.DataStore, kubeClien
|
||||
EnvName: env.Name,
|
||||
AppPrimaryKey: app.PrimaryKey(),
|
||||
}
|
||||
log.Logger.Infof("create workflow %s for app %s", pkgUtils.Sanitize(workflow.Name), pkgUtils.Sanitize(app.PrimaryKey()))
|
||||
klog.Infof("create workflow %s for app %s", pkgUtils.Sanitize(workflow.Name), pkgUtils.Sanitize(app.PrimaryKey()))
|
||||
if err := store.Add(ctx, workflow); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
@@ -34,6 +34,7 @@ import (
|
||||
k8stypes "k8s.io/apimachinery/pkg/types"
|
||||
"k8s.io/client-go/discovery"
|
||||
"k8s.io/client-go/rest"
|
||||
"k8s.io/klog/v2"
|
||||
"sigs.k8s.io/controller-runtime/pkg/client"
|
||||
|
||||
common2 "github.com/oam-dev/kubevela/apis/core.oam.dev/common"
|
||||
@@ -44,7 +45,6 @@ import (
|
||||
apis "github.com/oam-dev/kubevela/pkg/apiserver/interfaces/api/dto/v1"
|
||||
"github.com/oam-dev/kubevela/pkg/apiserver/utils"
|
||||
"github.com/oam-dev/kubevela/pkg/apiserver/utils/bcode"
|
||||
"github.com/oam-dev/kubevela/pkg/apiserver/utils/log"
|
||||
"github.com/oam-dev/kubevela/pkg/definition"
|
||||
"github.com/oam-dev/kubevela/pkg/multicluster"
|
||||
"github.com/oam-dev/kubevela/pkg/oam"
|
||||
@@ -206,7 +206,7 @@ func (u *addonServiceImpl) StatusAddon(ctx context.Context, name string) (*apis.
|
||||
var allClusters []apis.NameAlias
|
||||
clusters, err := multicluster.ListVirtualClusters(ctx, u.kubeClient)
|
||||
if err != nil {
|
||||
log.Logger.Errorf("err while list all clusters: %v", err)
|
||||
klog.Errorf("err while list all clusters: %v", err)
|
||||
}
|
||||
|
||||
for _, c := range clusters {
|
||||
@@ -302,7 +302,7 @@ func (u *addonServiceImpl) ListAddons(ctx context.Context, registry, query strin
|
||||
for _, a := range addons {
|
||||
addonRes, err := AddonImpl2AddonRes(a, u.config)
|
||||
if err != nil {
|
||||
log.Logger.Errorf("err while converting AddonImpl to DetailAddonResponse: %v", err)
|
||||
klog.Errorf("err while converting AddonImpl to DetailAddonResponse: %v", err)
|
||||
continue
|
||||
}
|
||||
addonResources = append(addonResources, addonRes)
|
||||
@@ -442,7 +442,7 @@ func (u *addonServiceImpl) EnableAddon(ctx context.Context, name string, args ap
|
||||
func (u *addonServiceImpl) DisableAddon(ctx context.Context, name string, force bool) error {
|
||||
err := pkgaddon.DisableAddon(ctx, u.kubeClient, name, u.config, force)
|
||||
if err != nil {
|
||||
log.Logger.Errorf("delete application fail: %s", err.Error())
|
||||
klog.Errorf("delete application fail: %s", err.Error())
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
@@ -555,7 +555,7 @@ func renderAddonCustomUISchema(ctx context.Context, cli client.Client, addonName
|
||||
Name: fmt.Sprintf("addon-uischema-%s", addonName),
|
||||
}, &cm); err != nil {
|
||||
if !errors2.IsNotFound(err) {
|
||||
log.Logger.Errorf("find uischema configmap from cluster failure %s", err.Error())
|
||||
klog.Errorf("find uischema configmap from cluster failure %s", err.Error())
|
||||
}
|
||||
return defaultSchema
|
||||
}
|
||||
@@ -565,7 +565,7 @@ func renderAddonCustomUISchema(ctx context.Context, cli client.Client, addonName
|
||||
}
|
||||
schema := []*utils.UIParameter{}
|
||||
if err := json.Unmarshal([]byte(data), &schema); err != nil {
|
||||
log.Logger.Errorf("unmarshal ui schema failure %s", err.Error())
|
||||
klog.Errorf("unmarshal ui schema failure %s", err.Error())
|
||||
return defaultSchema
|
||||
}
|
||||
return patchSchema(defaultSchema, schema)
|
||||
|
||||
@@ -33,6 +33,7 @@ import (
|
||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||
"k8s.io/apimachinery/pkg/types"
|
||||
"k8s.io/client-go/rest"
|
||||
"k8s.io/klog/v2"
|
||||
"sigs.k8s.io/controller-runtime/pkg/client"
|
||||
"sigs.k8s.io/yaml"
|
||||
|
||||
@@ -47,7 +48,6 @@ import (
|
||||
apisv1 "github.com/oam-dev/kubevela/pkg/apiserver/interfaces/api/dto/v1"
|
||||
"github.com/oam-dev/kubevela/pkg/apiserver/utils"
|
||||
"github.com/oam-dev/kubevela/pkg/apiserver/utils/bcode"
|
||||
"github.com/oam-dev/kubevela/pkg/apiserver/utils/log"
|
||||
"github.com/oam-dev/kubevela/pkg/appfile/dryrun"
|
||||
"github.com/oam-dev/kubevela/pkg/oam"
|
||||
"github.com/oam-dev/kubevela/pkg/oam/discoverymapper"
|
||||
@@ -126,7 +126,7 @@ func listApp(ctx context.Context, ds datastore.DataStore, listOptions apisv1.Lis
|
||||
if listOptions.Env != "" || listOptions.TargetName != "" {
|
||||
envBinding, err = repository.ListFullEnvBinding(ctx, ds, repository.EnvListOption{})
|
||||
if err != nil {
|
||||
log.Logger.Errorf("list envbinding for list application in env %s err %v", pkgUtils.Sanitize(listOptions.Env), err)
|
||||
klog.Errorf("list envbinding for list application in env %s err %v", pkgUtils.Sanitize(listOptions.Env), err)
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
@@ -359,7 +359,7 @@ func (c *applicationServiceImpl) CreateApplication(ctx context.Context, req apis
|
||||
// check app name.
|
||||
exist, err := c.Store.IsExist(ctx, &application)
|
||||
if err != nil {
|
||||
log.Logger.Errorf("check application name is exist failure %s", err.Error())
|
||||
klog.Errorf("check application name is exist failure %s", err.Error())
|
||||
return nil, bcode.ErrApplicationExist
|
||||
}
|
||||
if exist {
|
||||
@@ -422,7 +422,7 @@ func (c *applicationServiceImpl) CreateApplicationTrigger(ctx context.Context, a
|
||||
Token: genWebhookToken(),
|
||||
}
|
||||
if err := c.Store.Add(ctx, trigger); err != nil {
|
||||
log.Logger.Errorf("failed to create application trigger, %s", err.Error())
|
||||
klog.Errorf("failed to create application trigger, %s", err.Error())
|
||||
return nil, err
|
||||
}
|
||||
|
||||
@@ -450,7 +450,7 @@ func (c *applicationServiceImpl) DeleteApplicationTrigger(ctx context.Context, a
|
||||
if errors.Is(err, datastore.ErrRecordNotExist) {
|
||||
return bcode.ErrApplicationTriggerNotExist
|
||||
}
|
||||
log.Logger.Warnf("delete app trigger failure %s", err.Error())
|
||||
klog.Warningf("delete app trigger failure %s", err.Error())
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
@@ -465,7 +465,7 @@ func (c *applicationServiceImpl) ListApplicationTriggers(ctx context.Context, ap
|
||||
SortBy: []datastore.SortOption{{Key: "createTime", Order: datastore.SortOrderDescending}}},
|
||||
)
|
||||
if err != nil {
|
||||
log.Logger.Errorf("failed to list application triggers, %s", err.Error())
|
||||
klog.Errorf("failed to list application triggers, %s", err.Error())
|
||||
return nil, err
|
||||
}
|
||||
|
||||
@@ -605,7 +605,7 @@ func (c *applicationServiceImpl) DetailComponent(ctx context.Context, app *model
|
||||
}
|
||||
var cd v1beta1.ComponentDefinition
|
||||
if err := c.KubeClient.Get(ctx, types.NamespacedName{Name: component.Type, Namespace: velatypes.DefaultKubeVelaNS}, &cd); err != nil {
|
||||
log.Logger.Warnf("component definition %s get failure. %s", pkgUtils.Sanitize(component.Type), err.Error())
|
||||
klog.Warningf("component definition %s get failure. %s", pkgUtils.Sanitize(component.Type), err.Error())
|
||||
}
|
||||
|
||||
return &apisv1.DetailComponentResponse{
|
||||
@@ -681,7 +681,7 @@ func (c *applicationServiceImpl) Deploy(ctx context.Context, app *model.Applicat
|
||||
list, err := c.Store.List(ctx, &lastVersion, &datastore.ListOptions{
|
||||
PageSize: 1, Page: 1, SortBy: []datastore.SortOption{{Key: "createTime", Order: datastore.SortOrderDescending}}})
|
||||
if err != nil && !errors.Is(err, datastore.ErrRecordNotExist) {
|
||||
log.Logger.Errorf("query app latest revision failure %s", err.Error())
|
||||
klog.Errorf("query app latest revision failure %s", err.Error())
|
||||
return nil, bcode.ErrDeployConflict
|
||||
}
|
||||
if len(list) > 0 {
|
||||
@@ -699,7 +699,7 @@ func (c *applicationServiceImpl) Deploy(ctx context.Context, app *model.Applicat
|
||||
status = revision.Status
|
||||
}
|
||||
if status != model.RevisionStatusComplete && status != model.RevisionStatusTerminated {
|
||||
log.Logger.Warnf("last app revision can not complete %s/%s", list[0].(*model.ApplicationRevision).AppPrimaryKey, list[0].(*model.ApplicationRevision).Version)
|
||||
klog.Warningf("last app revision can not complete %s/%s", list[0].(*model.ApplicationRevision).AppPrimaryKey, list[0].(*model.ApplicationRevision).Version)
|
||||
return nil, bcode.ErrDeployConflict
|
||||
}
|
||||
}
|
||||
@@ -727,7 +727,7 @@ func (c *applicationServiceImpl) Deploy(ctx context.Context, app *model.Applicat
|
||||
if err := c.KubeClient.Get(ctx, types.NamespacedName{Name: oamApp.Namespace}, &namespace); apierrors.IsNotFound(err) {
|
||||
namespace.Name = oamApp.Namespace
|
||||
if err := c.KubeClient.Create(ctx, &namespace); err != nil {
|
||||
log.Logger.Errorf("auto create namespace failure %s", err.Error())
|
||||
klog.Errorf("auto create namespace failure %s", err.Error())
|
||||
return nil, bcode.ErrCreateNamespace
|
||||
}
|
||||
}
|
||||
@@ -737,22 +737,22 @@ func (c *applicationServiceImpl) Deploy(ctx context.Context, app *model.Applicat
|
||||
appRevision.Status = model.RevisionStatusFail
|
||||
appRevision.Reason = err.Error()
|
||||
if err := c.Store.Put(ctx, appRevision); err != nil {
|
||||
log.Logger.Warnf("update deploy event failure %s", err.Error())
|
||||
klog.Warningf("update deploy event failure %s", err.Error())
|
||||
}
|
||||
|
||||
log.Logger.Errorf("deploy app %s failure %s", app.PrimaryKey(), err.Error())
|
||||
klog.Errorf("deploy app %s failure %s", app.PrimaryKey(), err.Error())
|
||||
return nil, bcode.ErrDeployApplyFail
|
||||
}
|
||||
|
||||
// step5: create workflow record
|
||||
if err := c.WorkflowService.CreateWorkflowRecord(ctx, app, oamApp, workflow); err != nil {
|
||||
log.Logger.Warnf("create workflow record failure %s", err.Error())
|
||||
klog.Warningf("create workflow record failure %s", err.Error())
|
||||
}
|
||||
|
||||
// step6: update app revision status
|
||||
appRevision.Status = model.RevisionStatusRunning
|
||||
if err := c.Store.Put(ctx, appRevision); err != nil {
|
||||
log.Logger.Warnf("update app revision failure %s", err.Error())
|
||||
klog.Warningf("update app revision failure %s", err.Error())
|
||||
}
|
||||
|
||||
// step7: change the source of trust
|
||||
@@ -761,7 +761,7 @@ func (c *applicationServiceImpl) Deploy(ctx context.Context, app *model.Applicat
|
||||
}
|
||||
app.Labels[model.LabelSourceOfTruth] = model.FromUX
|
||||
if err := c.Store.Put(ctx, app); err != nil {
|
||||
log.Logger.Warnf("failed to update app %s", err.Error())
|
||||
klog.Warningf("failed to update app %s", err.Error())
|
||||
}
|
||||
|
||||
return &apisv1.ApplicationDeployResponse{
|
||||
@@ -964,38 +964,38 @@ func (c *applicationServiceImpl) DeleteApplication(ctx context.Context, app *mod
|
||||
|
||||
// delete workflow
|
||||
if err := c.WorkflowService.DeleteWorkflowByApp(ctx, app); err != nil && !errors.Is(err, bcode.ErrWorkflowNotExist) {
|
||||
log.Logger.Errorf("delete workflow %s failure %s", app.Name, err.Error())
|
||||
klog.Errorf("delete workflow %s failure %s", app.Name, err.Error())
|
||||
}
|
||||
|
||||
for _, component := range components {
|
||||
err := c.Store.Delete(ctx, &model.ApplicationComponent{AppPrimaryKey: app.PrimaryKey(), Name: component.Name})
|
||||
if err != nil && !errors.Is(err, datastore.ErrRecordNotExist) {
|
||||
log.Logger.Errorf("delete component %s in app %s failure %s", component.Name, app.Name, err.Error())
|
||||
klog.Errorf("delete component %s in app %s failure %s", component.Name, app.Name, err.Error())
|
||||
}
|
||||
}
|
||||
|
||||
for _, policy := range policies {
|
||||
err := c.Store.Delete(ctx, &model.ApplicationPolicy{AppPrimaryKey: app.PrimaryKey(), Name: policy.Name})
|
||||
if err != nil && errors.Is(err, datastore.ErrRecordNotExist) {
|
||||
log.Logger.Errorf("delete policy %s in app %s failure %s", policy.Name, app.Name, err.Error())
|
||||
klog.Errorf("delete policy %s in app %s failure %s", policy.Name, app.Name, err.Error())
|
||||
}
|
||||
}
|
||||
|
||||
for _, entity := range revisions {
|
||||
revision := entity.(*model.ApplicationRevision)
|
||||
if err := c.Store.Delete(ctx, &model.ApplicationRevision{AppPrimaryKey: app.PrimaryKey(), Version: revision.Version}); err != nil {
|
||||
log.Logger.Errorf("delete revision %s in app %s failure %s", revision.Version, app.Name, err.Error())
|
||||
klog.Errorf("delete revision %s in app %s failure %s", revision.Version, app.Name, err.Error())
|
||||
}
|
||||
}
|
||||
|
||||
for _, trigger := range triggers {
|
||||
if err := c.Store.Delete(ctx, &model.ApplicationTrigger{AppPrimaryKey: app.PrimaryKey(), Name: trigger.Name, Token: trigger.Token}); err != nil {
|
||||
log.Logger.Errorf("delete trigger %s in app %s failure %s", trigger.Name, app.Name, err.Error())
|
||||
klog.Errorf("delete trigger %s in app %s failure %s", trigger.Name, app.Name, err.Error())
|
||||
}
|
||||
}
|
||||
|
||||
if err := c.EnvBindingService.BatchDeleteEnvBinding(ctx, app); err != nil {
|
||||
log.Logger.Errorf("delete envbindings in app %s failure %s", app.Name, err.Error())
|
||||
klog.Errorf("delete envbindings in app %s failure %s", app.Name, err.Error())
|
||||
}
|
||||
|
||||
return c.Store.Delete(ctx, app)
|
||||
@@ -1048,7 +1048,7 @@ func (c *applicationServiceImpl) UpdateComponent(ctx context.Context, app *model
|
||||
func (c *applicationServiceImpl) createComponent(ctx context.Context, app *model.Application, com apisv1.CreateComponentRequest, main bool) (*apisv1.ComponentBase, error) {
|
||||
var cd v1beta1.ComponentDefinition
|
||||
if err := c.KubeClient.Get(ctx, types.NamespacedName{Name: com.ComponentType, Namespace: velatypes.DefaultKubeVelaNS}, &cd); err != nil {
|
||||
log.Logger.Warnf("component definition %s get failure. %s", pkgUtils.Sanitize(com.ComponentType), err.Error())
|
||||
klog.Warningf("component definition %s get failure. %s", pkgUtils.Sanitize(com.ComponentType), err.Error())
|
||||
return nil, bcode.ErrComponentTypeNotSupport
|
||||
}
|
||||
userName, _ := ctx.Value(&apisv1.CtxKeyUser).(string)
|
||||
@@ -1076,7 +1076,7 @@ func (c *applicationServiceImpl) createComponent(ctx context.Context, app *model
|
||||
traitTypes[trait.Type] = true
|
||||
properties, err := model.NewJSONStructByString(trait.Properties)
|
||||
if err != nil {
|
||||
log.Logger.Errorf("new trait failure,%s", err.Error())
|
||||
klog.Errorf("new trait failure,%s", err.Error())
|
||||
return nil, bcode.ErrInvalidProperties
|
||||
}
|
||||
traits = append(traits, model.ApplicationTrait{
|
||||
@@ -1103,7 +1103,7 @@ func (c *applicationServiceImpl) createComponent(ctx context.Context, app *model
|
||||
if errors.Is(err, datastore.ErrRecordExist) {
|
||||
return nil, bcode.ErrApplicationComponentExist
|
||||
}
|
||||
log.Logger.Warnf("add component for app %s failure %s", pkgUtils.Sanitize(app.PrimaryKey()), err.Error())
|
||||
klog.Warningf("add component for app %s failure %s", pkgUtils.Sanitize(app.PrimaryKey()), err.Error())
|
||||
return nil, err
|
||||
}
|
||||
// update the env workflow, the automatically generated workflow is determined by the component type.
|
||||
@@ -1144,7 +1144,7 @@ func (c *applicationServiceImpl) DeleteComponent(ctx context.Context, app *model
|
||||
if errors.Is(err, datastore.ErrRecordNotExist) {
|
||||
return bcode.ErrApplicationComponentNotExist
|
||||
}
|
||||
log.Logger.Warnf("delete app component %s failure %s", app.PrimaryKey(), err.Error())
|
||||
klog.Warningf("delete app component %s failure %s", app.PrimaryKey(), err.Error())
|
||||
return err
|
||||
}
|
||||
if err := repository.UpdateAppEnvWorkflow(ctx, c.KubeClient, c.Store, app); err != nil {
|
||||
@@ -1173,7 +1173,7 @@ func (c *applicationServiceImpl) CreatePolicy(ctx context.Context, app *model.Ap
|
||||
if errors.Is(err, datastore.ErrRecordExist) {
|
||||
return nil, bcode.ErrApplicationPolicyExist
|
||||
}
|
||||
log.Logger.Warnf("add policy for app %s failure %s", app.PrimaryKey(), err.Error())
|
||||
klog.Warningf("add policy for app %s failure %s", app.PrimaryKey(), err.Error())
|
||||
return nil, err
|
||||
}
|
||||
if err = c.handlePolicyBindingWorkflowStep(ctx, app, createPolicy.Name, createPolicy.WorkflowPolicyBindings); err != nil {
|
||||
@@ -1200,7 +1200,7 @@ func (c *applicationServiceImpl) DeletePolicy(ctx context.Context, app *model.Ap
|
||||
if errors.Is(err, datastore.ErrRecordNotExist) {
|
||||
return bcode.ErrApplicationPolicyNotExist
|
||||
}
|
||||
log.Logger.Warnf("delete app policy %s failure %s", app.PrimaryKey(), err.Error())
|
||||
klog.Warningf("delete app policy %s failure %s", app.PrimaryKey(), err.Error())
|
||||
return err
|
||||
}
|
||||
return c.handlePolicyBindingWorkflowStep(ctx, app, policyName, nil)
|
||||
@@ -1216,7 +1216,7 @@ func (c *applicationServiceImpl) UpdatePolicy(ctx context.Context, app *model.Ap
|
||||
if errors.Is(err, datastore.ErrRecordNotExist) {
|
||||
return nil, bcode.ErrApplicationPolicyNotExist
|
||||
}
|
||||
log.Logger.Warnf("update app policy %s failure %s", app.PrimaryKey(), err.Error())
|
||||
klog.Warningf("update app policy %s failure %s", app.PrimaryKey(), err.Error())
|
||||
return nil, err
|
||||
}
|
||||
policy.Type = policyUpdate.Type
|
||||
@@ -1255,7 +1255,7 @@ func (c *applicationServiceImpl) CreateApplicationTrait(ctx context.Context, app
|
||||
}
|
||||
properties, err := model.NewJSONStructByString(req.Properties)
|
||||
if err != nil {
|
||||
log.Logger.Errorf("new trait failure,%s", err.Error())
|
||||
klog.Errorf("new trait failure,%s", err.Error())
|
||||
return nil, bcode.ErrInvalidProperties
|
||||
}
|
||||
trait := model.ApplicationTrait{CreateTime: time.Now(), Type: req.Type, Properties: properties, Alias: req.Alias, Description: req.Description}
|
||||
@@ -1298,7 +1298,7 @@ func (c *applicationServiceImpl) UpdateApplicationTrait(ctx context.Context, app
|
||||
if trait.Type == traitType {
|
||||
properties, err := model.NewJSONStructByString(req.Properties)
|
||||
if err != nil {
|
||||
log.Logger.Errorf("update trait failure,%s", err.Error())
|
||||
klog.Errorf("update trait failure,%s", err.Error())
|
||||
return nil, bcode.ErrInvalidProperties
|
||||
}
|
||||
updatedTrait := model.ApplicationTrait{CreateTime: trait.CreateTime, UpdateTime: time.Now(), Properties: properties, Type: traitType, Alias: req.Alias, Description: req.Description}
|
||||
@@ -1381,7 +1381,7 @@ func (c *applicationServiceImpl) Statistics(ctx context.Context, app *model.Appl
|
||||
var targetMap = make(map[string]int)
|
||||
envbinding, err := c.EnvBindingService.GetEnvBindings(ctx, app)
|
||||
if err != nil {
|
||||
log.Logger.Errorf("query app envbinding failure %s", err.Error())
|
||||
klog.Errorf("query app envbinding failure %s", err.Error())
|
||||
}
|
||||
for _, env := range envbinding {
|
||||
for _, target := range env.TargetNames {
|
||||
@@ -1409,7 +1409,7 @@ func (c *applicationServiceImpl) CompareApp(ctx context.Context, appModel *model
|
||||
case compareReq.CompareLatestWithRunning != nil:
|
||||
base, err = c.renderOAMApplication(ctx, appModel, "", compareReq.CompareLatestWithRunning.Env, "")
|
||||
if err != nil {
|
||||
log.Logger.Errorf("failed to build the latest application %s", err.Error())
|
||||
klog.Errorf("failed to build the latest application %s", err.Error())
|
||||
break
|
||||
}
|
||||
case compareReq.CompareRevisionWithRunning != nil || compareReq.CompareRevisionWithLatest != nil:
|
||||
@@ -1422,7 +1422,7 @@ func (c *applicationServiceImpl) CompareApp(ctx context.Context, appModel *model
|
||||
}
|
||||
base, envNameByRevision, err = c.getAppModelFromRevision(ctx, appModel.Name, revision)
|
||||
if err != nil {
|
||||
log.Logger.Errorf("failed to get the app model from the revision %s", err.Error())
|
||||
klog.Errorf("failed to get the app model from the revision %s", err.Error())
|
||||
break
|
||||
}
|
||||
}
|
||||
@@ -1441,13 +1441,13 @@ func (c *applicationServiceImpl) CompareApp(ctx context.Context, appModel *model
|
||||
}
|
||||
compareTarget, err = c.GetApplicationCRInEnv(ctx, appModel, envName)
|
||||
if err != nil {
|
||||
log.Logger.Errorf("failed to query the application CR %s", err.Error())
|
||||
klog.Errorf("failed to query the application CR %s", err.Error())
|
||||
break
|
||||
}
|
||||
case compareReq.CompareRevisionWithLatest != nil:
|
||||
compareTarget, err = c.renderOAMApplication(ctx, appModel, "", envNameByRevision, "")
|
||||
if err != nil {
|
||||
log.Logger.Errorf("failed to build the latest application %s", err.Error())
|
||||
klog.Errorf("failed to build the latest application %s", err.Error())
|
||||
break
|
||||
}
|
||||
}
|
||||
@@ -1483,7 +1483,7 @@ func (c *applicationServiceImpl) CompareApp(ctx context.Context, appModel *model
|
||||
args.SetClient(c.KubeClient)
|
||||
diffResult, buff, err := compare(ctx, args, compareTarget, base)
|
||||
if err != nil {
|
||||
log.Logger.Errorf("fail to compare the app %s", err.Error())
|
||||
klog.Errorf("fail to compare the app %s", err.Error())
|
||||
compareResponse.IsDiff = false
|
||||
return compareResponse, nil
|
||||
}
|
||||
@@ -1513,6 +1513,13 @@ func (c *applicationServiceImpl) DryRunAppOrRevision(ctx context.Context, appMod
|
||||
}
|
||||
case "REVISION":
|
||||
app, _, err = c.getAppModelFromRevision(ctx, appModel.Name, dryRunReq.Version)
|
||||
originalApp := &v1beta1.Application{}
|
||||
if err := c.KubeClient.Get(ctx, types.NamespacedName{
|
||||
Name: app.Name,
|
||||
Namespace: app.Namespace,
|
||||
}, originalApp); err == nil {
|
||||
app.ResourceVersion = originalApp.ResourceVersion
|
||||
}
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -1591,7 +1598,7 @@ func (c *applicationServiceImpl) resetApp(ctx context.Context, targetApp *v1beta
|
||||
if errors.Is(err, datastore.ErrRecordNotExist) {
|
||||
continue
|
||||
}
|
||||
log.Logger.Warnf("delete app %s comp %s failure %s", appPrimaryKey, compName, err.Error())
|
||||
klog.Warningf("delete app %s comp %s failure %s", appPrimaryKey, compName, err.Error())
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1611,11 +1618,11 @@ func (c *applicationServiceImpl) resetApp(ctx context.Context, targetApp *v1beta
|
||||
if errors.Is(err, datastore.ErrRecordExist) {
|
||||
err := c.Store.Put(ctx, &compModel)
|
||||
if err != nil {
|
||||
log.Logger.Warnf("update comp %s for app %s failure %s", comp.Name, pkgUtils.Sanitize(appPrimaryKey), err.Error())
|
||||
klog.Warningf("update comp %s for app %s failure %s", comp.Name, pkgUtils.Sanitize(appPrimaryKey), err.Error())
|
||||
}
|
||||
return &apisv1.AppResetResponse{IsReset: true}, err
|
||||
}
|
||||
log.Logger.Warnf("add comp %s for app %s failure %s", comp.Name, pkgUtils.Sanitize(appPrimaryKey), err.Error())
|
||||
klog.Warningf("add comp %s for app %s failure %s", comp.Name, pkgUtils.Sanitize(appPrimaryKey), err.Error())
|
||||
return &apisv1.AppResetResponse{}, err
|
||||
}
|
||||
}
|
||||
|
||||
@@ -33,6 +33,7 @@ import (
|
||||
kerrors "k8s.io/apimachinery/pkg/api/errors"
|
||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||
"k8s.io/apimachinery/pkg/types"
|
||||
"k8s.io/klog/v2"
|
||||
"sigs.k8s.io/controller-runtime/pkg/client"
|
||||
"sigs.k8s.io/yaml"
|
||||
|
||||
@@ -42,7 +43,6 @@ import (
|
||||
"github.com/oam-dev/kubevela/pkg/apiserver/infrastructure/datastore"
|
||||
apisv1 "github.com/oam-dev/kubevela/pkg/apiserver/interfaces/api/dto/v1"
|
||||
"github.com/oam-dev/kubevela/pkg/apiserver/utils/bcode"
|
||||
"github.com/oam-dev/kubevela/pkg/apiserver/utils/log"
|
||||
)
|
||||
|
||||
const (
|
||||
@@ -424,7 +424,7 @@ func getDexConfig(ctx context.Context, kubeClient client.Client) (*model.DexConf
|
||||
|
||||
config := &model.DexConfig{}
|
||||
if err := yaml.Unmarshal(dexConfigSecret.Data[secretDexConfigKey], config); err != nil {
|
||||
log.Logger.Errorf("failed to unmarshal dex config: %s", err.Error())
|
||||
klog.Errorf("failed to unmarshal dex config: %s", err.Error())
|
||||
return nil, bcode.ErrInvalidDexConfig
|
||||
}
|
||||
if len(config.StaticClients) < 1 || len(config.StaticClients[0].RedirectURIs) < 1 {
|
||||
@@ -487,7 +487,7 @@ func (d *dexHandlerImpl) login(ctx context.Context) (*apisv1.UserBase, error) {
|
||||
} else {
|
||||
systemInfo, err := d.systemInfoService.GetSystemInfo(ctx)
|
||||
if err != nil {
|
||||
log.Logger.Errorf("failed to get the system info %s", err.Error())
|
||||
klog.Errorf("failed to get the system info %s", err.Error())
|
||||
}
|
||||
user := &model.User{
|
||||
Email: claims.Email,
|
||||
@@ -500,7 +500,7 @@ func (d *dexHandlerImpl) login(ctx context.Context) (*apisv1.UserBase, error) {
|
||||
user.UserRoles = systemInfo.DexUserDefaultPlatformRoles
|
||||
}
|
||||
if err := d.Store.Add(ctx, user); err != nil {
|
||||
log.Logger.Errorf("failed to save the user from the dex: %s", err.Error())
|
||||
klog.Errorf("failed to save the user from the dex: %s", err.Error())
|
||||
return nil, err
|
||||
}
|
||||
if systemInfo != nil {
|
||||
@@ -510,7 +510,7 @@ func (d *dexHandlerImpl) login(ctx context.Context) (*apisv1.UserBase, error) {
|
||||
UserRoles: project.Roles,
|
||||
})
|
||||
if err != nil {
|
||||
log.Logger.Errorf("failed to add a user to project %s", err.Error())
|
||||
klog.Errorf("failed to add a user to project %s", err.Error())
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -26,7 +26,7 @@ import (
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
v1alpha1 "github.com/cloudtty/cloudtty/pkg/apis/cloudshell/v1alpha1"
|
||||
"github.com/cloudtty/cloudtty/pkg/apis/cloudshell/v1alpha1"
|
||||
"github.com/ghodss/yaml"
|
||||
corev1 "k8s.io/api/core/v1"
|
||||
apierrors "k8s.io/apimachinery/pkg/api/errors"
|
||||
@@ -36,6 +36,7 @@ import (
|
||||
"k8s.io/client-go/rest"
|
||||
"k8s.io/client-go/tools/clientcmd"
|
||||
"k8s.io/client-go/tools/clientcmd/api"
|
||||
"k8s.io/klog/v2"
|
||||
"sigs.k8s.io/controller-runtime/pkg/client"
|
||||
|
||||
kubevelatypes "github.com/oam-dev/kubevela/apis/types"
|
||||
@@ -43,7 +44,6 @@ import (
|
||||
apisv1 "github.com/oam-dev/kubevela/pkg/apiserver/interfaces/api/dto/v1"
|
||||
"github.com/oam-dev/kubevela/pkg/apiserver/utils"
|
||||
"github.com/oam-dev/kubevela/pkg/apiserver/utils/bcode"
|
||||
"github.com/oam-dev/kubevela/pkg/apiserver/utils/log"
|
||||
"github.com/oam-dev/kubevela/pkg/auth"
|
||||
)
|
||||
|
||||
@@ -144,7 +144,7 @@ func (c *cloudShellServiceImpl) Prepare(ctx context.Context) (*apisv1.CloudShell
|
||||
} else {
|
||||
if cloudShell.Status.Phase == v1alpha1.PhaseFailed {
|
||||
if err := c.KubeClient.Delete(ctx, &cloudShell); err != nil {
|
||||
log.Logger.Errorf("failed to clear the failed cloud shell:%s", err.Error())
|
||||
klog.Errorf("failed to clear the failed cloud shell:%s", err.Error())
|
||||
}
|
||||
res.Status = StatusFailed
|
||||
}
|
||||
@@ -234,7 +234,7 @@ func (c *cloudShellServiceImpl) prepareKubeConfig(ctx context.Context) error {
|
||||
// The kubernetes permission set is generated based on simple rules, but this is not completely strict.
|
||||
var readOnly bool
|
||||
if err != nil {
|
||||
log.Logger.Errorf("failed to get the user permissions %s", err.Error())
|
||||
klog.Errorf("failed to get the user permissions %s", err.Error())
|
||||
readOnly = true
|
||||
} else {
|
||||
readOnly = checkReadOnly(p.Name, permissions)
|
||||
@@ -242,7 +242,7 @@ func (c *cloudShellServiceImpl) prepareKubeConfig(ctx context.Context) error {
|
||||
if readOnly {
|
||||
groupName, err := c.managePrivilegesForProject(ctx, p, true)
|
||||
if err != nil {
|
||||
log.Logger.Errorf("failed to privileges the user %s", err.Error())
|
||||
klog.Errorf("failed to privileges the user %s", err.Error())
|
||||
}
|
||||
if groupName != "" {
|
||||
groups = append(groups, groupName)
|
||||
@@ -250,7 +250,7 @@ func (c *cloudShellServiceImpl) prepareKubeConfig(ctx context.Context) error {
|
||||
} else {
|
||||
groupName, err := c.managePrivilegesForProject(ctx, p, false)
|
||||
if err != nil {
|
||||
log.Logger.Errorf("failed to privileges the user %s", err.Error())
|
||||
klog.Errorf("failed to privileges the user %s", err.Error())
|
||||
}
|
||||
if groupName != "" {
|
||||
groups = append(groups, groupName)
|
||||
@@ -275,7 +275,7 @@ func (c *cloudShellServiceImpl) prepareKubeConfig(ctx context.Context) error {
|
||||
if len(c.CACert) == 0 {
|
||||
caFromServiceAccount, err := os.ReadFile(CAFilePathInCluster)
|
||||
if err != nil {
|
||||
log.Logger.Errorf("failed to read the ca file from the service account dir,%s", err.Error())
|
||||
klog.Errorf("failed to read the ca file from the service account dir,%s", err.Error())
|
||||
return err
|
||||
}
|
||||
c.CACert = caFromServiceAccount
|
||||
@@ -296,7 +296,7 @@ func (c *cloudShellServiceImpl) prepareKubeConfig(ctx context.Context) error {
|
||||
Groups: groups,
|
||||
}))
|
||||
if err != nil {
|
||||
log.Logger.Errorf("failed to generate the kube config:%s Message: %s", err.Error(), strings.ReplaceAll(buffer.String(), "\n", "\t"))
|
||||
klog.Errorf("failed to generate the kube config:%s Message: %s", err.Error(), strings.ReplaceAll(buffer.String(), "\n", "\t"))
|
||||
return err
|
||||
}
|
||||
bs, err := clientcmd.Write(*cfg)
|
||||
@@ -388,7 +388,7 @@ func (c *cloudShellServiceImpl) managePrivilegesForProject(ctx context.Context,
|
||||
projectName := project.Name
|
||||
targets, err := c.TargetService.ListTargets(ctx, 0, 0, projectName)
|
||||
if err != nil {
|
||||
log.Logger.Infof("failed to list the targets by the project name %s :%s", projectName, err.Error())
|
||||
klog.Infof("failed to list the targets by the project name %s :%s", projectName, err.Error())
|
||||
}
|
||||
var authPDs []auth.PrivilegeDescription
|
||||
for _, t := range targets.Targets {
|
||||
@@ -396,7 +396,7 @@ func (c *cloudShellServiceImpl) managePrivilegesForProject(ctx context.Context,
|
||||
}
|
||||
envs, err := c.EnvService.ListEnvs(ctx, 0, 0, apisv1.ListEnvOptions{Project: projectName})
|
||||
if err != nil {
|
||||
log.Logger.Infof("failed to list the envs by the project name %s :%s", projectName, err.Error())
|
||||
klog.Infof("failed to list the envs by the project name %s :%s", projectName, err.Error())
|
||||
}
|
||||
for _, e := range envs.Envs {
|
||||
authPDs = append(authPDs, &auth.ApplicationPrivilege{Cluster: kubevelatypes.ClusterLocalName, Namespace: e.Namespace, ReadOnly: readOnly})
|
||||
@@ -414,6 +414,6 @@ func (c *cloudShellServiceImpl) managePrivilegesForProject(ctx context.Context,
|
||||
if err := auth.GrantPrivileges(ctx, c.KubeClient, authPDs, identity, writer, auth.WithReplace); err != nil {
|
||||
return "", err
|
||||
}
|
||||
log.Logger.Debugf("GrantPrivileges: %s", writer.String())
|
||||
klog.Infof("GrantPrivileges: %s", writer.String())
|
||||
return groupName, nil
|
||||
}
|
||||
|
||||
@@ -29,6 +29,7 @@ import (
|
||||
"k8s.io/apimachinery/pkg/api/resource"
|
||||
v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||
"k8s.io/client-go/rest"
|
||||
"k8s.io/klog/v2"
|
||||
"sigs.k8s.io/controller-runtime/pkg/client"
|
||||
|
||||
"github.com/kubevela/pkg/util/rand"
|
||||
@@ -43,7 +44,6 @@ import (
|
||||
apis "github.com/oam-dev/kubevela/pkg/apiserver/interfaces/api/dto/v1"
|
||||
utils2 "github.com/oam-dev/kubevela/pkg/apiserver/utils"
|
||||
"github.com/oam-dev/kubevela/pkg/apiserver/utils/bcode"
|
||||
"github.com/oam-dev/kubevela/pkg/apiserver/utils/log"
|
||||
"github.com/oam-dev/kubevela/pkg/cloudprovider"
|
||||
"github.com/oam-dev/kubevela/pkg/multicluster"
|
||||
"github.com/oam-dev/kubevela/pkg/utils"
|
||||
@@ -100,25 +100,25 @@ func (c *clusterServiceImpl) getClusterFromDataStore(ctx context.Context, cluste
|
||||
|
||||
func (c *clusterServiceImpl) rollbackAddedClusterInDataStore(ctx context.Context, cluster *model.Cluster) {
|
||||
if e := c.Store.Delete(ctx, cluster); e != nil {
|
||||
log.Logger.Errorf("failed to rollback added cluster %s in data store: %s", utils.Sanitize(cluster.Name), e.Error())
|
||||
klog.Errorf("failed to rollback added cluster %s in data store: %s", utils.Sanitize(cluster.Name), e.Error())
|
||||
}
|
||||
}
|
||||
|
||||
func (c *clusterServiceImpl) rollbackDeletedClusterInDataStore(ctx context.Context, cluster *model.Cluster) {
|
||||
if e := c.Store.Add(ctx, cluster); e != nil {
|
||||
log.Logger.Errorf("failed to rollback deleted cluster %s in data store: %s", utils.Sanitize(cluster.Name), e.Error())
|
||||
klog.Errorf("failed to rollback deleted cluster %s in data store: %s", utils.Sanitize(cluster.Name), e.Error())
|
||||
}
|
||||
}
|
||||
|
||||
func (c *clusterServiceImpl) rollbackJoinedKubeCluster(ctx context.Context, cluster *model.Cluster) {
|
||||
if e := multicluster.DetachCluster(ctx, c.K8sClient, cluster.Name); e != nil {
|
||||
log.Logger.Errorf("failed to rollback joined cluster %s in kubevela: %s", utils.Sanitize(cluster.Name), e.Error())
|
||||
klog.Errorf("failed to rollback joined cluster %s in kubevela: %s", utils.Sanitize(cluster.Name), e.Error())
|
||||
}
|
||||
}
|
||||
|
||||
func (c *clusterServiceImpl) rollbackDetachedKubeCluster(ctx context.Context, cluster *model.Cluster) {
|
||||
if _, e := joinClusterByKubeConfigString(context.WithValue(ctx, multicluster.KubeConfigContext, c.KubeConfig), c.K8sClient, cluster.Name, cluster.KubeConfig); e != nil {
|
||||
log.Logger.Errorf("failed to rollback detached cluster %s in kubevela: %s", utils.Sanitize(cluster.Name), e.Error())
|
||||
klog.Errorf("failed to rollback detached cluster %s in kubevela: %s", utils.Sanitize(cluster.Name), e.Error())
|
||||
}
|
||||
}
|
||||
|
||||
@@ -492,7 +492,7 @@ func (c *clusterServiceImpl) getClusterResourceInfoFromK8s(ctx context.Context,
|
||||
func (c *clusterServiceImpl) ListCloudClusters(ctx context.Context, provider string, req apis.AccessKeyRequest, pageNumber int, pageSize int) (*apis.ListCloudClusterResponse, error) {
|
||||
p, err := cloudprovider.GetClusterProvider(provider, req.AccessKeyID, req.AccessKeySecret, c.K8sClient)
|
||||
if err != nil {
|
||||
log.Logger.Errorf("failed to get cluster provider: %s", err.Error())
|
||||
klog.Errorf("failed to get cluster provider: %s", err.Error())
|
||||
return nil, bcode.ErrInvalidCloudClusterProvider
|
||||
}
|
||||
clusters, total, err := p.ListCloudClusters(pageNumber, pageSize)
|
||||
@@ -500,7 +500,7 @@ func (c *clusterServiceImpl) ListCloudClusters(ctx context.Context, provider str
|
||||
if p.IsInvalidKey(err) {
|
||||
return nil, bcode.ErrInvalidAccessKeyOrSecretKey
|
||||
}
|
||||
log.Logger.Errorf("failed to list cloud clusters: %s", err.Error())
|
||||
klog.Errorf("failed to list cloud clusters: %s", err.Error())
|
||||
return nil, bcode.ErrGetCloudClusterFailure
|
||||
}
|
||||
resp := &apis.ListCloudClusterResponse{
|
||||
@@ -516,12 +516,12 @@ func (c *clusterServiceImpl) ListCloudClusters(ctx context.Context, provider str
|
||||
func (c *clusterServiceImpl) ConnectCloudCluster(ctx context.Context, provider string, req apis.ConnectCloudClusterRequest) (*apis.ClusterBase, error) {
|
||||
p, err := cloudprovider.GetClusterProvider(provider, req.AccessKeyID, req.AccessKeySecret, c.K8sClient)
|
||||
if err != nil {
|
||||
log.Logger.Errorf("failed to get cluster provider: %s", err.Error())
|
||||
klog.Errorf("failed to get cluster provider: %s", err.Error())
|
||||
return nil, bcode.ErrInvalidCloudClusterProvider
|
||||
}
|
||||
kubeConfig, err := p.GetClusterKubeConfig(req.ClusterID)
|
||||
if err != nil {
|
||||
log.Logger.Errorf("failed to get cluster kubeConfig: %s", err.Error())
|
||||
klog.Errorf("failed to get cluster kubeConfig: %s", err.Error())
|
||||
return nil, bcode.ErrGetCloudClusterFailure
|
||||
}
|
||||
cluster, err := p.GetClusterInfo(req.ClusterID)
|
||||
@@ -529,7 +529,7 @@ func (c *clusterServiceImpl) ConnectCloudCluster(ctx context.Context, provider s
|
||||
if p.IsInvalidKey(err) {
|
||||
return nil, bcode.ErrInvalidAccessKeyOrSecretKey
|
||||
}
|
||||
log.Logger.Errorf("failed to get cluster info: %s", err.Error())
|
||||
klog.Errorf("failed to get cluster info: %s", err.Error())
|
||||
return nil, bcode.ErrGetCloudClusterFailure
|
||||
}
|
||||
createReq := apis.CreateClusterRequest{
|
||||
@@ -546,7 +546,7 @@ func (c *clusterServiceImpl) ConnectCloudCluster(ctx context.Context, provider s
|
||||
func (c *clusterServiceImpl) CreateCloudCluster(ctx context.Context, provider string, req apis.CreateCloudClusterRequest) (*apis.CreateCloudClusterResponse, error) {
|
||||
p, err := cloudprovider.GetClusterProvider(provider, req.AccessKeyID, req.AccessKeySecret, c.K8sClient)
|
||||
if err != nil {
|
||||
log.Logger.Errorf("failed to get cluster provider: %s", err.Error())
|
||||
klog.Errorf("failed to get cluster provider: %s", err.Error())
|
||||
return nil, bcode.ErrInvalidCloudClusterProvider
|
||||
}
|
||||
_, err = p.CreateCloudCluster(ctx, req.Name, req.Zone, req.WorkerNumber, req.CPUCoresPerWorker, req.MemoryPerWorker)
|
||||
@@ -554,7 +554,7 @@ func (c *clusterServiceImpl) CreateCloudCluster(ctx context.Context, provider st
|
||||
if kerrors.IsAlreadyExists(err) {
|
||||
return nil, bcode.ErrCloudClusterAlreadyExists
|
||||
}
|
||||
log.Logger.Errorf("failed to bootstrap terraform configuration: %s", err.Error())
|
||||
klog.Errorf("failed to bootstrap terraform configuration: %s", err.Error())
|
||||
return nil, bcode.ErrBootstrapTerraformConfiguration
|
||||
}
|
||||
return c.GetCloudClusterCreationStatus(ctx, provider, req.Name)
|
||||
|
||||
@@ -23,12 +23,12 @@ import (
|
||||
|
||||
"github.com/pkg/errors"
|
||||
apierrors "k8s.io/apimachinery/pkg/api/errors"
|
||||
"k8s.io/klog/v2"
|
||||
"sigs.k8s.io/controller-runtime/pkg/client"
|
||||
|
||||
"github.com/oam-dev/kubevela/apis/types"
|
||||
apis "github.com/oam-dev/kubevela/pkg/apiserver/interfaces/api/dto/v1"
|
||||
"github.com/oam-dev/kubevela/pkg/apiserver/utils/bcode"
|
||||
"github.com/oam-dev/kubevela/pkg/apiserver/utils/log"
|
||||
"github.com/oam-dev/kubevela/pkg/config"
|
||||
"github.com/oam-dev/kubevela/pkg/utils"
|
||||
"github.com/oam-dev/kubevela/pkg/utils/apply"
|
||||
@@ -137,6 +137,14 @@ func (u *configServiceImpl) CreateConfig(ctx context.Context, project string, re
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
exist, err := u.Factory.IsExist(ctx, ns, req.Name)
|
||||
if err != nil {
|
||||
klog.Errorf("check config name is exist failure %s", err.Error())
|
||||
return nil, bcode.ErrConfigExist
|
||||
}
|
||||
if exist {
|
||||
return nil, bcode.ErrConfigExist
|
||||
}
|
||||
var properties = make(map[string]interface{})
|
||||
if err := json.Unmarshal([]byte(req.Properties), &properties); err != nil {
|
||||
return nil, err
|
||||
@@ -156,9 +164,6 @@ func (u *configServiceImpl) CreateConfig(ctx context.Context, project string, re
|
||||
return nil, err
|
||||
}
|
||||
if err := u.Factory.CreateOrUpdateConfig(ctx, configItem, ns); err != nil {
|
||||
if errors.Is(err, config.ErrConfigExist) {
|
||||
return nil, bcode.ErrConfigExist
|
||||
}
|
||||
return nil, err
|
||||
}
|
||||
return convertConfig(project, *configItem), nil
|
||||
@@ -196,9 +201,12 @@ func (u *configServiceImpl) UpdateConfig(ctx context.Context, project string, na
|
||||
return nil, err
|
||||
}
|
||||
if err := u.Factory.CreateOrUpdateConfig(ctx, configItem, ns); err != nil {
|
||||
if errors.Is(err, config.ErrConfigExist) {
|
||||
if errors.Is(err, config.ErrChangeTemplate) {
|
||||
return nil, bcode.ErrChangeTemplate
|
||||
}
|
||||
if errors.Is(err, config.ErrChangeSecretType) {
|
||||
return nil, bcode.ErrChangeSecretType
|
||||
}
|
||||
return nil, err
|
||||
}
|
||||
return convertConfig(project, *configItem), nil
|
||||
@@ -234,7 +242,7 @@ func (u *configServiceImpl) ListConfigs(ctx context.Context, project string, tem
|
||||
for i := range configs {
|
||||
if projectNamespace != "" {
|
||||
if err := u.Factory.MergeDistributionStatus(ctx, configs[i], projectNamespace); err != nil && !errors.Is(err, config.ErrNotFoundDistribution) {
|
||||
log.Logger.Warnf("fail to merge the status %s:%s", configs[i].Name, err.Error())
|
||||
klog.Warningf("fail to merge the status %s:%s", configs[i].Name, err.Error())
|
||||
}
|
||||
}
|
||||
item := convertConfig(project, *configs[i])
|
||||
|
||||
@@ -34,6 +34,7 @@ import (
|
||||
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
|
||||
"k8s.io/apimachinery/pkg/runtime"
|
||||
k8stypes "k8s.io/apimachinery/pkg/types"
|
||||
"k8s.io/klog/v2"
|
||||
"sigs.k8s.io/controller-runtime/pkg/client"
|
||||
|
||||
"github.com/oam-dev/kubevela/apis/core.oam.dev/v1beta1"
|
||||
@@ -41,7 +42,6 @@ import (
|
||||
apisv1 "github.com/oam-dev/kubevela/pkg/apiserver/interfaces/api/dto/v1"
|
||||
"github.com/oam-dev/kubevela/pkg/apiserver/utils"
|
||||
"github.com/oam-dev/kubevela/pkg/apiserver/utils/bcode"
|
||||
"github.com/oam-dev/kubevela/pkg/apiserver/utils/log"
|
||||
)
|
||||
|
||||
// DefinitionService definition service, Implement the management of ComponentDefinition、TraitDefinition and WorkflowStepDefinition.
|
||||
@@ -151,7 +151,7 @@ func (d *definitionServiceImpl) listDefinitions(ctx context.Context, list *unstr
|
||||
for _, def := range filteredList.Items {
|
||||
definition, err := convertDefinitionBase(def, kind)
|
||||
if err != nil {
|
||||
log.Logger.Errorf("convert definition to base failure %s", err.Error())
|
||||
klog.Errorf("convert definition to base failure %s", err.Error())
|
||||
continue
|
||||
}
|
||||
defs = append(defs, definition)
|
||||
@@ -285,7 +285,7 @@ func renderCustomUISchema(ctx context.Context, cli client.Client, name, defType
|
||||
Name: fmt.Sprintf("%s-uischema-%s", defType, name),
|
||||
}, &cm); err != nil {
|
||||
if !apierrors.IsNotFound(err) {
|
||||
log.Logger.Errorf("find uischema configmap from cluster failure %s", err.Error())
|
||||
klog.Errorf("find uischema configmap from cluster failure %s", err.Error())
|
||||
}
|
||||
return defaultSchema
|
||||
}
|
||||
@@ -295,7 +295,7 @@ func renderCustomUISchema(ctx context.Context, cli client.Client, name, defType
|
||||
}
|
||||
schema := []*utils.UIParameter{}
|
||||
if err := json.Unmarshal([]byte(data), &schema); err != nil {
|
||||
log.Logger.Errorf("unmarshal ui schema failure %s", err.Error())
|
||||
klog.Errorf("unmarshal ui schema failure %s", err.Error())
|
||||
return defaultSchema
|
||||
}
|
||||
return patchSchema(defaultSchema, schema)
|
||||
@@ -305,7 +305,7 @@ func renderCustomUISchema(ctx context.Context, cli client.Client, name, defType
|
||||
func (d *definitionServiceImpl) AddDefinitionUISchema(ctx context.Context, name, defType string, schema []*utils.UIParameter) ([]*utils.UIParameter, error) {
|
||||
dataBate, err := json.Marshal(schema)
|
||||
if err != nil {
|
||||
log.Logger.Errorf("json marshal failure %s", err.Error())
|
||||
klog.Errorf("json marshal failure %s", err.Error())
|
||||
return nil, bcode.ErrInvalidDefinitionUISchema
|
||||
}
|
||||
var cm v1.ConfigMap
|
||||
|
||||
@@ -24,6 +24,7 @@ import (
|
||||
"sort"
|
||||
|
||||
apierror "k8s.io/apimachinery/pkg/api/errors"
|
||||
"k8s.io/klog/v2"
|
||||
"sigs.k8s.io/controller-runtime/pkg/client"
|
||||
|
||||
"github.com/oam-dev/kubevela/apis/core.oam.dev/v1beta1"
|
||||
@@ -34,7 +35,6 @@ import (
|
||||
apisv1 "github.com/oam-dev/kubevela/pkg/apiserver/interfaces/api/dto/v1"
|
||||
"github.com/oam-dev/kubevela/pkg/apiserver/utils"
|
||||
"github.com/oam-dev/kubevela/pkg/apiserver/utils/bcode"
|
||||
"github.com/oam-dev/kubevela/pkg/apiserver/utils/log"
|
||||
"github.com/oam-dev/kubevela/pkg/auth"
|
||||
"github.com/oam-dev/kubevela/pkg/oam"
|
||||
util "github.com/oam-dev/kubevela/pkg/utils"
|
||||
@@ -191,7 +191,7 @@ func (p *envServiceImpl) UpdateEnv(ctx context.Context, name string, req apisv1.
|
||||
env.Name = name
|
||||
err := p.Store.Get(ctx, env)
|
||||
if err != nil {
|
||||
log.Logger.Errorf("check if env name exists failure %s", err.Error())
|
||||
klog.Errorf("check if env name exists failure %s", err.Error())
|
||||
return nil, bcode.ErrEnvNotExisted
|
||||
}
|
||||
if req.Alias != "" {
|
||||
@@ -370,7 +370,7 @@ func managePrivilegesForEnvironment(ctx context.Context, cli client.Client, env
|
||||
if err := f(ctx, cli, []auth.PrivilegeDescription{p}, identity, writer); err != nil {
|
||||
return err
|
||||
}
|
||||
log.Logger.Debugf("%s: %s", msg, writer.String())
|
||||
klog.Infof("%s: %s", msg, writer.String())
|
||||
return nil
|
||||
}
|
||||
|
||||
|
||||
@@ -23,6 +23,7 @@ import (
|
||||
|
||||
apierrors "k8s.io/apimachinery/pkg/api/errors"
|
||||
"k8s.io/apimachinery/pkg/types"
|
||||
"k8s.io/klog/v2"
|
||||
"sigs.k8s.io/controller-runtime/pkg/client"
|
||||
|
||||
"github.com/oam-dev/kubevela/apis/core.oam.dev/v1beta1"
|
||||
@@ -33,7 +34,6 @@ import (
|
||||
apisv1 "github.com/oam-dev/kubevela/pkg/apiserver/interfaces/api/dto/v1"
|
||||
"github.com/oam-dev/kubevela/pkg/apiserver/utils"
|
||||
"github.com/oam-dev/kubevela/pkg/apiserver/utils/bcode"
|
||||
"github.com/oam-dev/kubevela/pkg/apiserver/utils/log"
|
||||
pkgUtils "github.com/oam-dev/kubevela/pkg/utils"
|
||||
)
|
||||
|
||||
@@ -66,7 +66,7 @@ func NewEnvBindingService() EnvBindingService {
|
||||
func (e *envBindingServiceImpl) GetEnvBindings(ctx context.Context, app *model.Application) ([]*apisv1.EnvBindingBase, error) {
|
||||
full, err := repository.ListFullEnvBinding(ctx, e.Store, repository.EnvListOption{AppPrimaryKey: app.PrimaryKey(), ProjectName: app.Project})
|
||||
if err != nil {
|
||||
log.Logger.Errorf("list envbinding for app %s err: %v\n", app.Name, err)
|
||||
klog.Errorf("list envbinding for app %s err: %v\n", app.Name, err)
|
||||
return nil, err
|
||||
}
|
||||
return full, nil
|
||||
@@ -125,16 +125,16 @@ func (e *envBindingServiceImpl) BatchCreateEnvBinding(ctx context.Context, app *
|
||||
envBindingModel := assembler.ConvertToEnvBindingModel(app, *envbindings[i])
|
||||
env, err := repository.GetEnv(ctx, e.Store, envBindingModel.Name)
|
||||
if err != nil {
|
||||
log.Logger.Errorf("get env failure %s", err.Error())
|
||||
klog.Errorf("get env failure %s", err.Error())
|
||||
continue
|
||||
}
|
||||
if err := e.Store.Add(ctx, envBindingModel); err != nil {
|
||||
log.Logger.Errorf("add envbinding %s failure %s", pkgUtils.Sanitize(envBindingModel.Name), err.Error())
|
||||
klog.Errorf("add envbinding %s failure %s", pkgUtils.Sanitize(envBindingModel.Name), err.Error())
|
||||
continue
|
||||
}
|
||||
err = e.createEnvWorkflow(ctx, app, env, i == 0)
|
||||
if err != nil {
|
||||
log.Logger.Errorf("create env workflow failure %s", err.Error())
|
||||
klog.Errorf("create env workflow failure %s", err.Error())
|
||||
continue
|
||||
}
|
||||
}
|
||||
@@ -237,14 +237,14 @@ func (e *envBindingServiceImpl) createEnvWorkflow(ctx context.Context, app *mode
|
||||
EnvName: env.Name,
|
||||
AppPrimaryKey: app.PrimaryKey(),
|
||||
}
|
||||
log.Logger.Infof("create workflow %s for app %s", pkgUtils.Sanitize(workflow.Name), pkgUtils.Sanitize(app.PrimaryKey()))
|
||||
klog.Infof("create workflow %s for app %s", pkgUtils.Sanitize(workflow.Name), pkgUtils.Sanitize(app.PrimaryKey()))
|
||||
if err := e.Store.Add(ctx, workflow); err != nil {
|
||||
return err
|
||||
}
|
||||
err := e.Store.BatchAdd(ctx, policies)
|
||||
if err != nil {
|
||||
if err := e.WorkflowService.DeleteWorkflow(ctx, app, repository.ConvertWorkflowName(env.Name)); err != nil {
|
||||
log.Logger.Errorf("fail to rollback the workflow after fail to create policies, %s", err.Error())
|
||||
klog.Errorf("fail to rollback the workflow after fail to create policies, %s", err.Error())
|
||||
}
|
||||
return fmt.Errorf("fail to create policies %w", err)
|
||||
}
|
||||
@@ -299,6 +299,6 @@ func (e *envBindingServiceImpl) ApplicationEnvRecycle(ctx context.Context, appMo
|
||||
if err := resetRevisionsAndRecords(ctx, e.Store, appModel.Name, "", "", ""); err != nil {
|
||||
return err
|
||||
}
|
||||
log.Logger.Infof("Application %s(%s) recycle successfully from env %s", appModel.Name, name, env.Name)
|
||||
klog.Infof("Application %s(%s) recycle successfully from env %s", appModel.Name, name, env.Name)
|
||||
return nil
|
||||
}
|
||||
|
||||
@@ -23,12 +23,12 @@ import (
|
||||
"github.com/oam-dev/kubevela/apis/types"
|
||||
v1 "github.com/oam-dev/kubevela/pkg/apiserver/interfaces/api/dto/v1"
|
||||
"github.com/oam-dev/kubevela/pkg/apiserver/utils/bcode"
|
||||
"github.com/oam-dev/kubevela/pkg/apiserver/utils/log"
|
||||
"github.com/oam-dev/kubevela/pkg/utils"
|
||||
"github.com/oam-dev/kubevela/pkg/utils/common"
|
||||
"github.com/oam-dev/kubevela/pkg/utils/helm"
|
||||
|
||||
types2 "k8s.io/apimachinery/pkg/types"
|
||||
"k8s.io/klog/v2"
|
||||
"sigs.k8s.io/controller-runtime/pkg/client"
|
||||
|
||||
"helm.sh/helm/v3/pkg/repo"
|
||||
@@ -69,7 +69,7 @@ func (d defaultHelmImpl) ListChartNames(ctx context.Context, repoURL string, sec
|
||||
}
|
||||
charts, err := d.helper.ListChartsFromRepo(repoURL, skipCache, opts)
|
||||
if err != nil {
|
||||
log.Logger.Errorf("cannot fetch charts repo: %s, error: %s", utils.Sanitize(repoURL), err.Error())
|
||||
klog.Errorf("cannot fetch charts repo: %s, error: %s", utils.Sanitize(repoURL), err.Error())
|
||||
return nil, bcode.ErrListHelmChart
|
||||
}
|
||||
return charts, nil
|
||||
@@ -89,11 +89,11 @@ func (d defaultHelmImpl) ListChartVersions(ctx context.Context, repoURL string,
|
||||
}
|
||||
chartVersions, err := d.helper.ListVersions(repoURL, chartName, skipCache, opts)
|
||||
if err != nil {
|
||||
log.Logger.Errorf("cannot fetch chart versions repo: %s, chart: %s error: %s", utils.Sanitize(repoURL), utils.Sanitize(chartName), err.Error())
|
||||
klog.Errorf("cannot fetch chart versions repo: %s, chart: %s error: %s", utils.Sanitize(repoURL), utils.Sanitize(chartName), err.Error())
|
||||
return nil, bcode.ErrListHelmVersions
|
||||
}
|
||||
if len(chartVersions) == 0 {
|
||||
log.Logger.Errorf("cannot fetch chart versions repo: %s, chart: %s", utils.Sanitize(repoURL), utils.Sanitize(chartName))
|
||||
klog.Errorf("cannot fetch chart versions repo: %s, chart: %s", utils.Sanitize(repoURL), utils.Sanitize(chartName))
|
||||
return nil, bcode.ErrChartNotExist
|
||||
}
|
||||
return chartVersions, nil
|
||||
@@ -113,7 +113,7 @@ func (d defaultHelmImpl) GetChartValues(ctx context.Context, repoURL string, cha
|
||||
}
|
||||
v, err := d.helper.GetValuesFromChart(repoURL, chartName, version, skipCache, opts)
|
||||
if err != nil {
|
||||
log.Logger.Errorf("cannot fetch chart values repo: %s, chart: %s, version: %s, error: %s", utils.Sanitize(repoURL), utils.Sanitize(chartName), utils.Sanitize(version), err.Error())
|
||||
klog.Errorf("cannot fetch chart values repo: %s, chart: %s, version: %s, error: %s", utils.Sanitize(repoURL), utils.Sanitize(chartName), utils.Sanitize(version), err.Error())
|
||||
return nil, bcode.ErrGetChartValues
|
||||
}
|
||||
res := make(map[string]interface{}, len(v))
|
||||
|
||||
@@ -33,11 +33,11 @@ import (
|
||||
"github.com/google/go-containerregistry/pkg/v1/remote/transport"
|
||||
|
||||
corev1 "k8s.io/api/core/v1"
|
||||
"k8s.io/klog/v2"
|
||||
"sigs.k8s.io/controller-runtime/pkg/client"
|
||||
|
||||
"github.com/oam-dev/kubevela/apis/types"
|
||||
v1 "github.com/oam-dev/kubevela/pkg/apiserver/interfaces/api/dto/v1"
|
||||
"github.com/oam-dev/kubevela/pkg/apiserver/utils/log"
|
||||
)
|
||||
|
||||
// True -
|
||||
@@ -97,7 +97,7 @@ func (i *imageImpl) GetImageInfo(ctx context.Context, project, secretName, image
|
||||
|
||||
registries, err := i.ListImageRepos(ctx, project)
|
||||
if err != nil {
|
||||
log.Logger.Warnf("fail to list the image registries:%s", err.Error())
|
||||
klog.Warningf("fail to list the image registries:%s", err.Error())
|
||||
imageInfo.Message = "There is no registry."
|
||||
return imageInfo
|
||||
}
|
||||
@@ -151,7 +151,7 @@ func getAccountFromSecret(secret corev1.Secret, registryDomain string) (insecure
|
||||
if len(conf) > 0 {
|
||||
var authConfig map[string]map[string]map[string]string
|
||||
if err := json.Unmarshal(conf, &authConfig); err != nil {
|
||||
log.Logger.Warnf("fail to unmarshal the secret %s , %s", secret.Name, err.Error())
|
||||
klog.Warningf("fail to unmarshal the secret %s , %s", secret.Name, err.Error())
|
||||
return
|
||||
}
|
||||
if authConfig != nil && authConfig["auths"] != nil && authConfig["auths"][registryDomain] != nil {
|
||||
|
||||
@@ -29,7 +29,6 @@ import (
|
||||
"time"
|
||||
|
||||
"github.com/fatih/color"
|
||||
|
||||
"github.com/kubevela/workflow/api/v1alpha1"
|
||||
"github.com/kubevela/workflow/pkg/cue/model/value"
|
||||
wfTypes "github.com/kubevela/workflow/pkg/types"
|
||||
@@ -42,6 +41,7 @@ import (
|
||||
"k8s.io/apimachinery/pkg/types"
|
||||
"k8s.io/client-go/kubernetes"
|
||||
"k8s.io/client-go/rest"
|
||||
"k8s.io/klog/v2"
|
||||
"sigs.k8s.io/controller-runtime/pkg/client"
|
||||
|
||||
types2 "github.com/oam-dev/kubevela/apis/types"
|
||||
@@ -50,7 +50,6 @@ import (
|
||||
apis "github.com/oam-dev/kubevela/pkg/apiserver/interfaces/api/dto/v1"
|
||||
"github.com/oam-dev/kubevela/pkg/apiserver/utils"
|
||||
"github.com/oam-dev/kubevela/pkg/apiserver/utils/bcode"
|
||||
"github.com/oam-dev/kubevela/pkg/apiserver/utils/log"
|
||||
"github.com/oam-dev/kubevela/pkg/oam/util"
|
||||
pkgutils "github.com/oam-dev/kubevela/pkg/utils"
|
||||
)
|
||||
@@ -210,7 +209,7 @@ func (p pipelineServiceImpl) ListPipelines(ctx context.Context, req apis.ListPip
|
||||
info, err = p.getPipelineInfo(ctx, pipeline, projectMap[pipeline.Project].Namespace)
|
||||
if err != nil {
|
||||
// Since we are listing pipelines. We should not return directly if we cannot get pipeline info
|
||||
log.Logger.Errorf("get pipeline %s/%s info error: %v", pipeline.Project, pkgutils.Sanitize(pipeline.Name), err)
|
||||
klog.Errorf("get pipeline %s/%s info error: %v", pipeline.Project, pkgutils.Sanitize(pipeline.Name), err)
|
||||
continue
|
||||
}
|
||||
}
|
||||
@@ -248,7 +247,7 @@ func (p pipelineServiceImpl) GetPipeline(ctx context.Context, name string, getIn
|
||||
if getInfo {
|
||||
in, err := p.getPipelineInfo(ctx, pipeline, project.Namespace)
|
||||
if err != nil {
|
||||
log.Logger.Errorf("get pipeline %s/%s info error: %v", pipeline.Project, pkgutils.Sanitize(pipeline.Name), err)
|
||||
klog.Errorf("get pipeline %s/%s info error: %v", pipeline.Project, pkgutils.Sanitize(pipeline.Name), err)
|
||||
return nil, bcode.ErrGetPipelineInfo
|
||||
}
|
||||
if in != nil {
|
||||
@@ -304,11 +303,11 @@ func (p pipelineServiceImpl) DeletePipeline(ctx context.Context, pl apis.Pipelin
|
||||
}
|
||||
// Clean up pipeline: 1. delete pipeline runs 2. delete contexts 3. delete pipeline
|
||||
if err := p.PipelineRunService.CleanPipelineRuns(ctx, pl); err != nil {
|
||||
log.Logger.Errorf("delete pipeline all pipeline-runs failure: %s", err.Error())
|
||||
klog.Errorf("delete pipeline all pipeline-runs failure: %s", err.Error())
|
||||
return err
|
||||
}
|
||||
if err := p.ContextService.DeleteAllContexts(ctx, pl.Project.Name, pl.Name); err != nil {
|
||||
log.Logger.Errorf("delete pipeline all context failure: %s", err.Error())
|
||||
klog.Errorf("delete pipeline all context failure: %s", err.Error())
|
||||
return err
|
||||
}
|
||||
if err := p.Store.Delete(ctx, pipeline); err != nil {
|
||||
@@ -351,7 +350,7 @@ func (p pipelineRunServiceImpl) GetPipelineRunOutput(ctx context.Context, pipeli
|
||||
}
|
||||
v, err := wfUtils.GetDataFromContext(ctx, p.KubeClient, ctxBackend.Name, pipelineRun.PipelineRunName, ctxBackend.Namespace)
|
||||
if err != nil {
|
||||
log.Logger.Errorf("get data from context backend failed: %v", err)
|
||||
klog.Errorf("get data from context backend failed: %v", err)
|
||||
return apis.GetPipelineRunOutputResponse{}, bcode.ErrGetContextBackendData
|
||||
}
|
||||
for _, s := range pipelineRun.Status.Steps {
|
||||
@@ -413,7 +412,7 @@ func (p pipelineRunServiceImpl) GetPipelineRunInput(ctx context.Context, pipelin
|
||||
}
|
||||
v, err := wfUtils.GetDataFromContext(ctx, p.KubeClient, ctxBackend.Name, pipelineRun.PipelineRunName, ctxBackend.Namespace)
|
||||
if err != nil {
|
||||
log.Logger.Errorf("get data from context backend failed: %v", err)
|
||||
klog.Errorf("get data from context backend failed: %v", err)
|
||||
return apis.GetPipelineRunInputResponse{}, bcode.ErrGetContextBackendData
|
||||
}
|
||||
for _, s := range pipelineRun.Status.Steps {
|
||||
@@ -507,13 +506,13 @@ func (p pipelineRunServiceImpl) GetPipelineRunLog(ctx context.Context, pipelineR
|
||||
var logsBuilder strings.Builder
|
||||
readCloser, err := wfUtils.GetLogsFromURL(ctx, logConfig.Source.URL)
|
||||
if err != nil {
|
||||
log.Logger.Errorf("get logs from url %s failed: %v", logConfig.Source.URL, err)
|
||||
klog.Errorf("get logs from url %s failed: %v", logConfig.Source.URL, err)
|
||||
return apis.GetPipelineRunLogResponse{}, bcode.ErrReadSourceLog
|
||||
}
|
||||
//nolint:errcheck
|
||||
defer readCloser.Close()
|
||||
if _, err := io.Copy(&logsBuilder, readCloser); err != nil {
|
||||
log.Logger.Errorf("copy logs from url %s failed: %v", logConfig.Source.URL, err)
|
||||
klog.Errorf("copy logs from url %s failed: %v", logConfig.Source.URL, err)
|
||||
return apis.GetPipelineRunLogResponse{}, bcode.ErrReadSourceLog
|
||||
}
|
||||
logs = logsBuilder.String()
|
||||
@@ -613,12 +612,12 @@ func getResourceLogs(ctx context.Context, config *rest.Config, cli client.Client
|
||||
}
|
||||
pods, err := wfUtils.GetPodListFromResources(ctx, cli, resources)
|
||||
if err != nil {
|
||||
log.Logger.Errorf("fail to get pod list from resources: %v", err)
|
||||
klog.Errorf("fail to get pod list from resources: %v", err)
|
||||
return "", err
|
||||
}
|
||||
clientSet, err := kubernetes.NewForConfig(config)
|
||||
if err != nil {
|
||||
log.Logger.Errorf("fail to get clientset from kubeconfig: %v", err)
|
||||
klog.Errorf("fail to get clientset from kubeconfig: %v", err)
|
||||
return "", err
|
||||
}
|
||||
podContainers := make([]PodContainer, 0)
|
||||
@@ -652,7 +651,7 @@ func getResourceLogs(ctx context.Context, config *rest.Config, cli client.Client
|
||||
req := clientSet.CoreV1().Pods(pc.Namespace).GetLogs(pc.Name, &podLogOpts)
|
||||
podLogs, err := req.Stream(ctxQuery)
|
||||
if err != nil {
|
||||
log.Logger.Errorf("fail to get pod logs: %v", err)
|
||||
klog.Errorf("fail to get pod logs: %v", err)
|
||||
return
|
||||
}
|
||||
defer func() {
|
||||
@@ -687,7 +686,7 @@ func getResourceLogs(ctx context.Context, config *rest.Config, cli client.Client
|
||||
}
|
||||
if readErr != nil {
|
||||
errPrint(buf, "error in copy information from APIServer to buffer: %s", err.Error())
|
||||
log.Logger.Errorf("fail to copy pod logs: %v", err)
|
||||
klog.Errorf("fail to copy pod logs: %v", err)
|
||||
}
|
||||
logMap.Store(fmt.Sprintf("%s/%s", pc.Name, pc.Container), buf.String())
|
||||
}(pc)
|
||||
@@ -742,7 +741,6 @@ func pipelineStep2WorkflowStep(step model.WorkflowStep) v1alpha1.WorkflowStep {
|
||||
|
||||
func pipelineSpec2WorkflowSpec(spec model.WorkflowSpec) *v1alpha1.WorkflowSpec {
|
||||
res := &v1alpha1.WorkflowSpec{
|
||||
Mode: spec.Mode,
|
||||
Steps: make([]v1alpha1.WorkflowStep, 0),
|
||||
}
|
||||
for _, step := range spec.Steps {
|
||||
@@ -925,7 +923,7 @@ func (p pipelineRunServiceImpl) GetPipelineRun(ctx context.Context, meta apis.Pi
|
||||
Project: project.Name,
|
||||
}
|
||||
if err := p.Store.Get(ctx, pipeline); err != nil {
|
||||
log.Logger.Errorf("failed to load the workflow %s", err.Error())
|
||||
klog.Errorf("failed to load the workflow %s", err.Error())
|
||||
if errors.Is(err, datastore.ErrRecordNotExist) {
|
||||
return nil, bcode.ErrPipelineNotExist
|
||||
}
|
||||
@@ -1031,7 +1029,7 @@ func (c contextServiceImpl) CreateContext(ctx context.Context, projectName, pipe
|
||||
}
|
||||
}
|
||||
if _, ok := modelCtx.Contexts[context.Name]; ok {
|
||||
log.Logger.Errorf("context %s already exists", pkgutils.Sanitize(context.Name))
|
||||
klog.Errorf("context %s already exists", pkgutils.Sanitize(context.Name))
|
||||
return nil, bcode.ErrContextAlreadyExist
|
||||
}
|
||||
modelCtx.Contexts[context.Name] = context.Values
|
||||
@@ -1216,7 +1214,7 @@ func (p pipelineRunServiceImpl) workflowRun2runBriefing(ctx context.Context, run
|
||||
if contextName, ok := run.Labels[labelContext]; ok {
|
||||
apiContext, err = p.ContextService.GetContext(ctx, project.Name, pipelineName, contextName)
|
||||
if err != nil {
|
||||
log.Logger.Warnf("failed to get pipeline run context %s/%s/%s: %v", project, pipelineName, contextName, err)
|
||||
klog.Warningf("failed to get pipeline run context %s/%s/%s: %v", project, pipelineName, contextName, err)
|
||||
apiContext = nil
|
||||
}
|
||||
}
|
||||
|
||||
@@ -23,6 +23,7 @@ import (
|
||||
|
||||
terraformapi "github.com/oam-dev/terraform-controller/api/v1beta1"
|
||||
apierrors "k8s.io/apimachinery/pkg/api/errors"
|
||||
"k8s.io/klog/v2"
|
||||
"sigs.k8s.io/controller-runtime/pkg/client"
|
||||
|
||||
"github.com/oam-dev/kubevela/apis/types"
|
||||
@@ -30,7 +31,6 @@ import (
|
||||
"github.com/oam-dev/kubevela/pkg/apiserver/infrastructure/datastore"
|
||||
apisv1 "github.com/oam-dev/kubevela/pkg/apiserver/interfaces/api/dto/v1"
|
||||
"github.com/oam-dev/kubevela/pkg/apiserver/utils/bcode"
|
||||
"github.com/oam-dev/kubevela/pkg/apiserver/utils/log"
|
||||
"github.com/oam-dev/kubevela/pkg/multicluster"
|
||||
"github.com/oam-dev/kubevela/pkg/utils"
|
||||
)
|
||||
@@ -97,7 +97,7 @@ func (p *projectServiceImpl) InitDefaultProjectEnvTarget(ctx context.Context, de
|
||||
if count > 0 {
|
||||
return nil
|
||||
}
|
||||
log.Logger.Info("no default project found, adding a default project with default env and target")
|
||||
klog.Info("no default project found, adding a default project with default env and target")
|
||||
|
||||
_, err = p.CreateProject(ctx, apisv1.CreateProjectRequest{
|
||||
Name: model.DefaultInitName,
|
||||
@@ -169,7 +169,7 @@ func (p *projectServiceImpl) DetailProject(ctx context.Context, projectName stri
|
||||
var user = &model.User{Name: project.Owner}
|
||||
if project.Owner != "" {
|
||||
if err := p.Store.Get(ctx, user); err != nil {
|
||||
log.Logger.Warnf("get project owner %s info failure %s", project.Owner, err.Error())
|
||||
klog.Warningf("get project owner %s info failure %s", project.Owner, err.Error())
|
||||
}
|
||||
}
|
||||
return ConvertProjectModel2Base(project, user), nil
|
||||
@@ -187,7 +187,7 @@ func listProjects(ctx context.Context, ds datastore.DataStore, page, pageSize in
|
||||
var user = &model.User{Name: project.Owner}
|
||||
if project.Owner != "" {
|
||||
if err := ds.Get(ctx, user); err != nil {
|
||||
log.Logger.Warnf("get project owner %s info failure %s", project.Owner, err.Error())
|
||||
klog.Warningf("get project owner %s info failure %s", project.Owner, err.Error())
|
||||
}
|
||||
}
|
||||
projects = append(projects, ConvertProjectModel2Base(project, user))
|
||||
@@ -297,7 +297,7 @@ func (p *projectServiceImpl) DeleteProject(ctx context.Context, name string) err
|
||||
func (p *projectServiceImpl) CreateProject(ctx context.Context, req apisv1.CreateProjectRequest) (*apisv1.ProjectBase, error) {
|
||||
exist, err := p.Store.IsExist(ctx, &model.Project{Name: req.Name})
|
||||
if err != nil {
|
||||
log.Logger.Errorf("check project name is exist failure %s", err.Error())
|
||||
klog.Errorf("check project name is exist failure %s", err.Error())
|
||||
return nil, bcode.ErrProjectIsExist
|
||||
}
|
||||
if exist {
|
||||
@@ -334,7 +334,7 @@ func (p *projectServiceImpl) CreateProject(ctx context.Context, req apisv1.Creat
|
||||
}
|
||||
|
||||
if err := p.RbacService.SyncDefaultRoleAndUsersForProject(ctx, newProject); err != nil {
|
||||
log.Logger.Errorf("fail to sync the default role and users for the project: %s", err.Error())
|
||||
klog.Errorf("fail to sync the default role and users for the project: %s", err.Error())
|
||||
}
|
||||
|
||||
return ConvertProjectModel2Base(newProject, user), nil
|
||||
|
||||
@@ -26,6 +26,7 @@ import (
|
||||
"sync"
|
||||
|
||||
"github.com/emicklei/go-restful/v3"
|
||||
"k8s.io/klog/v2"
|
||||
"sigs.k8s.io/controller-runtime/pkg/client"
|
||||
|
||||
"github.com/oam-dev/kubevela/apis/types"
|
||||
@@ -36,7 +37,6 @@ import (
|
||||
apisv1 "github.com/oam-dev/kubevela/pkg/apiserver/interfaces/api/dto/v1"
|
||||
apiserverutils "github.com/oam-dev/kubevela/pkg/apiserver/utils"
|
||||
"github.com/oam-dev/kubevela/pkg/apiserver/utils/bcode"
|
||||
"github.com/oam-dev/kubevela/pkg/apiserver/utils/log"
|
||||
"github.com/oam-dev/kubevela/pkg/auth"
|
||||
"github.com/oam-dev/kubevela/pkg/utils"
|
||||
)
|
||||
@@ -590,7 +590,7 @@ func (p *rbacServiceImpl) CheckPerm(resource string, actions ...string) func(req
|
||||
}
|
||||
path, err := checkResourcePath(resource)
|
||||
if err != nil {
|
||||
log.Logger.Errorf("check resource path failure %s", err.Error())
|
||||
klog.Errorf("check resource path failure %s", err.Error())
|
||||
bcode.ReturnError(req, res, bcode.ErrForbidden)
|
||||
return
|
||||
}
|
||||
@@ -634,7 +634,7 @@ func (p *rbacServiceImpl) CheckPerm(resource string, actions ...string) func(req
|
||||
projectName := getProjectName()
|
||||
permissions, err := p.GetUserPermissions(req.Request.Context(), user, projectName, true)
|
||||
if err != nil {
|
||||
log.Logger.Errorf("get user's perm policies failure %s, user is %s", err.Error(), user.Name)
|
||||
klog.Errorf("get user's perm policies failure %s, user is %s", err.Error(), user.Name)
|
||||
bcode.ReturnError(req, res, bcode.ErrForbidden)
|
||||
return
|
||||
}
|
||||
@@ -696,7 +696,7 @@ func (p *rbacServiceImpl) DeleteRole(ctx context.Context, projectName, roleName
|
||||
func (p *rbacServiceImpl) DeletePermission(ctx context.Context, projectName, permName string) error {
|
||||
roles, _, err := repository.ListRoles(ctx, p.Store, projectName, 0, 0)
|
||||
if err != nil {
|
||||
log.Logger.Errorf("fail to list the roles: %s", err.Error())
|
||||
klog.Errorf("fail to list the roles: %s", err.Error())
|
||||
return bcode.ErrPermissionIsUsed
|
||||
}
|
||||
for _, role := range roles {
|
||||
@@ -768,7 +768,7 @@ func (p *rbacServiceImpl) ListRole(ctx context.Context, projectName string, page
|
||||
|
||||
policies, err := p.listPermPolices(ctx, projectName, utils.MapKey2Array(policySet))
|
||||
if err != nil {
|
||||
log.Logger.Errorf("list perm policies failure %s", err.Error())
|
||||
klog.Errorf("list perm policies failure %s", err.Error())
|
||||
}
|
||||
var policyMap = make(map[string]*model.Permission)
|
||||
for i, policy := range policies {
|
||||
@@ -1073,6 +1073,6 @@ func managePrivilegesForAdminUser(ctx context.Context, cli client.Client, roleNa
|
||||
if err := f(ctx, cli, []auth.PrivilegeDescription{p}, identity, writer); err != nil {
|
||||
return err
|
||||
}
|
||||
log.Logger.Debugf("%s: %s", msg, writer.String())
|
||||
klog.Infof("%s: %s", msg, writer.String())
|
||||
return nil
|
||||
}
|
||||
|
||||
@@ -22,6 +22,7 @@ import (
|
||||
"errors"
|
||||
"fmt"
|
||||
|
||||
"k8s.io/klog/v2"
|
||||
"sigs.k8s.io/controller-runtime/pkg/client"
|
||||
|
||||
"github.com/oam-dev/kubevela/pkg/apiserver/domain/model"
|
||||
@@ -30,7 +31,6 @@ import (
|
||||
apisv1 "github.com/oam-dev/kubevela/pkg/apiserver/interfaces/api/dto/v1"
|
||||
"github.com/oam-dev/kubevela/pkg/apiserver/utils"
|
||||
"github.com/oam-dev/kubevela/pkg/apiserver/utils/bcode"
|
||||
"github.com/oam-dev/kubevela/pkg/apiserver/utils/log"
|
||||
"github.com/oam-dev/kubevela/pkg/auth"
|
||||
"github.com/oam-dev/kubevela/pkg/multicluster"
|
||||
)
|
||||
@@ -228,14 +228,14 @@ func (dt *targetServiceImpl) convertFromTargetModel(ctx context.Context, target
|
||||
Name: target.Project,
|
||||
}
|
||||
if err := dt.Store.Get(ctx, &project); err != nil {
|
||||
log.Logger.Errorf("get project failure %s", err.Error())
|
||||
klog.Errorf("get project failure %s", err.Error())
|
||||
}
|
||||
targetBase.Project = apisv1.NameAlias{Name: project.Name, Alias: project.Alias}
|
||||
}
|
||||
if targetBase.Cluster != nil && targetBase.Cluster.ClusterName != "" {
|
||||
cluster, err := _getClusterFromDataStore(ctx, dt.Store, target.Cluster.ClusterName)
|
||||
if err != nil {
|
||||
log.Logger.Errorf("query cluster info failure %s", err.Error())
|
||||
klog.Errorf("query cluster info failure %s", err.Error())
|
||||
}
|
||||
if cluster != nil {
|
||||
targetBase.ClusterAlias = cluster.Alias
|
||||
@@ -259,7 +259,7 @@ func managePrivilegesForTarget(ctx context.Context, cli client.Client, target *m
|
||||
if err := f(ctx, cli, []auth.PrivilegeDescription{p}, identity, writer); err != nil {
|
||||
return err
|
||||
}
|
||||
log.Logger.Debugf("%s: %s", msg, writer.String())
|
||||
klog.Infof("%s: %s", msg, writer.String())
|
||||
return nil
|
||||
}
|
||||
|
||||
|
||||
@@ -22,13 +22,13 @@ import (
|
||||
|
||||
"golang.org/x/crypto/bcrypt"
|
||||
"helm.sh/helm/v3/pkg/time"
|
||||
"k8s.io/klog/v2"
|
||||
"sigs.k8s.io/controller-runtime/pkg/client"
|
||||
|
||||
"github.com/oam-dev/kubevela/pkg/apiserver/domain/model"
|
||||
"github.com/oam-dev/kubevela/pkg/apiserver/infrastructure/datastore"
|
||||
apisv1 "github.com/oam-dev/kubevela/pkg/apiserver/interfaces/api/dto/v1"
|
||||
"github.com/oam-dev/kubevela/pkg/apiserver/utils/bcode"
|
||||
"github.com/oam-dev/kubevela/pkg/apiserver/utils/log"
|
||||
pkgUtils "github.com/oam-dev/kubevela/pkg/utils"
|
||||
)
|
||||
|
||||
@@ -84,12 +84,12 @@ func (u *userServiceImpl) Init(ctx context.Context) error {
|
||||
return err
|
||||
}
|
||||
// print default password of admin user in log
|
||||
log.Logger.Infof("initialized admin username and password: admin / %s", InitAdminPassword)
|
||||
klog.Infof("initialized admin username and password: admin / %s", InitAdminPassword)
|
||||
} else {
|
||||
return err
|
||||
}
|
||||
}
|
||||
log.Logger.Info("admin user is exist")
|
||||
klog.Info("admin user is exist")
|
||||
return nil
|
||||
}
|
||||
|
||||
@@ -108,7 +108,7 @@ func (u *userServiceImpl) GetUser(ctx context.Context, username string) (*model.
|
||||
func (u *userServiceImpl) DetailUser(ctx context.Context, user *model.User) (*apisv1.DetailUserResponse, error) {
|
||||
roles, err := u.RbacService.ListRole(ctx, "", 0, 0)
|
||||
if err != nil {
|
||||
log.Logger.Warnf("list platform roles failure %s", err.Error())
|
||||
klog.Warningf("list platform roles failure %s", err.Error())
|
||||
}
|
||||
detailUser := convertUserModel(user, roles)
|
||||
pUser := &model.ProjectUser{
|
||||
@@ -125,7 +125,7 @@ func (u *userServiceImpl) DetailUser(ctx context.Context, user *model.User) (*ap
|
||||
if ok {
|
||||
project, err := u.ProjectService.DetailProject(ctx, pu.ProjectName)
|
||||
if err != nil {
|
||||
log.Logger.Errorf("failed to delete project(%s) info: %s", pu.ProjectName, err.Error())
|
||||
klog.Errorf("failed to delete project(%s) info: %s", pu.ProjectName, err.Error())
|
||||
continue
|
||||
}
|
||||
detailUser.Projects = append(detailUser.Projects, project)
|
||||
@@ -147,11 +147,11 @@ func (u *userServiceImpl) DeleteUser(ctx context.Context, username string) error
|
||||
for _, v := range projectUsers {
|
||||
pu := v.(*model.ProjectUser)
|
||||
if err := u.Store.Delete(ctx, pu); err != nil {
|
||||
log.Logger.Errorf("failed to delete project user %s: %s", pu.PrimaryKey(), err.Error())
|
||||
klog.Errorf("failed to delete project user %s: %s", pu.PrimaryKey(), err.Error())
|
||||
}
|
||||
}
|
||||
if err := u.Store.Delete(ctx, &model.User{Name: username}); err != nil {
|
||||
log.Logger.Errorf("failed to delete user %s %v", pkgUtils.Sanitize(username), err.Error())
|
||||
klog.Errorf("failed to delete user %s %v", pkgUtils.Sanitize(username), err.Error())
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
@@ -261,7 +261,7 @@ func (u *userServiceImpl) ListUsers(ctx context.Context, page, pageSize int, lis
|
||||
}
|
||||
roles, err := u.RbacService.ListRole(ctx, "", 0, 0)
|
||||
if err != nil {
|
||||
log.Logger.Warnf("list platform roles failure %s", err.Error())
|
||||
klog.Warningf("list platform roles failure %s", err.Error())
|
||||
}
|
||||
for _, v := range users {
|
||||
user, ok := v.(*model.User)
|
||||
@@ -312,7 +312,7 @@ func (u *userServiceImpl) DetailLoginUserInfo(ctx context.Context) (*apisv1.Logi
|
||||
}
|
||||
user, err := u.GetUser(ctx, userName)
|
||||
if !ok {
|
||||
log.Logger.Errorf("get login user model failure %s", err.Error())
|
||||
klog.Errorf("get login user model failure %s", err.Error())
|
||||
return nil, bcode.ErrUnauthorized
|
||||
}
|
||||
projects, err := u.ProjectService.ListUserProjects(ctx, userName)
|
||||
@@ -323,7 +323,7 @@ func (u *userServiceImpl) DetailLoginUserInfo(ctx context.Context) (*apisv1.Logi
|
||||
for _, project := range projects {
|
||||
perms, err := u.RbacService.GetUserPermissions(ctx, user, project.Name, false)
|
||||
if err != nil {
|
||||
log.Logger.Errorf("list user %s perm policies from project %s failure %s", user.Name, project.Name, err.Error())
|
||||
klog.Errorf("list user %s perm policies from project %s failure %s", user.Name, project.Name, err.Error())
|
||||
continue
|
||||
}
|
||||
projectPermissions[project.Name] = func() (list []apisv1.PermissionBase) {
|
||||
@@ -343,7 +343,7 @@ func (u *userServiceImpl) DetailLoginUserInfo(ctx context.Context) (*apisv1.Logi
|
||||
}
|
||||
perms, err := u.RbacService.GetUserPermissions(ctx, user, "", true)
|
||||
if err != nil {
|
||||
log.Logger.Errorf("list user %s platform perm policies failure %s", user.Name, err.Error())
|
||||
klog.Errorf("list user %s platform perm policies failure %s", user.Name, err.Error())
|
||||
}
|
||||
var platformPermissions []apisv1.PermissionBase
|
||||
for _, perm := range perms {
|
||||
|
||||
@@ -22,6 +22,7 @@ import (
|
||||
"strings"
|
||||
|
||||
"k8s.io/client-go/rest"
|
||||
"k8s.io/klog/v2"
|
||||
"sigs.k8s.io/controller-runtime/pkg/client"
|
||||
|
||||
"github.com/kubevela/workflow/pkg/cue/packages"
|
||||
@@ -29,7 +30,6 @@ import (
|
||||
"github.com/oam-dev/kubevela/pkg/apiserver/infrastructure/clients"
|
||||
apis "github.com/oam-dev/kubevela/pkg/apiserver/interfaces/api/dto/v1"
|
||||
"github.com/oam-dev/kubevela/pkg/apiserver/utils/bcode"
|
||||
"github.com/oam-dev/kubevela/pkg/apiserver/utils/log"
|
||||
"github.com/oam-dev/kubevela/pkg/oam/discoverymapper"
|
||||
"github.com/oam-dev/kubevela/pkg/velaql"
|
||||
)
|
||||
@@ -50,12 +50,12 @@ type velaQLServiceImpl struct {
|
||||
func NewVelaQLService() VelaQLService {
|
||||
dm, err := clients.GetDiscoverMapper()
|
||||
if err != nil {
|
||||
log.Logger.Fatalf("get discover mapper failure %s", err.Error())
|
||||
klog.Fatalf("get discover mapper failure %s", err.Error())
|
||||
}
|
||||
|
||||
pd, err := clients.GetPackageDiscover()
|
||||
if err != nil {
|
||||
log.Logger.Fatalf("get package discover failure %s", err.Error())
|
||||
klog.Fatalf("get package discover failure %s", err.Error())
|
||||
}
|
||||
return &velaQLServiceImpl{
|
||||
dm: dm,
|
||||
@@ -72,14 +72,14 @@ func (v *velaQLServiceImpl) QueryView(ctx context.Context, velaQL string) (*apis
|
||||
|
||||
queryValue, err := velaql.NewViewHandler(v.KubeClient, v.KubeConfig, v.dm, v.pd).QueryView(ctx, query)
|
||||
if err != nil {
|
||||
log.Logger.Errorf("fail to query the view %s", err.Error())
|
||||
klog.Errorf("fail to query the view %s", err.Error())
|
||||
return nil, bcode.ErrViewQuery
|
||||
}
|
||||
|
||||
resp := apis.VelaQLViewResponse{}
|
||||
err = queryValue.UnmarshalTo(&resp)
|
||||
if err != nil {
|
||||
log.Logger.Errorf("decode the velaQL response to json failure %s", err.Error())
|
||||
klog.Errorf("decode the velaQL response to json failure %s", err.Error())
|
||||
return nil, bcode.ErrParseQuery2Json
|
||||
}
|
||||
if strings.Contains(velaQL, "collect-logs") {
|
||||
|
||||
@@ -25,12 +25,12 @@ import (
|
||||
|
||||
"github.com/emicklei/go-restful/v3"
|
||||
"k8s.io/apimachinery/pkg/runtime"
|
||||
"k8s.io/klog/v2"
|
||||
|
||||
"github.com/oam-dev/kubevela/pkg/apiserver/domain/model"
|
||||
"github.com/oam-dev/kubevela/pkg/apiserver/infrastructure/datastore"
|
||||
apisv1 "github.com/oam-dev/kubevela/pkg/apiserver/interfaces/api/dto/v1"
|
||||
"github.com/oam-dev/kubevela/pkg/apiserver/utils/bcode"
|
||||
"github.com/oam-dev/kubevela/pkg/apiserver/utils/log"
|
||||
"github.com/oam-dev/kubevela/pkg/policy/envbinding"
|
||||
)
|
||||
|
||||
@@ -263,7 +263,7 @@ func (c *acrHandlerImpl) install() {
|
||||
func (c dockerHubHandlerImpl) handle(ctx context.Context, trigger *model.ApplicationTrigger, app *model.Application) (interface{}, error) {
|
||||
dockerHubReq := c.req
|
||||
if dockerHubReq.Repository.Status != "Active" {
|
||||
log.Logger.Debugf("receive dockerhub webhook but not create event: %v", dockerHubReq)
|
||||
klog.Infof("receive dockerhub webhook but not create event: %v", dockerHubReq)
|
||||
return &apisv1.ApplicationDockerhubWebhookResponse{
|
||||
State: "failed",
|
||||
Description: "not create event",
|
||||
@@ -326,12 +326,12 @@ func parseTimeString(t string) time.Time {
|
||||
|
||||
l, err := time.LoadLocation("PRC")
|
||||
if err != nil {
|
||||
log.Logger.Errorf("failed to load location: %v", err)
|
||||
klog.Errorf("failed to load location: %v", err)
|
||||
return time.Time{}
|
||||
}
|
||||
parsedTime, err := time.ParseInLocation("2006-01-02 15:04:05", t, l)
|
||||
if err != nil {
|
||||
log.Logger.Errorf("failed to parse time: %v", err)
|
||||
klog.Errorf("failed to parse time: %v", err)
|
||||
return time.Time{}
|
||||
}
|
||||
return parsedTime
|
||||
|
||||
@@ -42,7 +42,6 @@ import (
|
||||
apisv1 "github.com/oam-dev/kubevela/pkg/apiserver/interfaces/api/dto/v1"
|
||||
"github.com/oam-dev/kubevela/pkg/apiserver/utils"
|
||||
"github.com/oam-dev/kubevela/pkg/apiserver/utils/bcode"
|
||||
"github.com/oam-dev/kubevela/pkg/apiserver/utils/log"
|
||||
"github.com/oam-dev/kubevela/pkg/oam"
|
||||
pkgUtils "github.com/oam-dev/kubevela/pkg/utils"
|
||||
"github.com/oam-dev/kubevela/pkg/utils/apply"
|
||||
@@ -93,11 +92,11 @@ func (w *workflowServiceImpl) DeleteWorkflow(ctx context.Context, app *model.App
|
||||
}
|
||||
records, err := w.Store.List(ctx, &record, &datastore.ListOptions{})
|
||||
if err != nil {
|
||||
log.Logger.Errorf("list workflow %s record failure %s", pkgUtils.Sanitize(workflow.PrimaryKey()), err.Error())
|
||||
klog.Errorf("list workflow %s record failure %s", pkgUtils.Sanitize(workflow.PrimaryKey()), err.Error())
|
||||
}
|
||||
for _, record := range records {
|
||||
if err := w.Store.Delete(ctx, record); err != nil {
|
||||
log.Logger.Errorf("delete workflow record %s failure %s", record.PrimaryKey(), err.Error())
|
||||
klog.Errorf("delete workflow record %s failure %s", record.PrimaryKey(), err.Error())
|
||||
}
|
||||
}
|
||||
if err := w.Store.Delete(ctx, workflow); err != nil {
|
||||
@@ -124,7 +123,7 @@ func (w *workflowServiceImpl) DeleteWorkflowByApp(ctx context.Context, app *mode
|
||||
for i := range workflows {
|
||||
workflow := workflows[i].(*model.Workflow)
|
||||
if err := w.Store.Delete(ctx, workflow); err != nil {
|
||||
log.Logger.Errorf("delete workflow %s failure %s", workflow.PrimaryKey(), err.Error())
|
||||
klog.Errorf("delete workflow %s failure %s", workflow.PrimaryKey(), err.Error())
|
||||
}
|
||||
}
|
||||
var record = model.WorkflowRecord{
|
||||
@@ -132,11 +131,11 @@ func (w *workflowServiceImpl) DeleteWorkflowByApp(ctx context.Context, app *mode
|
||||
}
|
||||
records, err := w.Store.List(ctx, &record, &datastore.ListOptions{})
|
||||
if err != nil {
|
||||
log.Logger.Errorf("list workflow %s record failure %s", workflow.PrimaryKey(), err.Error())
|
||||
klog.Errorf("list workflow %s record failure %s", workflow.PrimaryKey(), err.Error())
|
||||
}
|
||||
for _, record := range records {
|
||||
if err := w.Store.Delete(ctx, record); err != nil {
|
||||
log.Logger.Errorf("delete workflow record %s failure %s", record.PrimaryKey(), err.Error())
|
||||
klog.Errorf("delete workflow record %s failure %s", record.PrimaryKey(), err.Error())
|
||||
}
|
||||
}
|
||||
return nil
|
||||
@@ -173,7 +172,7 @@ func (w *workflowServiceImpl) CreateOrUpdateWorkflow(ctx context.Context, app *m
|
||||
EnvName: req.EnvName,
|
||||
AppPrimaryKey: app.PrimaryKey(),
|
||||
}
|
||||
log.Logger.Infof("create workflow %s for app %s", pkgUtils.Sanitize(req.Name), pkgUtils.Sanitize(app.PrimaryKey()))
|
||||
klog.Infof("create workflow %s for app %s", pkgUtils.Sanitize(req.Name), pkgUtils.Sanitize(app.PrimaryKey()))
|
||||
if err := w.Store.Add(ctx, workflow); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -347,7 +346,7 @@ func (w *workflowServiceImpl) SyncWorkflowRecord(ctx context.Context) error {
|
||||
}, app); err != nil {
|
||||
if apierrors.IsNotFound(err) {
|
||||
if err := w.setRecordToTerminated(ctx, record.AppPrimaryKey, record.Name); err != nil {
|
||||
log.Logger.Errorf("failed to set the record status to terminated %s", err.Error())
|
||||
klog.Errorf("failed to set the record status to terminated %s", err.Error())
|
||||
}
|
||||
continue
|
||||
}
|
||||
@@ -384,12 +383,12 @@ func (w *workflowServiceImpl) SyncWorkflowRecord(ctx context.Context) error {
|
||||
record.Status = model.RevisionStatusFail
|
||||
err := w.Store.Put(ctx, record)
|
||||
if err != nil {
|
||||
log.Logger.Errorf("failed to set the workflow status is failure %s", err.Error())
|
||||
klog.Errorf("failed to set the workflow status is failure %s", err.Error())
|
||||
}
|
||||
continue
|
||||
}
|
||||
}
|
||||
log.Logger.Errorf("failed to get the application revision from database %s", err.Error())
|
||||
klog.Errorf("failed to get the application revision from database %s", err.Error())
|
||||
continue
|
||||
}
|
||||
|
||||
@@ -397,11 +396,11 @@ func (w *workflowServiceImpl) SyncWorkflowRecord(ctx context.Context) error {
|
||||
if err := w.KubeClient.Get(ctx, types.NamespacedName{Namespace: app.Namespace, Name: revision.RevisionCRName}, &appRevision); err != nil {
|
||||
if apierrors.IsNotFound(err) {
|
||||
if err := w.setRecordToTerminated(ctx, record.AppPrimaryKey, record.Name); err != nil {
|
||||
log.Logger.Errorf("failed to set the record status to terminated %s", err.Error())
|
||||
klog.Errorf("failed to set the record status to terminated %s", err.Error())
|
||||
}
|
||||
continue
|
||||
}
|
||||
log.Logger.Warnf("failed to get the application revision %s", err.Error())
|
||||
klog.Warningf("failed to get the application revision %s", err.Error())
|
||||
continue
|
||||
}
|
||||
|
||||
@@ -638,7 +637,7 @@ func resetRevisionsAndRecords(ctx context.Context, ds datastore.DataStore, appNa
|
||||
func (w *workflowServiceImpl) CountWorkflow(ctx context.Context, app *model.Application) int64 {
|
||||
count, err := w.Store.Count(ctx, &model.Workflow{AppPrimaryKey: app.PrimaryKey()}, &datastore.FilterOptions{})
|
||||
if err != nil {
|
||||
log.Logger.Errorf("count app %s workflow failure %s", app.PrimaryKey(), err.Error())
|
||||
klog.Errorf("count app %s workflow failure %s", app.PrimaryKey(), err.Error())
|
||||
}
|
||||
return count
|
||||
}
|
||||
@@ -754,7 +753,7 @@ func (w *workflowServiceImpl) RollbackRecord(ctx context.Context, appModel *mode
|
||||
return bcode.ErrApplicationNoReadyRevision
|
||||
}
|
||||
revisionVersion = revisions[0].Index()["version"]
|
||||
log.Logger.Infof("select lastest complete revision %s", revisions[0].Index()["version"])
|
||||
klog.Infof("select lastest complete revision %s", revisions[0].Index()["version"])
|
||||
}
|
||||
|
||||
var record = &model.WorkflowRecord{
|
||||
|
||||
@@ -33,11 +33,11 @@ import (
|
||||
|
||||
"github.com/oam-dev/kubevela/pkg/apiserver/domain/model"
|
||||
"github.com/oam-dev/kubevela/pkg/apiserver/infrastructure/datastore"
|
||||
"github.com/oam-dev/kubevela/pkg/apiserver/utils/log"
|
||||
|
||||
"github.com/robfig/cron/v3"
|
||||
"k8s.io/apimachinery/pkg/util/wait"
|
||||
"k8s.io/client-go/util/retry"
|
||||
"k8s.io/klog/v2"
|
||||
)
|
||||
|
||||
// TopKFrequent top frequency component or trait definition
|
||||
@@ -81,14 +81,14 @@ func (i *InfoCalculateCronJob) start(cronSpec string) {
|
||||
return true
|
||||
}, func() error {
|
||||
if err := i.run(); err != nil {
|
||||
log.Logger.Errorf("Failed to calculate systemInfo, will try again after several minute error %v", err)
|
||||
klog.Errorf("Failed to calculate systemInfo, will try again after several minute error %v", err)
|
||||
return err
|
||||
}
|
||||
log.Logger.Info("Successfully to calculate systemInfo")
|
||||
klog.Info("Successfully to calculate systemInfo")
|
||||
return nil
|
||||
})
|
||||
if err != nil {
|
||||
log.Logger.Errorf("After 5 tries the calculating cronJob failed: %v", err)
|
||||
klog.Errorf("After 5 tries the calculating cronJob failed: %v", err)
|
||||
}
|
||||
})
|
||||
i.cron = c
|
||||
|
||||
@@ -22,10 +22,11 @@ import (
|
||||
"strconv"
|
||||
"strings"
|
||||
|
||||
"k8s.io/klog/v2"
|
||||
|
||||
"github.com/oam-dev/kubevela/apis/core.oam.dev/v1beta1"
|
||||
"github.com/oam-dev/kubevela/pkg/apiserver/domain/model"
|
||||
"github.com/oam-dev/kubevela/pkg/apiserver/infrastructure/datastore"
|
||||
"github.com/oam-dev/kubevela/pkg/apiserver/utils/log"
|
||||
"github.com/oam-dev/kubevela/pkg/oam"
|
||||
)
|
||||
|
||||
@@ -91,7 +92,7 @@ func (c *CR2UX) shouldSync(ctx context.Context, targetApp *v1beta1.Application,
|
||||
if del || err != nil {
|
||||
c.cache.Delete(key)
|
||||
} else if cd.generation == targetApp.Generation {
|
||||
log.Logger.Infof("app %s/%s with generation(%v) hasn't updated, ignore the sync event..", targetApp.Name, targetApp.Namespace, targetApp.Generation)
|
||||
klog.Infof("app %s/%s with generation(%v) hasn't updated, ignore the sync event..", targetApp.Name, targetApp.Namespace, targetApp.Generation)
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
@@ -24,6 +24,7 @@ import (
|
||||
|
||||
workflowv1alpha1 "github.com/kubevela/workflow/api/v1alpha1"
|
||||
"k8s.io/apimachinery/pkg/types"
|
||||
"k8s.io/klog/v2"
|
||||
"sigs.k8s.io/controller-runtime/pkg/client"
|
||||
"sigs.k8s.io/yaml"
|
||||
|
||||
@@ -31,7 +32,6 @@ import (
|
||||
"github.com/oam-dev/kubevela/apis/core.oam.dev/v1beta1"
|
||||
"github.com/oam-dev/kubevela/pkg/apiserver/domain/model"
|
||||
"github.com/oam-dev/kubevela/pkg/apiserver/infrastructure/datastore"
|
||||
"github.com/oam-dev/kubevela/pkg/apiserver/utils/log"
|
||||
"github.com/oam-dev/kubevela/pkg/multicluster"
|
||||
"github.com/oam-dev/kubevela/pkg/policy"
|
||||
)
|
||||
@@ -167,7 +167,7 @@ func FromCRTargets(ctx context.Context, cli client.Client, targetApp *v1beta1.Ap
|
||||
// read the target from the topology policies
|
||||
placements, err := policy.GetPlacementsFromTopologyPolicies(ctx, cli, targetApp.Namespace, targetApp.Spec.Policies, true)
|
||||
if err != nil {
|
||||
log.Logger.Errorf("fail to get placements from topology policies %s", err.Error())
|
||||
klog.Errorf("fail to get placements from topology policies %s", err.Error())
|
||||
return targets, targetNames
|
||||
}
|
||||
for _, placement := range placements {
|
||||
@@ -256,7 +256,7 @@ func FromCRApplicationRevision(ctx context.Context, cli client.Client, app *v1be
|
||||
ctxTimeout, cancel := context.WithTimeout(ctx, time.Second*20)
|
||||
defer cancel()
|
||||
if err := cli.Get(ctxTimeout, types.NamespacedName{Namespace: app.Namespace, Name: versionName}, &appRevision); err != nil {
|
||||
log.Logger.Errorf("failed to get the application revision %s", err.Error())
|
||||
klog.Errorf("failed to get the application revision %s", err.Error())
|
||||
return nil
|
||||
}
|
||||
configByte, _ := yaml.Marshal(appRevision.Spec.Application)
|
||||
|
||||
@@ -20,13 +20,13 @@ import (
|
||||
"context"
|
||||
"sync"
|
||||
|
||||
"k8s.io/klog/v2"
|
||||
"sigs.k8s.io/controller-runtime/pkg/client"
|
||||
|
||||
"github.com/oam-dev/kubevela/apis/core.oam.dev/v1beta1"
|
||||
"github.com/oam-dev/kubevela/pkg/apiserver/domain/model"
|
||||
"github.com/oam-dev/kubevela/pkg/apiserver/domain/service"
|
||||
"github.com/oam-dev/kubevela/pkg/apiserver/infrastructure/datastore"
|
||||
"github.com/oam-dev/kubevela/pkg/apiserver/utils/log"
|
||||
)
|
||||
|
||||
// getApp will return the app and appname if exists
|
||||
@@ -81,52 +81,52 @@ func (c *CR2UX) AddOrUpdate(ctx context.Context, targetApp *v1beta1.Application)
|
||||
|
||||
dsApp, err := c.ConvertApp2DatastoreApp(ctx, targetApp)
|
||||
if err != nil {
|
||||
log.Logger.Errorf("Convert App to data store err %v", err)
|
||||
klog.Errorf("Convert App to data store err %v", err)
|
||||
return err
|
||||
}
|
||||
if err = StoreProject(ctx, dsApp.AppMeta.Project, ds, c.projectService); err != nil {
|
||||
log.Logger.Errorf("get or create project for sync process err %v", err)
|
||||
klog.Errorf("get or create project for sync process err %v", err)
|
||||
return err
|
||||
}
|
||||
|
||||
if err = StoreTargets(ctx, dsApp, ds, c.targetService); err != nil {
|
||||
log.Logger.Errorf("Store targets to data store err %v", err)
|
||||
klog.Errorf("Store targets to data store err %v", err)
|
||||
return err
|
||||
}
|
||||
|
||||
if err = StoreEnv(ctx, dsApp, ds, c.envService); err != nil {
|
||||
log.Logger.Errorf("Store Env Metadata to data store err %v", err)
|
||||
klog.Errorf("Store Env Metadata to data store err %v", err)
|
||||
return err
|
||||
}
|
||||
if err = StoreEnvBinding(ctx, dsApp.Eb, ds); err != nil {
|
||||
log.Logger.Errorf("Store EnvBinding Metadata to data store err %v", err)
|
||||
klog.Errorf("Store EnvBinding Metadata to data store err %v", err)
|
||||
return err
|
||||
}
|
||||
if err = StoreComponents(ctx, dsApp.AppMeta.Name, dsApp.Comps, ds); err != nil {
|
||||
log.Logger.Errorf("Store Components Metadata to data store err %v", err)
|
||||
klog.Errorf("Store Components Metadata to data store err %v", err)
|
||||
return err
|
||||
}
|
||||
if err = StorePolicy(ctx, dsApp.AppMeta.Name, dsApp.Policies, ds); err != nil {
|
||||
log.Logger.Errorf("Store Policy Metadata to data store err %v", err)
|
||||
klog.Errorf("Store Policy Metadata to data store err %v", err)
|
||||
return err
|
||||
}
|
||||
if err = StoreWorkflow(ctx, dsApp, ds); err != nil {
|
||||
log.Logger.Errorf("Store Workflow Metadata to data store err %v", err)
|
||||
klog.Errorf("Store Workflow Metadata to data store err %v", err)
|
||||
return err
|
||||
}
|
||||
|
||||
if err = StoreApplicationRevision(ctx, dsApp, ds); err != nil {
|
||||
log.Logger.Errorf("Store application revision to data store err %v", err)
|
||||
klog.Errorf("Store application revision to data store err %v", err)
|
||||
return err
|
||||
}
|
||||
|
||||
if err = StoreWorkflowRecord(ctx, dsApp, ds); err != nil {
|
||||
log.Logger.Errorf("Store Workflow Record to data store err %v", err)
|
||||
klog.Errorf("Store Workflow Record to data store err %v", err)
|
||||
return err
|
||||
}
|
||||
|
||||
if err = StoreAppMeta(ctx, dsApp, ds); err != nil {
|
||||
log.Logger.Errorf("Store App Metadata to data store err %v", err)
|
||||
klog.Errorf("Store App Metadata to data store err %v", err)
|
||||
return err
|
||||
}
|
||||
|
||||
|
||||
@@ -22,13 +22,13 @@ import (
|
||||
|
||||
"golang.org/x/text/cases"
|
||||
"golang.org/x/text/language"
|
||||
"k8s.io/klog/v2"
|
||||
|
||||
"github.com/oam-dev/kubevela/pkg/apiserver/domain/model"
|
||||
"github.com/oam-dev/kubevela/pkg/apiserver/domain/service"
|
||||
"github.com/oam-dev/kubevela/pkg/apiserver/infrastructure/datastore"
|
||||
v1 "github.com/oam-dev/kubevela/pkg/apiserver/interfaces/api/dto/v1"
|
||||
"github.com/oam-dev/kubevela/pkg/apiserver/utils/bcode"
|
||||
"github.com/oam-dev/kubevela/pkg/apiserver/utils/log"
|
||||
"github.com/oam-dev/kubevela/pkg/utils"
|
||||
)
|
||||
|
||||
@@ -152,7 +152,7 @@ func StoreComponents(ctx context.Context, appPrimaryKey string, expComps []*mode
|
||||
if errors.Is(err, datastore.ErrRecordNotExist) {
|
||||
continue
|
||||
}
|
||||
log.Logger.Warnf("delete comp %s for app %s failure %s", comp.Name, appPrimaryKey, err.Error())
|
||||
klog.Warningf("delete comp %s for app %s failure %s", comp.Name, appPrimaryKey, err.Error())
|
||||
}
|
||||
}
|
||||
|
||||
@@ -167,7 +167,7 @@ func StoreComponents(ctx context.Context, appPrimaryKey string, expComps []*mode
|
||||
err = ds.Put(ctx, comp)
|
||||
}
|
||||
if err != nil {
|
||||
log.Logger.Warnf("convert comp %s for app %s into datastore failure %s", comp.Name, utils.Sanitize(appPrimaryKey), err.Error())
|
||||
klog.Warningf("convert comp %s for app %s into datastore failure %s", comp.Name, utils.Sanitize(appPrimaryKey), err.Error())
|
||||
return err
|
||||
}
|
||||
}
|
||||
@@ -212,7 +212,7 @@ func StorePolicy(ctx context.Context, appPrimaryKey string, expPolicies []*model
|
||||
if errors.Is(err, datastore.ErrRecordNotExist) {
|
||||
continue
|
||||
}
|
||||
log.Logger.Warnf("delete policy %s for app %s failure %s", plc.Name, appPrimaryKey, err.Error())
|
||||
klog.Warningf("delete policy %s for app %s failure %s", plc.Name, appPrimaryKey, err.Error())
|
||||
}
|
||||
}
|
||||
|
||||
@@ -227,7 +227,7 @@ func StorePolicy(ctx context.Context, appPrimaryKey string, expPolicies []*model
|
||||
err = ds.Put(ctx, plc)
|
||||
}
|
||||
if err != nil {
|
||||
log.Logger.Warnf("convert policy %s for app %s into datastore failure %s", plc.Name, utils.Sanitize(appPrimaryKey), err.Error())
|
||||
klog.Warningf("convert policy %s for app %s into datastore failure %s", plc.Name, utils.Sanitize(appPrimaryKey), err.Error())
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
@@ -29,12 +29,12 @@ import (
|
||||
"k8s.io/client-go/rest"
|
||||
"k8s.io/client-go/tools/cache"
|
||||
"k8s.io/client-go/util/workqueue"
|
||||
"k8s.io/klog/v2"
|
||||
"sigs.k8s.io/controller-runtime/pkg/client"
|
||||
|
||||
"github.com/oam-dev/kubevela/apis/core.oam.dev/v1beta1"
|
||||
"github.com/oam-dev/kubevela/pkg/apiserver/domain/service"
|
||||
"github.com/oam-dev/kubevela/pkg/apiserver/infrastructure/datastore"
|
||||
"github.com/oam-dev/kubevela/pkg/apiserver/utils/log"
|
||||
)
|
||||
|
||||
// ApplicationSync sync application from cluster to database
|
||||
@@ -65,7 +65,7 @@ func (a *ApplicationSync) Start(ctx context.Context, errorChan chan error) {
|
||||
var app v1beta1.Application
|
||||
if object, ok := obj.(*unstructured.Unstructured); ok {
|
||||
if err := runtime.DefaultUnstructuredConverter.FromUnstructured(object.Object, &app); err != nil {
|
||||
log.Logger.Errorf("decode the application failure %s", err.Error())
|
||||
klog.Errorf("decode the application failure %s", err.Error())
|
||||
return &app
|
||||
}
|
||||
}
|
||||
@@ -91,7 +91,7 @@ func (a *ApplicationSync) Start(ctx context.Context, errorChan chan error) {
|
||||
break
|
||||
}
|
||||
if err := cu.AddOrUpdate(ctx, app.(*v1beta1.Application)); err != nil {
|
||||
log.Logger.Errorf("fail to add or update application %s", err.Error())
|
||||
klog.Errorf("fail to add or update application %s", err.Error())
|
||||
}
|
||||
a.Queue.Done(app)
|
||||
}
|
||||
@@ -101,7 +101,7 @@ func (a *ApplicationSync) Start(ctx context.Context, errorChan chan error) {
|
||||
app := getApp(obj)
|
||||
if app.DeletionTimestamp == nil {
|
||||
a.Queue.Add(app)
|
||||
log.Logger.Infof("watched update/add app event, namespace: %s, name: %s", app.Namespace, app.Name)
|
||||
klog.Infof("watched update/add app event, namespace: %s, name: %s", app.Namespace, app.Name)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -114,17 +114,17 @@ func (a *ApplicationSync) Start(ctx context.Context, errorChan chan error) {
|
||||
},
|
||||
DeleteFunc: func(obj interface{}) {
|
||||
app := getApp(obj)
|
||||
log.Logger.Infof("watched delete app event, namespace: %s, name: %s", app.Namespace, app.Name)
|
||||
klog.Infof("watched delete app event, namespace: %s, name: %s", app.Namespace, app.Name)
|
||||
a.Queue.Forget(app)
|
||||
a.Queue.Done(app)
|
||||
err = cu.DeleteApp(ctx, app)
|
||||
if err != nil {
|
||||
log.Logger.Errorf("Application %-30s Deleted Sync to db err %v", color.WhiteString(app.Namespace+"/"+app.Name), err)
|
||||
klog.Errorf("Application %-30s Deleted Sync to db err %v", color.WhiteString(app.Namespace+"/"+app.Name), err)
|
||||
}
|
||||
log.Logger.Infof("delete the application (%s/%s) metadata successfully", app.Namespace, app.Name)
|
||||
klog.Infof("delete the application (%s/%s) metadata successfully", app.Namespace, app.Name)
|
||||
},
|
||||
}
|
||||
informer.AddEventHandler(handlers)
|
||||
log.Logger.Info("app syncing started")
|
||||
klog.Info("app syncing started")
|
||||
informer.Run(ctx.Done())
|
||||
}
|
||||
|
||||
@@ -20,8 +20,9 @@ import (
|
||||
"context"
|
||||
"time"
|
||||
|
||||
"k8s.io/klog/v2"
|
||||
|
||||
"github.com/oam-dev/kubevela/pkg/apiserver/domain/service"
|
||||
"github.com/oam-dev/kubevela/pkg/apiserver/utils/log"
|
||||
)
|
||||
|
||||
// WorkflowRecordSync sync workflow record from cluster to database
|
||||
@@ -32,15 +33,15 @@ type WorkflowRecordSync struct {
|
||||
|
||||
// Start sync workflow record data
|
||||
func (w *WorkflowRecordSync) Start(ctx context.Context, errorChan chan error) {
|
||||
log.Logger.Infof("workflow record syncing worker started")
|
||||
defer log.Logger.Infof("workflow record syncing worker closed")
|
||||
klog.Infof("workflow record syncing worker started")
|
||||
defer klog.Infof("workflow record syncing worker closed")
|
||||
t := time.NewTicker(w.Duration)
|
||||
defer t.Stop()
|
||||
for {
|
||||
select {
|
||||
case <-t.C:
|
||||
if err := w.WorkflowService.SyncWorkflowRecord(ctx); err != nil {
|
||||
log.Logger.Errorf("syncWorkflowRecordError: %s", err.Error())
|
||||
klog.Errorf("syncWorkflowRecordError: %s", err.Error())
|
||||
}
|
||||
case <-ctx.Done():
|
||||
return
|
||||
|
||||
@@ -32,11 +32,11 @@ import (
|
||||
"k8s.io/apimachinery/pkg/labels"
|
||||
"k8s.io/apimachinery/pkg/selection"
|
||||
"k8s.io/apimachinery/pkg/types"
|
||||
"k8s.io/klog/v2"
|
||||
"sigs.k8s.io/controller-runtime/pkg/client"
|
||||
|
||||
"github.com/oam-dev/kubevela/pkg/apiserver/infrastructure/clients"
|
||||
"github.com/oam-dev/kubevela/pkg/apiserver/infrastructure/datastore"
|
||||
"github.com/oam-dev/kubevela/pkg/apiserver/utils/log"
|
||||
)
|
||||
|
||||
type kubeapi struct {
|
||||
@@ -135,7 +135,7 @@ func (m *kubeapi) BatchAdd(ctx context.Context, entities []datastore.Entity) err
|
||||
if _, exit := notRollback[deleteEntity.PrimaryKey()]; !exit {
|
||||
if err := m.Delete(ctx, deleteEntity); err != nil {
|
||||
if !errors.Is(err, datastore.ErrRecordNotExist) {
|
||||
log.Logger.Errorf("rollback delete entity failure %w", err)
|
||||
klog.Errorf("rollback delete entity failure %w", err)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -366,7 +366,7 @@ func (m *kubeapi) List(ctx context.Context, entity datastore.Entity, op *datasto
|
||||
}
|
||||
rq, err := labels.NewRequirement(inFilter.Key, selection.In, values)
|
||||
if err != nil {
|
||||
log.Logger.Errorf("new list requirement failure %s", err.Error())
|
||||
klog.Errorf("new list requirement failure %s", err.Error())
|
||||
return nil, datastore.ErrIndexInvalid
|
||||
}
|
||||
selector = selector.Add(*rq)
|
||||
@@ -374,7 +374,7 @@ func (m *kubeapi) List(ctx context.Context, entity datastore.Entity, op *datasto
|
||||
for _, notFilter := range op.IsNotExist {
|
||||
rq, err := labels.NewRequirement(notFilter.Key, selection.DoesNotExist, []string{})
|
||||
if err != nil {
|
||||
log.Logger.Errorf("new list requirement failure %s", err.Error())
|
||||
klog.Errorf("new list requirement failure %s", err.Error())
|
||||
return nil, datastore.ErrIndexInvalid
|
||||
}
|
||||
selector = selector.Add(*rq)
|
||||
@@ -463,7 +463,7 @@ func (m *kubeapi) Count(ctx context.Context, entity datastore.Entity, filterOpti
|
||||
for _, notFilter := range filterOptions.IsNotExist {
|
||||
rq, err := labels.NewRequirement(notFilter.Key, selection.DoesNotExist, []string{})
|
||||
if err != nil {
|
||||
log.Logger.Errorf("new list requirement failure %s", err.Error())
|
||||
klog.Errorf("new list requirement failure %s", err.Error())
|
||||
return 0, datastore.ErrIndexInvalid
|
||||
}
|
||||
selector = selector.Add(*rq)
|
||||
|
||||
@@ -23,7 +23,7 @@ import (
|
||||
|
||||
corev1 "k8s.io/api/core/v1"
|
||||
"k8s.io/apimachinery/pkg/labels"
|
||||
"k8s.io/klog"
|
||||
"k8s.io/klog/v2"
|
||||
"sigs.k8s.io/controller-runtime/pkg/client"
|
||||
|
||||
"github.com/oam-dev/kubevela/pkg/apiserver/domain/model"
|
||||
|
||||
@@ -27,9 +27,9 @@ import (
|
||||
"go.mongodb.org/mongo-driver/mongo"
|
||||
"go.mongodb.org/mongo-driver/mongo/options"
|
||||
"go.mongodb.org/mongo-driver/x/bsonx"
|
||||
"k8s.io/klog/v2"
|
||||
|
||||
"github.com/oam-dev/kubevela/pkg/apiserver/infrastructure/datastore"
|
||||
"github.com/oam-dev/kubevela/pkg/apiserver/utils/log"
|
||||
)
|
||||
|
||||
type mongodb struct {
|
||||
@@ -95,7 +95,7 @@ func (m *mongodb) BatchAdd(ctx context.Context, entities []datastore.Entity) err
|
||||
if _, exit := notRollback[deleteEntity.PrimaryKey()]; !exit {
|
||||
if err := m.Delete(ctx, deleteEntity); err != nil {
|
||||
if !errors.Is(err, datastore.ErrRecordNotExist) {
|
||||
log.Logger.Errorf("rollback delete entity failure %w", err)
|
||||
klog.Errorf("rollback delete entity failure %w", err)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -185,7 +185,7 @@ func (m *mongodb) Delete(ctx context.Context, entity datastore.Entity) error {
|
||||
})
|
||||
_, err := collection.DeleteOne(ctx, makeNameFilter(entity.PrimaryKey()), opts)
|
||||
if err != nil {
|
||||
log.Logger.Errorf("delete document failure %w", err)
|
||||
klog.Errorf("delete document failure %w", err)
|
||||
return datastore.NewDBError(err)
|
||||
}
|
||||
return nil
|
||||
@@ -243,7 +243,7 @@ func (m *mongodb) List(ctx context.Context, entity datastore.Entity, op *datasto
|
||||
}
|
||||
defer func() {
|
||||
if err := cur.Close(ctx); err != nil {
|
||||
log.Logger.Warnf("close mongodb cursor failure %s", err.Error())
|
||||
klog.Warningf("close mongodb cursor failure %s", err.Error())
|
||||
}
|
||||
}()
|
||||
var list []datastore.Entity
|
||||
|
||||
@@ -20,6 +20,8 @@ import (
|
||||
"context"
|
||||
"strconv"
|
||||
|
||||
"k8s.io/klog/v2"
|
||||
|
||||
"github.com/oam-dev/kubevela/pkg/apiserver/utils"
|
||||
|
||||
restfulspec "github.com/emicklei/go-restful-openapi/v2"
|
||||
@@ -29,7 +31,6 @@ import (
|
||||
"github.com/oam-dev/kubevela/pkg/apiserver/domain/service"
|
||||
apis "github.com/oam-dev/kubevela/pkg/apiserver/interfaces/api/dto/v1"
|
||||
"github.com/oam-dev/kubevela/pkg/apiserver/utils/bcode"
|
||||
"github.com/oam-dev/kubevela/pkg/apiserver/utils/log"
|
||||
)
|
||||
|
||||
type applicationAPIInterface struct {
|
||||
@@ -601,7 +602,7 @@ func (c *applicationAPIInterface) createApplication(req *restful.Request, res *r
|
||||
// Call the domain layer code
|
||||
appBase, err := c.ApplicationService.CreateApplication(req.Request.Context(), createReq)
|
||||
if err != nil {
|
||||
log.Logger.Errorf("create application failure %s", err.Error())
|
||||
klog.Errorf("create application failure %s", err.Error())
|
||||
bcode.ReturnError(req, res, err)
|
||||
return
|
||||
}
|
||||
|
||||
@@ -17,10 +17,11 @@ limitations under the License.
|
||||
package v1
|
||||
|
||||
import (
|
||||
"k8s.io/klog/v2"
|
||||
|
||||
"github.com/oam-dev/kubevela/pkg/apiserver/domain/model"
|
||||
apisv1 "github.com/oam-dev/kubevela/pkg/apiserver/interfaces/api/dto/v1"
|
||||
"github.com/oam-dev/kubevela/pkg/apiserver/utils/bcode"
|
||||
"github.com/oam-dev/kubevela/pkg/apiserver/utils/log"
|
||||
)
|
||||
|
||||
// CreateEnvBindingModel assemble the EnvBinding model from DTO
|
||||
@@ -71,7 +72,7 @@ func CreateWorkflowStepModel(apiSteps []apisv1.WorkflowStep) ([]model.WorkflowSt
|
||||
func CreateWorkflowStepBaseModel(step apisv1.WorkflowStepBase) (*model.WorkflowStepBase, error) {
|
||||
properties, err := model.NewJSONStructByString(step.Properties)
|
||||
if err != nil {
|
||||
log.Logger.Errorf("parse trait workflow step failure %w", err)
|
||||
klog.Errorf("parse trait workflow step failure %w", err)
|
||||
return nil, bcode.ErrInvalidProperties
|
||||
}
|
||||
return &model.WorkflowStepBase{
|
||||
|
||||
@@ -19,12 +19,12 @@ package api
|
||||
import (
|
||||
restfulspec "github.com/emicklei/go-restful-openapi/v2"
|
||||
"github.com/emicklei/go-restful/v3"
|
||||
"k8s.io/klog/v2"
|
||||
|
||||
"github.com/oam-dev/kubevela/pkg/apiserver/domain/service"
|
||||
apis "github.com/oam-dev/kubevela/pkg/apiserver/interfaces/api/dto/v1"
|
||||
"github.com/oam-dev/kubevela/pkg/apiserver/utils"
|
||||
"github.com/oam-dev/kubevela/pkg/apiserver/utils/bcode"
|
||||
"github.com/oam-dev/kubevela/pkg/apiserver/utils/log"
|
||||
)
|
||||
|
||||
type envAPIInterface struct {
|
||||
@@ -118,7 +118,7 @@ func (n *envAPIInterface) delete(req *restful.Request, res *restful.Response) {
|
||||
return
|
||||
}
|
||||
if len(lists) > 0 {
|
||||
log.Logger.Infof("detected %d applications in this env, the first is %s", len(lists), lists[0].Name)
|
||||
klog.Infof("detected %d applications in this env, the first is %s", len(lists), lists[0].Name)
|
||||
bcode.ReturnError(req, res, bcode.ErrDeleteEnvButAppExist)
|
||||
return
|
||||
}
|
||||
@@ -148,7 +148,7 @@ func (n *envAPIInterface) create(req *restful.Request, res *restful.Response) {
|
||||
// Call the Domain layer code
|
||||
env, err := n.EnvService.CreateEnv(req.Request.Context(), createReq)
|
||||
if err != nil {
|
||||
log.Logger.Errorf("create application failure %s", err.Error())
|
||||
klog.Errorf("create application failure %s", err.Error())
|
||||
bcode.ReturnError(req, res, err)
|
||||
return
|
||||
}
|
||||
|
||||
@@ -19,11 +19,11 @@ package api
|
||||
import (
|
||||
restfulspec "github.com/emicklei/go-restful-openapi/v2"
|
||||
"github.com/emicklei/go-restful/v3"
|
||||
"k8s.io/klog/v2"
|
||||
|
||||
"github.com/oam-dev/kubevela/pkg/apiserver/domain/service"
|
||||
apis "github.com/oam-dev/kubevela/pkg/apiserver/interfaces/api/dto/v1"
|
||||
"github.com/oam-dev/kubevela/pkg/apiserver/utils/bcode"
|
||||
"github.com/oam-dev/kubevela/pkg/apiserver/utils/log"
|
||||
)
|
||||
|
||||
type oamApplicationAPIInterface struct {
|
||||
@@ -82,7 +82,7 @@ func (c *oamApplicationAPIInterface) getApplication(req *restful.Request, res *r
|
||||
appName := req.PathParameter("appname")
|
||||
appRes, err := c.OamApplicationService.GetOAMApplication(req.Request.Context(), appName, namespace)
|
||||
if err != nil {
|
||||
log.Logger.Errorf("get application failure %s", err.Error())
|
||||
klog.Errorf("get application failure %s", err.Error())
|
||||
bcode.ReturnError(req, res, err)
|
||||
return
|
||||
}
|
||||
@@ -111,13 +111,13 @@ func (c *oamApplicationAPIInterface) createOrUpdateApplication(req *restful.Requ
|
||||
return
|
||||
}
|
||||
if err := c.OamApplicationService.DryRunOAMApplication(req.Request.Context(), createReq, appName, namespace); err != nil {
|
||||
log.Logger.Errorf("dryrun application failure %s", err.Error())
|
||||
klog.Errorf("dryrun application failure %s", err.Error())
|
||||
bcode.ReturnError(req, res, err)
|
||||
return
|
||||
}
|
||||
} else {
|
||||
if err := c.OamApplicationService.CreateOrUpdateOAMApplication(req.Request.Context(), createReq, appName, namespace); err != nil {
|
||||
log.Logger.Errorf("create application failure %s", err.Error())
|
||||
klog.Errorf("create application failure %s", err.Error())
|
||||
bcode.ReturnError(req, res, err)
|
||||
return
|
||||
}
|
||||
@@ -135,7 +135,7 @@ func (c *oamApplicationAPIInterface) deleteApplication(req *restful.Request, res
|
||||
|
||||
err := c.OamApplicationService.DeleteOAMApplication(req.Request.Context(), appName, namespace)
|
||||
if err != nil {
|
||||
log.Logger.Errorf("delete application failure %s", err.Error())
|
||||
klog.Errorf("delete application failure %s", err.Error())
|
||||
bcode.ReturnError(req, res, err)
|
||||
return
|
||||
}
|
||||
|
||||
@@ -24,11 +24,11 @@ import (
|
||||
"github.com/emicklei/go-restful/v3"
|
||||
"github.com/kubevela/workflow/api/v1alpha1"
|
||||
"github.com/pkg/errors"
|
||||
"k8s.io/klog/v2"
|
||||
|
||||
"github.com/oam-dev/kubevela/pkg/apiserver/domain/service"
|
||||
apis "github.com/oam-dev/kubevela/pkg/apiserver/interfaces/api/dto/v1"
|
||||
"github.com/oam-dev/kubevela/pkg/apiserver/utils/bcode"
|
||||
"github.com/oam-dev/kubevela/pkg/apiserver/utils/log"
|
||||
)
|
||||
|
||||
const (
|
||||
@@ -256,7 +256,7 @@ func (n *pipelineAPIInterface) listPipelines(req *restful.Request, res *restful.
|
||||
Detailed: detailed,
|
||||
})
|
||||
if err != nil {
|
||||
log.Logger.Errorf("list pipeline failure %s", err.Error())
|
||||
klog.Errorf("list pipeline failure %s", err.Error())
|
||||
bcode.ReturnError(req, res, err)
|
||||
return
|
||||
}
|
||||
@@ -289,13 +289,13 @@ func (n *projectAPIInterface) createPipeline(req *restful.Request, res *restful.
|
||||
}
|
||||
pipelineBase, err := n.PipelineService.CreatePipeline(req.Request.Context(), createReq)
|
||||
if err != nil {
|
||||
log.Logger.Errorf("create pipeline failure %s", err.Error())
|
||||
klog.Errorf("create pipeline failure %s", err.Error())
|
||||
bcode.ReturnError(req, res, err)
|
||||
return
|
||||
}
|
||||
_, err = n.ContextService.InitContext(req.Request.Context(), pipelineBase.Project.Name, pipelineBase.Name)
|
||||
if err != nil {
|
||||
log.Logger.Errorf("init pipeline context failure: %s", err.Error())
|
||||
klog.Errorf("init pipeline context failure: %s", err.Error())
|
||||
bcode.ReturnError(req, res, err)
|
||||
return
|
||||
}
|
||||
@@ -318,7 +318,7 @@ func (n *projectAPIInterface) updatePipeline(req *restful.Request, res *restful.
|
||||
pipeline := req.Request.Context().Value(&apis.CtxKeyPipeline).(apis.PipelineBase)
|
||||
pipelineBase, err := n.PipelineService.UpdatePipeline(req.Request.Context(), pipeline.Name, updateReq)
|
||||
if err != nil {
|
||||
log.Logger.Errorf("update pipeline failure %s", err.Error())
|
||||
klog.Errorf("update pipeline failure %s", err.Error())
|
||||
bcode.ReturnError(req, res, err)
|
||||
return
|
||||
}
|
||||
@@ -332,7 +332,7 @@ func (n *projectAPIInterface) deletePipeline(req *restful.Request, res *restful.
|
||||
pipeline := req.Request.Context().Value(&apis.CtxKeyPipeline).(apis.PipelineBase)
|
||||
err := n.PipelineService.DeletePipeline(req.Request.Context(), pipeline)
|
||||
if err != nil {
|
||||
log.Logger.Errorf("delete pipeline failure %s", err.Error())
|
||||
klog.Errorf("delete pipeline failure %s", err.Error())
|
||||
bcode.ReturnError(req, res, err)
|
||||
return
|
||||
}
|
||||
@@ -352,7 +352,7 @@ func (n *projectAPIInterface) runPipeline(req *restful.Request, res *restful.Res
|
||||
|
||||
run, err := n.PipelineService.RunPipeline(req.Request.Context(), pipeline, runReq)
|
||||
if err != nil {
|
||||
log.Logger.Errorf("run pipeline failure %s", err.Error())
|
||||
klog.Errorf("run pipeline failure %s", err.Error())
|
||||
bcode.ReturnError(req, res, err)
|
||||
return
|
||||
}
|
||||
@@ -366,7 +366,7 @@ func (n *projectAPIInterface) stopPipeline(req *restful.Request, res *restful.Re
|
||||
pipelineRun := req.Request.Context().Value(&apis.CtxKeyPipelineRun).(*apis.PipelineRun)
|
||||
err := n.PipelineRunService.StopPipelineRun(req.Request.Context(), pipelineRun.PipelineRunBase)
|
||||
if err != nil {
|
||||
log.Logger.Errorf("stop pipeline failure %s", err.Error())
|
||||
klog.Errorf("stop pipeline failure %s", err.Error())
|
||||
bcode.ReturnError(req, res, err)
|
||||
return
|
||||
}
|
||||
@@ -380,7 +380,7 @@ func (n *projectAPIInterface) listPipelineRuns(req *restful.Request, res *restfu
|
||||
pipeline := req.Request.Context().Value(&apis.CtxKeyPipeline).(apis.PipelineBase)
|
||||
pipelineRuns, err := n.PipelineRunService.ListPipelineRuns(req.Request.Context(), pipeline)
|
||||
if err != nil {
|
||||
log.Logger.Errorf("list pipeline runs failure %s", err.Error())
|
||||
klog.Errorf("list pipeline runs failure %s", err.Error())
|
||||
bcode.ReturnError(req, res, err)
|
||||
return
|
||||
}
|
||||
@@ -410,7 +410,7 @@ func (n *projectAPIInterface) getPipelineRunLog(req *restful.Request, res *restf
|
||||
pipelineRun := req.Request.Context().Value(&apis.CtxKeyPipelineRun).(*apis.PipelineRun)
|
||||
logs, err := n.PipelineRunService.GetPipelineRunLog(req.Request.Context(), *pipelineRun, req.QueryParameter("step"))
|
||||
if err != nil {
|
||||
log.Logger.Errorf("get pipeline run log failure %s", err.Error())
|
||||
klog.Errorf("get pipeline run log failure %s", err.Error())
|
||||
bcode.ReturnError(req, res, err)
|
||||
return
|
||||
}
|
||||
@@ -450,7 +450,7 @@ func (n *projectAPIInterface) deletePipelineRun(req *restful.Request, res *restf
|
||||
pipelineRun := req.Request.Context().Value(&apis.CtxKeyPipelineRun).(*apis.PipelineRun)
|
||||
err := n.PipelineRunService.DeletePipelineRun(req.Request.Context(), pipelineRun.PipelineRunMeta)
|
||||
if err != nil {
|
||||
log.Logger.Errorf("delete pipeline run failure %s", err.Error())
|
||||
klog.Errorf("delete pipeline run failure %s", err.Error())
|
||||
bcode.ReturnError(req, res, err)
|
||||
return
|
||||
}
|
||||
@@ -464,7 +464,7 @@ func (n *projectAPIInterface) listContextValues(req *restful.Request, res *restf
|
||||
pipeline := req.Request.Context().Value(&apis.CtxKeyPipeline).(apis.PipelineBase)
|
||||
contextValues, err := n.ContextService.ListContexts(req.Request.Context(), pipeline.Project.Name, pipeline.Name)
|
||||
if err != nil {
|
||||
log.Logger.Errorf("list context values failure: %s", err.Error())
|
||||
klog.Errorf("list context values failure: %s", err.Error())
|
||||
bcode.ReturnError(req, res, err)
|
||||
return
|
||||
}
|
||||
@@ -489,7 +489,7 @@ func (n *projectAPIInterface) createContextValue(req *restful.Request, res *rest
|
||||
pipelineCtx := apis.Context(createReq)
|
||||
_, err := n.ContextService.CreateContext(req.Request.Context(), pipeline.Project.Name, pipeline.Name, pipelineCtx)
|
||||
if err != nil {
|
||||
log.Logger.Errorf("create context failure %s", err.Error())
|
||||
klog.Errorf("create context failure %s", err.Error())
|
||||
bcode.ReturnError(req, res, err)
|
||||
return
|
||||
}
|
||||
@@ -514,7 +514,7 @@ func (n *projectAPIInterface) updateContextValue(req *restful.Request, res *rest
|
||||
pipelineCtx := apis.Context{Name: plCtx.Name, Values: updateReq.Values}
|
||||
_, err := n.ContextService.UpdateContext(req.Request.Context(), pipeline.Project.Name, pipeline.Name, pipelineCtx)
|
||||
if err != nil {
|
||||
log.Logger.Errorf("update context failure %s", err.Error())
|
||||
klog.Errorf("update context failure %s", err.Error())
|
||||
bcode.ReturnError(req, res, err)
|
||||
return
|
||||
}
|
||||
@@ -529,7 +529,7 @@ func (n *projectAPIInterface) deleteContextValue(req *restful.Request, res *rest
|
||||
pipeline := req.Request.Context().Value(&apis.CtxKeyPipeline).(apis.PipelineBase)
|
||||
err := n.ContextService.DeleteContext(req.Request.Context(), pipeline.Project.Name, pipeline.Name, plCtx.Name)
|
||||
if err != nil {
|
||||
log.Logger.Errorf("delete context failure %s", err.Error())
|
||||
klog.Errorf("delete context failure %s", err.Error())
|
||||
bcode.ReturnError(req, res, err)
|
||||
return
|
||||
}
|
||||
|
||||
@@ -19,12 +19,12 @@ package api
|
||||
import (
|
||||
restfulspec "github.com/emicklei/go-restful-openapi/v2"
|
||||
"github.com/emicklei/go-restful/v3"
|
||||
"k8s.io/klog/v2"
|
||||
|
||||
"github.com/oam-dev/kubevela/pkg/apiserver/domain/service"
|
||||
apis "github.com/oam-dev/kubevela/pkg/apiserver/interfaces/api/dto/v1"
|
||||
"github.com/oam-dev/kubevela/pkg/apiserver/utils"
|
||||
"github.com/oam-dev/kubevela/pkg/apiserver/utils/bcode"
|
||||
"github.com/oam-dev/kubevela/pkg/apiserver/utils/log"
|
||||
"github.com/oam-dev/kubevela/pkg/config"
|
||||
)
|
||||
|
||||
@@ -345,7 +345,7 @@ func (n *projectAPIInterface) createproject(req *restful.Request, res *restful.R
|
||||
// Call the domain layer code
|
||||
projectBase, err := n.ProjectService.CreateProject(req.Request.Context(), createReq)
|
||||
if err != nil {
|
||||
log.Logger.Errorf("create project failure %s", err.Error())
|
||||
klog.Errorf("create project failure %s", err.Error())
|
||||
bcode.ReturnError(req, res, err)
|
||||
return
|
||||
}
|
||||
@@ -371,7 +371,7 @@ func (n *projectAPIInterface) updateProject(req *restful.Request, res *restful.R
|
||||
// Call the domain layer code
|
||||
projectBase, err := n.ProjectService.UpdateProject(req.Request.Context(), req.PathParameter("projectName"), updateReq)
|
||||
if err != nil {
|
||||
log.Logger.Errorf("update project failure %s", err.Error())
|
||||
klog.Errorf("update project failure %s", err.Error())
|
||||
bcode.ReturnError(req, res, err)
|
||||
return
|
||||
}
|
||||
@@ -445,7 +445,7 @@ func (n *projectAPIInterface) createProjectUser(req *restful.Request, res *restf
|
||||
// Call the domain layer code
|
||||
userBase, err := n.ProjectService.AddProjectUser(req.Request.Context(), req.PathParameter("projectName"), createReq)
|
||||
if err != nil {
|
||||
log.Logger.Errorf("create project user failure %s", err.Error())
|
||||
klog.Errorf("create project user failure %s", err.Error())
|
||||
bcode.ReturnError(req, res, err)
|
||||
return
|
||||
}
|
||||
@@ -466,7 +466,7 @@ func (n *projectAPIInterface) listProjectUser(req *restful.Request, res *restful
|
||||
// Call the domain layer code
|
||||
users, err := n.ProjectService.ListProjectUser(req.Request.Context(), req.PathParameter("projectName"), page, pageSize)
|
||||
if err != nil {
|
||||
log.Logger.Errorf("list project users failure %s", err.Error())
|
||||
klog.Errorf("list project users failure %s", err.Error())
|
||||
bcode.ReturnError(req, res, err)
|
||||
return
|
||||
}
|
||||
@@ -496,7 +496,7 @@ func (n *projectAPIInterface) updateProjectUser(req *restful.Request, res *restf
|
||||
// Call the domain layer code
|
||||
userBase, err := n.ProjectService.UpdateProjectUser(req.Request.Context(), req.PathParameter("projectName"), req.PathParameter("userName"), updateReq)
|
||||
if err != nil {
|
||||
log.Logger.Errorf("update project user failure %s", err.Error())
|
||||
klog.Errorf("update project user failure %s", err.Error())
|
||||
bcode.ReturnError(req, res, err)
|
||||
return
|
||||
}
|
||||
@@ -512,7 +512,7 @@ func (n *projectAPIInterface) deleteProjectUser(req *restful.Request, res *restf
|
||||
// Call the domain layer code
|
||||
err := n.ProjectService.DeleteProjectUser(req.Request.Context(), req.PathParameter("projectName"), req.PathParameter("userName"))
|
||||
if err != nil {
|
||||
log.Logger.Errorf("delete project user failure %s", err.Error())
|
||||
klog.Errorf("delete project user failure %s", err.Error())
|
||||
bcode.ReturnError(req, res, err)
|
||||
return
|
||||
}
|
||||
@@ -563,7 +563,7 @@ func (n *projectAPIInterface) createProjectRole(req *restful.Request, res *restf
|
||||
// Call the domain layer code
|
||||
projectBase, err := n.RbacService.CreateRole(req.Request.Context(), req.PathParameter("projectName"), createReq)
|
||||
if err != nil {
|
||||
log.Logger.Errorf("create role failure %s", err.Error())
|
||||
klog.Errorf("create role failure %s", err.Error())
|
||||
bcode.ReturnError(req, res, err)
|
||||
return
|
||||
}
|
||||
@@ -593,7 +593,7 @@ func (n *projectAPIInterface) updateProjectRole(req *restful.Request, res *restf
|
||||
// Call the domain layer code
|
||||
roleBase, err := n.RbacService.UpdateRole(req.Request.Context(), req.PathParameter("projectName"), req.PathParameter("roleName"), updateReq)
|
||||
if err != nil {
|
||||
log.Logger.Errorf("update role failure %s", err.Error())
|
||||
klog.Errorf("update role failure %s", err.Error())
|
||||
bcode.ReturnError(req, res, err)
|
||||
return
|
||||
}
|
||||
@@ -652,7 +652,7 @@ func (n *projectAPIInterface) createProjectPermission(req *restful.Request, res
|
||||
// Call the domain layer code
|
||||
permissionBase, err := n.RbacService.CreatePermission(req.Request.Context(), req.PathParameter("projectName"), createReq)
|
||||
if err != nil {
|
||||
log.Logger.Errorf("create the permission failure %s", err.Error())
|
||||
klog.Errorf("create the permission failure %s", err.Error())
|
||||
bcode.ReturnError(req, res, err)
|
||||
return
|
||||
}
|
||||
|
||||
@@ -19,12 +19,12 @@ package api
|
||||
import (
|
||||
restfulspec "github.com/emicklei/go-restful-openapi/v2"
|
||||
"github.com/emicklei/go-restful/v3"
|
||||
"k8s.io/klog/v2"
|
||||
|
||||
"github.com/oam-dev/kubevela/pkg/apiserver/domain/service"
|
||||
apis "github.com/oam-dev/kubevela/pkg/apiserver/interfaces/api/dto/v1"
|
||||
"github.com/oam-dev/kubevela/pkg/apiserver/utils"
|
||||
"github.com/oam-dev/kubevela/pkg/apiserver/utils/bcode"
|
||||
"github.com/oam-dev/kubevela/pkg/apiserver/utils/log"
|
||||
)
|
||||
|
||||
type rbacAPIInterface struct {
|
||||
@@ -135,7 +135,7 @@ func (r *rbacAPIInterface) createPlatformRole(req *restful.Request, res *restful
|
||||
// Call the domain layer code
|
||||
projectBase, err := r.RbacService.CreateRole(req.Request.Context(), "", createReq)
|
||||
if err != nil {
|
||||
log.Logger.Errorf("create role failure %s", err.Error())
|
||||
klog.Errorf("create role failure %s", err.Error())
|
||||
bcode.ReturnError(req, res, err)
|
||||
return
|
||||
}
|
||||
@@ -161,7 +161,7 @@ func (r *rbacAPIInterface) updatePlatformRole(req *restful.Request, res *restful
|
||||
// Call the domain layer code
|
||||
roleBase, err := r.RbacService.UpdateRole(req.Request.Context(), "", req.PathParameter("roleName"), updateReq)
|
||||
if err != nil {
|
||||
log.Logger.Errorf("update role failure %s", err.Error())
|
||||
klog.Errorf("update role failure %s", err.Error())
|
||||
bcode.ReturnError(req, res, err)
|
||||
return
|
||||
}
|
||||
@@ -212,7 +212,7 @@ func (r *rbacAPIInterface) createPlatformPermission(req *restful.Request, res *r
|
||||
// Call the domain layer code
|
||||
permissionBase, err := r.RbacService.CreatePermission(req.Request.Context(), "", createReq)
|
||||
if err != nil {
|
||||
log.Logger.Errorf("create the permission failure %s", err.Error())
|
||||
klog.Errorf("create the permission failure %s", err.Error())
|
||||
bcode.ReturnError(req, res, err)
|
||||
return
|
||||
}
|
||||
|
||||
@@ -20,6 +20,7 @@ import (
|
||||
"context"
|
||||
|
||||
"github.com/pkg/errors"
|
||||
"k8s.io/klog/v2"
|
||||
|
||||
"github.com/oam-dev/kubevela/pkg/apiserver/infrastructure/datastore"
|
||||
|
||||
@@ -31,7 +32,6 @@ import (
|
||||
apis "github.com/oam-dev/kubevela/pkg/apiserver/interfaces/api/dto/v1"
|
||||
"github.com/oam-dev/kubevela/pkg/apiserver/utils"
|
||||
"github.com/oam-dev/kubevela/pkg/apiserver/utils/bcode"
|
||||
"github.com/oam-dev/kubevela/pkg/apiserver/utils/log"
|
||||
)
|
||||
|
||||
// NewTargetAPIInterface new Target Interface
|
||||
@@ -121,7 +121,7 @@ func (dt *TargetAPIInterface) createTarget(req *restful.Request, res *restful.Re
|
||||
// Call the domain layer code
|
||||
TargetDetail, err := dt.TargetService.CreateTarget(req.Request.Context(), createReq)
|
||||
if err != nil {
|
||||
log.Logger.Errorf("create -target failure %s", err.Error())
|
||||
klog.Errorf("create -target failure %s", err.Error())
|
||||
bcode.ReturnError(req, res, err)
|
||||
return
|
||||
}
|
||||
|
||||
@@ -20,13 +20,13 @@ import (
|
||||
"context"
|
||||
|
||||
restful "github.com/emicklei/go-restful/v3"
|
||||
"k8s.io/klog/v2"
|
||||
|
||||
"github.com/oam-dev/kubevela/pkg/apiserver/domain/model"
|
||||
"github.com/oam-dev/kubevela/pkg/apiserver/domain/service"
|
||||
apis "github.com/oam-dev/kubevela/pkg/apiserver/interfaces/api/dto/v1"
|
||||
"github.com/oam-dev/kubevela/pkg/apiserver/utils"
|
||||
"github.com/oam-dev/kubevela/pkg/apiserver/utils/bcode"
|
||||
"github.com/oam-dev/kubevela/pkg/apiserver/utils/log"
|
||||
)
|
||||
|
||||
// WorkflowAPIInterface workflow api
|
||||
@@ -79,7 +79,7 @@ func (w *WorkflowAPIInterface) createOrUpdateApplicationWorkflow(req *restful.Re
|
||||
// Call the domain service layer code
|
||||
workflowDetail, err := w.WorkflowService.CreateOrUpdateWorkflow(req.Request.Context(), app, createReq)
|
||||
if err != nil {
|
||||
log.Logger.Errorf("create application failure %s", err.Error())
|
||||
klog.Errorf("create application failure %s", err.Error())
|
||||
bcode.ReturnError(req, res, err)
|
||||
return
|
||||
}
|
||||
|
||||
@@ -41,7 +41,6 @@ import (
|
||||
"github.com/oam-dev/kubevela/pkg/apiserver/interfaces/api"
|
||||
"github.com/oam-dev/kubevela/pkg/apiserver/utils"
|
||||
"github.com/oam-dev/kubevela/pkg/apiserver/utils/container"
|
||||
"github.com/oam-dev/kubevela/pkg/apiserver/utils/log"
|
||||
pkgconfig "github.com/oam-dev/kubevela/pkg/config"
|
||||
pkgUtils "github.com/oam-dev/kubevela/pkg/utils"
|
||||
"github.com/oam-dev/kubevela/pkg/utils/apply"
|
||||
@@ -256,14 +255,14 @@ func (s *restServer) requestLog(req *restful.Request, resp *restful.Response, ch
|
||||
resp.ResponseWriter = c
|
||||
chain.ProcessFilter(req, resp)
|
||||
takeTime := time.Since(start)
|
||||
log.Logger.With(
|
||||
klog.InfoS("request log",
|
||||
"clientIP", pkgUtils.Sanitize(utils.ClientIP(req.Request)),
|
||||
"path", pkgUtils.Sanitize(req.Request.URL.Path),
|
||||
"method", req.Request.Method,
|
||||
"status", c.StatusCode(),
|
||||
"time", takeTime.String(),
|
||||
"responseSize", len(c.Bytes()),
|
||||
).Infof("request log")
|
||||
)
|
||||
}
|
||||
|
||||
func (s *restServer) OPTIONSFilter(req *restful.Request, resp *restful.Response, chain *restful.FilterChain) {
|
||||
@@ -299,7 +298,7 @@ func enrichSwaggerObject(swo *spec.Swagger) {
|
||||
|
||||
func (s *restServer) startHTTP(ctx context.Context) error {
|
||||
// Start HTTP apiserver
|
||||
log.Logger.Infof("HTTP APIs are being served on: %s, ctx: %s", s.cfg.BindAddr, ctx)
|
||||
klog.Infof("HTTP APIs are being served on: %s, ctx: %s", s.cfg.BindAddr, ctx)
|
||||
server := &http.Server{Addr: s.cfg.BindAddr, Handler: s.webContainer, ReadHeaderTimeout: 2 * time.Second}
|
||||
return server.ListenAndServe()
|
||||
}
|
||||
|
||||
@@ -37,4 +37,7 @@ var (
|
||||
|
||||
// ErrNotFoundDistribution means the distribution is not exist
|
||||
ErrNotFoundDistribution = NewBcode(404, 16007, "the distribution is not exist")
|
||||
|
||||
// ErrChangeSecretType the secret type of the config can not be change
|
||||
ErrChangeSecretType = NewBcode(400, 16008, "the secret type of the config can not be change")
|
||||
)
|
||||
|
||||
@@ -22,9 +22,9 @@ import (
|
||||
|
||||
"github.com/emicklei/go-restful/v3"
|
||||
"github.com/go-playground/validator/v10"
|
||||
"k8s.io/klog/v2"
|
||||
|
||||
"github.com/oam-dev/kubevela/pkg/apiserver/infrastructure/datastore"
|
||||
"github.com/oam-dev/kubevela/pkg/apiserver/utils/log"
|
||||
"github.com/oam-dev/kubevela/pkg/utils"
|
||||
)
|
||||
|
||||
@@ -81,21 +81,21 @@ func ReturnError(req *restful.Request, res *restful.Response, err error) {
|
||||
var bcode *Bcode
|
||||
if errors.As(err, &bcode) {
|
||||
if err := res.WriteHeaderAndEntity(int(bcode.HTTPCode), err); err != nil {
|
||||
log.Logger.Error("write entity failure %s", err.Error())
|
||||
klog.Errorf("write entity failure %s", err.Error())
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
if errors.Is(err, datastore.ErrRecordNotExist) {
|
||||
if err := res.WriteHeaderAndEntity(int(404), err); err != nil {
|
||||
log.Logger.Error("write entity failure %s", err.Error())
|
||||
klog.Errorf("write entity failure %s", err.Error())
|
||||
}
|
||||
return
|
||||
}
|
||||
var restfulerr restful.ServiceError
|
||||
if errors.As(err, &restfulerr) {
|
||||
if err := res.WriteHeaderAndEntity(restfulerr.Code, Bcode{HTTPCode: int32(restfulerr.Code), BusinessCode: int32(restfulerr.Code), Message: restfulerr.Message}); err != nil {
|
||||
log.Logger.Error("write entity failure %s", err.Error())
|
||||
klog.Errorf("write entity failure %s", err.Error())
|
||||
}
|
||||
return
|
||||
}
|
||||
@@ -103,13 +103,13 @@ func ReturnError(req *restful.Request, res *restful.Response, err error) {
|
||||
var validErr validator.ValidationErrors
|
||||
if errors.As(err, &validErr) {
|
||||
if err := res.WriteHeaderAndEntity(400, Bcode{HTTPCode: 400, BusinessCode: 400, Message: err.Error()}); err != nil {
|
||||
log.Logger.Error("write entity failure %s", err.Error())
|
||||
klog.Errorf("write entity failure %s", err.Error())
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
log.Logger.Errorf("Business exceptions, error message: %s, path:%s method:%s", err.Error(), utils.Sanitize(req.Request.URL.String()), req.Request.Method)
|
||||
klog.Errorf("Business exceptions, error message: %s, path:%s method:%s", err.Error(), utils.Sanitize(req.Request.URL.String()), req.Request.Method)
|
||||
if err := res.WriteHeaderAndEntity(500, Bcode{HTTPCode: 500, BusinessCode: 500, Message: err.Error()}); err != nil {
|
||||
log.Logger.Error("write entity failure %s", err.Error())
|
||||
klog.Errorf("write entity failure %s", err.Error())
|
||||
}
|
||||
}
|
||||
|
||||
@@ -19,8 +19,7 @@ package container
|
||||
import (
|
||||
"github.com/barnettZQG/inject"
|
||||
"helm.sh/helm/v3/pkg/time"
|
||||
|
||||
"github.com/oam-dev/kubevela/pkg/apiserver/utils/log"
|
||||
"k8s.io/klog/v2"
|
||||
)
|
||||
|
||||
// NewContainer new a IoC container
|
||||
@@ -55,7 +54,7 @@ func (c *Container) ProvideWithName(name string, bean interface{}) error {
|
||||
func (c *Container) Populate() error {
|
||||
start := time.Now()
|
||||
defer func() {
|
||||
log.Logger.Infof("populate the bean container take time %s", time.Now().Sub(start))
|
||||
klog.Infof("populate the bean container take time %s", time.Now().Sub(start))
|
||||
}()
|
||||
return c.graph.Populate()
|
||||
}
|
||||
|
||||
@@ -20,11 +20,10 @@ import (
|
||||
"encoding/json"
|
||||
|
||||
v1 "k8s.io/api/core/v1"
|
||||
"k8s.io/klog/v2"
|
||||
"sigs.k8s.io/controller-runtime/pkg/client"
|
||||
|
||||
"github.com/oam-dev/kubevela/apis/types"
|
||||
|
||||
"github.com/oam-dev/kubevela/pkg/apiserver/utils/log"
|
||||
)
|
||||
|
||||
// GetDexConnectors returns the dex connectors for Dex connector controller
|
||||
@@ -41,7 +40,7 @@ func GetDexConnectors(ctx context.Context, k8sClient client.Client) ([]map[strin
|
||||
if _, ok := s.Data[key]; ok {
|
||||
err := json.Unmarshal(s.Data[key], &data)
|
||||
if err != nil {
|
||||
log.Logger.Warnf("the dex connector %s is invalid", s.Name)
|
||||
klog.Warningf("the dex connector %s is invalid", s.Name)
|
||||
continue
|
||||
}
|
||||
connectors[i] = map[string]interface{}{
|
||||
|
||||
@@ -1,29 +0,0 @@
|
||||
/*
|
||||
Copyright 2021 The KubeVela 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 log
|
||||
|
||||
import (
|
||||
"go.uber.org/zap"
|
||||
)
|
||||
|
||||
// Logger Log component
|
||||
var Logger *zap.SugaredLogger
|
||||
|
||||
func init() {
|
||||
l, _ := zap.NewProduction()
|
||||
Logger = l.Sugar()
|
||||
}
|
||||
@@ -32,7 +32,7 @@ import (
|
||||
"k8s.io/apimachinery/pkg/labels"
|
||||
"k8s.io/apimachinery/pkg/runtime"
|
||||
pkgtypes "k8s.io/apimachinery/pkg/types"
|
||||
"k8s.io/klog"
|
||||
"k8s.io/klog/v2"
|
||||
"sigs.k8s.io/controller-runtime/pkg/client"
|
||||
"sigs.k8s.io/yaml"
|
||||
|
||||
@@ -88,6 +88,12 @@ var ErrConfigNotFound = errors.New("the config is not exist")
|
||||
// ErrTemplateNotFound means the template is not exist
|
||||
var ErrTemplateNotFound = errors.New("the template is not exist")
|
||||
|
||||
// ErrChangeTemplate means the template of the config can not be change
|
||||
var ErrChangeTemplate = errors.New("the template of the config can not be change")
|
||||
|
||||
// ErrChangeSecretType means the secret type of the config can not be change
|
||||
var ErrChangeSecretType = errors.New("the secret type of the config can not be change")
|
||||
|
||||
// NamespacedName the namespace and name model
|
||||
type NamespacedName struct {
|
||||
Name string `json:"name"`
|
||||
@@ -192,6 +198,7 @@ type Factory interface {
|
||||
ListConfigs(ctx context.Context, namespace, template, scope string, withStatus bool) ([]*Config, error)
|
||||
DeleteConfig(ctx context.Context, namespace, name string) error
|
||||
CreateOrUpdateConfig(ctx context.Context, i *Config, ns string) error
|
||||
IsExist(ctx context.Context, namespace, name string) (bool, error)
|
||||
|
||||
CreateOrUpdateDistribution(ctx context.Context, ns, name string, ads *CreateDistributionSpec) error
|
||||
ListDistributions(ctx context.Context, ns string) ([]*Distribution, error)
|
||||
@@ -549,7 +556,10 @@ func (k *kubeConfigFactory) CreateOrUpdateConfig(ctx context.Context, i *Config,
|
||||
var secret v1.Secret
|
||||
if err := k.cli.Get(ctx, pkgtypes.NamespacedName{Namespace: i.Namespace, Name: i.Name}, &secret); err == nil {
|
||||
if secret.Labels[types.LabelConfigType] != i.Template.Name {
|
||||
return ErrConfigExist
|
||||
return ErrChangeTemplate
|
||||
}
|
||||
if secret.Type != i.Secret.Type {
|
||||
return ErrChangeSecretType
|
||||
}
|
||||
}
|
||||
if err := k.apiApply.Apply(ctx, i.Secret, apply.Quiet()); err != nil {
|
||||
@@ -571,6 +581,17 @@ func (k *kubeConfigFactory) CreateOrUpdateConfig(ctx context.Context, i *Config,
|
||||
return nil
|
||||
}
|
||||
|
||||
func (k *kubeConfigFactory) IsExist(ctx context.Context, namespace, name string) (bool, error) {
|
||||
var secret v1.Secret
|
||||
if err := k.cli.Get(ctx, pkgtypes.NamespacedName{Namespace: namespace, Name: name}, &secret); err != nil {
|
||||
if apierrors.IsNotFound(err) {
|
||||
return false, nil
|
||||
}
|
||||
return false, err
|
||||
}
|
||||
return true, nil
|
||||
}
|
||||
|
||||
func (k *kubeConfigFactory) ListConfigs(ctx context.Context, namespace, template, scope string, withStatus bool) ([]*Config, error) {
|
||||
var list = &v1.SecretList{}
|
||||
requirement := fmt.Sprintf("%s=%s", types.LabelConfigCatalog, types.VelaCoreConfig)
|
||||
|
||||
@@ -145,6 +145,12 @@ var _ = Describe("test config factory", func() {
|
||||
Expect(len(config.Targets)).Should(Equal(1))
|
||||
})
|
||||
|
||||
It("check if the config exist", func() {
|
||||
exist, err := fac.IsExist(context.TODO(), "default", "db-config")
|
||||
Expect(err).Should(BeNil())
|
||||
Expect(exist).Should(BeTrue())
|
||||
})
|
||||
|
||||
It("list the distributions", func() {
|
||||
distributions, err := fac.ListDistributions(context.TODO(), "default")
|
||||
Expect(err).Should(BeNil())
|
||||
|
||||
@@ -22,7 +22,7 @@ import (
|
||||
"runtime/debug"
|
||||
"strings"
|
||||
|
||||
"k8s.io/klog"
|
||||
"k8s.io/klog/v2"
|
||||
|
||||
"github.com/nacos-group/nacos-sdk-go/v2/clients"
|
||||
"github.com/nacos-group/nacos-sdk-go/v2/clients/config_client"
|
||||
|
||||
@@ -26,7 +26,7 @@ import (
|
||||
"github.com/magiconair/properties"
|
||||
"github.com/pelletier/go-toml"
|
||||
"gopkg.in/yaml.v2"
|
||||
"k8s.io/klog"
|
||||
"k8s.io/klog/v2"
|
||||
|
||||
"github.com/kubevela/workflow/pkg/cue/model/value"
|
||||
|
||||
|
||||
@@ -302,6 +302,11 @@ func (r *Reconciler) gcResourceTrackers(logCtx monitorContext.Context, handler *
|
||||
}))
|
||||
defer subCtx.Commit("finish gc resourceTrackers")
|
||||
|
||||
statusUpdater := r.patchStatus
|
||||
if isUpdate {
|
||||
statusUpdater = r.updateStatus
|
||||
}
|
||||
|
||||
var options []resourcekeeper.GCOption
|
||||
if !gcOutdated {
|
||||
options = append(options, resourcekeeper.DisableMarkStageGCOption{}, resourcekeeper.DisableGCComponentRevisionOption{}, resourcekeeper.DisableLegacyGCOption{})
|
||||
@@ -309,8 +314,10 @@ func (r *Reconciler) gcResourceTrackers(logCtx monitorContext.Context, handler *
|
||||
finished, waiting, err := handler.resourceKeeper.GarbageCollect(logCtx, options...)
|
||||
if err != nil {
|
||||
logCtx.Error(err, "Failed to gc resourcetrackers")
|
||||
r.Recorder.Event(handler.app, event.Warning(velatypes.ReasonFailedGC, err))
|
||||
return r.endWithNegativeCondition(logCtx, handler.app, condition.ReconcileError(err), phase)
|
||||
cond := condition.Deleting()
|
||||
cond.Message = fmt.Sprintf("error encountered during garbage collection: %s", err.Error())
|
||||
handler.app.Status.SetConditions(cond)
|
||||
return r.result(statusUpdater(logCtx, handler.app, phase)).ret()
|
||||
}
|
||||
if !finished {
|
||||
logCtx.Info("GarbageCollecting resourcetrackers unfinished")
|
||||
@@ -319,13 +326,10 @@ func (r *Reconciler) gcResourceTrackers(logCtx monitorContext.Context, handler *
|
||||
cond.Message = fmt.Sprintf("Waiting for %s to delete. (At least %d resources are deleting.)", waiting[0].DisplayName(), len(waiting))
|
||||
}
|
||||
handler.app.Status.SetConditions(cond)
|
||||
return r.result(r.patchStatus(logCtx, handler.app, phase)).requeue(baseGCBackoffWaitTime).ret()
|
||||
return r.result(statusUpdater(logCtx, handler.app, phase)).requeue(baseGCBackoffWaitTime).ret()
|
||||
}
|
||||
logCtx.Info("GarbageCollected resourcetrackers")
|
||||
if isUpdate {
|
||||
return r.result(r.updateStatus(logCtx, handler.app, phase)).ret()
|
||||
}
|
||||
return r.result(r.patchStatus(logCtx, handler.app, phase)).ret()
|
||||
return r.result(statusUpdater(logCtx, handler.app, phase)).ret()
|
||||
}
|
||||
|
||||
type reconcileResult struct {
|
||||
|
||||
@@ -114,6 +114,7 @@ func HandleReplicas(ctx context.Context, rolloutComp string, c client.Client) as
|
||||
klog.InfoS("assemble force set workload replicas to 0", "Kind", u.GetKind(), "name", u.GetName())
|
||||
return nil
|
||||
}
|
||||
klog.Errorf("fail to get workload %s: %v", u.GetName(), err)
|
||||
return err
|
||||
}
|
||||
// the workload already exist, we cannot reset the replicas with manifest
|
||||
@@ -122,6 +123,7 @@ func HandleReplicas(ctx context.Context, rolloutComp string, c client.Client) as
|
||||
wlpv := fieldpath.Pave(workload.UnstructuredContent())
|
||||
replicas, err := wlpv.GetInteger(replicasFieldPath)
|
||||
if err != nil {
|
||||
klog.Errorf("fail to get `spec.replicas` field from workload %s: %v", u.GetName(), err)
|
||||
return err
|
||||
}
|
||||
if err = pv.SetNumber(replicasFieldPath, float64(replicas)); err != nil {
|
||||
|
||||
@@ -329,19 +329,6 @@ func RealtimePrintCommandOutput(cmd *exec.Cmd, logFile string) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
// ClusterObject2Map convert ClusterObjectReference to a readable map
|
||||
func ClusterObject2Map(refs []common.ClusterObjectReference) map[string]string {
|
||||
clusterResourceRefTmpl := "Cluster: %s | Namespace: %s | Kind: %s | Name: %s"
|
||||
objs := make(map[string]string, len(refs))
|
||||
for _, r := range refs {
|
||||
if r.Cluster == "" {
|
||||
r.Cluster = "local"
|
||||
}
|
||||
objs[r.Cluster+"/"+r.Namespace+"/"+r.Name+"/"+r.Kind] = fmt.Sprintf(clusterResourceRefTmpl, r.Cluster, r.Namespace, r.Kind, r.Name)
|
||||
}
|
||||
return objs
|
||||
}
|
||||
|
||||
// ResourceLocation indicates the resource location
|
||||
type ResourceLocation struct {
|
||||
Cluster string
|
||||
|
||||
@@ -27,27 +27,26 @@ import (
|
||||
"time"
|
||||
|
||||
"github.com/fatih/color"
|
||||
"github.com/kubevela/pkg/multicluster"
|
||||
"github.com/pkg/errors"
|
||||
"github.com/wercker/stern/stern"
|
||||
"k8s.io/apimachinery/pkg/labels"
|
||||
"k8s.io/apimachinery/pkg/selection"
|
||||
"k8s.io/client-go/kubernetes"
|
||||
|
||||
querytypes "github.com/oam-dev/kubevela/pkg/velaql/providers/query/types"
|
||||
|
||||
authv1 "k8s.io/api/authentication/v1"
|
||||
corev1 "k8s.io/api/core/v1"
|
||||
apierrors "k8s.io/apimachinery/pkg/api/errors"
|
||||
"k8s.io/apimachinery/pkg/api/meta"
|
||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||
"k8s.io/apimachinery/pkg/labels"
|
||||
"k8s.io/apimachinery/pkg/runtime/schema"
|
||||
"k8s.io/apimachinery/pkg/selection"
|
||||
k8stypes "k8s.io/apimachinery/pkg/types"
|
||||
"k8s.io/client-go/kubernetes"
|
||||
"k8s.io/client-go/rest"
|
||||
"sigs.k8s.io/controller-runtime/pkg/client"
|
||||
"sigs.k8s.io/controller-runtime/pkg/controller/controllerutil"
|
||||
|
||||
"github.com/oam-dev/kubevela/pkg/oam/util"
|
||||
velaerr "github.com/oam-dev/kubevela/pkg/utils/errors"
|
||||
querytypes "github.com/oam-dev/kubevela/pkg/velaql/providers/query/types"
|
||||
)
|
||||
|
||||
// MutateOption defines the function pattern for mutate
|
||||
@@ -238,6 +237,7 @@ func GetPodsLogs(ctx context.Context, config *rest.Config, containerName string,
|
||||
}
|
||||
}
|
||||
}
|
||||
config.Wrap(multicluster.NewTransportWrapper())
|
||||
clientSet, err := kubernetes.NewForConfig(config)
|
||||
if err != nil {
|
||||
return err
|
||||
|
||||
@@ -305,9 +305,11 @@ func isResourceInTargetCluster(opt FilterOption, resource common.ClusterObjectRe
|
||||
if opt.Cluster == "" && opt.ClusterNamespace == "" {
|
||||
return true
|
||||
}
|
||||
if (opt.Cluster == resource.Cluster || (opt.Cluster == "local" && resource.Cluster == "")) && opt.ClusterNamespace == resource.ObjectReference.Namespace {
|
||||
if (opt.Cluster == resource.Cluster || (opt.Cluster == "local" && resource.Cluster == "")) &&
|
||||
(opt.ClusterNamespace == resource.ObjectReference.Namespace || opt.ClusterNamespace == "") {
|
||||
return true
|
||||
}
|
||||
|
||||
return false
|
||||
}
|
||||
|
||||
|
||||
@@ -29,7 +29,7 @@ import (
|
||||
kerrors "k8s.io/apimachinery/pkg/api/errors"
|
||||
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
|
||||
"k8s.io/apimachinery/pkg/runtime/schema"
|
||||
"k8s.io/klog"
|
||||
"k8s.io/klog/v2"
|
||||
"sigs.k8s.io/controller-runtime/pkg/client"
|
||||
gatewayv1alpha2 "sigs.k8s.io/gateway-api/apis/v1alpha2"
|
||||
|
||||
@@ -40,7 +40,6 @@ import (
|
||||
|
||||
"github.com/oam-dev/kubevela/apis/core.oam.dev/v1beta1"
|
||||
apis "github.com/oam-dev/kubevela/apis/types"
|
||||
"github.com/oam-dev/kubevela/pkg/apiserver/utils/log"
|
||||
"github.com/oam-dev/kubevela/pkg/multicluster"
|
||||
"github.com/oam-dev/kubevela/pkg/utils"
|
||||
querytypes "github.com/oam-dev/kubevela/pkg/velaql/providers/query/types"
|
||||
@@ -308,7 +307,7 @@ func getGatewayPortAndProtocol(ctx context.Context, cli client.Client, defaultNa
|
||||
namespace = string(*parent.Namespace)
|
||||
}
|
||||
if err := findResource(ctx, cli, &gateway, string(parent.Name), namespace, cluster); err != nil {
|
||||
log.Logger.Errorf("query the Gateway %s/%s/%s failure %s", cluster, namespace, string(parent.Name), err.Error())
|
||||
klog.Errorf("query the Gateway %s/%s/%s failure %s", cluster, namespace, string(parent.Name), err.Error())
|
||||
}
|
||||
var listener *gatewayv1alpha2.Listener
|
||||
if parent.SectionName != nil {
|
||||
@@ -398,20 +397,7 @@ func selectorNodeIP(ctx context.Context, clusterName string, client client.Clien
|
||||
if len(nodes.Items) == 0 {
|
||||
return ""
|
||||
}
|
||||
var gatewayNode *corev1.Node
|
||||
var workerNodes []corev1.Node
|
||||
for i, node := range nodes.Items {
|
||||
if _, exist := node.Labels[apis.LabelNodeRoleGateway]; exist {
|
||||
gatewayNode = &nodes.Items[i]
|
||||
break
|
||||
} else if _, exist := node.Labels[apis.LabelNodeRoleWorker]; exist {
|
||||
workerNodes = append(workerNodes, nodes.Items[i])
|
||||
}
|
||||
}
|
||||
if gatewayNode != nil {
|
||||
return selectGatewayIP([]corev1.Node{*gatewayNode})
|
||||
}
|
||||
return selectGatewayIP(workerNodes)
|
||||
return selectGatewayIP(nodes.Items)
|
||||
}
|
||||
|
||||
// judgeAppProtocol RFC-6335 and http://www.iana.org/assignments/service-names).
|
||||
@@ -432,11 +418,28 @@ func judgeAppProtocol(port int32) string {
|
||||
|
||||
// selectGatewayIP will choose one gateway IP from all nodes, it will pick up external IP first. If there isn't any, it will pick the first node's internal IP.
|
||||
func selectGatewayIP(nodes []corev1.Node) string {
|
||||
if len(nodes) == 0 {
|
||||
var gatewayNode *corev1.Node
|
||||
var workerNodes []corev1.Node
|
||||
for i, node := range nodes {
|
||||
if _, exist := node.Labels[apis.LabelNodeRoleGateway]; exist {
|
||||
gatewayNode = &nodes[i]
|
||||
break
|
||||
} else if _, exist := node.Labels[apis.LabelNodeRoleWorker]; exist {
|
||||
workerNodes = append(workerNodes, nodes[i])
|
||||
}
|
||||
}
|
||||
var candidates = nodes
|
||||
if gatewayNode != nil {
|
||||
candidates = []corev1.Node{*gatewayNode}
|
||||
} else if len(workerNodes) > 0 {
|
||||
candidates = workerNodes
|
||||
}
|
||||
|
||||
if len(candidates) == 0 {
|
||||
return ""
|
||||
}
|
||||
var addressMaps = make([]map[corev1.NodeAddressType]string, 0)
|
||||
for _, node := range nodes {
|
||||
for _, node := range candidates {
|
||||
var addressMap = make(map[corev1.NodeAddressType]string)
|
||||
for _, address := range node.Status.Addresses {
|
||||
addressMap[address.Type] = address.Address
|
||||
|
||||
@@ -274,47 +274,108 @@ var _ = Describe("Test query endpoints", func() {
|
||||
})
|
||||
|
||||
It("Test select gateway IP", func() {
|
||||
node1 := corev1.Node{
|
||||
masterNode := corev1.Node{
|
||||
ObjectMeta: metav1.ObjectMeta{
|
||||
Name: "node-with-external-ip",
|
||||
Name: "node-1",
|
||||
Labels: map[string]string{
|
||||
"node-role.kubernetes.io/master": "true",
|
||||
},
|
||||
},
|
||||
Status: corev1.NodeStatus{
|
||||
Addresses: []corev1.NodeAddress{
|
||||
{Type: corev1.NodeExternalIP, Address: "node1-external-ip"},
|
||||
{Type: corev1.NodeInternalIP, Address: "node1-internal-ip"},
|
||||
{
|
||||
Type: corev1.NodeInternalIP,
|
||||
Address: "node1-internal-ip",
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
node2 := corev1.Node{
|
||||
workerNode1 := corev1.Node{
|
||||
ObjectMeta: metav1.ObjectMeta{
|
||||
Name: "node-without-external-ip",
|
||||
Name: "node-2",
|
||||
Labels: map[string]string{
|
||||
"node-role.kubernetes.io/worker": "true",
|
||||
},
|
||||
},
|
||||
Status: corev1.NodeStatus{
|
||||
Addresses: []corev1.NodeAddress{
|
||||
{Type: corev1.NodeInternalIP, Address: "node2-internal-ip"},
|
||||
{
|
||||
Type: corev1.NodeInternalIP,
|
||||
Address: "node2-internal-ip",
|
||||
},
|
||||
{
|
||||
Type: corev1.NodeExternalIP,
|
||||
Address: "node2-external-ip",
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
testCases := []struct {
|
||||
workerNode2 := corev1.Node{
|
||||
ObjectMeta: metav1.ObjectMeta{
|
||||
Name: "node-3",
|
||||
Labels: map[string]string{
|
||||
"node-role.kubernetes.io/worker": "true",
|
||||
},
|
||||
},
|
||||
Status: corev1.NodeStatus{
|
||||
Addresses: []corev1.NodeAddress{
|
||||
{
|
||||
Type: corev1.NodeInternalIP,
|
||||
Address: "node3-internal-ip",
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
gatewayNode := corev1.Node{
|
||||
ObjectMeta: metav1.ObjectMeta{
|
||||
Name: "node-4",
|
||||
Labels: map[string]string{
|
||||
"node-role.kubernetes.io/gateway": "true",
|
||||
},
|
||||
},
|
||||
Status: corev1.NodeStatus{
|
||||
Addresses: []corev1.NodeAddress{
|
||||
{
|
||||
Type: corev1.NodeInternalIP,
|
||||
Address: "node4-internal-ip",
|
||||
},
|
||||
{
|
||||
Type: corev1.NodeExternalIP,
|
||||
Address: "node4-external-ip",
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
testCase := []struct {
|
||||
note string
|
||||
nodes []corev1.Node
|
||||
wantIP string
|
||||
}{
|
||||
{
|
||||
nodes: []corev1.Node{node1, node2},
|
||||
wantIP: "node1-external-ip",
|
||||
note: "only master node",
|
||||
nodes: []corev1.Node{masterNode},
|
||||
wantIP: "node1-internal-ip",
|
||||
},
|
||||
{
|
||||
nodes: []corev1.Node{node2},
|
||||
wantIP: "node2-internal-ip",
|
||||
note: "with worker node, select external ip first",
|
||||
nodes: []corev1.Node{masterNode, workerNode1},
|
||||
wantIP: "node2-external-ip",
|
||||
},
|
||||
{
|
||||
nodes: []corev1.Node{},
|
||||
wantIP: "",
|
||||
note: "with worker node, select worker's internal ip",
|
||||
nodes: []corev1.Node{masterNode, workerNode2},
|
||||
wantIP: "node3-internal-ip",
|
||||
},
|
||||
{
|
||||
note: "with gateway node, gateway node first",
|
||||
nodes: []corev1.Node{masterNode, workerNode1, workerNode1, gatewayNode},
|
||||
wantIP: "node4-external-ip",
|
||||
},
|
||||
}
|
||||
for _, tc := range testCases {
|
||||
gotIP := selectGatewayIP(tc.nodes)
|
||||
Expect(gotIP).Should(BeEquivalentTo(tc.wantIP))
|
||||
for _, tc := range testCase {
|
||||
By(tc.note)
|
||||
ip := selectGatewayIP(tc.nodes)
|
||||
Expect(ip).Should(Equal(tc.wantIP))
|
||||
}
|
||||
})
|
||||
})
|
||||
|
||||
@@ -31,16 +31,16 @@ import (
|
||||
apimachinerytypes "k8s.io/apimachinery/pkg/types"
|
||||
"k8s.io/client-go/kubernetes"
|
||||
"k8s.io/client-go/rest"
|
||||
"k8s.io/klog"
|
||||
"k8s.io/klog/v2"
|
||||
"sigs.k8s.io/controller-runtime/pkg/client"
|
||||
|
||||
monitorContext "github.com/kubevela/pkg/monitor/context"
|
||||
pkgmulticluster "github.com/kubevela/pkg/multicluster"
|
||||
wfContext "github.com/kubevela/workflow/pkg/context"
|
||||
"github.com/kubevela/workflow/pkg/cue/model/value"
|
||||
"github.com/kubevela/workflow/pkg/types"
|
||||
|
||||
"github.com/oam-dev/kubevela/apis/core.oam.dev/v1beta1"
|
||||
"github.com/oam-dev/kubevela/pkg/apiserver/utils/log"
|
||||
"github.com/oam-dev/kubevela/pkg/multicluster"
|
||||
querytypes "github.com/oam-dev/kubevela/pkg/velaql/providers/query/types"
|
||||
)
|
||||
@@ -172,7 +172,7 @@ func (h *provider) CollectResources(ctx monitorContext.Context, wfCtx wfContext.
|
||||
Namespace: app.Namespace,
|
||||
}, object))
|
||||
} else {
|
||||
log.Logger.Errorf("failed to get the service:%s", err.Error())
|
||||
klog.Errorf("failed to get the service:%s", err.Error())
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -230,6 +230,7 @@ func (h *provider) CollectLogsInPod(ctx monitorContext.Context, wfCtx wfContext.
|
||||
return errors.Wrapf(err, "invalid log options content")
|
||||
}
|
||||
cliCtx := multicluster.ContextWithClusterName(ctx, cluster)
|
||||
h.cfg.Wrap(pkgmulticluster.NewTransportWrapper())
|
||||
clientSet, err := kubernetes.NewForConfig(h.cfg)
|
||||
if err != nil {
|
||||
return errors.Wrapf(err, "failed to create kubernetes client")
|
||||
|
||||
@@ -19,7 +19,7 @@ package query
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"io/ioutil"
|
||||
"os"
|
||||
"time"
|
||||
|
||||
. "github.com/onsi/ginkgo"
|
||||
@@ -31,7 +31,7 @@ import (
|
||||
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
|
||||
"k8s.io/apimachinery/pkg/runtime/schema"
|
||||
"k8s.io/apimachinery/pkg/util/intstr"
|
||||
"k8s.io/klog"
|
||||
"k8s.io/klog/v2"
|
||||
"sigs.k8s.io/controller-runtime/pkg/client"
|
||||
"sigs.k8s.io/yaml"
|
||||
|
||||
@@ -929,7 +929,7 @@ options: {
|
||||
}
|
||||
var objects []client.Object
|
||||
for _, resource := range resources {
|
||||
data, err := ioutil.ReadFile(resource)
|
||||
data, err := os.ReadFile(resource)
|
||||
Expect(err).Should(BeNil())
|
||||
var route unstructured.Unstructured
|
||||
err = yaml.Unmarshal(data, &route)
|
||||
@@ -942,6 +942,46 @@ options: {
|
||||
Expect(err).Should(BeNil())
|
||||
}
|
||||
|
||||
// Prepare nodes in test environment
|
||||
masterNode := &corev1.Node{
|
||||
ObjectMeta: metav1.ObjectMeta{
|
||||
Name: "node-1",
|
||||
Labels: map[string]string{
|
||||
"node-role.kubernetes.io/master": "true",
|
||||
},
|
||||
},
|
||||
Status: corev1.NodeStatus{
|
||||
Addresses: []corev1.NodeAddress{
|
||||
{
|
||||
Type: corev1.NodeInternalIP,
|
||||
Address: "internal-ip-1",
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
workerNode := &corev1.Node{
|
||||
ObjectMeta: metav1.ObjectMeta{
|
||||
Name: "node-2",
|
||||
Labels: map[string]string{
|
||||
"node-role.kubernetes.io/worker": "true",
|
||||
},
|
||||
},
|
||||
Status: corev1.NodeStatus{
|
||||
Addresses: []corev1.NodeAddress{
|
||||
{
|
||||
Type: corev1.NodeInternalIP,
|
||||
Address: "internal-ip-2",
|
||||
},
|
||||
{
|
||||
Type: corev1.NodeExternalIP,
|
||||
Address: "external-ip-2",
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
Expect(k8sClient.Create(ctx, masterNode)).Should(BeNil())
|
||||
Expect(k8sClient.Create(ctx, workerNode)).Should(BeNil())
|
||||
|
||||
opt := `app: {
|
||||
name: "endpoints-app"
|
||||
namespace: "default"
|
||||
@@ -960,6 +1000,7 @@ options: {
|
||||
err = pr.CollectServiceEndpoints(logCtx, nil, v, nil)
|
||||
Expect(err).Should(BeNil())
|
||||
gatewayIP := selectorNodeIP(ctx, "", k8sClient)
|
||||
Expect(gatewayIP).Should(Equal("external-ip-2"))
|
||||
urls := []string{
|
||||
"http://ingress.domain",
|
||||
"https://ingress.domain.https",
|
||||
|
||||
@@ -25,6 +25,7 @@ import (
|
||||
|
||||
appsv1 "k8s.io/api/apps/v1"
|
||||
v12 "k8s.io/api/core/v1"
|
||||
kerrors "k8s.io/apimachinery/pkg/api/errors"
|
||||
"k8s.io/apimachinery/pkg/api/meta"
|
||||
v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
|
||||
@@ -32,14 +33,13 @@ import (
|
||||
"k8s.io/apimachinery/pkg/runtime"
|
||||
types2 "k8s.io/apimachinery/pkg/types"
|
||||
"k8s.io/apimachinery/pkg/util/duration"
|
||||
"k8s.io/klog"
|
||||
"k8s.io/klog/v2"
|
||||
"k8s.io/kubectl/pkg/util/podutils"
|
||||
|
||||
"sigs.k8s.io/controller-runtime/pkg/client"
|
||||
"sigs.k8s.io/yaml"
|
||||
|
||||
velatypes "github.com/oam-dev/kubevela/apis/types"
|
||||
"github.com/oam-dev/kubevela/pkg/apiserver/utils/log"
|
||||
"github.com/oam-dev/kubevela/pkg/multicluster"
|
||||
"github.com/oam-dev/kubevela/pkg/oam"
|
||||
"github.com/oam-dev/kubevela/pkg/velaql/providers/query/types"
|
||||
@@ -890,7 +890,7 @@ func listItemByRule(clusterCTX context.Context, k8sClient client.Client, resourc
|
||||
|
||||
func iterateListSubResources(ctx context.Context, cluster string, k8sClient client.Client, parentResource types.ResourceTreeNode, depth int, filter func(node types.ResourceTreeNode) bool) ([]*types.ResourceTreeNode, error) {
|
||||
if depth > maxDepth {
|
||||
log.Logger.Warnf("listing application resource tree has reached the max-depth %d parentObject is %v", depth, parentResource)
|
||||
klog.Warningf("listing application resource tree has reached the max-depth %d parentObject is %v", depth, parentResource)
|
||||
return nil, nil
|
||||
}
|
||||
parentObject, err := fetchObjectWithResourceTreeNode(ctx, cluster, k8sClient, parentResource)
|
||||
@@ -909,7 +909,7 @@ func iterateListSubResources(ctx context.Context, cluster string, k8sClient clie
|
||||
clusterCTX := multicluster.ContextWithClusterName(ctx, cluster)
|
||||
items, err := listItemByRule(clusterCTX, k8sClient, resource, *parentObject, specifiedFunc, rule.DefaultGenListOptionFunc, rule.DisableFilterByOwnerReference)
|
||||
if err != nil {
|
||||
if meta.IsNoMatchError(err) || runtime.IsNotRegisteredError(err) {
|
||||
if meta.IsNoMatchError(err) || runtime.IsNotRegisteredError(err) || kerrors.IsNotFound(err) {
|
||||
klog.Warningf("ignore list resources: %s as %v", resource.Kind, err)
|
||||
continue
|
||||
}
|
||||
|
||||
@@ -23,7 +23,7 @@ import (
|
||||
|
||||
"github.com/pkg/errors"
|
||||
admissionv1 "k8s.io/api/admission/v1"
|
||||
"k8s.io/klog"
|
||||
"k8s.io/klog/v2"
|
||||
"sigs.k8s.io/controller-runtime/pkg/client"
|
||||
"sigs.k8s.io/controller-runtime/pkg/manager"
|
||||
"sigs.k8s.io/controller-runtime/pkg/runtime/inject"
|
||||
|
||||
@@ -70,18 +70,16 @@ const (
|
||||
|
||||
var enabledAddonColor = color.New(color.Bold, color.FgGreen)
|
||||
|
||||
var forceDisable bool
|
||||
var addonVersion string
|
||||
|
||||
var addonClusters string
|
||||
|
||||
var verboseStatus bool
|
||||
|
||||
var skipValidate bool
|
||||
|
||||
var overrideDefs bool
|
||||
|
||||
var dryRun bool
|
||||
var (
|
||||
forceDisable bool
|
||||
addonVersion string
|
||||
addonClusters string
|
||||
verboseStatus bool
|
||||
skipValidate bool
|
||||
overrideDefs bool
|
||||
dryRun bool
|
||||
yes2all bool
|
||||
)
|
||||
|
||||
// NewAddonCommand create `addon` command
|
||||
func NewAddonCommand(c common.Args, order string, ioStreams cmdutil.IOStreams) *cobra.Command {
|
||||
@@ -189,15 +187,24 @@ func NewAddonEnableCommand(c common.Args, ioStream cmdutil.IOStreams) *cobra.Com
|
||||
return errors.Wrapf(err, "directory %s is invalid", addonOrDir)
|
||||
}
|
||||
name = filepath.Base(abs)
|
||||
if !yes2all {
|
||||
if err := checkUninstallFromClusters(ctx, k8sClient, name, addonArgs); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
err = enableAddonByLocal(ctx, name, addonOrDir, k8sClient, dc, config, addonArgs)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
} else {
|
||||
if filepath.IsAbs(addonOrDir) || strings.HasPrefix(addonOrDir, ".") || strings.HasSuffix(addonOrDir, "/") {
|
||||
return fmt.Errorf("addon directory %s not found in local", addonOrDir)
|
||||
return fmt.Errorf("addon directory %s not found in local file system", addonOrDir)
|
||||
}
|
||||
if !yes2all {
|
||||
if err := checkUninstallFromClusters(ctx, k8sClient, name, addonArgs); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
err = enableAddon(ctx, k8sClient, dc, config, name, addonVersion, addonArgs)
|
||||
if err != nil {
|
||||
return err
|
||||
@@ -217,6 +224,7 @@ func NewAddonEnableCommand(c common.Args, ioStream cmdutil.IOStreams) *cobra.Com
|
||||
cmd.Flags().BoolVarP(&skipValidate, "skip-version-validating", "s", false, "skip validating system version requirement")
|
||||
cmd.Flags().BoolVarP(&overrideDefs, "override-definitions", "", false, "override existing definitions if conflict with those contained in this addon")
|
||||
cmd.Flags().BoolVarP(&dryRun, FlagDryRun, "", false, "render all yaml files out without real execute it")
|
||||
cmd.Flags().BoolVarP(&yes2all, "yes", "y", false, "all checks will be skipped and the default answer is yes for all validation check.")
|
||||
return cmd
|
||||
}
|
||||
|
||||
@@ -336,6 +344,7 @@ non-empty new arg
|
||||
},
|
||||
}
|
||||
cmd.Flags().StringVarP(&addonVersion, "version", "v", "", "specify the addon version to upgrade")
|
||||
cmd.Flags().StringVarP(&addonClusters, types.ClustersArg, "c", "", "specify the runtime-clusters to upgrade")
|
||||
cmd.Flags().BoolVarP(&skipValidate, "skip-version-validating", "s", false, "skip validating system version requirement")
|
||||
cmd.Flags().BoolVarP(&overrideDefs, "override-definitions", "", false, "override existing definitions if conflict with those contained in this addon")
|
||||
return cmd
|
||||
@@ -566,7 +575,7 @@ func enableAddon(ctx context.Context, k8sClient client.Client, dc *discovery.Dis
|
||||
continue
|
||||
}
|
||||
err = pkgaddon.EnableAddon(ctx, addonName, version, k8sClient, dc, apply.NewAPIApplicator(k8sClient), config, registry, args, nil, pkgaddon.FilterDependencyRegistries(i, registries), opts...)
|
||||
if errors.Is(err, pkgaddon.ErrNotExist) {
|
||||
if errors.Is(err, pkgaddon.ErrNotExist) || errors.Is(err, pkgaddon.ErrFetch) {
|
||||
continue
|
||||
}
|
||||
if unMatchErr := new(pkgaddon.VersionUnMatchError); errors.As(err, unMatchErr) {
|
||||
@@ -599,10 +608,10 @@ func enableAddon(ctx context.Context, k8sClient client.Client, dc *discovery.Dis
|
||||
|
||||
func addonOptions() []pkgaddon.InstallOption {
|
||||
var opts []pkgaddon.InstallOption
|
||||
if skipValidate {
|
||||
if skipValidate || yes2all {
|
||||
opts = append(opts, pkgaddon.SkipValidateVersion)
|
||||
}
|
||||
if overrideDefs {
|
||||
if overrideDefs || yes2all {
|
||||
opts = append(opts, pkgaddon.OverrideDefinitions)
|
||||
}
|
||||
if dryRun {
|
||||
@@ -653,6 +662,16 @@ func statusAddon(name string, ioStreams cmdutil.IOStreams, cmd *cobra.Command, c
|
||||
return nil
|
||||
}
|
||||
|
||||
func addonNotExist(err error) bool {
|
||||
if errors.Is(err, pkgaddon.ErrNotExist) || errors.Is(err, pkgaddon.ErrRegistryNotExist) {
|
||||
return true
|
||||
}
|
||||
if strings.Contains(err.Error(), "not found") {
|
||||
return true
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
// generateAddonInfo will get addon status, description, version, dependencies (and whether they are installed),
|
||||
// and parameters (and their current values).
|
||||
// The first return value is the formatted string for printing.
|
||||
@@ -663,12 +682,21 @@ func generateAddonInfo(c client.Client, name string) (string, pkgaddon.Status, e
|
||||
var installed bool
|
||||
var addonPackage *pkgaddon.WholeAddonPackage
|
||||
|
||||
// Check current addon status
|
||||
status, err := pkgaddon.GetAddonStatus(context.Background(), c, name)
|
||||
if err != nil {
|
||||
return res, status, err
|
||||
}
|
||||
|
||||
// Get addon install package
|
||||
if verboseStatus {
|
||||
if verboseStatus || status.AddonPhase == statusDisabled {
|
||||
// We need the metadata to get descriptions about parameters
|
||||
addonPackages, err := pkgaddon.FindWholeAddonPackagesFromRegistry(context.Background(), c, []string{name}, nil)
|
||||
// Not found error can be ignored, because the user can define their own addon. Others can't.
|
||||
if err != nil && !errors.Is(err, pkgaddon.ErrNotExist) && !errors.Is(err, pkgaddon.ErrRegistryNotExist) {
|
||||
addonPackages, err := pkgaddon.FindAddonPackagesDetailFromRegistry(context.Background(), c, []string{name}, nil)
|
||||
// If the state of addon is not disabled, we don't check the error, because it could be installed from local.
|
||||
if status.AddonPhase == statusDisabled && err != nil {
|
||||
if addonNotExist(err) {
|
||||
return "", pkgaddon.Status{}, fmt.Errorf("addon '%s' not found in cluster or any registry", name)
|
||||
}
|
||||
return "", pkgaddon.Status{}, err
|
||||
}
|
||||
if len(addonPackages) != 0 {
|
||||
@@ -676,12 +704,6 @@ func generateAddonInfo(c client.Client, name string) (string, pkgaddon.Status, e
|
||||
}
|
||||
}
|
||||
|
||||
// Check current addon status
|
||||
status, err := pkgaddon.GetAddonStatus(context.Background(), c, name)
|
||||
if err != nil {
|
||||
return res, status, err
|
||||
}
|
||||
|
||||
switch status.AddonPhase {
|
||||
case statusEnabled:
|
||||
installed = true
|
||||
@@ -784,12 +806,23 @@ func generateParameterString(status pkgaddon.Status, addonPackage *pkgaddon.Whol
|
||||
if addonPackage.APISchema == nil {
|
||||
return ret
|
||||
}
|
||||
|
||||
ret = printSchema(addonPackage.APISchema, status.Parameters, 0)
|
||||
|
||||
return ret
|
||||
}
|
||||
|
||||
func convertInterface2StringList(l []interface{}) []string {
|
||||
var strl []string
|
||||
for _, s := range l {
|
||||
str, ok := s.(string)
|
||||
if !ok {
|
||||
continue
|
||||
}
|
||||
strl = append(strl, str)
|
||||
}
|
||||
return strl
|
||||
}
|
||||
|
||||
// printSchema prints the parameters in an addon recursively to a string
|
||||
// Deeper the parameter is nested, more the indentations.
|
||||
func printSchema(ref *openapi3.Schema, currentParams map[string]interface{}, indent int) string {
|
||||
@@ -852,19 +885,25 @@ func printSchema(ref *openapi3.Schema, currentParams map[string]interface{}, ind
|
||||
// Show current value
|
||||
if currentValue != "" {
|
||||
ret += addedIndent
|
||||
ret += "\tcurrent: " + color.New(color.FgGreen).Sprintf("%s\n", currentValue)
|
||||
}
|
||||
// Show default value
|
||||
if defaultValue != "" {
|
||||
ret += addedIndent
|
||||
ret += "\tdefault: " + fmt.Sprintf("%#v\n", defaultValue)
|
||||
ret += "\tcurrent value: " + color.New(color.FgGreen).Sprintf("%s\n", currentValue)
|
||||
}
|
||||
|
||||
// Show required or not
|
||||
if required {
|
||||
ret += addedIndent
|
||||
ret += "\trequired: "
|
||||
ret += color.GreenString("✔\n")
|
||||
}
|
||||
// Show Enum options
|
||||
if len(propValue.Value.Enum) > 0 {
|
||||
ret += addedIndent
|
||||
ret += "\toptions: \"" + strings.Join(convertInterface2StringList(propValue.Value.Enum), "\", \"") + "\"\n"
|
||||
}
|
||||
// Show default value
|
||||
if defaultValue != "" && currentValue == "" {
|
||||
ret += addedIndent
|
||||
ret += "\tdefault: " + fmt.Sprintf("%#v\n", defaultValue)
|
||||
}
|
||||
|
||||
// Object type param, we will get inside the object.
|
||||
// To show what's inside nested objects.
|
||||
@@ -1170,3 +1209,51 @@ func splitSpecifyRegistry(name string) (string, string, error) {
|
||||
return "", "", fmt.Errorf("invalid addon name, you should specify name only <addonName> or with registry as prefix <registryName>/<addonName>")
|
||||
}
|
||||
}
|
||||
|
||||
func checkUninstallFromClusters(ctx context.Context, k8sClient client.Client, addonName string, args map[string]interface{}) error {
|
||||
status, err := pkgaddon.GetAddonStatus(ctx, k8sClient, addonName)
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to check addon status: %w", err)
|
||||
}
|
||||
if status.AddonPhase == statusDisabled {
|
||||
return nil
|
||||
}
|
||||
if _, ok := args["clusters"]; !ok {
|
||||
return nil
|
||||
}
|
||||
cList, ok := args["clusters"].([]interface{})
|
||||
if !ok {
|
||||
return fmt.Errorf("clusters parameter must be a list of string")
|
||||
}
|
||||
|
||||
clusters := map[string]struct{}{}
|
||||
for _, c := range cList {
|
||||
clusterName := c.(string)
|
||||
clusters[clusterName] = struct{}{}
|
||||
}
|
||||
var disableClusters, installedClusters []string
|
||||
for c := range status.Clusters {
|
||||
if _, ok := clusters[c]; !ok {
|
||||
disableClusters = append(disableClusters, c)
|
||||
}
|
||||
installedClusters = append(installedClusters, c)
|
||||
}
|
||||
fmt.Println(color.New(color.FgRed).Sprintf("'%s' addon was currently installed on clusters %s, but this operation will uninstall from these clusters: %s \n", addonName, generateClustersInfo(installedClusters), generateClustersInfo(disableClusters)))
|
||||
input := NewUserInput()
|
||||
if !input.AskBool("Do you want to continue?", &UserInputOptions{AssumeYes: false}) {
|
||||
return fmt.Errorf("operation abort")
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func generateClustersInfo(clusters []string) string {
|
||||
ret := "["
|
||||
for i, cluster := range clusters {
|
||||
ret += cluster
|
||||
if i < len(clusters)-1 {
|
||||
ret += ","
|
||||
}
|
||||
}
|
||||
ret += "]"
|
||||
return ret
|
||||
}
|
||||
|
||||
@@ -269,7 +269,7 @@ var _ = Describe("Addon status or info", func() {
|
||||
BeforeEach(func() {
|
||||
// Delete KubeVela registry
|
||||
ds := pkgaddon.NewRegistryDataStore(k8sClient)
|
||||
Expect(ds.DeleteRegistry(context.Background(), "KubeVela")).To(Succeed())
|
||||
Expect(ds.DeleteRegistry(context.Background(), "KubeVela")).Should(SatisfyAny(Succeed(), util.NotFoundMatcher{}))
|
||||
// Install fluxcd locally
|
||||
Expect(k8sClient.Create(context.Background(), &fluxcd)).Should(SatisfyAny(BeNil(), util.AlreadyExistMatcher{}))
|
||||
})
|
||||
@@ -287,6 +287,7 @@ var _ = Describe("Addon status or info", func() {
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
fmt.Println(addonName, res, err)
|
||||
// Should include enabled status, like:
|
||||
// fluxcd: enabled (1.1.0)
|
||||
if !strings.Contains(res,
|
||||
@@ -349,6 +350,11 @@ var _ = Describe("Addon status or info", func() {
|
||||
"KubeVela",
|
||||
))
|
||||
})
|
||||
It("should report addon not exist in any registry name", func() {
|
||||
addonName := "not-exist"
|
||||
_, _, err := generateAddonInfo(k8sClient, addonName)
|
||||
Expect(err.Error()).Should(BeEquivalentTo("addon 'not-exist' not found in cluster or any registry"))
|
||||
})
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
@@ -19,7 +19,6 @@ package cli
|
||||
import (
|
||||
"fmt"
|
||||
"os"
|
||||
"strings"
|
||||
"testing"
|
||||
|
||||
. "github.com/onsi/ginkgo"
|
||||
@@ -27,7 +26,7 @@ import (
|
||||
|
||||
"github.com/fatih/color"
|
||||
"github.com/getkin/kin-openapi/openapi3"
|
||||
"gotest.tools/assert"
|
||||
"github.com/stretchr/testify/assert"
|
||||
|
||||
pkgaddon "github.com/oam-dev/kubevela/pkg/addon"
|
||||
"github.com/oam-dev/kubevela/pkg/utils/common"
|
||||
@@ -91,8 +90,8 @@ func TestParseMap(t *testing.T) {
|
||||
for _, s := range testcase {
|
||||
r, err := parseAddonArgsToMap(s.args)
|
||||
if s.nilError {
|
||||
assert.NilError(t, err)
|
||||
assert.DeepEqual(t, s.res, r)
|
||||
assert.NoError(t, err)
|
||||
assert.Equal(t, s.res, r)
|
||||
} else {
|
||||
assert.Error(t, err, fmt.Sprintf("%v should be error case", s.args))
|
||||
}
|
||||
@@ -208,7 +207,7 @@ func TestTransCluster(t *testing.T) {
|
||||
},
|
||||
}
|
||||
for _, s := range testcase {
|
||||
assert.DeepEqual(t, transClusters(s.str), s.res)
|
||||
assert.Equal(t, transClusters(s.str), s.res)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -341,7 +340,7 @@ func TestPackageValidAddon(t *testing.T) {
|
||||
cmd := NewAddonPackageCommand(commandArgs)
|
||||
cmd.SetArgs([]string{"./test-data/addon/sample"})
|
||||
err := cmd.Execute()
|
||||
assert.NilError(t, err)
|
||||
assert.NoError(t, err)
|
||||
defer func() {
|
||||
_ = os.RemoveAll("sample-1.0.1.tgz")
|
||||
}()
|
||||
@@ -380,13 +379,13 @@ func TestGenerateParameterString(t *testing.T) {
|
||||
"dbURL": &openapi3.SchemaRef{
|
||||
Value: &openapi3.Schema{
|
||||
Description: "Specify the MongoDB URL. it only enabled where DB type is MongoDB.",
|
||||
Default: nil,
|
||||
Default: "abc.com",
|
||||
},
|
||||
},
|
||||
"dbType": &openapi3.SchemaRef{
|
||||
Value: &openapi3.Schema{
|
||||
Description: "Specify the database type, current support KubeAPI(default) and MongoDB.",
|
||||
Default: "kubeapi",
|
||||
Enum: []interface{}{"kubeapi", "mongodb"},
|
||||
},
|
||||
},
|
||||
},
|
||||
@@ -397,18 +396,19 @@ func TestGenerateParameterString(t *testing.T) {
|
||||
color.New(color.FgCyan).Sprintf("-> ") +
|
||||
color.New(color.Bold).Sprint("dbType") + ": " +
|
||||
"Specify the database type, current support KubeAPI(default) and MongoDB.\n" +
|
||||
"\tcurrent: " + color.New(color.FgGreen).Sprint("\"kubeapi\"\n") +
|
||||
"\tdefault: " + "\"kubeapi\"\n" +
|
||||
"\trequired: " + color.GreenString("✔\n"),
|
||||
"\tcurrent value: " + color.New(color.FgGreen).Sprint("\"kubeapi\"\n") +
|
||||
"\trequired: " + color.GreenString("✔\n") +
|
||||
"\toptions: \"kubeapi\", \"mongodb\"\n",
|
||||
// dbURL
|
||||
color.New(color.FgCyan).Sprintf("-> ") +
|
||||
color.New(color.Bold).Sprint("dbURL") + ": " +
|
||||
"Specify the MongoDB URL. it only enabled where DB type is MongoDB.",
|
||||
"Specify the MongoDB URL. it only enabled where DB type is MongoDB.\n" +
|
||||
"\tdefault: " + "\"abc.com\"\n",
|
||||
// database
|
||||
color.New(color.FgCyan).Sprintf("-> ") +
|
||||
color.New(color.Bold).Sprint("database") + ": " +
|
||||
"Specify the database name, for the kubeapi db type, it represents namespace.\n" +
|
||||
"\tcurrent: " + color.New(color.FgGreen).Sprint("\"kubevela\""),
|
||||
"\tcurrent value: " + color.New(color.FgGreen).Sprint("\"kubevela\""),
|
||||
},
|
||||
},
|
||||
}
|
||||
@@ -416,7 +416,7 @@ func TestGenerateParameterString(t *testing.T) {
|
||||
for _, s := range testcase {
|
||||
res := generateParameterString(s.status, s.addonPackage)
|
||||
for _, o := range s.outputs {
|
||||
assert.Check(t, strings.Contains(res, o))
|
||||
assert.Contains(t, res, o)
|
||||
}
|
||||
|
||||
}
|
||||
@@ -434,12 +434,12 @@ func TestNewAddonCreateCommand(t *testing.T) {
|
||||
|
||||
cmd.SetArgs([]string{"test-addon", "--chart", "a", "--helm-repo", "https://some.com", "--chart-version", "c"})
|
||||
err = cmd.Execute()
|
||||
assert.NilError(t, err)
|
||||
assert.NoError(t, err)
|
||||
_ = os.RemoveAll("test-addon")
|
||||
|
||||
cmd.SetArgs([]string{"test-addon"})
|
||||
err = cmd.Execute()
|
||||
assert.NilError(t, err)
|
||||
assert.NoError(t, err)
|
||||
_ = os.RemoveAll("test-addon")
|
||||
|
||||
}
|
||||
|
||||
@@ -304,7 +304,7 @@ func generateTerraformTypedComponentDefinition(cmd *cobra.Command, name, kind, p
|
||||
}
|
||||
|
||||
switch provider {
|
||||
case "aws", "azure", "alibaba", "tencent", "gcp", "baidu", "elastic", "ucloud", "vsphere":
|
||||
case "aws", "azure", "alibaba", "tencent", "gcp", "baidu", "elastic", "ucloud", "vsphere", "huawei":
|
||||
var terraform *commontype.Terraform
|
||||
|
||||
git, err := cmd.Flags().GetString(FlagGit)
|
||||
|
||||
@@ -99,6 +99,15 @@ func buildApplicationListTable(ctx context.Context, c client.Reader, namespace s
|
||||
service[s.Name] = s
|
||||
}
|
||||
|
||||
if len(a.Spec.Components) == 0 {
|
||||
if AllNamespace {
|
||||
table.AddRow(a.Namespace, a.Name, "", "", "", a.Status.Phase, "", "", a.CreationTimestamp)
|
||||
} else {
|
||||
table.AddRow(a.Name, "", "", "", a.Status.Phase, "", "", a.CreationTimestamp)
|
||||
}
|
||||
continue
|
||||
}
|
||||
|
||||
for idx, cmp := range a.Spec.Components {
|
||||
var appName = a.Name
|
||||
if idx > 0 {
|
||||
|
||||
@@ -21,9 +21,9 @@ import (
|
||||
"github.com/pkg/errors"
|
||||
"github.com/spf13/cobra"
|
||||
apitypes "k8s.io/apimachinery/pkg/types"
|
||||
"k8s.io/klog/v2"
|
||||
"sigs.k8s.io/yaml"
|
||||
|
||||
"github.com/oam-dev/kubevela/pkg/apiserver/utils/log"
|
||||
"github.com/oam-dev/kubevela/pkg/velaql"
|
||||
|
||||
"github.com/oam-dev/kubevela/apis/core.oam.dev/v1beta1"
|
||||
@@ -177,13 +177,13 @@ func getRevision(ctx context.Context, c common.Args, format string, out io.Write
|
||||
}
|
||||
query, err := velaql.ParseVelaQL(MakeVelaQL(revisionView, params, "status"))
|
||||
if err != nil {
|
||||
log.Logger.Errorf("fail to parse ql string %s", err.Error())
|
||||
klog.Errorf("fail to parse ql string %s", err.Error())
|
||||
return fmt.Errorf(fmt.Sprintf("Unable to get application revision %s in namespace %s", name, namespace))
|
||||
}
|
||||
|
||||
queryValue, err := velaql.NewViewHandler(cli, kubeConfig, dm, pd).QueryView(ctx, query)
|
||||
if err != nil {
|
||||
log.Logger.Errorf("fail to query the view %s", err.Error())
|
||||
klog.Errorf("fail to query the view %s", err.Error())
|
||||
return fmt.Errorf(fmt.Sprintf("Unable to get application revision %s in namespace %s", name, namespace))
|
||||
}
|
||||
|
||||
|
||||
@@ -143,8 +143,18 @@ func NewAppStatusCommand(c common.Args, order string, ioStreams cmdutil.IOStream
|
||||
}
|
||||
return printAppPods(appName, namespace, f, c)
|
||||
}
|
||||
|
||||
newClient, err := c.GetClient()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
showEndpoints, err := cmd.Flags().GetBool("endpoint")
|
||||
if showEndpoints && err == nil {
|
||||
_, err := loadRemoteApplication(newClient, namespace, appName)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
component, _ := cmd.Flags().GetString("component")
|
||||
cluster, _ := cmd.Flags().GetString("cluster")
|
||||
f := Filter{
|
||||
@@ -153,10 +163,6 @@ func NewAppStatusCommand(c common.Args, order string, ioStreams cmdutil.IOStream
|
||||
}
|
||||
return printAppEndpoints(ctx, appName, namespace, f, c, false)
|
||||
}
|
||||
newClient, err := c.GetClient()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if outputFormat != "" {
|
||||
return printRawApplication(context.Background(), c, outputFormat, cmd.OutOrStdout(), namespace, appName)
|
||||
}
|
||||
|
||||
@@ -95,7 +95,6 @@ func LoadPodDetail(cfg *rest.Config, pod *v1.Pod) Pod {
|
||||
podInfo := Pod{
|
||||
Name: pod.Name,
|
||||
Namespace: pod.Namespace,
|
||||
Cluster: pod.ClusterName,
|
||||
Ready: readyContainerNum(pod),
|
||||
Status: string(pod.Status.Phase),
|
||||
Age: utils.TimeFormat(time.Since(pod.CreationTimestamp.Time)),
|
||||
|
||||
@@ -19,9 +19,10 @@ package view
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"time"
|
||||
|
||||
"github.com/bluele/gcache"
|
||||
"github.com/gdamore/tcell/v2"
|
||||
lru "github.com/hashicorp/golang-lru"
|
||||
"github.com/rivo/tview"
|
||||
|
||||
"github.com/oam-dev/kubevela/pkg/velaql/providers/query/types"
|
||||
@@ -37,9 +38,10 @@ type TopologyView struct {
|
||||
actions model.KeyActions
|
||||
ctx context.Context
|
||||
focusTopology bool
|
||||
cache *lru.Cache
|
||||
cache gcache.Cache // lru cache with expired time
|
||||
appTopologyInstance *TopologyTree
|
||||
resourceTopologyInstance *TopologyTree
|
||||
cancelFunc func() // auto refresh cancel function
|
||||
}
|
||||
|
||||
type cacheView struct {
|
||||
@@ -54,6 +56,10 @@ type TopologyTree struct {
|
||||
|
||||
const (
|
||||
numberOfCacheView = 10
|
||||
// cache expire time
|
||||
expireTime = 10
|
||||
// request timeout time
|
||||
topologyReqTimeout = 5
|
||||
)
|
||||
|
||||
var (
|
||||
@@ -68,7 +74,7 @@ func NewTopologyView(ctx context.Context, app *App) model.View {
|
||||
if topologyViewInstance.Grid == nil {
|
||||
topologyViewInstance.Grid = tview.NewGrid()
|
||||
topologyViewInstance.actions = make(model.KeyActions)
|
||||
topologyViewInstance.cache, _ = lru.New(numberOfCacheView)
|
||||
topologyViewInstance.cache = gcache.New(numberOfCacheView).LRU().Expiration(expireTime * time.Second).Build()
|
||||
topologyViewInstance.appTopologyInstance = new(TopologyTree)
|
||||
topologyViewInstance.resourceTopologyInstance = new(TopologyTree)
|
||||
|
||||
@@ -83,40 +89,22 @@ func (v *TopologyView) Init() {
|
||||
v.SetRows(0).SetColumns(-1, -1)
|
||||
v.SetBorder(true)
|
||||
v.SetBorderAttributes(tcell.AttrItalic)
|
||||
v.SetTitle(title).SetTitleColor(config.ResourceTableTitleColor)
|
||||
v.SetTitle(title)
|
||||
v.SetTitleColor(config.ResourceTableTitleColor)
|
||||
v.bindKeys()
|
||||
v.SetInputCapture(v.keyboard)
|
||||
}
|
||||
|
||||
// Start the topology view
|
||||
func (v *TopologyView) Start() {
|
||||
appName := v.ctx.Value(&model.CtxKeyAppName).(string)
|
||||
namespace := v.ctx.Value(&model.CtxKeyNamespace).(string)
|
||||
key := fmt.Sprintf("%s-%s", appName, namespace)
|
||||
|
||||
value, exist := v.cache.Get(key)
|
||||
view, ok := value.(*cacheView)
|
||||
if exist && ok {
|
||||
v.appTopologyInstance = view.appTopologyInstance
|
||||
v.resourceTopologyInstance = view.resourceTopologyInstance
|
||||
} else {
|
||||
v.resourceTopologyInstance = v.NewResourceTopologyView()
|
||||
v.appTopologyInstance = v.NewAppTopologyView()
|
||||
v.cache.Add(key, &cacheView{
|
||||
resourceTopologyInstance: v.resourceTopologyInstance,
|
||||
appTopologyInstance: v.appTopologyInstance,
|
||||
})
|
||||
}
|
||||
|
||||
v.Grid.AddItem(v.appTopologyInstance, 0, 0, 1, 1, 0, 0, true)
|
||||
v.Grid.AddItem(v.resourceTopologyInstance, 0, 1, 1, 1, 0, 0, true)
|
||||
|
||||
v.app.SetFocus(v.appTopologyInstance)
|
||||
v.Update(func() {})
|
||||
v.AutoRefresh(v.Update)
|
||||
}
|
||||
|
||||
// Stop the topology view
|
||||
func (v *TopologyView) Stop() {
|
||||
v.Grid.Clear()
|
||||
v.cancelFunc()
|
||||
}
|
||||
|
||||
// Hint return the menu hints of topology view
|
||||
@@ -129,6 +117,49 @@ func (v *TopologyView) Name() string {
|
||||
return "Topology"
|
||||
}
|
||||
|
||||
// Update the topology view
|
||||
func (v *TopologyView) Update(timeoutCancel func()) {
|
||||
appName := v.ctx.Value(&model.CtxKeyAppName).(string)
|
||||
namespace := v.ctx.Value(&model.CtxKeyNamespace).(string)
|
||||
key := fmt.Sprintf("%s-%s", appName, namespace)
|
||||
|
||||
value, err := v.cache.Get(key)
|
||||
|
||||
generateTopology := func() {
|
||||
v.resourceTopologyInstance = v.NewResourceTopologyView()
|
||||
v.appTopologyInstance = v.NewAppTopologyView()
|
||||
// add new topology view to cache
|
||||
_ = v.cache.Set(key, &cacheView{
|
||||
resourceTopologyInstance: v.resourceTopologyInstance,
|
||||
appTopologyInstance: v.appTopologyInstance,
|
||||
})
|
||||
}
|
||||
|
||||
if err != nil {
|
||||
generateTopology()
|
||||
} else {
|
||||
view, ok := value.(*cacheView)
|
||||
if ok {
|
||||
v.appTopologyInstance = view.appTopologyInstance
|
||||
v.resourceTopologyInstance = view.resourceTopologyInstance
|
||||
} else {
|
||||
generateTopology()
|
||||
}
|
||||
}
|
||||
|
||||
v.Grid.AddItem(v.appTopologyInstance, 0, 0, 1, 1, 0, 0, true)
|
||||
v.Grid.AddItem(v.resourceTopologyInstance, 0, 1, 1, 1, 0, 0, true)
|
||||
|
||||
// reset focus
|
||||
if v.focusTopology {
|
||||
v.app.SetFocus(v.resourceTopologyInstance)
|
||||
} else {
|
||||
v.app.SetFocus(v.appTopologyInstance)
|
||||
}
|
||||
// ctx done
|
||||
timeoutCancel()
|
||||
}
|
||||
|
||||
func (v *TopologyView) keyboard(event *tcell.EventKey) *tcell.EventKey {
|
||||
key := event.Key()
|
||||
if key == tcell.KeyUp || key == tcell.KeyDown {
|
||||
@@ -270,3 +301,40 @@ func buildTopology(node *types.ResourceTreeNode) *tview.TreeNode {
|
||||
|
||||
return rootNode
|
||||
}
|
||||
|
||||
// Refresh the topology view
|
||||
func (v *TopologyView) Refresh(clear bool, update func(timeoutCancel func())) {
|
||||
if clear {
|
||||
v.Grid.Clear()
|
||||
}
|
||||
|
||||
updateWithTimeout := func() {
|
||||
ctx, cancelFunc := context.WithTimeout(context.Background(), time.Second*topologyReqTimeout)
|
||||
defer cancelFunc()
|
||||
go update(cancelFunc)
|
||||
|
||||
select {
|
||||
case <-time.After(time.Second * topologyReqTimeout): // timeout
|
||||
case <-ctx.Done(): // success
|
||||
}
|
||||
}
|
||||
|
||||
v.app.QueueUpdateDraw(updateWithTimeout)
|
||||
}
|
||||
|
||||
// AutoRefresh will refresh the view in every RefreshDelay delay
|
||||
func (v *TopologyView) AutoRefresh(update func(timeoutCancel func())) {
|
||||
var ctx context.Context
|
||||
ctx, v.cancelFunc = context.WithCancel(context.Background())
|
||||
go func() {
|
||||
for {
|
||||
time.Sleep(RefreshDelay * time.Second)
|
||||
select {
|
||||
case <-ctx.Done():
|
||||
return
|
||||
default:
|
||||
v.Refresh(true, update)
|
||||
}
|
||||
}
|
||||
}()
|
||||
}
|
||||
|
||||
@@ -49,7 +49,7 @@ func (v *ApplicationView) Init() {
|
||||
// Start the application view
|
||||
func (v *ApplicationView) Start() {
|
||||
v.Clear()
|
||||
v.Update()
|
||||
v.Update(func() {})
|
||||
v.CommonResourceView.AutoRefresh(v.Update)
|
||||
}
|
||||
|
||||
@@ -78,9 +78,10 @@ func (v *ApplicationView) Refresh(_ *tcell.EventKey) *tcell.EventKey {
|
||||
}
|
||||
|
||||
// Update refresh the content of body of view
|
||||
func (v *ApplicationView) Update() {
|
||||
func (v *ApplicationView) Update(timeoutCancel func()) {
|
||||
v.BuildHeader()
|
||||
v.BuildBody()
|
||||
timeoutCancel()
|
||||
}
|
||||
|
||||
// BuildHeader render the header of table
|
||||
|
||||
@@ -49,7 +49,7 @@ func (v *ClusterNamespaceView) Init() {
|
||||
// Start the cluster namespace view
|
||||
func (v *ClusterNamespaceView) Start() {
|
||||
v.Clear()
|
||||
v.Update()
|
||||
v.Update(func() {})
|
||||
v.AutoRefresh(v.Update)
|
||||
}
|
||||
|
||||
@@ -78,9 +78,10 @@ func (v *ClusterNamespaceView) Refresh(_ *tcell.EventKey) *tcell.EventKey {
|
||||
}
|
||||
|
||||
// Update refresh the content of body of view
|
||||
func (v *ClusterNamespaceView) Update() {
|
||||
func (v *ClusterNamespaceView) Update(timeoutCancel func()) {
|
||||
v.BuildHeader()
|
||||
v.BuildBody()
|
||||
timeoutCancel()
|
||||
}
|
||||
|
||||
// BuildHeader render the header of table
|
||||
|
||||
@@ -48,7 +48,7 @@ func (v *ClusterView) Name() string {
|
||||
// Start the cluster view
|
||||
func (v *ClusterView) Start() {
|
||||
v.Clear()
|
||||
v.Update()
|
||||
v.Update(func() {})
|
||||
v.CommonResourceView.AutoRefresh(v.Update)
|
||||
}
|
||||
|
||||
@@ -77,9 +77,10 @@ func (v *ClusterView) Refresh(_ *tcell.EventKey) *tcell.EventKey {
|
||||
}
|
||||
|
||||
// Update refresh the content of body of view
|
||||
func (v *ClusterView) Update() {
|
||||
func (v *ClusterView) Update(timeoutCancel func()) {
|
||||
v.BuildHeader()
|
||||
v.BuildBody()
|
||||
timeoutCancel()
|
||||
}
|
||||
|
||||
// BuildHeader render the header of table
|
||||
|
||||
@@ -49,7 +49,7 @@ func (v *ContainerView) Name() string {
|
||||
// Start the container view
|
||||
func (v *ContainerView) Start() {
|
||||
v.Clear()
|
||||
v.Update()
|
||||
v.Update(func() {})
|
||||
v.CommonResourceView.AutoRefresh(v.Update)
|
||||
}
|
||||
|
||||
@@ -78,9 +78,10 @@ func (v *ContainerView) Refresh(_ *tcell.EventKey) *tcell.EventKey {
|
||||
}
|
||||
|
||||
// Update refresh the content of body of view
|
||||
func (v *ContainerView) Update() {
|
||||
func (v *ContainerView) Update(timeoutCancel func()) {
|
||||
v.BuildHeader()
|
||||
v.BuildBody()
|
||||
timeoutCancel()
|
||||
}
|
||||
|
||||
// BuildHeader render the header of table
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user