From 11164fb97da333a13922e25e6c73c879810a4276 Mon Sep 17 00:00:00 2001 From: jo-hnny Date: Tue, 10 Aug 2021 23:33:24 +0800 Subject: [PATCH 01/62] feat(console): use nvm control node version (#1471) --- build/lib/web.mk | 27 ++++++++++++++------------- web/console/.nvmrc | 1 + web/installer/.nvmrc | 1 + 3 files changed, 16 insertions(+), 13 deletions(-) create mode 100644 web/console/.nvmrc create mode 100644 web/installer/.nvmrc diff --git a/build/lib/web.mk b/build/lib/web.mk index 4f6ce51cc..ea5cd1b72 100644 --- a/build/lib/web.mk +++ b/build/lib/web.mk @@ -14,29 +14,30 @@ # WARRANTIES OF ANY KIND, either express or implied. See the License for the # specific language governing permissions and limitations under the License. -NODE_SUPPORTED_VERSION = v12 -NPM = npm +NVM_VERSION = v0.38.0 .PHONY: web.build web.build: web.verify web.build.console web.build.installer .PHONY: web.verify +.ONESHELL: web.verify: - @echo "===========> Check Node.js version" -ifneq ($(shell node -v | cut -f1 -d.), $(NODE_SUPPORTED_VERSION)) - @echo "===========> Install Node.js v12" - curl -sL https://deb.nodesource.com/setup_12.x | sudo -E bash - - sudo apt-get install -y nodejs -endif + curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/$(NVM_VERSION)/install.sh | bash .PHONY: web.build.console +.ONESHELL: web.build.console: web.verify @echo "===========> Building the console web app" - @mkdir -p $(ROOT_DIR)/web/console/build - @cd $(ROOT_DIR)/web/console && $(NPM) run build + @cd $(ROOT_DIR)/web/console + @source $(HOME)/.nvm/nvm.sh + @nvm install + @npm run build .PHONY: web.build.installer +.ONESHELL: web.build.installer: web.verify - @echo "===========> Building the installer web app" - @mkdir -p $(ROOT_DIR)/web/installer/build - @cd $(ROOT_DIR)/web/installer && $(NPM) run build + @echo "===========> Building the Installer web app" + @cd $(ROOT_DIR)/web/installer + @source $(HOME)/.nvm/nvm.sh + @nvm install + @npm run build diff --git a/web/console/.nvmrc b/web/console/.nvmrc new file mode 100644 index 000000000..e00efe40d --- /dev/null +++ b/web/console/.nvmrc @@ -0,0 +1 @@ +v12.22.4 \ No newline at end of file diff --git a/web/installer/.nvmrc b/web/installer/.nvmrc new file mode 100644 index 000000000..e00efe40d --- /dev/null +++ b/web/installer/.nvmrc @@ -0,0 +1 @@ +v12.22.4 \ No newline at end of file From f5568205774534d633e1e705c4f97972b847bc85 Mon Sep 17 00:00:00 2001 From: Leo Ryu Date: Thu, 12 Aug 2021 10:24:25 +0800 Subject: [PATCH 02/62] feat(application): allow user to define app name (#1473) --- pkg/application/registry/application/strategy.go | 1 - 1 file changed, 1 deletion(-) diff --git a/pkg/application/registry/application/strategy.go b/pkg/application/registry/application/strategy.go index 70ff1c5d9..b55636e09 100644 --- a/pkg/application/registry/application/strategy.go +++ b/pkg/application/registry/application/strategy.go @@ -102,7 +102,6 @@ func (s *Strategy) PrepareForCreate(ctx context.Context, obj runtime.Object) { app.Spec.TenantID = tenantID } app.ObjectMeta.GenerateName = "app-" - app.ObjectMeta.Name = "" app.Generation = 1 if app.Spec.Chart.TenantID == "" { From 3f86e9423c2fe36a606c7cef7e70ccda03af509d Mon Sep 17 00:00:00 2001 From: Leo Ryu Date: Thu, 12 Aug 2021 16:22:00 +0800 Subject: [PATCH 03/62] feat(platform): define bootstrap apps in cluster (#1456) --- api/openapi/zz_generated.openapi.go | 60 +- api/platform/types.go | 17 + api/platform/v1/generated.pb.go | 1388 +++++++++++------ api/platform/v1/generated.proto | 17 + api/platform/v1/types.go | 17 + .../v1/types_swagger_doc_generated.go | 1 + api/platform/v1/zz_generated.conversion.go | 34 + api/platform/v1/zz_generated.deepcopy.go | 64 + api/platform/v1/zz_generated.defaults.go | 5 + api/platform/validation/cluster.go | 10 + api/platform/zz_generated.deepcopy.go | 64 + cmd/tke-installer/app/installer/installer.go | 1 + .../tke-platform-controller.yaml | 24 + .../app/config/config.go | 14 +- cmd/tke-platform-controller/app/context.go | 23 +- cmd/tke-platform-controller/app/controller.go | 1 + .../app/options/options.go | 32 +- cmd/tke-platform-controller/app/platform.go | 29 + .../controller/bootstrapapps/controller.go | 260 +++ .../provider/baremetal/config/config.go | 23 +- pkg/platform/registry/cluster/strategy.go | 15 + 21 files changed, 1600 insertions(+), 499 deletions(-) create mode 100644 pkg/platform/controller/bootstrapapps/controller.go diff --git a/api/openapi/zz_generated.openapi.go b/api/openapi/zz_generated.openapi.go index 086857a9e..b83f802eb 100644 --- a/api/openapi/zz_generated.openapi.go +++ b/api/openapi/zz_generated.openapi.go @@ -952,7 +952,9 @@ func GetOpenAPIDefinitions(ref common.ReferenceCallback) map[string]common.OpenA "tkestack.io/tke/api/notify/v1.TemplateText": schema_tke_api_notify_v1_TemplateText(ref), "tkestack.io/tke/api/notify/v1.TemplateWechat": schema_tke_api_notify_v1_TemplateWechat(ref), "tkestack.io/tke/api/platform/v1.AddonSpec": schema_tke_api_platform_v1_AddonSpec(ref), + "tkestack.io/tke/api/platform/v1.App": schema_tke_api_platform_v1_App(ref), "tkestack.io/tke/api/platform/v1.AuthzWebhookAddr": schema_tke_api_platform_v1_AuthzWebhookAddr(ref), + "tkestack.io/tke/api/platform/v1.BootstrapApp": schema_tke_api_platform_v1_BootstrapApp(ref), "tkestack.io/tke/api/platform/v1.BuiltinAuthzWebhookAddr": schema_tke_api_platform_v1_BuiltinAuthzWebhookAddr(ref), "tkestack.io/tke/api/platform/v1.CSIOperator": schema_tke_api_platform_v1_CSIOperator(ref), "tkestack.io/tke/api/platform/v1.CSIOperatorFeature": schema_tke_api_platform_v1_CSIOperatorFeature(ref), @@ -45900,6 +45902,30 @@ func schema_tke_api_platform_v1_AddonSpec(ref common.ReferenceCallback) common.O } } +func schema_tke_api_platform_v1_App(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "metadata": { + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), + }, + }, + "spec": { + SchemaProps: spec.SchemaProps{ + Ref: ref("tkestack.io/tke/api/application/v1.AppSpec"), + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta", "tkestack.io/tke/api/application/v1.AppSpec"}, + } +} + func schema_tke_api_platform_v1_AuthzWebhookAddr(ref common.ReferenceCallback) common.OpenAPIDefinition { return common.OpenAPIDefinition{ Schema: spec.Schema{ @@ -45924,6 +45950,25 @@ func schema_tke_api_platform_v1_AuthzWebhookAddr(ref common.ReferenceCallback) c } } +func schema_tke_api_platform_v1_BootstrapApp(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "app": { + SchemaProps: spec.SchemaProps{ + Ref: ref("tkestack.io/tke/api/platform/v1.App"), + }, + }, + }, + }, + }, + Dependencies: []string{ + "tkestack.io/tke/api/platform/v1.App"}, + } +} + func schema_tke_api_platform_v1_BuiltinAuthzWebhookAddr(ref common.ReferenceCallback) common.OpenAPIDefinition { return common.OpenAPIDefinition{ Schema: spec.Schema{ @@ -47436,12 +47481,25 @@ func schema_tke_api_platform_v1_ClusterSpec(ref common.ReferenceCallback) common }, }, }, + "bootstrapApps": { + SchemaProps: spec.SchemaProps{ + Description: "BootstrapApps will install apps during creating cluster", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("tkestack.io/tke/api/platform/v1.BootstrapApp"), + }, + }, + }, + }, + }, }, Required: []string{"tenantID", "type", "version"}, }, }, Dependencies: []string{ - "k8s.io/api/core/v1.LocalObjectReference", "tkestack.io/tke/api/platform/v1.ClusterFeature", "tkestack.io/tke/api/platform/v1.ClusterMachine", "tkestack.io/tke/api/platform/v1.ClusterProperty", "tkestack.io/tke/api/platform/v1.Etcd"}, + "k8s.io/api/core/v1.LocalObjectReference", "tkestack.io/tke/api/platform/v1.BootstrapApp", "tkestack.io/tke/api/platform/v1.ClusterFeature", "tkestack.io/tke/api/platform/v1.ClusterMachine", "tkestack.io/tke/api/platform/v1.ClusterProperty", "tkestack.io/tke/api/platform/v1.Etcd"}, } } diff --git a/api/platform/types.go b/api/platform/types.go index 2a1ddfa99..04fa33a61 100644 --- a/api/platform/types.go +++ b/api/platform/types.go @@ -23,6 +23,7 @@ import ( "k8s.io/apimachinery/pkg/api/resource" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/util/intstr" + applicationv1 "tkestack.io/tke/api/application/v1" ) // +genclient @@ -150,6 +151,9 @@ type ClusterSpec struct { HostnameAsNodename bool // +optional NetworkArgs map[string]string + // BootstrapApps will install apps during creating cluster + // +optional + BootstrapApps BootstrapApps } // ClusterStatus represents information about the status of a cluster. @@ -390,6 +394,19 @@ type ClusterFeature struct { Upgrade Upgrade } +type BootstrapApps []BootstapApp + +type BootstapApp struct { + App App +} + +type App struct { + // +optional + metav1.ObjectMeta + // +optional + Spec applicationv1.AppSpec +} + type HA struct { TKEHA *TKEHA ThirdPartyHA *ThirdPartyHA diff --git a/api/platform/v1/generated.pb.go b/api/platform/v1/generated.pb.go index 582f75e4b..1be5126af 100644 --- a/api/platform/v1/generated.pb.go +++ b/api/platform/v1/generated.pb.go @@ -27,7 +27,7 @@ import ( proto "github.com/gogo/protobuf/proto" github_com_gogo_protobuf_sortkeys "github.com/gogo/protobuf/sortkeys" - v11 "k8s.io/api/core/v1" + v12 "k8s.io/api/core/v1" math "math" math_bits "math/bits" @@ -77,10 +77,38 @@ func (m *AddonSpec) XXX_DiscardUnknown() { var xxx_messageInfo_AddonSpec proto.InternalMessageInfo +func (m *App) Reset() { *m = App{} } +func (*App) ProtoMessage() {} +func (*App) Descriptor() ([]byte, []int) { + return fileDescriptor_6e12a3c1f6fbf61e, []int{1} +} +func (m *App) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *App) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *App) XXX_Merge(src proto.Message) { + xxx_messageInfo_App.Merge(m, src) +} +func (m *App) XXX_Size() int { + return m.Size() +} +func (m *App) XXX_DiscardUnknown() { + xxx_messageInfo_App.DiscardUnknown(m) +} + +var xxx_messageInfo_App proto.InternalMessageInfo + func (m *AuthzWebhookAddr) Reset() { *m = AuthzWebhookAddr{} } func (*AuthzWebhookAddr) ProtoMessage() {} func (*AuthzWebhookAddr) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{1} + return fileDescriptor_6e12a3c1f6fbf61e, []int{2} } func (m *AuthzWebhookAddr) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -105,10 +133,38 @@ func (m *AuthzWebhookAddr) XXX_DiscardUnknown() { var xxx_messageInfo_AuthzWebhookAddr proto.InternalMessageInfo +func (m *BootstrapApp) Reset() { *m = BootstrapApp{} } +func (*BootstrapApp) ProtoMessage() {} +func (*BootstrapApp) Descriptor() ([]byte, []int) { + return fileDescriptor_6e12a3c1f6fbf61e, []int{3} +} +func (m *BootstrapApp) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *BootstrapApp) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *BootstrapApp) XXX_Merge(src proto.Message) { + xxx_messageInfo_BootstrapApp.Merge(m, src) +} +func (m *BootstrapApp) XXX_Size() int { + return m.Size() +} +func (m *BootstrapApp) XXX_DiscardUnknown() { + xxx_messageInfo_BootstrapApp.DiscardUnknown(m) +} + +var xxx_messageInfo_BootstrapApp proto.InternalMessageInfo + func (m *BuiltinAuthzWebhookAddr) Reset() { *m = BuiltinAuthzWebhookAddr{} } func (*BuiltinAuthzWebhookAddr) ProtoMessage() {} func (*BuiltinAuthzWebhookAddr) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{2} + return fileDescriptor_6e12a3c1f6fbf61e, []int{4} } func (m *BuiltinAuthzWebhookAddr) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -136,7 +192,7 @@ var xxx_messageInfo_BuiltinAuthzWebhookAddr proto.InternalMessageInfo func (m *CSIOperator) Reset() { *m = CSIOperator{} } func (*CSIOperator) ProtoMessage() {} func (*CSIOperator) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{3} + return fileDescriptor_6e12a3c1f6fbf61e, []int{5} } func (m *CSIOperator) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -164,7 +220,7 @@ var xxx_messageInfo_CSIOperator proto.InternalMessageInfo func (m *CSIOperatorFeature) Reset() { *m = CSIOperatorFeature{} } func (*CSIOperatorFeature) ProtoMessage() {} func (*CSIOperatorFeature) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{4} + return fileDescriptor_6e12a3c1f6fbf61e, []int{6} } func (m *CSIOperatorFeature) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -192,7 +248,7 @@ var xxx_messageInfo_CSIOperatorFeature proto.InternalMessageInfo func (m *CSIOperatorList) Reset() { *m = CSIOperatorList{} } func (*CSIOperatorList) ProtoMessage() {} func (*CSIOperatorList) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{5} + return fileDescriptor_6e12a3c1f6fbf61e, []int{7} } func (m *CSIOperatorList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -220,7 +276,7 @@ var xxx_messageInfo_CSIOperatorList proto.InternalMessageInfo func (m *CSIOperatorSpec) Reset() { *m = CSIOperatorSpec{} } func (*CSIOperatorSpec) ProtoMessage() {} func (*CSIOperatorSpec) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{6} + return fileDescriptor_6e12a3c1f6fbf61e, []int{8} } func (m *CSIOperatorSpec) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -248,7 +304,7 @@ var xxx_messageInfo_CSIOperatorSpec proto.InternalMessageInfo func (m *CSIOperatorStatus) Reset() { *m = CSIOperatorStatus{} } func (*CSIOperatorStatus) ProtoMessage() {} func (*CSIOperatorStatus) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{7} + return fileDescriptor_6e12a3c1f6fbf61e, []int{9} } func (m *CSIOperatorStatus) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -276,7 +332,7 @@ var xxx_messageInfo_CSIOperatorStatus proto.InternalMessageInfo func (m *CSIProxyOptions) Reset() { *m = CSIProxyOptions{} } func (*CSIProxyOptions) ProtoMessage() {} func (*CSIProxyOptions) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{8} + return fileDescriptor_6e12a3c1f6fbf61e, []int{10} } func (m *CSIProxyOptions) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -304,7 +360,7 @@ var xxx_messageInfo_CSIProxyOptions proto.InternalMessageInfo func (m *Cluster) Reset() { *m = Cluster{} } func (*Cluster) ProtoMessage() {} func (*Cluster) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{9} + return fileDescriptor_6e12a3c1f6fbf61e, []int{11} } func (m *Cluster) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -332,7 +388,7 @@ var xxx_messageInfo_Cluster proto.InternalMessageInfo func (m *ClusterAddon) Reset() { *m = ClusterAddon{} } func (*ClusterAddon) ProtoMessage() {} func (*ClusterAddon) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{10} + return fileDescriptor_6e12a3c1f6fbf61e, []int{12} } func (m *ClusterAddon) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -360,7 +416,7 @@ var xxx_messageInfo_ClusterAddon proto.InternalMessageInfo func (m *ClusterAddonList) Reset() { *m = ClusterAddonList{} } func (*ClusterAddonList) ProtoMessage() {} func (*ClusterAddonList) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{11} + return fileDescriptor_6e12a3c1f6fbf61e, []int{13} } func (m *ClusterAddonList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -388,7 +444,7 @@ var xxx_messageInfo_ClusterAddonList proto.InternalMessageInfo func (m *ClusterAddonSpec) Reset() { *m = ClusterAddonSpec{} } func (*ClusterAddonSpec) ProtoMessage() {} func (*ClusterAddonSpec) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{12} + return fileDescriptor_6e12a3c1f6fbf61e, []int{14} } func (m *ClusterAddonSpec) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -416,7 +472,7 @@ var xxx_messageInfo_ClusterAddonSpec proto.InternalMessageInfo func (m *ClusterAddonStatus) Reset() { *m = ClusterAddonStatus{} } func (*ClusterAddonStatus) ProtoMessage() {} func (*ClusterAddonStatus) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{13} + return fileDescriptor_6e12a3c1f6fbf61e, []int{15} } func (m *ClusterAddonStatus) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -444,7 +500,7 @@ var xxx_messageInfo_ClusterAddonStatus proto.InternalMessageInfo func (m *ClusterAddonType) Reset() { *m = ClusterAddonType{} } func (*ClusterAddonType) ProtoMessage() {} func (*ClusterAddonType) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{14} + return fileDescriptor_6e12a3c1f6fbf61e, []int{16} } func (m *ClusterAddonType) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -472,7 +528,7 @@ var xxx_messageInfo_ClusterAddonType proto.InternalMessageInfo func (m *ClusterAddonTypeList) Reset() { *m = ClusterAddonTypeList{} } func (*ClusterAddonTypeList) ProtoMessage() {} func (*ClusterAddonTypeList) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{15} + return fileDescriptor_6e12a3c1f6fbf61e, []int{17} } func (m *ClusterAddonTypeList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -500,7 +556,7 @@ var xxx_messageInfo_ClusterAddonTypeList proto.InternalMessageInfo func (m *ClusterAddress) Reset() { *m = ClusterAddress{} } func (*ClusterAddress) ProtoMessage() {} func (*ClusterAddress) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{16} + return fileDescriptor_6e12a3c1f6fbf61e, []int{18} } func (m *ClusterAddress) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -528,7 +584,7 @@ var xxx_messageInfo_ClusterAddress proto.InternalMessageInfo func (m *ClusterApplyOptions) Reset() { *m = ClusterApplyOptions{} } func (*ClusterApplyOptions) ProtoMessage() {} func (*ClusterApplyOptions) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{17} + return fileDescriptor_6e12a3c1f6fbf61e, []int{19} } func (m *ClusterApplyOptions) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -556,7 +612,7 @@ var xxx_messageInfo_ClusterApplyOptions proto.InternalMessageInfo func (m *ClusterComponent) Reset() { *m = ClusterComponent{} } func (*ClusterComponent) ProtoMessage() {} func (*ClusterComponent) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{18} + return fileDescriptor_6e12a3c1f6fbf61e, []int{20} } func (m *ClusterComponent) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -584,7 +640,7 @@ var xxx_messageInfo_ClusterComponent proto.InternalMessageInfo func (m *ClusterComponentReplicas) Reset() { *m = ClusterComponentReplicas{} } func (*ClusterComponentReplicas) ProtoMessage() {} func (*ClusterComponentReplicas) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{19} + return fileDescriptor_6e12a3c1f6fbf61e, []int{21} } func (m *ClusterComponentReplicas) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -612,7 +668,7 @@ var xxx_messageInfo_ClusterComponentReplicas proto.InternalMessageInfo func (m *ClusterCondition) Reset() { *m = ClusterCondition{} } func (*ClusterCondition) ProtoMessage() {} func (*ClusterCondition) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{20} + return fileDescriptor_6e12a3c1f6fbf61e, []int{22} } func (m *ClusterCondition) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -640,7 +696,7 @@ var xxx_messageInfo_ClusterCondition proto.InternalMessageInfo func (m *ClusterCredential) Reset() { *m = ClusterCredential{} } func (*ClusterCredential) ProtoMessage() {} func (*ClusterCredential) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{21} + return fileDescriptor_6e12a3c1f6fbf61e, []int{23} } func (m *ClusterCredential) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -668,7 +724,7 @@ var xxx_messageInfo_ClusterCredential proto.InternalMessageInfo func (m *ClusterCredentialList) Reset() { *m = ClusterCredentialList{} } func (*ClusterCredentialList) ProtoMessage() {} func (*ClusterCredentialList) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{22} + return fileDescriptor_6e12a3c1f6fbf61e, []int{24} } func (m *ClusterCredentialList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -696,7 +752,7 @@ var xxx_messageInfo_ClusterCredentialList proto.InternalMessageInfo func (m *ClusterFeature) Reset() { *m = ClusterFeature{} } func (*ClusterFeature) ProtoMessage() {} func (*ClusterFeature) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{23} + return fileDescriptor_6e12a3c1f6fbf61e, []int{25} } func (m *ClusterFeature) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -724,7 +780,7 @@ var xxx_messageInfo_ClusterFeature proto.InternalMessageInfo func (m *ClusterList) Reset() { *m = ClusterList{} } func (*ClusterList) ProtoMessage() {} func (*ClusterList) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{24} + return fileDescriptor_6e12a3c1f6fbf61e, []int{26} } func (m *ClusterList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -752,7 +808,7 @@ var xxx_messageInfo_ClusterList proto.InternalMessageInfo func (m *ClusterMachine) Reset() { *m = ClusterMachine{} } func (*ClusterMachine) ProtoMessage() {} func (*ClusterMachine) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{25} + return fileDescriptor_6e12a3c1f6fbf61e, []int{27} } func (m *ClusterMachine) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -780,7 +836,7 @@ var xxx_messageInfo_ClusterMachine proto.InternalMessageInfo func (m *ClusterProperty) Reset() { *m = ClusterProperty{} } func (*ClusterProperty) ProtoMessage() {} func (*ClusterProperty) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{26} + return fileDescriptor_6e12a3c1f6fbf61e, []int{28} } func (m *ClusterProperty) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -808,7 +864,7 @@ var xxx_messageInfo_ClusterProperty proto.InternalMessageInfo func (m *ClusterResource) Reset() { *m = ClusterResource{} } func (*ClusterResource) ProtoMessage() {} func (*ClusterResource) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{27} + return fileDescriptor_6e12a3c1f6fbf61e, []int{29} } func (m *ClusterResource) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -836,7 +892,7 @@ var xxx_messageInfo_ClusterResource proto.InternalMessageInfo func (m *ClusterSpec) Reset() { *m = ClusterSpec{} } func (*ClusterSpec) ProtoMessage() {} func (*ClusterSpec) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{28} + return fileDescriptor_6e12a3c1f6fbf61e, []int{30} } func (m *ClusterSpec) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -864,7 +920,7 @@ var xxx_messageInfo_ClusterSpec proto.InternalMessageInfo func (m *ClusterStatus) Reset() { *m = ClusterStatus{} } func (*ClusterStatus) ProtoMessage() {} func (*ClusterStatus) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{29} + return fileDescriptor_6e12a3c1f6fbf61e, []int{31} } func (m *ClusterStatus) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -892,7 +948,7 @@ var xxx_messageInfo_ClusterStatus proto.InternalMessageInfo func (m *ConfigMap) Reset() { *m = ConfigMap{} } func (*ConfigMap) ProtoMessage() {} func (*ConfigMap) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{30} + return fileDescriptor_6e12a3c1f6fbf61e, []int{32} } func (m *ConfigMap) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -920,7 +976,7 @@ var xxx_messageInfo_ConfigMap proto.InternalMessageInfo func (m *ConfigMapList) Reset() { *m = ConfigMapList{} } func (*ConfigMapList) ProtoMessage() {} func (*ConfigMapList) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{31} + return fileDescriptor_6e12a3c1f6fbf61e, []int{33} } func (m *ConfigMapList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -948,7 +1004,7 @@ var xxx_messageInfo_ConfigMapList proto.InternalMessageInfo func (m *CronHPA) Reset() { *m = CronHPA{} } func (*CronHPA) ProtoMessage() {} func (*CronHPA) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{32} + return fileDescriptor_6e12a3c1f6fbf61e, []int{34} } func (m *CronHPA) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -976,7 +1032,7 @@ var xxx_messageInfo_CronHPA proto.InternalMessageInfo func (m *CronHPAList) Reset() { *m = CronHPAList{} } func (*CronHPAList) ProtoMessage() {} func (*CronHPAList) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{33} + return fileDescriptor_6e12a3c1f6fbf61e, []int{35} } func (m *CronHPAList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1004,7 +1060,7 @@ var xxx_messageInfo_CronHPAList proto.InternalMessageInfo func (m *CronHPAProxyOptions) Reset() { *m = CronHPAProxyOptions{} } func (*CronHPAProxyOptions) ProtoMessage() {} func (*CronHPAProxyOptions) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{34} + return fileDescriptor_6e12a3c1f6fbf61e, []int{36} } func (m *CronHPAProxyOptions) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1032,7 +1088,7 @@ var xxx_messageInfo_CronHPAProxyOptions proto.InternalMessageInfo func (m *CronHPASpec) Reset() { *m = CronHPASpec{} } func (*CronHPASpec) ProtoMessage() {} func (*CronHPASpec) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{35} + return fileDescriptor_6e12a3c1f6fbf61e, []int{37} } func (m *CronHPASpec) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1060,7 +1116,7 @@ var xxx_messageInfo_CronHPASpec proto.InternalMessageInfo func (m *CronHPAStatus) Reset() { *m = CronHPAStatus{} } func (*CronHPAStatus) ProtoMessage() {} func (*CronHPAStatus) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{36} + return fileDescriptor_6e12a3c1f6fbf61e, []int{38} } func (m *CronHPAStatus) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1088,7 +1144,7 @@ var xxx_messageInfo_CronHPAStatus proto.InternalMessageInfo func (m *Etcd) Reset() { *m = Etcd{} } func (*Etcd) ProtoMessage() {} func (*Etcd) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{37} + return fileDescriptor_6e12a3c1f6fbf61e, []int{39} } func (m *Etcd) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1116,7 +1172,7 @@ var xxx_messageInfo_Etcd proto.InternalMessageInfo func (m *ExternalAuthzWebhookAddr) Reset() { *m = ExternalAuthzWebhookAddr{} } func (*ExternalAuthzWebhookAddr) ProtoMessage() {} func (*ExternalAuthzWebhookAddr) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{38} + return fileDescriptor_6e12a3c1f6fbf61e, []int{40} } func (m *ExternalAuthzWebhookAddr) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1144,7 +1200,7 @@ var xxx_messageInfo_ExternalAuthzWebhookAddr proto.InternalMessageInfo func (m *ExternalEtcd) Reset() { *m = ExternalEtcd{} } func (*ExternalEtcd) ProtoMessage() {} func (*ExternalEtcd) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{39} + return fileDescriptor_6e12a3c1f6fbf61e, []int{41} } func (m *ExternalEtcd) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1172,7 +1228,7 @@ var xxx_messageInfo_ExternalEtcd proto.InternalMessageInfo func (m *File) Reset() { *m = File{} } func (*File) ProtoMessage() {} func (*File) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{40} + return fileDescriptor_6e12a3c1f6fbf61e, []int{42} } func (m *File) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1200,7 +1256,7 @@ var xxx_messageInfo_File proto.InternalMessageInfo func (m *HA) Reset() { *m = HA{} } func (*HA) ProtoMessage() {} func (*HA) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{41} + return fileDescriptor_6e12a3c1f6fbf61e, []int{43} } func (m *HA) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1228,7 +1284,7 @@ var xxx_messageInfo_HA proto.InternalMessageInfo func (m *Helm) Reset() { *m = Helm{} } func (*Helm) ProtoMessage() {} func (*Helm) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{42} + return fileDescriptor_6e12a3c1f6fbf61e, []int{44} } func (m *Helm) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1256,7 +1312,7 @@ var xxx_messageInfo_Helm proto.InternalMessageInfo func (m *HelmList) Reset() { *m = HelmList{} } func (*HelmList) ProtoMessage() {} func (*HelmList) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{43} + return fileDescriptor_6e12a3c1f6fbf61e, []int{45} } func (m *HelmList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1284,7 +1340,7 @@ var xxx_messageInfo_HelmList proto.InternalMessageInfo func (m *HelmProxyOptions) Reset() { *m = HelmProxyOptions{} } func (*HelmProxyOptions) ProtoMessage() {} func (*HelmProxyOptions) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{44} + return fileDescriptor_6e12a3c1f6fbf61e, []int{46} } func (m *HelmProxyOptions) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1312,7 +1368,7 @@ var xxx_messageInfo_HelmProxyOptions proto.InternalMessageInfo func (m *HelmSpec) Reset() { *m = HelmSpec{} } func (*HelmSpec) ProtoMessage() {} func (*HelmSpec) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{45} + return fileDescriptor_6e12a3c1f6fbf61e, []int{47} } func (m *HelmSpec) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1340,7 +1396,7 @@ var xxx_messageInfo_HelmSpec proto.InternalMessageInfo func (m *HelmStatus) Reset() { *m = HelmStatus{} } func (*HelmStatus) ProtoMessage() {} func (*HelmStatus) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{46} + return fileDescriptor_6e12a3c1f6fbf61e, []int{48} } func (m *HelmStatus) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1368,7 +1424,7 @@ var xxx_messageInfo_HelmStatus proto.InternalMessageInfo func (m *IPAM) Reset() { *m = IPAM{} } func (*IPAM) ProtoMessage() {} func (*IPAM) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{47} + return fileDescriptor_6e12a3c1f6fbf61e, []int{49} } func (m *IPAM) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1396,7 +1452,7 @@ var xxx_messageInfo_IPAM proto.InternalMessageInfo func (m *IPAMList) Reset() { *m = IPAMList{} } func (*IPAMList) ProtoMessage() {} func (*IPAMList) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{48} + return fileDescriptor_6e12a3c1f6fbf61e, []int{50} } func (m *IPAMList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1424,7 +1480,7 @@ var xxx_messageInfo_IPAMList proto.InternalMessageInfo func (m *IPAMProxyOptions) Reset() { *m = IPAMProxyOptions{} } func (*IPAMProxyOptions) ProtoMessage() {} func (*IPAMProxyOptions) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{49} + return fileDescriptor_6e12a3c1f6fbf61e, []int{51} } func (m *IPAMProxyOptions) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1452,7 +1508,7 @@ var xxx_messageInfo_IPAMProxyOptions proto.InternalMessageInfo func (m *IPAMSpec) Reset() { *m = IPAMSpec{} } func (*IPAMSpec) ProtoMessage() {} func (*IPAMSpec) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{50} + return fileDescriptor_6e12a3c1f6fbf61e, []int{52} } func (m *IPAMSpec) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1480,7 +1536,7 @@ var xxx_messageInfo_IPAMSpec proto.InternalMessageInfo func (m *IPAMStatus) Reset() { *m = IPAMStatus{} } func (*IPAMStatus) ProtoMessage() {} func (*IPAMStatus) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{51} + return fileDescriptor_6e12a3c1f6fbf61e, []int{53} } func (m *IPAMStatus) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1508,7 +1564,7 @@ var xxx_messageInfo_IPAMStatus proto.InternalMessageInfo func (m *LBCF) Reset() { *m = LBCF{} } func (*LBCF) ProtoMessage() {} func (*LBCF) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{52} + return fileDescriptor_6e12a3c1f6fbf61e, []int{54} } func (m *LBCF) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1536,7 +1592,7 @@ var xxx_messageInfo_LBCF proto.InternalMessageInfo func (m *LBCFList) Reset() { *m = LBCFList{} } func (*LBCFList) ProtoMessage() {} func (*LBCFList) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{53} + return fileDescriptor_6e12a3c1f6fbf61e, []int{55} } func (m *LBCFList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1564,7 +1620,7 @@ var xxx_messageInfo_LBCFList proto.InternalMessageInfo func (m *LBCFProxyOptions) Reset() { *m = LBCFProxyOptions{} } func (*LBCFProxyOptions) ProtoMessage() {} func (*LBCFProxyOptions) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{54} + return fileDescriptor_6e12a3c1f6fbf61e, []int{56} } func (m *LBCFProxyOptions) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1592,7 +1648,7 @@ var xxx_messageInfo_LBCFProxyOptions proto.InternalMessageInfo func (m *LBCFSpec) Reset() { *m = LBCFSpec{} } func (*LBCFSpec) ProtoMessage() {} func (*LBCFSpec) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{55} + return fileDescriptor_6e12a3c1f6fbf61e, []int{57} } func (m *LBCFSpec) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1620,7 +1676,7 @@ var xxx_messageInfo_LBCFSpec proto.InternalMessageInfo func (m *LBCFStatus) Reset() { *m = LBCFStatus{} } func (*LBCFStatus) ProtoMessage() {} func (*LBCFStatus) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{56} + return fileDescriptor_6e12a3c1f6fbf61e, []int{58} } func (m *LBCFStatus) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1648,7 +1704,7 @@ var xxx_messageInfo_LBCFStatus proto.InternalMessageInfo func (m *LocalEtcd) Reset() { *m = LocalEtcd{} } func (*LocalEtcd) ProtoMessage() {} func (*LocalEtcd) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{57} + return fileDescriptor_6e12a3c1f6fbf61e, []int{59} } func (m *LocalEtcd) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1676,7 +1732,7 @@ var xxx_messageInfo_LocalEtcd proto.InternalMessageInfo func (m *LogCollector) Reset() { *m = LogCollector{} } func (*LogCollector) ProtoMessage() {} func (*LogCollector) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{58} + return fileDescriptor_6e12a3c1f6fbf61e, []int{60} } func (m *LogCollector) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1704,7 +1760,7 @@ var xxx_messageInfo_LogCollector proto.InternalMessageInfo func (m *LogCollectorList) Reset() { *m = LogCollectorList{} } func (*LogCollectorList) ProtoMessage() {} func (*LogCollectorList) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{59} + return fileDescriptor_6e12a3c1f6fbf61e, []int{61} } func (m *LogCollectorList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1732,7 +1788,7 @@ var xxx_messageInfo_LogCollectorList proto.InternalMessageInfo func (m *LogCollectorProxyOptions) Reset() { *m = LogCollectorProxyOptions{} } func (*LogCollectorProxyOptions) ProtoMessage() {} func (*LogCollectorProxyOptions) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{60} + return fileDescriptor_6e12a3c1f6fbf61e, []int{62} } func (m *LogCollectorProxyOptions) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1760,7 +1816,7 @@ var xxx_messageInfo_LogCollectorProxyOptions proto.InternalMessageInfo func (m *LogCollectorSpec) Reset() { *m = LogCollectorSpec{} } func (*LogCollectorSpec) ProtoMessage() {} func (*LogCollectorSpec) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{61} + return fileDescriptor_6e12a3c1f6fbf61e, []int{63} } func (m *LogCollectorSpec) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1788,7 +1844,7 @@ var xxx_messageInfo_LogCollectorSpec proto.InternalMessageInfo func (m *LogCollectorStatus) Reset() { *m = LogCollectorStatus{} } func (*LogCollectorStatus) ProtoMessage() {} func (*LogCollectorStatus) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{62} + return fileDescriptor_6e12a3c1f6fbf61e, []int{64} } func (m *LogCollectorStatus) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1816,7 +1872,7 @@ var xxx_messageInfo_LogCollectorStatus proto.InternalMessageInfo func (m *Machine) Reset() { *m = Machine{} } func (*Machine) ProtoMessage() {} func (*Machine) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{63} + return fileDescriptor_6e12a3c1f6fbf61e, []int{65} } func (m *Machine) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1844,7 +1900,7 @@ var xxx_messageInfo_Machine proto.InternalMessageInfo func (m *MachineAddress) Reset() { *m = MachineAddress{} } func (*MachineAddress) ProtoMessage() {} func (*MachineAddress) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{64} + return fileDescriptor_6e12a3c1f6fbf61e, []int{66} } func (m *MachineAddress) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1872,7 +1928,7 @@ var xxx_messageInfo_MachineAddress proto.InternalMessageInfo func (m *MachineCondition) Reset() { *m = MachineCondition{} } func (*MachineCondition) ProtoMessage() {} func (*MachineCondition) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{65} + return fileDescriptor_6e12a3c1f6fbf61e, []int{67} } func (m *MachineCondition) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1900,7 +1956,7 @@ var xxx_messageInfo_MachineCondition proto.InternalMessageInfo func (m *MachineList) Reset() { *m = MachineList{} } func (*MachineList) ProtoMessage() {} func (*MachineList) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{66} + return fileDescriptor_6e12a3c1f6fbf61e, []int{68} } func (m *MachineList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1928,7 +1984,7 @@ var xxx_messageInfo_MachineList proto.InternalMessageInfo func (m *MachineSpec) Reset() { *m = MachineSpec{} } func (*MachineSpec) ProtoMessage() {} func (*MachineSpec) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{67} + return fileDescriptor_6e12a3c1f6fbf61e, []int{69} } func (m *MachineSpec) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1956,7 +2012,7 @@ var xxx_messageInfo_MachineSpec proto.InternalMessageInfo func (m *MachineStatus) Reset() { *m = MachineStatus{} } func (*MachineStatus) ProtoMessage() {} func (*MachineStatus) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{68} + return fileDescriptor_6e12a3c1f6fbf61e, []int{70} } func (m *MachineStatus) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1984,7 +2040,7 @@ var xxx_messageInfo_MachineStatus proto.InternalMessageInfo func (m *MachineSystemInfo) Reset() { *m = MachineSystemInfo{} } func (*MachineSystemInfo) ProtoMessage() {} func (*MachineSystemInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{69} + return fileDescriptor_6e12a3c1f6fbf61e, []int{71} } func (m *MachineSystemInfo) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2012,7 +2068,7 @@ var xxx_messageInfo_MachineSystemInfo proto.InternalMessageInfo func (m *PVCRProxyOptions) Reset() { *m = PVCRProxyOptions{} } func (*PVCRProxyOptions) ProtoMessage() {} func (*PVCRProxyOptions) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{70} + return fileDescriptor_6e12a3c1f6fbf61e, []int{72} } func (m *PVCRProxyOptions) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2040,7 +2096,7 @@ var xxx_messageInfo_PVCRProxyOptions proto.InternalMessageInfo func (m *PersistentBackEnd) Reset() { *m = PersistentBackEnd{} } func (*PersistentBackEnd) ProtoMessage() {} func (*PersistentBackEnd) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{71} + return fileDescriptor_6e12a3c1f6fbf61e, []int{73} } func (m *PersistentBackEnd) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2068,7 +2124,7 @@ var xxx_messageInfo_PersistentBackEnd proto.InternalMessageInfo func (m *PersistentEvent) Reset() { *m = PersistentEvent{} } func (*PersistentEvent) ProtoMessage() {} func (*PersistentEvent) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{72} + return fileDescriptor_6e12a3c1f6fbf61e, []int{74} } func (m *PersistentEvent) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2096,7 +2152,7 @@ var xxx_messageInfo_PersistentEvent proto.InternalMessageInfo func (m *PersistentEventList) Reset() { *m = PersistentEventList{} } func (*PersistentEventList) ProtoMessage() {} func (*PersistentEventList) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{73} + return fileDescriptor_6e12a3c1f6fbf61e, []int{75} } func (m *PersistentEventList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2124,7 +2180,7 @@ var xxx_messageInfo_PersistentEventList proto.InternalMessageInfo func (m *PersistentEventSpec) Reset() { *m = PersistentEventSpec{} } func (*PersistentEventSpec) ProtoMessage() {} func (*PersistentEventSpec) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{74} + return fileDescriptor_6e12a3c1f6fbf61e, []int{76} } func (m *PersistentEventSpec) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2152,7 +2208,7 @@ var xxx_messageInfo_PersistentEventSpec proto.InternalMessageInfo func (m *PersistentEventStatus) Reset() { *m = PersistentEventStatus{} } func (*PersistentEventStatus) ProtoMessage() {} func (*PersistentEventStatus) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{75} + return fileDescriptor_6e12a3c1f6fbf61e, []int{77} } func (m *PersistentEventStatus) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2180,7 +2236,7 @@ var xxx_messageInfo_PersistentEventStatus proto.InternalMessageInfo func (m *Prometheus) Reset() { *m = Prometheus{} } func (*Prometheus) ProtoMessage() {} func (*Prometheus) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{76} + return fileDescriptor_6e12a3c1f6fbf61e, []int{78} } func (m *Prometheus) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2208,7 +2264,7 @@ var xxx_messageInfo_Prometheus proto.InternalMessageInfo func (m *PrometheusList) Reset() { *m = PrometheusList{} } func (*PrometheusList) ProtoMessage() {} func (*PrometheusList) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{77} + return fileDescriptor_6e12a3c1f6fbf61e, []int{79} } func (m *PrometheusList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2236,7 +2292,7 @@ var xxx_messageInfo_PrometheusList proto.InternalMessageInfo func (m *PrometheusRemoteAddr) Reset() { *m = PrometheusRemoteAddr{} } func (*PrometheusRemoteAddr) ProtoMessage() {} func (*PrometheusRemoteAddr) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{78} + return fileDescriptor_6e12a3c1f6fbf61e, []int{80} } func (m *PrometheusRemoteAddr) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2264,7 +2320,7 @@ var xxx_messageInfo_PrometheusRemoteAddr proto.InternalMessageInfo func (m *PrometheusSpec) Reset() { *m = PrometheusSpec{} } func (*PrometheusSpec) ProtoMessage() {} func (*PrometheusSpec) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{79} + return fileDescriptor_6e12a3c1f6fbf61e, []int{81} } func (m *PrometheusSpec) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2292,7 +2348,7 @@ var xxx_messageInfo_PrometheusSpec proto.InternalMessageInfo func (m *PrometheusStatus) Reset() { *m = PrometheusStatus{} } func (*PrometheusStatus) ProtoMessage() {} func (*PrometheusStatus) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{80} + return fileDescriptor_6e12a3c1f6fbf61e, []int{82} } func (m *PrometheusStatus) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2320,7 +2376,7 @@ var xxx_messageInfo_PrometheusStatus proto.InternalMessageInfo func (m *Registry) Reset() { *m = Registry{} } func (*Registry) ProtoMessage() {} func (*Registry) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{81} + return fileDescriptor_6e12a3c1f6fbf61e, []int{83} } func (m *Registry) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2348,7 +2404,7 @@ var xxx_messageInfo_Registry proto.InternalMessageInfo func (m *RegistryList) Reset() { *m = RegistryList{} } func (*RegistryList) ProtoMessage() {} func (*RegistryList) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{82} + return fileDescriptor_6e12a3c1f6fbf61e, []int{84} } func (m *RegistryList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2376,7 +2432,7 @@ var xxx_messageInfo_RegistryList proto.InternalMessageInfo func (m *RegistrySpec) Reset() { *m = RegistrySpec{} } func (*RegistrySpec) ProtoMessage() {} func (*RegistrySpec) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{83} + return fileDescriptor_6e12a3c1f6fbf61e, []int{85} } func (m *RegistrySpec) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2404,7 +2460,7 @@ var xxx_messageInfo_RegistrySpec proto.InternalMessageInfo func (m *ResourceRequirements) Reset() { *m = ResourceRequirements{} } func (*ResourceRequirements) ProtoMessage() {} func (*ResourceRequirements) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{84} + return fileDescriptor_6e12a3c1f6fbf61e, []int{86} } func (m *ResourceRequirements) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2432,7 +2488,7 @@ var xxx_messageInfo_ResourceRequirements proto.InternalMessageInfo func (m *StorageBackEndCLS) Reset() { *m = StorageBackEndCLS{} } func (*StorageBackEndCLS) ProtoMessage() {} func (*StorageBackEndCLS) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{85} + return fileDescriptor_6e12a3c1f6fbf61e, []int{87} } func (m *StorageBackEndCLS) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2460,7 +2516,7 @@ var xxx_messageInfo_StorageBackEndCLS proto.InternalMessageInfo func (m *StorageBackEndES) Reset() { *m = StorageBackEndES{} } func (*StorageBackEndES) ProtoMessage() {} func (*StorageBackEndES) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{86} + return fileDescriptor_6e12a3c1f6fbf61e, []int{88} } func (m *StorageBackEndES) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2488,7 +2544,7 @@ var xxx_messageInfo_StorageBackEndES proto.InternalMessageInfo func (m *TKEHA) Reset() { *m = TKEHA{} } func (*TKEHA) ProtoMessage() {} func (*TKEHA) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{87} + return fileDescriptor_6e12a3c1f6fbf61e, []int{89} } func (m *TKEHA) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2516,7 +2572,7 @@ var xxx_messageInfo_TKEHA proto.InternalMessageInfo func (m *TappController) Reset() { *m = TappController{} } func (*TappController) ProtoMessage() {} func (*TappController) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{88} + return fileDescriptor_6e12a3c1f6fbf61e, []int{90} } func (m *TappController) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2544,7 +2600,7 @@ var xxx_messageInfo_TappController proto.InternalMessageInfo func (m *TappControllerList) Reset() { *m = TappControllerList{} } func (*TappControllerList) ProtoMessage() {} func (*TappControllerList) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{89} + return fileDescriptor_6e12a3c1f6fbf61e, []int{91} } func (m *TappControllerList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2572,7 +2628,7 @@ var xxx_messageInfo_TappControllerList proto.InternalMessageInfo func (m *TappControllerProxyOptions) Reset() { *m = TappControllerProxyOptions{} } func (*TappControllerProxyOptions) ProtoMessage() {} func (*TappControllerProxyOptions) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{90} + return fileDescriptor_6e12a3c1f6fbf61e, []int{92} } func (m *TappControllerProxyOptions) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2600,7 +2656,7 @@ var xxx_messageInfo_TappControllerProxyOptions proto.InternalMessageInfo func (m *TappControllerSpec) Reset() { *m = TappControllerSpec{} } func (*TappControllerSpec) ProtoMessage() {} func (*TappControllerSpec) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{91} + return fileDescriptor_6e12a3c1f6fbf61e, []int{93} } func (m *TappControllerSpec) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2628,7 +2684,7 @@ var xxx_messageInfo_TappControllerSpec proto.InternalMessageInfo func (m *TappControllerStatus) Reset() { *m = TappControllerStatus{} } func (*TappControllerStatus) ProtoMessage() {} func (*TappControllerStatus) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{92} + return fileDescriptor_6e12a3c1f6fbf61e, []int{94} } func (m *TappControllerStatus) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2656,7 +2712,7 @@ var xxx_messageInfo_TappControllerStatus proto.InternalMessageInfo func (m *ThirdPartyHA) Reset() { *m = ThirdPartyHA{} } func (*ThirdPartyHA) ProtoMessage() {} func (*ThirdPartyHA) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{93} + return fileDescriptor_6e12a3c1f6fbf61e, []int{95} } func (m *ThirdPartyHA) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2684,7 +2740,7 @@ var xxx_messageInfo_ThirdPartyHA proto.InternalMessageInfo func (m *Upgrade) Reset() { *m = Upgrade{} } func (*Upgrade) ProtoMessage() {} func (*Upgrade) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{94} + return fileDescriptor_6e12a3c1f6fbf61e, []int{96} } func (m *Upgrade) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2712,7 +2768,7 @@ var xxx_messageInfo_Upgrade proto.InternalMessageInfo func (m *UpgradeStrategy) Reset() { *m = UpgradeStrategy{} } func (*UpgradeStrategy) ProtoMessage() {} func (*UpgradeStrategy) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{95} + return fileDescriptor_6e12a3c1f6fbf61e, []int{97} } func (m *UpgradeStrategy) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2740,7 +2796,7 @@ var xxx_messageInfo_UpgradeStrategy proto.InternalMessageInfo func (m *VolumeDecorator) Reset() { *m = VolumeDecorator{} } func (*VolumeDecorator) ProtoMessage() {} func (*VolumeDecorator) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{96} + return fileDescriptor_6e12a3c1f6fbf61e, []int{98} } func (m *VolumeDecorator) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2768,7 +2824,7 @@ var xxx_messageInfo_VolumeDecorator proto.InternalMessageInfo func (m *VolumeDecoratorList) Reset() { *m = VolumeDecoratorList{} } func (*VolumeDecoratorList) ProtoMessage() {} func (*VolumeDecoratorList) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{97} + return fileDescriptor_6e12a3c1f6fbf61e, []int{99} } func (m *VolumeDecoratorList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2796,7 +2852,7 @@ var xxx_messageInfo_VolumeDecoratorList proto.InternalMessageInfo func (m *VolumeDecoratorSpec) Reset() { *m = VolumeDecoratorSpec{} } func (*VolumeDecoratorSpec) ProtoMessage() {} func (*VolumeDecoratorSpec) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{98} + return fileDescriptor_6e12a3c1f6fbf61e, []int{100} } func (m *VolumeDecoratorSpec) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2824,7 +2880,7 @@ var xxx_messageInfo_VolumeDecoratorSpec proto.InternalMessageInfo func (m *VolumeDecoratorStatus) Reset() { *m = VolumeDecoratorStatus{} } func (*VolumeDecoratorStatus) ProtoMessage() {} func (*VolumeDecoratorStatus) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{99} + return fileDescriptor_6e12a3c1f6fbf61e, []int{101} } func (m *VolumeDecoratorStatus) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2851,7 +2907,9 @@ var xxx_messageInfo_VolumeDecoratorStatus proto.InternalMessageInfo func init() { proto.RegisterType((*AddonSpec)(nil), "tkestack.io.tke.api.platform.v1.AddonSpec") + proto.RegisterType((*App)(nil), "tkestack.io.tke.api.platform.v1.App") proto.RegisterType((*AuthzWebhookAddr)(nil), "tkestack.io.tke.api.platform.v1.AuthzWebhookAddr") + proto.RegisterType((*BootstrapApp)(nil), "tkestack.io.tke.api.platform.v1.BootstrapApp") proto.RegisterType((*BuiltinAuthzWebhookAddr)(nil), "tkestack.io.tke.api.platform.v1.BuiltinAuthzWebhookAddr") proto.RegisterType((*CSIOperator)(nil), "tkestack.io.tke.api.platform.v1.CSIOperator") proto.RegisterType((*CSIOperatorFeature)(nil), "tkestack.io.tke.api.platform.v1.CSIOperatorFeature") @@ -2977,371 +3035,377 @@ func init() { } var fileDescriptor_6e12a3c1f6fbf61e = []byte{ - // 5823 bytes of a gzipped FileDescriptorProto + // 5919 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x3d, 0x5b, 0x6c, 0x24, 0xd9, - 0x55, 0xdb, 0x2f, 0xbb, 0x7d, 0xda, 0xcf, 0x3b, 0x9e, 0x99, 0x5e, 0x6f, 0x32, 0x9e, 0xf4, 0x92, - 0x68, 0x36, 0xbb, 0xdb, 0xde, 0x99, 0xdd, 0x4c, 0x66, 0x77, 0xc9, 0xa3, 0x1f, 0x9e, 0x8c, 0x33, - 0xb6, 0xa7, 0x73, 0xdb, 0xe3, 0x21, 0x01, 0x92, 0x2d, 0x57, 0x5d, 0xdb, 0x15, 0x57, 0x57, 0xf5, - 0x56, 0xdd, 0xf6, 0x4c, 0x2f, 0x7c, 0x84, 0xc7, 0x07, 0x42, 0x80, 0x02, 0x91, 0x40, 0x0a, 0x04, - 0xc4, 0x06, 0x09, 0x44, 0x88, 0x14, 0x29, 0x7c, 0x45, 0x80, 0x00, 0x21, 0xb1, 0x42, 0x08, 0x45, - 0x7c, 0xad, 0x90, 0x62, 0x58, 0xf3, 0x10, 0x7c, 0x20, 0xf8, 0x65, 0xbe, 0xd0, 0x7d, 0x54, 0xd5, - 0xad, 0xea, 0x6e, 0x77, 0xd7, 0xac, 0xa7, 0xd7, 0x1f, 0xf3, 0xd7, 0x75, 0x5e, 0xf7, 0xd4, 0xbd, - 0xf7, 0xbc, 0xee, 0xa3, 0x1a, 0x56, 0xe8, 0x01, 0xf1, 0xa8, 0xa6, 0x1f, 0x94, 0x4d, 0x87, 0xfd, - 0x5e, 0xd1, 0xda, 0xe6, 0x4a, 0xdb, 0xd2, 0xe8, 0xae, 0xe3, 0xb6, 0x56, 0x0e, 0xaf, 0xae, 0xec, - 0x11, 0x9b, 0xb8, 0x1a, 0x25, 0x46, 0xb9, 0xed, 0x3a, 0xd4, 0x41, 0xcb, 0x0a, 0x43, 0x99, 0x1e, - 0x90, 0xb2, 0xd6, 0x36, 0xcb, 0x3e, 0x43, 0xf9, 0xf0, 0xea, 0xd2, 0x8b, 0x7b, 0x26, 0xdd, 0xef, - 0xec, 0x94, 0x75, 0xa7, 0xb5, 0xb2, 0xe7, 0xec, 0x39, 0x2b, 0x9c, 0x6f, 0xa7, 0xb3, 0xcb, 0x9f, - 0xf8, 0x03, 0xff, 0x25, 0xe4, 0x2d, 0x95, 0x0e, 0x6e, 0x78, 0xac, 0x6d, 0xd6, 0xae, 0xee, 0xb8, - 0xa4, 0x4f, 0x9b, 0x4b, 0xaf, 0x84, 0x34, 0x2d, 0x4d, 0xdf, 0x37, 0x6d, 0xe2, 0x76, 0x57, 0xda, - 0x07, 0x7b, 0x9c, 0xc9, 0x25, 0x9e, 0xd3, 0x71, 0x75, 0x92, 0x88, 0xcb, 0x5b, 0x69, 0x11, 0xaa, - 0xf5, 0x6b, 0x6b, 0x65, 0x10, 0x97, 0xdb, 0xb1, 0xa9, 0xd9, 0xea, 0x6d, 0xe6, 0xfa, 0x30, 0x06, - 0x4f, 0xdf, 0x27, 0x2d, 0xad, 0x87, 0xef, 0xe5, 0x41, 0x7c, 0x1d, 0x6a, 0x5a, 0x2b, 0xa6, 0x4d, - 0x3d, 0xea, 0xc6, 0x99, 0x4a, 0xbf, 0x9d, 0x82, 0xa9, 0x8a, 0x61, 0x38, 0x76, 0xb3, 0x4d, 0x74, - 0xf4, 0x02, 0xe4, 0x29, 0xb1, 0x35, 0x9b, 0xae, 0xd5, 0x8b, 0xa9, 0xcb, 0xa9, 0x2b, 0x53, 0xd5, - 0xf9, 0x77, 0x8e, 0x96, 0x9f, 0x3a, 0x3e, 0x5a, 0xce, 0x6f, 0x49, 0x38, 0x0e, 0x28, 0xd0, 0x27, - 0xa0, 0xa0, 0x5b, 0x1d, 0x8f, 0x12, 0x77, 0x53, 0x6b, 0x91, 0x62, 0x9a, 0x33, 0x9c, 0x93, 0x0c, - 0x85, 0x5a, 0x88, 0xc2, 0x2a, 0x1d, 0x7a, 0x0e, 0x26, 0x0f, 0x89, 0xeb, 0x99, 0x8e, 0x5d, 0xcc, - 0x70, 0x96, 0x39, 0xc9, 0x32, 0xb9, 0x2d, 0xc0, 0xd8, 0xc7, 0x97, 0xde, 0x4d, 0xc1, 0x7c, 0xa5, - 0x43, 0xf7, 0xdf, 0xba, 0x47, 0x76, 0xf6, 0x1d, 0xe7, 0xa0, 0x62, 0x18, 0x2e, 0xfa, 0x0a, 0x4c, - 0xee, 0x74, 0x4c, 0x8b, 0x9a, 0x36, 0xd7, 0xb1, 0x70, 0xed, 0x46, 0x79, 0xc8, 0x14, 0x2a, 0x57, - 0x05, 0x7d, 0x5c, 0x54, 0xb5, 0xc0, 0x5a, 0x95, 0x48, 0xec, 0x4b, 0x45, 0x3a, 0xe4, 0xc9, 0x03, - 0x4a, 0x5c, 0x5b, 0xb3, 0xf8, 0x4b, 0x15, 0xae, 0xbd, 0x3a, 0xb4, 0x85, 0x55, 0xc9, 0xd0, 0xd3, - 0xc4, 0x34, 0xeb, 0x3c, 0x1f, 0x8b, 0x03, 0xc1, 0xa5, 0xa7, 0xe1, 0xe2, 0x00, 0xad, 0x4a, 0xbf, - 0x97, 0x86, 0x42, 0xad, 0xb9, 0x76, 0xa7, 0xcd, 0x46, 0xca, 0x71, 0xd1, 0x1b, 0x90, 0x67, 0x93, - 0xcb, 0xd0, 0xa8, 0x26, 0xdf, 0xf8, 0xa5, 0xb2, 0x18, 0xeb, 0xb2, 0x3a, 0xd6, 0xe5, 0xf6, 0xc1, - 0x1e, 0x03, 0x78, 0x65, 0x46, 0xcd, 0x94, 0xba, 0xb3, 0xf3, 0x55, 0xa2, 0xd3, 0x0d, 0x42, 0xb5, - 0x2a, 0x92, 0x7d, 0x0c, 0x21, 0x0c, 0x07, 0x52, 0x11, 0x86, 0xac, 0xd7, 0x26, 0xba, 0x7c, 0xdb, - 0x97, 0x86, 0xbe, 0xad, 0xa2, 0x1d, 0x9b, 0x37, 0xd5, 0x69, 0x29, 0x3d, 0xcb, 0x9e, 0x30, 0x97, - 0x85, 0xbe, 0x04, 0x13, 0x1e, 0xd5, 0x68, 0xc7, 0xe3, 0xa3, 0x5c, 0xb8, 0x76, 0x2d, 0x91, 0x54, - 0xce, 0x59, 0x9d, 0x95, 0x72, 0x27, 0xc4, 0x33, 0x96, 0x12, 0x4b, 0x9f, 0x01, 0xa4, 0x10, 0xdf, - 0x24, 0x1a, 0xed, 0xb8, 0x91, 0x89, 0x95, 0x1a, 0x32, 0xb1, 0xfe, 0x3a, 0x05, 0x73, 0x8a, 0x84, - 0x75, 0xd3, 0xa3, 0xe8, 0xa7, 0x7a, 0xba, 0xb9, 0x3c, 0x5a, 0x37, 0x33, 0x6e, 0xde, 0xc9, 0x81, - 0xb1, 0xf8, 0x10, 0xa5, 0x8b, 0xbf, 0x00, 0x39, 0x93, 0x92, 0x96, 0x57, 0x4c, 0x5f, 0xce, 0x5c, - 0x29, 0x5c, 0x7b, 0x21, 0x49, 0x6f, 0x54, 0x67, 0xa4, 0xe0, 0xdc, 0x1a, 0x13, 0x81, 0x85, 0xa4, - 0xd2, 0xef, 0x47, 0x5f, 0xe2, 0x4c, 0x5a, 0xf0, 0xf7, 0x33, 0xb0, 0xd0, 0x33, 0xae, 0x09, 0x46, - 0x0a, 0x35, 0x60, 0xd1, 0xa3, 0x8e, 0xab, 0xed, 0x91, 0x6d, 0x62, 0x1b, 0x8e, 0x2b, 0x09, 0xa4, - 0xae, 0x1f, 0x92, 0x7c, 0x8b, 0xcd, 0x3e, 0x34, 0xb8, 0x2f, 0x27, 0xba, 0x0a, 0xb9, 0xf6, 0xbe, - 0xe6, 0x11, 0xa9, 0xfb, 0x33, 0x7e, 0xdf, 0x36, 0x18, 0xf0, 0xe1, 0xd1, 0x32, 0x70, 0x7f, 0xc8, - 0x9f, 0xb0, 0xa0, 0x44, 0x1f, 0x83, 0x09, 0x97, 0x68, 0x9e, 0x63, 0x17, 0xb3, 0x9c, 0x27, 0x98, - 0x97, 0x98, 0x43, 0xb1, 0xc4, 0xa2, 0x6b, 0x00, 0x2e, 0xa1, 0x6e, 0xb7, 0xe6, 0x74, 0x6c, 0x5a, - 0xcc, 0x5d, 0x4e, 0x5d, 0xc9, 0x85, 0x96, 0x87, 0x03, 0x0c, 0x56, 0xa8, 0xd0, 0xaf, 0xa7, 0xe0, - 0x19, 0x4b, 0xf3, 0x28, 0x26, 0x6b, 0xb6, 0x49, 0x4d, 0xcd, 0x32, 0xdf, 0x32, 0xed, 0xbd, 0x2d, - 0xb3, 0xc5, 0xa6, 0x47, 0xab, 0x5d, 0x9c, 0xe0, 0x53, 0xf1, 0xe3, 0xa3, 0x4d, 0x45, 0xc6, 0x56, - 0x7d, 0x56, 0xb6, 0xf8, 0xcc, 0xfa, 0x60, 0xb1, 0xf8, 0xa4, 0x36, 0x4b, 0x06, 0x9f, 0x58, 0x0d, - 0xd7, 0x79, 0xd0, 0xbd, 0xd3, 0xa6, 0xa6, 0x63, 0x7b, 0x68, 0x05, 0xa6, 0x6c, 0xad, 0x45, 0xbc, - 0xb6, 0xa6, 0x13, 0x39, 0x68, 0x0b, 0xb2, 0x9d, 0xa9, 0x4d, 0x1f, 0x81, 0x43, 0x1a, 0x74, 0x19, - 0xb2, 0x76, 0x38, 0xa9, 0x02, 0x0f, 0xc1, 0x67, 0x13, 0xc7, 0x94, 0xbe, 0x91, 0x86, 0x49, 0x39, - 0xc7, 0xc6, 0xe0, 0xe3, 0x36, 0x23, 0x3e, 0x6e, 0x04, 0xfb, 0x13, 0x9a, 0x0d, 0xf4, 0x6f, 0xdb, - 0x31, 0xff, 0x56, 0x1e, 0x59, 0xe2, 0xc9, 0xbe, 0xed, 0xed, 0x34, 0x4c, 0x4b, 0x4a, 0x3e, 0x11, - 0xc7, 0xd0, 0x35, 0xcd, 0x48, 0xd7, 0x5c, 0x1d, 0xf5, 0x45, 0x82, 0xbc, 0xa1, 0x6f, 0xff, 0xfc, - 0x64, 0xac, 0x7f, 0x5e, 0x4e, 0x26, 0xf6, 0xe4, 0x4e, 0xfa, 0x9b, 0x14, 0xcc, 0xab, 0xe4, 0x63, - 0x70, 0xe0, 0x38, 0xea, 0xc0, 0x5f, 0x4c, 0xf4, 0x3a, 0x03, 0x3c, 0xf8, 0x6f, 0xc4, 0x5e, 0x83, - 0xbb, 0xf0, 0xcb, 0x90, 0xa5, 0xdd, 0xb6, 0x6f, 0x64, 0x41, 0xd7, 0x6e, 0x75, 0xdb, 0x04, 0x73, - 0x0c, 0xf3, 0x60, 0x16, 0x39, 0x24, 0x96, 0xb4, 0xad, 0xc0, 0x83, 0xad, 0x33, 0x60, 0xe0, 0xc1, - 0xf8, 0x13, 0x16, 0x94, 0x49, 0x5c, 0xf6, 0xaf, 0xa4, 0x00, 0xf5, 0x0e, 0x45, 0x12, 0x9f, 0xfd, - 0xac, 0xef, 0x61, 0x85, 0x7e, 0x33, 0x11, 0x0f, 0xdb, 0xeb, 0x53, 0x33, 0x27, 0xf9, 0xd4, 0xd2, - 0xaf, 0x65, 0xa2, 0x7d, 0xc4, 0xfa, 0x61, 0x0c, 0x36, 0xe1, 0x8f, 0x42, 0x7a, 0xf8, 0x28, 0x64, - 0x46, 0x1e, 0x85, 0xd7, 0x61, 0xc6, 0xd2, 0x28, 0xf1, 0xa8, 0x1f, 0xc5, 0x44, 0x38, 0x39, 0x2f, - 0x59, 0x67, 0xd6, 0x55, 0x24, 0x8e, 0xd2, 0xb2, 0x60, 0x6d, 0x10, 0x4f, 0x77, 0x4d, 0xee, 0x91, - 0x79, 0x74, 0x51, 0x82, 0x75, 0x3d, 0x44, 0x61, 0x95, 0x0e, 0xdd, 0x81, 0xf3, 0xba, 0xd3, 0x6a, - 0x6b, 0xd4, 0xdc, 0xb1, 0x88, 0xec, 0x48, 0xf6, 0x16, 0xc5, 0x89, 0xcb, 0x99, 0x2b, 0x53, 0xd5, - 0xa7, 0x8f, 0x8f, 0x96, 0xcf, 0xd7, 0xfa, 0x11, 0xe0, 0xfe, 0x7c, 0xa5, 0xbf, 0x4f, 0xc1, 0x62, - 0x7c, 0x40, 0xc6, 0x60, 0x7f, 0xdb, 0x51, 0xfb, 0x4b, 0xe6, 0xa5, 0x98, 0x8e, 0x03, 0x6c, 0xf0, - 0x0f, 0x53, 0x30, 0x1b, 0x92, 0xba, 0xc4, 0x63, 0xb1, 0x4e, 0xb5, 0xc0, 0x67, 0xd4, 0xb1, 0x7f, - 0x78, 0xb4, 0x5c, 0x90, 0x64, 0xca, 0x54, 0xb8, 0x0c, 0xd9, 0x7d, 0xc7, 0xa3, 0xf1, 0xc9, 0x72, - 0xcb, 0xf1, 0x28, 0xe6, 0x18, 0x46, 0xd1, 0x76, 0x5c, 0xca, 0xe7, 0x4a, 0x2e, 0xa4, 0x68, 0x38, - 0x2e, 0xc5, 0x1c, 0xc3, 0x29, 0x34, 0xba, 0x2f, 0xa7, 0x44, 0x48, 0xa1, 0xd1, 0x7d, 0xcc, 0x31, - 0xa5, 0x9b, 0x70, 0xce, 0x57, 0xb4, 0xdd, 0xb6, 0x22, 0x91, 0xd9, 0xa1, 0x77, 0xdb, 0x86, 0x46, - 0x85, 0xca, 0x79, 0x25, 0x32, 0xfb, 0x08, 0x1c, 0xd2, 0x94, 0x7e, 0x10, 0x7a, 0x1d, 0x36, 0xf0, - 0x8e, 0x4d, 0x6c, 0x3a, 0x82, 0xd7, 0xf9, 0x85, 0x14, 0xe4, 0x5d, 0xd2, 0xb6, 0x4c, 0x5d, 0xf3, - 0x46, 0xae, 0x8b, 0xe2, 0xed, 0x60, 0x29, 0xa0, 0xfa, 0x82, 0x3f, 0xd4, 0x3e, 0xe4, 0xe1, 0xd1, - 0x72, 0x71, 0x10, 0x35, 0x0e, 0x1a, 0x66, 0xb3, 0x6f, 0x20, 0x19, 0xf3, 0x51, 0x06, 0xf1, 0x4c, - 0x97, 0x18, 0xfc, 0x3d, 0x72, 0xa1, 0x8f, 0xaa, 0x0b, 0x30, 0xf6, 0xf1, 0x8c, 0x54, 0xef, 0xb8, - 0x2e, 0xb1, 0xc5, 0xa8, 0x29, 0xa4, 0x35, 0x01, 0xc6, 0x3e, 0x9e, 0x75, 0xb0, 0x76, 0xa8, 0x99, - 0x96, 0xb6, 0x63, 0x11, 0x39, 0x80, 0x41, 0x07, 0x57, 0x7c, 0x04, 0x0e, 0x69, 0x98, 0xec, 0x0e, - 0xef, 0x6a, 0x83, 0x8f, 0xa6, 0x22, 0x5b, 0x8c, 0x80, 0x81, 0x7d, 0x7c, 0xe9, 0xdb, 0x19, 0x65, - 0x2c, 0x6c, 0xc3, 0xe4, 0x26, 0x3b, 0x7c, 0x2c, 0x5e, 0x0d, 0x82, 0xab, 0x98, 0x72, 0x1f, 0x89, - 0xc6, 0xc9, 0x87, 0x47, 0xcb, 0x73, 0x81, 0xb8, 0x68, 0xe8, 0x44, 0x7b, 0xcc, 0x07, 0x79, 0xb4, - 0xe1, 0x3a, 0x3b, 0x84, 0x65, 0x7c, 0x32, 0x3c, 0x27, 0x49, 0x30, 0x15, 0x7f, 0xa5, 0x08, 0xc2, - 0x51, 0xb9, 0xe8, 0x10, 0x10, 0x03, 0x6c, 0xb9, 0x9a, 0xed, 0x71, 0x45, 0x78, 0x6b, 0xd9, 0xc4, - 0xad, 0x2d, 0xc9, 0xd6, 0xd0, 0x7a, 0x8f, 0x34, 0xdc, 0xa7, 0x05, 0x25, 0xb0, 0xe4, 0x4e, 0x4c, - 0xd6, 0x9f, 0x83, 0xc9, 0x16, 0xf1, 0x3c, 0x6d, 0x8f, 0xf0, 0x1c, 0x5b, 0x09, 0x68, 0x1b, 0x02, - 0x8c, 0x7d, 0x7c, 0xe9, 0xff, 0x72, 0xb0, 0xe0, 0x8f, 0x92, 0x4b, 0x0c, 0x62, 0xb3, 0x9c, 0x79, - 0x0c, 0x41, 0x48, 0xad, 0xe6, 0xd2, 0x49, 0xab, 0xb9, 0xcc, 0x88, 0xd5, 0x5c, 0x19, 0x80, 0x50, - 0xdd, 0xa8, 0x55, 0x6a, 0xc4, 0xa5, 0x7c, 0x7c, 0xa6, 0xab, 0xb3, 0x4c, 0xa5, 0xd5, 0xad, 0x5a, - 0x5d, 0x40, 0xb1, 0x42, 0x81, 0x9e, 0x87, 0x29, 0xf1, 0x74, 0x9b, 0x74, 0x79, 0x17, 0x4f, 0x57, - 0x67, 0x98, 0x29, 0x08, 0xf2, 0xdb, 0xa4, 0x8b, 0x43, 0x3c, 0xaa, 0xc1, 0x02, 0x7b, 0xa8, 0x34, - 0xd6, 0x6a, 0x96, 0x49, 0x6c, 0xca, 0xdb, 0x98, 0xe0, 0x4c, 0xe7, 0x8f, 0x8f, 0x96, 0x17, 0x18, - 0x53, 0x04, 0x89, 0x7b, 0xe9, 0xd1, 0x67, 0x61, 0x3e, 0x02, 0x64, 0x0d, 0x4f, 0x72, 0x19, 0x8b, - 0xc7, 0x47, 0xcb, 0xf3, 0x11, 0x19, 0xac, 0xfd, 0x1e, 0x6a, 0x54, 0x82, 0x09, 0x5d, 0xe3, 0x6d, - 0xe7, 0x39, 0x1f, 0xb0, 0xf9, 0x20, 0xdf, 0x4d, 0x62, 0xd0, 0x32, 0xe4, 0x74, 0x8d, 0x89, 0x9e, - 0xe2, 0x24, 0x53, 0x2c, 0x52, 0x88, 0xf7, 0x11, 0x70, 0xd6, 0x51, 0x7a, 0xf8, 0x12, 0x10, 0x76, - 0x94, 0xa2, 0xbd, 0x42, 0xc1, 0x3a, 0x4a, 0x0f, 0xf4, 0x2d, 0x84, 0x1d, 0x15, 0x2a, 0x1a, 0xe2, - 0x59, 0xeb, 0xd4, 0x39, 0x20, 0x76, 0x71, 0x9a, 0x0f, 0x1b, 0x6f, 0x7d, 0x8b, 0x01, 0xb0, 0x80, - 0xa3, 0xd7, 0x60, 0x76, 0xc7, 0x71, 0xa8, 0x47, 0x5d, 0xad, 0xcd, 0x11, 0xc5, 0x19, 0x4e, 0x89, - 0x8e, 0x8f, 0x96, 0x67, 0xab, 0x11, 0x0c, 0x8e, 0x51, 0x32, 0x5e, 0x9d, 0xb8, 0xd4, 0xdc, 0x35, - 0x75, 0x8d, 0x12, 0xa6, 0xce, 0x6c, 0xc8, 0x5b, 0x8b, 0x60, 0x70, 0x8c, 0xb2, 0xf4, 0x0f, 0x29, - 0x38, 0xdf, 0x33, 0xf7, 0xc7, 0x10, 0xef, 0xef, 0x45, 0xe3, 0xfd, 0xb5, 0x91, 0x43, 0x4d, 0xa0, - 0xe4, 0x80, 0x80, 0xff, 0xbf, 0xf9, 0x20, 0xe0, 0xfb, 0x2b, 0x47, 0x1f, 0x82, 0xac, 0xd9, 0x3e, - 0xf4, 0x64, 0xf4, 0xcc, 0x33, 0x67, 0xbb, 0xd6, 0xd8, 0x6e, 0x62, 0x0e, 0x45, 0x57, 0x20, 0xdf, - 0xee, 0xec, 0x58, 0xa6, 0xbe, 0x5e, 0xe5, 0x56, 0x98, 0x17, 0x8b, 0x7a, 0x0d, 0x09, 0xc3, 0x01, - 0x96, 0xcd, 0x10, 0xd3, 0x16, 0x0b, 0x7c, 0xeb, 0x55, 0x6e, 0x80, 0x79, 0x31, 0x43, 0xd6, 0x02, - 0x28, 0x56, 0x28, 0xd0, 0x4b, 0x30, 0xb9, 0xd7, 0xee, 0xf0, 0x6c, 0x4c, 0x84, 0xfd, 0x0b, 0xcc, - 0xfd, 0x7c, 0xae, 0x71, 0x57, 0xa6, 0x1a, 0xfe, 0x4f, 0xec, 0x93, 0xa1, 0x06, 0x2c, 0x12, 0x9b, - 0x05, 0x99, 0x0d, 0x8d, 0xd7, 0x92, 0xfa, 0x3e, 0x31, 0x3a, 0x16, 0xe1, 0x76, 0x98, 0x0f, 0x97, - 0x43, 0x56, 0xfb, 0xd0, 0xe0, 0xbe, 0x9c, 0xe8, 0x75, 0x48, 0xef, 0x6b, 0x72, 0x95, 0xe1, 0xd9, - 0xa1, 0x9d, 0x7c, 0xab, 0x52, 0x9d, 0x38, 0x3e, 0x5a, 0x4e, 0xdf, 0xaa, 0xe0, 0xf4, 0xbe, 0xc6, - 0x26, 0x96, 0x77, 0x60, 0xb6, 0x83, 0x58, 0xe3, 0x15, 0x27, 0x79, 0x56, 0xc9, 0x27, 0x56, 0x33, - 0x82, 0xc1, 0x31, 0x4a, 0xf4, 0x79, 0xc8, 0xed, 0x9a, 0x16, 0xf1, 0x8a, 0x79, 0x3e, 0xc0, 0x1f, - 0x1d, 0xda, 0xf6, 0x4d, 0xd3, 0x52, 0x92, 0x38, 0xf6, 0xe4, 0x61, 0x21, 0x02, 0x1d, 0x40, 0x6e, - 0xdf, 0x71, 0x0e, 0xbc, 0xe2, 0x14, 0x97, 0xf5, 0xda, 0xa8, 0x93, 0x45, 0x4e, 0x80, 0xf2, 0x2d, - 0xc6, 0xbc, 0x6a, 0x53, 0xb7, 0x5b, 0x7d, 0xda, 0x6f, 0x80, 0xc3, 0x7e, 0xfe, 0x9f, 0x97, 0xf3, - 0xec, 0x07, 0x1f, 0x05, 0xd1, 0x06, 0xda, 0x85, 0x82, 0xee, 0x99, 0xfe, 0x92, 0x16, 0x77, 0x04, - 0x23, 0x95, 0xb7, 0x3d, 0x2b, 0x96, 0xd5, 0x39, 0xee, 0x98, 0x43, 0x38, 0x56, 0x05, 0x23, 0x0f, - 0xe6, 0xb5, 0xd8, 0xda, 0x30, 0x77, 0x23, 0xa3, 0x24, 0xbf, 0x3d, 0xeb, 0xd0, 0xdc, 0x53, 0xc6, - 0xa1, 0xb8, 0xa7, 0x01, 0xb4, 0x01, 0xe7, 0xe4, 0x34, 0x21, 0xd4, 0x35, 0x75, 0xaf, 0x49, 0xdc, - 0x43, 0xe2, 0x72, 0xaf, 0x94, 0x0f, 0x52, 0xe1, 0x73, 0xab, 0xbd, 0x24, 0xb8, 0x1f, 0x1f, 0xab, - 0x78, 0xcc, 0xf6, 0xe1, 0xf5, 0x7a, 0x47, 0xb3, 0x9a, 0x4c, 0x5f, 0xee, 0xb4, 0xf2, 0x61, 0x06, - 0xb1, 0xd6, 0x50, 0x90, 0x38, 0x4a, 0x8b, 0x6e, 0xc0, 0xb4, 0x90, 0x59, 0x33, 0x2d, 0xb3, 0xd3, - 0xe2, 0x4e, 0x2b, 0x5f, 0x5d, 0x94, 0xbc, 0xd3, 0xab, 0x0a, 0x0e, 0x47, 0x28, 0x51, 0x93, 0x65, - 0x60, 0x7b, 0xae, 0x66, 0x90, 0xe2, 0x05, 0xde, 0x63, 0x57, 0x86, 0xf6, 0xd8, 0x5d, 0x41, 0xaf, - 0xe6, 0x6a, 0x1c, 0x80, 0x7d, 0x49, 0x4b, 0x37, 0x00, 0xc2, 0x79, 0x82, 0xe6, 0x21, 0x73, 0x40, - 0xba, 0x22, 0x47, 0xc3, 0xec, 0x27, 0x5a, 0x84, 0xdc, 0xa1, 0x66, 0x75, 0x64, 0xcd, 0x88, 0xc5, - 0xc3, 0x6b, 0xe9, 0x1b, 0x29, 0x96, 0x71, 0xfb, 0xf1, 0x77, 0x0c, 0x9e, 0x73, 0x23, 0xea, 0x39, - 0xaf, 0x8c, 0x6a, 0x0c, 0x03, 0xfc, 0xe5, 0x7f, 0x65, 0x02, 0x7f, 0xb9, 0x21, 0x34, 0x43, 0x4b, - 0x90, 0x36, 0xdb, 0x32, 0x3d, 0x05, 0xc9, 0x94, 0x5e, 0x6b, 0xe0, 0xb4, 0xd9, 0x0e, 0x2a, 0x9d, - 0xf4, 0xc0, 0x4a, 0xe7, 0x05, 0xc8, 0x77, 0x3c, 0xe6, 0x02, 0x83, 0x24, 0x25, 0x78, 0x9b, 0xbb, - 0x12, 0x8e, 0x03, 0x0a, 0xee, 0x7d, 0x35, 0xcf, 0xbb, 0xef, 0xb8, 0x86, 0x4c, 0x4e, 0x84, 0xf7, - 0x95, 0x30, 0x1c, 0x60, 0x99, 0xf7, 0x6d, 0xbb, 0xe6, 0xa1, 0x8c, 0x70, 0xb9, 0x30, 0x3e, 0x37, - 0x02, 0x28, 0x56, 0x28, 0x38, 0xbd, 0xe6, 0x79, 0x8d, 0x7d, 0x57, 0xf3, 0x88, 0x4c, 0x4a, 0x04, - 0x7d, 0x00, 0xc5, 0x0a, 0x05, 0xd2, 0x61, 0xc2, 0xd2, 0x76, 0x88, 0x25, 0x9c, 0x5c, 0xe1, 0xda, - 0xeb, 0xa3, 0x76, 0xac, 0xec, 0xb6, 0xf2, 0x3a, 0xe7, 0x16, 0x6e, 0x26, 0xc8, 0x4a, 0x05, 0x10, - 0x4b, 0xd1, 0xa8, 0x02, 0x13, 0x54, 0x33, 0x6d, 0xea, 0xbb, 0xc5, 0xa7, 0x95, 0x89, 0x51, 0xd6, - 0x1d, 0x97, 0xf0, 0xbc, 0x98, 0x51, 0x84, 0x22, 0xf8, 0xa3, 0x87, 0x25, 0xe3, 0xd2, 0xab, 0x50, - 0x50, 0x5a, 0x4a, 0x34, 0x51, 0x7f, 0x94, 0x86, 0x39, 0xa9, 0x74, 0xc3, 0x75, 0xda, 0xc4, 0xa5, - 0x5d, 0xb4, 0x0e, 0x8b, 0x2d, 0xed, 0x81, 0xbf, 0x78, 0x49, 0xdc, 0x43, 0x53, 0x27, 0x9b, 0x9d, - 0x96, 0xac, 0xb0, 0x8a, 0x2c, 0xdc, 0x6c, 0xf4, 0xc1, 0xe3, 0xbe, 0x5c, 0xe8, 0x93, 0x30, 0xd3, - 0xd2, 0x1e, 0x6c, 0x3a, 0x06, 0x69, 0x38, 0x06, 0x13, 0x23, 0xe6, 0xc9, 0x02, 0x73, 0x06, 0x1b, - 0x2a, 0x02, 0x47, 0xe9, 0xd0, 0xd7, 0x52, 0x30, 0xe3, 0x1c, 0x12, 0xd7, 0x73, 0x2c, 0x03, 0x6b, - 0xd4, 0x74, 0x8a, 0x19, 0xde, 0x41, 0xb5, 0x51, 0x47, 0xc1, 0x7f, 0xa1, 0xf2, 0x1d, 0x55, 0x8a, - 0x18, 0x8d, 0xc0, 0x1f, 0x45, 0x70, 0x38, 0xda, 0xe0, 0xd2, 0x67, 0x01, 0xf5, 0xf2, 0x26, 0xea, - 0xdf, 0xff, 0xcc, 0x05, 0xfd, 0x8b, 0xe5, 0x36, 0x33, 0xfa, 0x59, 0xc8, 0xeb, 0x5a, 0x5b, 0xd3, - 0x4d, 0xca, 0x84, 0xb0, 0x57, 0xfa, 0xf4, 0xa8, 0xaf, 0xe4, 0xcb, 0x28, 0xd7, 0xa4, 0x00, 0xf1, - 0x36, 0x97, 0x7d, 0x73, 0xf2, 0xc1, 0x0f, 0x8f, 0x96, 0xa7, 0x7d, 0x5a, 0xe6, 0x30, 0x70, 0xd0, - 0x22, 0xfa, 0xa5, 0x14, 0x14, 0x34, 0xcb, 0x72, 0x74, 0x8d, 0xf2, 0xfa, 0x56, 0xf8, 0x8c, 0x4a, - 0x62, 0x0d, 0x2a, 0xa1, 0x0c, 0xa1, 0x84, 0xbf, 0x0b, 0x51, 0x50, 0x30, 0x3d, 0x7a, 0xa8, 0x4d, - 0xb3, 0x11, 0x9e, 0x92, 0xcf, 0xc4, 0x90, 0xa3, 0xfb, 0x99, 0x47, 0x55, 0x84, 0x18, 0x42, 0x8d, - 0x8f, 0x04, 0x95, 0xba, 0x0f, 0xef, 0x51, 0x22, 0x6c, 0x74, 0xe9, 0x00, 0x66, 0x22, 0x5d, 0xd9, - 0x67, 0x70, 0xeb, 0xea, 0xe0, 0x0e, 0x71, 0xdc, 0x65, 0xff, 0x2c, 0x41, 0xf9, 0x0b, 0x1d, 0xcd, - 0xa6, 0x26, 0xed, 0x2a, 0x93, 0x61, 0xc9, 0x86, 0xf9, 0x78, 0xaf, 0x3d, 0xd6, 0xf6, 0x2c, 0x98, - 0x8d, 0x76, 0xce, 0xe3, 0x6c, 0xad, 0xf4, 0x57, 0x8b, 0x41, 0xcc, 0xe3, 0xcb, 0xda, 0x9f, 0x01, - 0xd8, 0x35, 0x6d, 0xcd, 0x32, 0xdf, 0x22, 0xae, 0xc7, 0x27, 0xfa, 0x54, 0x75, 0x99, 0x79, 0xdb, - 0x9b, 0x01, 0xf4, 0xe1, 0xd1, 0xf2, 0x4c, 0xf0, 0xc4, 0x0b, 0x55, 0x85, 0x25, 0x79, 0x31, 0x6c, - 0x98, 0x5e, 0xdb, 0xd2, 0xba, 0xfd, 0x8a, 0xe1, 0x7a, 0x88, 0xc2, 0x2a, 0x5d, 0xb0, 0xf4, 0x92, - 0x1d, 0xb8, 0xf4, 0xa2, 0xac, 0x83, 0xe7, 0x86, 0xac, 0x83, 0xd7, 0xa1, 0x60, 0x13, 0x7a, 0xdf, - 0x71, 0x0f, 0xe4, 0x82, 0x2b, 0x23, 0x2f, 0xf9, 0x3a, 0x6c, 0x86, 0xa8, 0x87, 0xd1, 0x47, 0xac, - 0xb2, 0xb1, 0x14, 0x4a, 0x3e, 0xd6, 0x09, 0xf3, 0xa2, 0xbc, 0xf4, 0x55, 0x16, 0x8d, 0x37, 0x55, - 0x24, 0x8e, 0xd2, 0x2a, 0x6b, 0x02, 0xb5, 0xb5, 0x3a, 0xe6, 0xd5, 0x6f, 0xef, 0x9a, 0x00, 0x43, - 0x61, 0x95, 0x0e, 0x5d, 0x85, 0x82, 0x27, 0x7c, 0x36, 0x67, 0x3b, 0x27, 0x5e, 0x94, 0xb1, 0x34, - 0x43, 0x30, 0x56, 0x69, 0xd0, 0x0a, 0x4c, 0x19, 0xb6, 0x57, 0x77, 0x5a, 0x9a, 0x69, 0xf3, 0x12, - 0x5a, 0xd9, 0x20, 0xac, 0x6f, 0x36, 0x05, 0x02, 0x87, 0x34, 0x08, 0xc3, 0x05, 0x51, 0x38, 0x55, - 0x2c, 0x5e, 0x10, 0x51, 0xf3, 0x90, 0xf0, 0x9d, 0xc4, 0x22, 0xf0, 0xc9, 0xb1, 0x74, 0x7c, 0xb4, - 0x7c, 0xa1, 0xd1, 0x97, 0x02, 0x0f, 0xe0, 0x44, 0x0e, 0xe4, 0x77, 0x45, 0x6e, 0xed, 0xc9, 0x54, - 0x79, 0x25, 0x61, 0x29, 0x10, 0x8c, 0x4f, 0x5e, 0x02, 0xd8, 0xac, 0x8c, 0xd5, 0x8b, 0x38, 0x68, - 0x04, 0xdd, 0x67, 0x39, 0x07, 0x8f, 0x2b, 0x26, 0xf1, 0x78, 0x96, 0x3c, 0xd2, 0xf9, 0x89, 0x68, - 0x44, 0xaa, 0x7e, 0xd4, 0x5f, 0x05, 0x6a, 0x04, 0xb2, 0xf8, 0x12, 0x5e, 0x94, 0x0c, 0x2b, 0x4d, - 0xa1, 0xaf, 0xc0, 0x94, 0x26, 0xd6, 0xa1, 0x89, 0x57, 0x9c, 0xe1, 0xbe, 0x72, 0x25, 0x61, 0x3e, - 0x12, 0xda, 0x8f, 0x04, 0x78, 0x38, 0x94, 0x89, 0x7e, 0x31, 0x05, 0x73, 0x86, 0xa3, 0x1f, 0x10, - 0x77, 0xf5, 0x01, 0x75, 0xb5, 0x8a, 0xbb, 0xe7, 0x15, 0x67, 0x93, 0x05, 0x07, 0x66, 0xf7, 0xe5, - 0x7a, 0x54, 0x86, 0xf0, 0xca, 0x17, 0x65, 0xcb, 0x73, 0x31, 0x2c, 0x8e, 0x37, 0xc9, 0xe2, 0xd3, - 0xfc, 0x41, 0x67, 0x87, 0x58, 0x84, 0x86, 0x7a, 0xcc, 0x71, 0x3d, 0xaa, 0x89, 0xf4, 0xb8, 0x1d, - 0x13, 0x22, 0x14, 0x29, 0x4a, 0x45, 0xe6, 0xe3, 0x68, 0xdc, 0xd3, 0x2a, 0xfa, 0x7a, 0x0a, 0x90, - 0xd6, 0x36, 0x45, 0x65, 0x13, 0x2a, 0x33, 0xcf, 0x95, 0xa9, 0x27, 0x52, 0xa6, 0xd2, 0x23, 0x46, - 0xa8, 0x13, 0xac, 0x75, 0x56, 0x1a, 0x6b, 0x31, 0x02, 0xdc, 0xa7, 0x6d, 0xf4, 0xbd, 0x14, 0x2c, - 0xe9, 0x8e, 0x4d, 0x5d, 0xc7, 0xb2, 0xd8, 0xb8, 0xda, 0xda, 0x9e, 0xaa, 0xda, 0x02, 0x57, 0x6d, - 0x3d, 0x91, 0x6a, 0xb5, 0x81, 0xe2, 0x84, 0x8a, 0xbe, 0x7d, 0x2c, 0x0d, 0x26, 0xc4, 0x27, 0xe8, - 0xc4, 0x7b, 0xd1, 0x93, 0x8b, 0x0f, 0x8a, 0xaa, 0xe8, 0x11, 0x7a, 0xb1, 0xd9, 0x23, 0x26, 0xd6, - 0x8b, 0xbd, 0x04, 0xb8, 0x4f, 0xdb, 0xe8, 0x10, 0x16, 0xf5, 0xf8, 0xe2, 0x11, 0x26, 0xbb, 0xc5, - 0x45, 0x59, 0x3a, 0xf6, 0xc9, 0xc0, 0xd7, 0x1d, 0x5d, 0xb3, 0xc4, 0x9a, 0x2d, 0x26, 0xbb, 0xc4, - 0x25, 0xb6, 0x4e, 0x44, 0x2e, 0x5c, 0xeb, 0x23, 0x09, 0xf7, 0x95, 0x8f, 0x6a, 0x90, 0x25, 0x54, - 0x37, 0x8a, 0xe7, 0x79, 0x3b, 0xc3, 0x17, 0x40, 0x56, 0xa9, 0x6e, 0x88, 0xd5, 0x29, 0xf6, 0x0b, - 0x73, 0x66, 0xf4, 0x79, 0x40, 0xfb, 0x8e, 0x47, 0x59, 0xad, 0x54, 0xf1, 0x58, 0xbe, 0xcc, 0xeb, - 0xaa, 0x8b, 0xbc, 0x54, 0x0e, 0x3a, 0xe2, 0x56, 0x0f, 0x05, 0xee, 0xc3, 0x85, 0x68, 0x10, 0xb0, - 0xf8, 0x98, 0x14, 0xf9, 0x98, 0x7c, 0x2a, 0xd1, 0x98, 0x6c, 0x86, 0xfc, 0x62, 0x30, 0xce, 0xc5, - 0xe2, 0x1d, 0x1f, 0x05, 0xb5, 0x19, 0xe4, 0xc2, 0x9c, 0xa7, 0x6b, 0x96, 0x69, 0xef, 0xf9, 0x7e, - 0xa8, 0xf8, 0xf4, 0xa3, 0x39, 0xb4, 0xc0, 0xad, 0x34, 0xa3, 0xf2, 0x70, 0xbc, 0x81, 0xa5, 0x2a, - 0x2c, 0xf6, 0x73, 0x4c, 0x49, 0x92, 0xf9, 0xa5, 0x1a, 0x9c, 0xef, 0xeb, 0x54, 0x12, 0x09, 0x59, - 0x85, 0x8b, 0x03, 0x9c, 0x41, 0x22, 0x31, 0x1b, 0xb0, 0x3c, 0xc4, 0x70, 0x93, 0x6a, 0x35, 0xc0, - 0xb8, 0x12, 0x89, 0xf9, 0x34, 0xcc, 0xc7, 0xe7, 0x43, 0xa2, 0x72, 0xe9, 0xdb, 0x00, 0x33, 0x91, - 0x53, 0x33, 0xa8, 0x04, 0x13, 0x16, 0x1b, 0x37, 0x43, 0xae, 0xd5, 0xf2, 0x85, 0xfc, 0x75, 0x0e, - 0xc1, 0x12, 0xa3, 0x66, 0x68, 0xe9, 0x21, 0x19, 0xda, 0xcb, 0xd1, 0xb3, 0x60, 0x1f, 0x8e, 0x9f, - 0x05, 0xf3, 0x4f, 0xe2, 0x44, 0x4e, 0x2e, 0x10, 0x00, 0x3d, 0x5c, 0xf0, 0xcc, 0x26, 0xdb, 0x8e, - 0x0e, 0x16, 0x40, 0xc3, 0xad, 0x1f, 0x65, 0x8d, 0x54, 0x11, 0xac, 0xee, 0x4f, 0xe5, 0x4e, 0xde, - 0x9f, 0x52, 0xb6, 0xbc, 0x26, 0x4e, 0xdc, 0xf2, 0x7a, 0x43, 0x4d, 0x1a, 0x26, 0x93, 0xd9, 0x98, - 0xdc, 0xf5, 0x56, 0xb6, 0x3e, 0x7d, 0x49, 0x6a, 0xd6, 0xf0, 0x26, 0xe4, 0xfd, 0xaa, 0x80, 0x27, - 0x81, 0x09, 0xb2, 0x21, 0xbf, 0x26, 0x0b, 0x2a, 0xc7, 0xbc, 0x0f, 0x51, 0x72, 0x21, 0x1f, 0x84, - 0x83, 0x66, 0xc4, 0x70, 0xc8, 0x9d, 0x60, 0x91, 0x3b, 0x26, 0x1a, 0x0e, 0xc9, 0xa9, 0x0e, 0x87, - 0x2f, 0x0c, 0x2b, 0x82, 0x59, 0x26, 0xad, 0xa6, 0xc4, 0x85, 0x68, 0x26, 0x3d, 0x30, 0x2d, 0xae, - 0xc3, 0xbc, 0xed, 0x18, 0xfc, 0xf7, 0x86, 0xe6, 0x1d, 0x34, 0xcd, 0xb7, 0x08, 0x4f, 0x13, 0x73, - 0x61, 0xea, 0xb1, 0x19, 0xc3, 0xe3, 0x1e, 0x0e, 0xf4, 0x2c, 0xe4, 0x0c, 0xdb, 0x5b, 0x6b, 0xc8, - 0x3d, 0x9f, 0x60, 0xa1, 0xae, 0xbe, 0xd9, 0x5c, 0x6b, 0x60, 0x81, 0x63, 0x49, 0xbb, 0x4b, 0xf6, - 0x4c, 0x8f, 0xba, 0xdd, 0xb5, 0x86, 0x48, 0xd6, 0x64, 0xd2, 0x8e, 0x43, 0x30, 0x56, 0x69, 0xf8, - 0xe9, 0x4a, 0xc2, 0xe6, 0x9c, 0xe6, 0x76, 0x95, 0x57, 0x28, 0xce, 0xc5, 0x4e, 0x57, 0xf6, 0xa1, - 0xc1, 0x7d, 0x39, 0xe3, 0x05, 0xc7, 0xfc, 0x88, 0x05, 0x87, 0xaa, 0x88, 0x42, 0x54, 0x5c, 0x18, - 0xa0, 0x88, 0x2a, 0xa8, 0x2f, 0x27, 0x93, 0x18, 0xef, 0xc6, 0xb5, 0xc6, 0xe1, 0x2b, 0x45, 0xc4, - 0x3b, 0x3f, 0x90, 0xb8, 0xd9, 0x87, 0x06, 0xf7, 0xe5, 0x1c, 0x20, 0xf1, 0x3a, 0xaf, 0x8e, 0x4e, - 0x96, 0x78, 0xbd, 0xaf, 0xc4, 0xeb, 0xa8, 0x0e, 0xc0, 0xb2, 0x4c, 0x71, 0x3e, 0x95, 0xa7, 0x1b, - 0x53, 0xd5, 0x1f, 0xf3, 0xe7, 0xe1, 0xed, 0x00, 0xc3, 0x2a, 0x90, 0xf0, 0x89, 0x57, 0x88, 0x0a, - 0x5f, 0xe9, 0xbb, 0x19, 0x98, 0xaa, 0x39, 0xf6, 0xae, 0xb9, 0xb7, 0xa1, 0xb5, 0xc7, 0xb0, 0x2b, - 0xbd, 0x0d, 0x59, 0x2e, 0x5d, 0x2c, 0x15, 0xbd, 0x32, 0xdc, 0xd4, 0x7c, 0xdd, 0xca, 0x75, 0x8d, - 0x6a, 0x22, 0x2b, 0x08, 0x2a, 0x6b, 0x06, 0xc2, 0x5c, 0x1e, 0xb2, 0x01, 0x76, 0x4c, 0x5b, 0x73, - 0xbb, 0x0c, 0x26, 0xd7, 0x7f, 0x5e, 0x4b, 0x20, 0xbd, 0x1a, 0x30, 0x8b, 0x36, 0x82, 0xb7, 0x08, - 0x11, 0x58, 0x69, 0x61, 0xe9, 0x93, 0x30, 0x15, 0x10, 0x27, 0x0a, 0x6b, 0x9f, 0x82, 0xb9, 0x58, - 0x5b, 0xc3, 0xd8, 0xa7, 0xd5, 0xa8, 0xf6, 0x17, 0x29, 0x98, 0x09, 0xb4, 0x1e, 0xc3, 0x7e, 0xc0, - 0x9d, 0xe8, 0x7e, 0xc0, 0xc7, 0x47, 0xef, 0xd2, 0x01, 0x3b, 0x02, 0xfc, 0xe0, 0xae, 0xeb, 0xd8, - 0xb7, 0x1a, 0x95, 0xb3, 0x78, 0x70, 0x57, 0x68, 0x76, 0x9a, 0x07, 0x77, 0xa5, 0xc4, 0x93, 0xcf, - 0xa4, 0xf2, 0x4d, 0x1e, 0x41, 0x79, 0x26, 0x37, 0x79, 0x84, 0x6a, 0x03, 0x86, 0x74, 0x1f, 0xce, - 0x49, 0x82, 0xc7, 0x7d, 0xea, 0xfb, 0x5b, 0x61, 0x37, 0x9d, 0xc9, 0x1b, 0x0b, 0x3f, 0x4a, 0xc3, - 0x4c, 0x64, 0xc0, 0x93, 0x9c, 0x7c, 0xbd, 0x1a, 0x3d, 0xf9, 0x9a, 0xec, 0x6e, 0x41, 0x26, 0xc1, - 0xdd, 0x82, 0xec, 0xa9, 0xdc, 0x2d, 0xc8, 0x7d, 0x00, 0x77, 0x0b, 0xfe, 0x24, 0x05, 0xbc, 0x7c, - 0x45, 0xb7, 0x21, 0x67, 0xb1, 0x2a, 0x5a, 0x1a, 0xc7, 0x70, 0xb7, 0xc4, 0x6b, 0x6e, 0x5e, 0x03, - 0xf3, 0xd3, 0x31, 0xfc, 0x11, 0x0b, 0x19, 0xe8, 0x5e, 0xcf, 0x9d, 0xad, 0x17, 0x47, 0xbe, 0xb3, - 0xc5, 0x45, 0x0e, 0xba, 0xa7, 0xf5, 0x13, 0x50, 0x1c, 0x74, 0xb7, 0xeb, 0xfd, 0x6d, 0x83, 0x96, - 0xfe, 0x2c, 0x05, 0xd3, 0xaa, 0x0a, 0xfc, 0x60, 0x95, 0x6d, 0xb4, 0x1d, 0xbe, 0xfb, 0x27, 0x16, - 0xc8, 0xc5, 0xc1, 0x2a, 0x1f, 0x88, 0x43, 0x3c, 0x9b, 0x36, 0xba, 0x76, 0xd3, 0xb4, 0xfc, 0xa9, - 0x16, 0x4c, 0x9b, 0x5a, 0x85, 0x41, 0xb1, 0xc4, 0x32, 0xf3, 0xd2, 0x89, 0x4b, 0x39, 0x65, 0x6c, - 0xb3, 0xb5, 0x26, 0xe1, 0x38, 0xa0, 0x60, 0x53, 0xfd, 0x80, 0x74, 0x39, 0x71, 0x36, 0x3a, 0xd5, - 0x6f, 0x0b, 0x30, 0xf6, 0xf1, 0xa5, 0x3a, 0x64, 0x39, 0xcb, 0x87, 0x21, 0xe3, 0xb9, 0xba, 0xec, - 0x85, 0x82, 0x24, 0xcf, 0x34, 0x5d, 0x1d, 0x33, 0x38, 0x43, 0x1b, 0xc1, 0xc9, 0xd8, 0x00, 0x5d, - 0xf7, 0x28, 0x66, 0xf0, 0xd2, 0x1f, 0xa7, 0x20, 0x7d, 0xab, 0x82, 0x6a, 0x90, 0xa1, 0x07, 0x44, - 0xce, 0x84, 0x8f, 0x0d, 0x1d, 0xb9, 0xad, 0xdb, 0xab, 0xb7, 0x2a, 0xf2, 0x8c, 0x14, 0xfb, 0x89, - 0x19, 0x37, 0xfa, 0x0a, 0x00, 0xdd, 0x37, 0x5d, 0xa3, 0xa1, 0xb9, 0xb4, 0x3b, 0xf2, 0x2c, 0xd8, - 0x0a, 0x58, 0x6e, 0x55, 0xaa, 0xf3, 0xc7, 0x47, 0xcb, 0xd3, 0x2a, 0x04, 0x2b, 0x22, 0x4b, 0xbf, - 0x9c, 0x86, 0xec, 0x2d, 0x62, 0xb5, 0xc6, 0x10, 0xf4, 0x6e, 0x47, 0x82, 0xde, 0x73, 0xc3, 0xcf, - 0xe5, 0x10, 0xab, 0x35, 0x30, 0xe2, 0x35, 0x63, 0x11, 0xef, 0xf9, 0xd1, 0xc4, 0x9d, 0x1c, 0xee, - 0xfe, 0x34, 0x05, 0x79, 0x46, 0x36, 0x86, 0x58, 0xf7, 0xf9, 0x68, 0xac, 0xfb, 0xe8, 0x48, 0xea, - 0x0f, 0x08, 0x74, 0xaf, 0xc0, 0x3c, 0xc3, 0x46, 0xa2, 0x9c, 0x7f, 0xf4, 0x3a, 0x35, 0xf0, 0xe8, - 0xf5, 0x37, 0xe5, 0xcb, 0x9e, 0xc9, 0x88, 0xf5, 0x4f, 0x69, 0x80, 0x70, 0xc0, 0x9e, 0x84, 0xab, - 0x53, 0x0d, 0x57, 0xcc, 0xe6, 0xd7, 0x1a, 0x95, 0x8d, 0x33, 0x68, 0xf3, 0x4c, 0xad, 0x53, 0xb4, - 0x79, 0x2e, 0x6e, 0xb8, 0xcd, 0x33, 0xb2, 0xb3, 0x68, 0xf3, 0x4c, 0xaf, 0xc1, 0x36, 0xcf, 0xb0, - 0x8f, 0x60, 0xf3, 0x7e, 0x17, 0x9f, 0x49, 0x9b, 0x0f, 0x07, 0xec, 0x89, 0xcd, 0x9f, 0xba, 0xcd, - 0xaf, 0x57, 0x6b, 0x37, 0xcf, 0xa0, 0xcd, 0x33, 0xb5, 0x4e, 0xd1, 0xe6, 0xb9, 0xb8, 0xe1, 0x36, - 0xcf, 0xc8, 0xce, 0xa2, 0xcd, 0x33, 0xbd, 0x06, 0xd8, 0xfc, 0xaf, 0xa6, 0x60, 0x9e, 0xa1, 0x1f, - 0x73, 0x39, 0xcb, 0x6c, 0x43, 0xd3, 0xa9, 0xd9, 0x6b, 0x1b, 0x15, 0x0e, 0xc5, 0x12, 0xcb, 0xbd, - 0x89, 0x3f, 0x78, 0x67, 0xd2, 0x9b, 0x84, 0x53, 0xe1, 0x89, 0x37, 0x39, 0x55, 0x6f, 0xf2, 0x8f, - 0x69, 0x98, 0x0a, 0x4a, 0x57, 0x7e, 0x45, 0x4d, 0xa3, 0x5a, 0xdd, 0x74, 0xe3, 0x7d, 0x5b, 0x17, - 0x60, 0xec, 0xe3, 0xd1, 0x57, 0x61, 0x8a, 0x04, 0xfb, 0xe3, 0xc2, 0x24, 0x5e, 0x1d, 0xbd, 0x48, - 0x2e, 0xc7, 0x36, 0xc5, 0x83, 0x89, 0x1e, 0xee, 0x85, 0x87, 0xe2, 0xf9, 0x41, 0x7e, 0xbe, 0x07, - 0xc9, 0x8a, 0xc2, 0x66, 0x65, 0xd3, 0xe3, 0xeb, 0xaf, 0xfe, 0x41, 0xfe, 0x08, 0x06, 0xc7, 0x28, - 0xd1, 0x2b, 0x30, 0xdd, 0x26, 0x0a, 0x67, 0x96, 0x73, 0xf2, 0x52, 0xaa, 0xa1, 0xc0, 0x71, 0x84, - 0x6a, 0xe9, 0xc7, 0x61, 0xf6, 0xd1, 0x77, 0x16, 0xf9, 0x2d, 0xf9, 0x75, 0x67, 0xaf, 0xe6, 0x58, - 0x16, 0xd1, 0xc7, 0xf3, 0x91, 0x94, 0xa4, 0xb7, 0xe4, 0x55, 0xf5, 0x4e, 0xf1, 0x96, 0x7c, 0x44, - 0xec, 0xf0, 0x5b, 0xf2, 0x2a, 0xf9, 0x59, 0xbc, 0x25, 0xaf, 0xea, 0x37, 0xc0, 0x95, 0xb7, 0xa0, - 0xa8, 0x52, 0x3d, 0xee, 0x05, 0xca, 0xb7, 0x63, 0xbd, 0x76, 0x26, 0x3d, 0xf6, 0x71, 0x1a, 0x50, - 0xef, 0x4c, 0x78, 0xe2, 0xb9, 0x4f, 0xd5, 0x73, 0x7f, 0x23, 0x0d, 0x93, 0xfe, 0x95, 0x87, 0xb3, - 0xb7, 0xcf, 0x21, 0x35, 0x3b, 0xc5, 0x7d, 0x0e, 0x5f, 0xe2, 0xc9, 0x5e, 0xc5, 0x83, 0x59, 0x49, - 0xe8, 0xdf, 0x97, 0xbf, 0x1e, 0xb9, 0xaf, 0x5c, 0x8a, 0xdd, 0x97, 0x47, 0x51, 0xea, 0xe8, 0x51, - 0x5a, 0x79, 0x72, 0x20, 0x7e, 0x50, 0x43, 0xd2, 0x62, 0x1f, 0xcf, 0xef, 0x49, 0x4b, 0x39, 0x4f, - 0xee, 0x49, 0x9f, 0xd9, 0x7b, 0xd2, 0x3f, 0x48, 0x41, 0x41, 0x8e, 0xd2, 0x59, 0xdc, 0x02, 0xf3, - 0x8f, 0x89, 0xf5, 0x0f, 0x33, 0xdf, 0xc9, 0x05, 0xca, 0x7f, 0x40, 0x07, 0xd6, 0x1f, 0xe5, 0xf6, - 0xf6, 0xf0, 0x03, 0xeb, 0x62, 0x97, 0x22, 0x77, 0xe2, 0x2e, 0xc5, 0xc4, 0x48, 0x97, 0xb5, 0x26, - 0x13, 0x5d, 0xd6, 0xca, 0x27, 0xb8, 0xac, 0x35, 0x95, 0xf0, 0xb2, 0x16, 0x0c, 0xbd, 0xac, 0xf5, - 0x46, 0x70, 0x59, 0xab, 0xc0, 0x67, 0xc7, 0x8d, 0x24, 0xfe, 0x34, 0xe1, 0x4d, 0xad, 0xe9, 0x0f, - 0xe0, 0xa6, 0xd6, 0xff, 0x64, 0x60, 0x26, 0xe2, 0xaf, 0x47, 0x3a, 0x1a, 0xf7, 0x72, 0x34, 0xe8, - 0xf7, 0x9e, 0x77, 0x93, 0x22, 0x4f, 0x38, 0xef, 0x96, 0x19, 0xf1, 0x80, 0x55, 0xdc, 0x5b, 0x27, - 0x39, 0xef, 0x96, 0x1d, 0xf9, 0xbc, 0x5b, 0x6e, 0xf4, 0xf3, 0x6e, 0x13, 0x23, 0x9e, 0x77, 0x8b, - 0x86, 0xab, 0x21, 0xe7, 0xdd, 0x4c, 0x28, 0x48, 0x37, 0xb6, 0x66, 0xef, 0x3a, 0xdc, 0x42, 0x46, - 0xb9, 0xab, 0xee, 0x8f, 0x5c, 0xd7, 0xa3, 0xa4, 0xc5, 0x38, 0x43, 0x4b, 0xdf, 0x08, 0xc5, 0x61, - 0x55, 0x76, 0xe9, 0x3f, 0xb2, 0xb0, 0xd0, 0xc3, 0xc7, 0x12, 0x60, 0x9f, 0xa8, 0x1e, 0x4f, 0x80, - 0x7d, 0x51, 0x75, 0x1c, 0xd2, 0xb0, 0xe4, 0xcc, 0xe3, 0xec, 0x77, 0xef, 0x06, 0x7e, 0x29, 0x18, - 0x9a, 0x66, 0x80, 0xc1, 0x0a, 0x15, 0xeb, 0xef, 0x1d, 0xc7, 0x61, 0x7e, 0x2c, 0x96, 0xf8, 0x55, - 0x39, 0x14, 0x4b, 0x2c, 0x7a, 0x1d, 0x66, 0x0e, 0x88, 0x6b, 0x13, 0x6b, 0xc0, 0xf7, 0x8d, 0x6e, - 0xab, 0x48, 0x1c, 0xa5, 0x65, 0xe3, 0xef, 0x78, 0x6b, 0xad, 0x3e, 0xe7, 0x1d, 0xef, 0x34, 0x39, - 0x18, 0xfb, 0x78, 0xf4, 0x45, 0xb8, 0xa8, 0x3b, 0x36, 0x33, 0x22, 0xe2, 0x62, 0xf1, 0x55, 0x54, - 0xbf, 0x45, 0x11, 0xa2, 0x96, 0x25, 0xeb, 0xc5, 0x5a, 0x7f, 0x32, 0x3c, 0x88, 0x1f, 0x7d, 0x1a, - 0x66, 0xe5, 0xc1, 0x7f, 0x5f, 0xa2, 0xf0, 0x7a, 0x17, 0xa4, 0xc4, 0xd9, 0xdb, 0x11, 0x2c, 0x8e, - 0x51, 0xa3, 0xba, 0xb8, 0xae, 0xc0, 0x8b, 0x14, 0x5f, 0x82, 0xb8, 0x75, 0x13, 0xb9, 0x6a, 0xa0, - 0xe2, 0x71, 0x0f, 0x07, 0xaa, 0xc0, 0x9c, 0xc3, 0xaf, 0x81, 0x9b, 0xf6, 0x9e, 0x18, 0x13, 0x79, - 0xa5, 0x26, 0x38, 0xe1, 0x7c, 0x27, 0x8a, 0xc6, 0x71, 0x7a, 0x74, 0x03, 0xa6, 0x35, 0x57, 0xdf, - 0x37, 0x29, 0xd1, 0x69, 0xc7, 0x15, 0x2e, 0x73, 0x2a, 0xbc, 0x3c, 0x5d, 0x51, 0x70, 0x38, 0x42, - 0x59, 0x22, 0x30, 0xdf, 0xd8, 0xae, 0xe1, 0xc7, 0x5d, 0x67, 0x7d, 0x37, 0x05, 0x0b, 0x0d, 0xf6, - 0xbe, 0x1e, 0x25, 0x36, 0xad, 0x6a, 0xfa, 0xc1, 0xaa, 0x6d, 0xa0, 0x0d, 0xc8, 0xe8, 0x96, 0x27, - 0xb3, 0x85, 0xe1, 0x86, 0x24, 0xbf, 0xfb, 0x28, 0xb9, 0x6b, 0xeb, 0xcd, 0xea, 0xe4, 0xf1, 0xd1, - 0x72, 0xa6, 0xb6, 0xde, 0xc4, 0x4c, 0x0e, 0x5a, 0x83, 0x34, 0xf1, 0x46, 0x2e, 0xd9, 0xa3, 0xd2, - 0x56, 0x9b, 0xe2, 0x5b, 0x07, 0xab, 0x4d, 0x9c, 0x26, 0x5e, 0xe9, 0x3b, 0x69, 0x98, 0x0b, 0xf5, - 0x5d, 0x3d, 0x24, 0x36, 0x1d, 0xcf, 0x61, 0x3b, 0xa5, 0x2a, 0x18, 0x7e, 0xd8, 0x2e, 0xa6, 0xe1, - 0xc0, 0xea, 0xe0, 0xcb, 0xb1, 0xea, 0xe0, 0x7a, 0x62, 0xc9, 0x27, 0x57, 0x09, 0x7f, 0x97, 0x82, - 0x73, 0x31, 0x8e, 0x31, 0xa4, 0x84, 0x77, 0xa3, 0x29, 0xe1, 0x4b, 0x49, 0x5f, 0x6a, 0x40, 0x6a, - 0xf8, 0x76, 0xba, 0xe7, 0x65, 0xc6, 0xb7, 0x2a, 0xf0, 0x33, 0xb0, 0xd0, 0x8e, 0x9b, 0xc9, 0xc8, - 0xdf, 0xd4, 0xed, 0x31, 0xb0, 0xe0, 0xfb, 0x16, 0xbd, 0xb6, 0x87, 0x7b, 0xdb, 0x51, 0x17, 0x14, - 0xb2, 0x43, 0x96, 0x24, 0xfe, 0x3d, 0x0d, 0xe7, 0xfb, 0xce, 0x91, 0x27, 0xab, 0x12, 0xa7, 0xba, - 0x2a, 0xf1, 0x3b, 0x69, 0x80, 0x86, 0xeb, 0xb4, 0x08, 0xdd, 0x27, 0x1d, 0x6f, 0x0c, 0x2e, 0xe8, - 0x0b, 0x11, 0x17, 0x34, 0x3c, 0x81, 0x0a, 0x95, 0x1b, 0xe8, 0x7d, 0xbe, 0x18, 0xf3, 0x3e, 0x57, - 0x93, 0x08, 0x3d, 0xd9, 0xf1, 0xfc, 0x65, 0x0a, 0x66, 0x43, 0xe2, 0x31, 0xf8, 0x9c, 0x46, 0xd4, - 0xe7, 0x3c, 0x9f, 0xe0, 0x55, 0x06, 0x2e, 0x78, 0x2e, 0x86, 0x34, 0x98, 0xb4, 0x1c, 0xca, 0xb3, - 0x51, 0xf4, 0x3c, 0x4c, 0xdd, 0x77, 0x4d, 0xf1, 0xa0, 0x1e, 0x10, 0xbb, 0xe7, 0x03, 0x71, 0x88, - 0x67, 0xa5, 0x98, 0x4b, 0x34, 0x83, 0xd3, 0xa6, 0x39, 0xed, 0xb4, 0xb8, 0x53, 0x21, 0x60, 0x38, - 0xc0, 0x96, 0x7e, 0x77, 0x42, 0xed, 0xb1, 0xb3, 0xb8, 0xdc, 0x89, 0x3c, 0x00, 0xaf, 0xb3, 0x13, - 0x66, 0x95, 0xa3, 0x7d, 0x1a, 0x20, 0xfa, 0x52, 0xe5, 0x66, 0x20, 0x21, 0x76, 0x3e, 0x3c, 0x44, - 0x60, 0xa5, 0x19, 0xe4, 0xc2, 0x8c, 0x1b, 0x74, 0x3e, 0xf1, 0x3c, 0x69, 0xed, 0x9f, 0x48, 0xd0, - 0x6e, 0x38, 0x78, 0x61, 0x12, 0x8c, 0x55, 0x99, 0x38, 0xda, 0x04, 0xbf, 0xec, 0xed, 0x50, 0x73, - 0xb7, 0x2b, 0xcf, 0x19, 0xca, 0x7c, 0x36, 0xbc, 0xec, 0xad, 0x22, 0x71, 0x94, 0x16, 0xed, 0xc2, - 0x94, 0x7f, 0x2b, 0xc6, 0x93, 0xa5, 0xc8, 0x70, 0x65, 0x83, 0x1b, 0x35, 0xe4, 0xcd, 0x8e, 0xe9, - 0x92, 0x16, 0xb1, 0xa9, 0x52, 0xf4, 0xf8, 0x58, 0x0f, 0x87, 0xa2, 0xd9, 0x78, 0xbb, 0x1d, 0xfb, - 0x8e, 0x2d, 0xbe, 0x24, 0xc5, 0xd3, 0xdb, 0x7c, 0x38, 0xde, 0x38, 0x44, 0x61, 0x95, 0x0e, 0x6d, - 0xc0, 0x39, 0xcd, 0x22, 0x2e, 0xc5, 0xa4, 0x4d, 0x34, 0xca, 0x3f, 0x89, 0x75, 0xa8, 0x59, 0x32, - 0xb1, 0x0d, 0x3e, 0x2d, 0x54, 0xe9, 0x25, 0xc1, 0xfd, 0xf8, 0xd8, 0xf4, 0xb9, 0x6f, 0xd2, 0xfd, - 0xcd, 0x46, 0x9d, 0xe7, 0xb6, 0xf9, 0x70, 0xfa, 0xdc, 0x13, 0x60, 0xec, 0xe3, 0x97, 0x3e, 0x05, - 0x73, 0xb1, 0xc1, 0x4f, 0x54, 0x6b, 0xff, 0x66, 0x16, 0xe6, 0xe3, 0xfe, 0xe7, 0x49, 0x50, 0x3b, - 0xcd, 0xa0, 0x86, 0x3a, 0x11, 0x03, 0x9f, 0x18, 0xf1, 0x9e, 0x79, 0x7c, 0x50, 0x92, 0x9a, 0xf8, - 0xfb, 0x9d, 0x18, 0x7f, 0x9e, 0x82, 0xbc, 0x7f, 0xb7, 0x6a, 0x0c, 0x81, 0xf8, 0x4e, 0x24, 0x10, - 0xbf, 0x38, 0x82, 0x69, 0x0b, 0xd5, 0x06, 0x85, 0x61, 0x7e, 0x04, 0xd9, 0x27, 0x1a, 0x43, 0xa4, - 0xdc, 0x8c, 0x46, 0xca, 0xe7, 0x46, 0x7e, 0x81, 0x01, 0x71, 0xf2, 0x5b, 0xe9, 0x50, 0xfd, 0x47, - 0x0b, 0x5b, 0xea, 0x27, 0x42, 0xd2, 0x23, 0x7e, 0x22, 0xe4, 0x11, 0x17, 0x6a, 0x3f, 0x0c, 0x99, - 0x8e, 0x6b, 0xc9, 0x2c, 0x3a, 0x38, 0x08, 0x7d, 0x17, 0xaf, 0x63, 0x06, 0x67, 0xe1, 0xba, 0xe3, - 0x49, 0x91, 0x62, 0xf9, 0x63, 0xda, 0x5f, 0x63, 0xdd, 0x0c, 0xd6, 0x58, 0x37, 0xe3, 0x6b, 0xac, - 0x13, 0x21, 0x65, 0xef, 0x1a, 0x6b, 0xe9, 0xbf, 0x33, 0xb0, 0xd8, 0xcf, 0xbd, 0xa3, 0x2e, 0x4c, - 0x58, 0x66, 0xcb, 0x94, 0xc7, 0xcc, 0x47, 0xb1, 0xb4, 0x7e, 0x62, 0xca, 0xeb, 0x5c, 0x86, 0xb0, - 0xb4, 0x4b, 0xc1, 0x2a, 0x29, 0x07, 0xf6, 0x7c, 0x64, 0x47, 0x36, 0x88, 0x7e, 0x8e, 0x7f, 0x45, - 0xf8, 0xcd, 0x0e, 0xf1, 0xa8, 0x3f, 0x0f, 0x6a, 0x8f, 0xd6, 0x3a, 0x96, 0x52, 0x62, 0xdf, 0x3c, - 0xf2, 0xc1, 0xbd, 0xdf, 0x3c, 0xf2, 0x9b, 0x5d, 0x32, 0xa1, 0xa0, 0xa8, 0xfe, 0x58, 0xbf, 0xb9, - 0x73, 0x00, 0x33, 0x11, 0x3d, 0x1f, 0xeb, 0x27, 0x77, 0x2c, 0x58, 0xe8, 0x59, 0x0f, 0x61, 0x36, - 0x61, 0x39, 0x7b, 0x4d, 0xd2, 0xc7, 0x26, 0xd6, 0x25, 0x1c, 0x07, 0x14, 0x2c, 0xaa, 0x51, 0xa7, - 0x6d, 0xea, 0xc1, 0xd2, 0x60, 0x10, 0xd5, 0xb6, 0x04, 0x18, 0xfb, 0xf8, 0xd2, 0xf7, 0xd2, 0x30, - 0x1f, 0x5f, 0x30, 0x79, 0x9f, 0x5f, 0x86, 0xfb, 0x18, 0x4c, 0xf0, 0x3f, 0x37, 0x22, 0xf1, 0xa8, - 0xd7, 0xe4, 0x50, 0x2c, 0xb1, 0x68, 0x05, 0xa6, 0x4c, 0xdb, 0x20, 0x0f, 0xb8, 0xb5, 0x64, 0xa3, - 0xab, 0x51, 0x6b, 0x3e, 0x02, 0x87, 0x34, 0xac, 0x69, 0x66, 0x3f, 0xbe, 0x65, 0xf9, 0x4d, 0x33, - 0xeb, 0xc2, 0x1c, 0xc3, 0xba, 0x29, 0x66, 0x55, 0x41, 0x37, 0xf5, 0xd9, 0xbd, 0x60, 0x19, 0x10, - 0xe1, 0xc7, 0x60, 0xea, 0x5a, 0x57, 0xe4, 0x5a, 0x39, 0x25, 0x03, 0x0a, 0x51, 0x58, 0xa5, 0x2b, - 0xd5, 0x41, 0xdc, 0x57, 0x60, 0xce, 0xe0, 0x30, 0xe8, 0xa7, 0xc0, 0x19, 0x6c, 0xaf, 0x35, 0x30, - 0x83, 0xa3, 0x0f, 0x41, 0xf6, 0xd0, 0x35, 0x0d, 0xd9, 0x53, 0xfc, 0x8b, 0x0f, 0xdb, 0x78, 0xad, - 0x8e, 0x39, 0xb4, 0xf4, 0x47, 0x69, 0x98, 0xdd, 0xd2, 0xda, 0xed, 0xf0, 0xc2, 0xff, 0x18, 0x62, - 0xcf, 0xdd, 0x48, 0xec, 0x19, 0x7e, 0x4c, 0x25, 0xaa, 0xe0, 0xc0, 0x42, 0xf0, 0xa7, 0x63, 0x85, - 0xe0, 0x27, 0x92, 0x0a, 0x3e, 0xb9, 0x18, 0x7c, 0x27, 0x05, 0x28, 0xca, 0x30, 0x86, 0x30, 0xb7, - 0x15, 0x0d, 0x73, 0x2b, 0x09, 0x5f, 0x69, 0x40, 0xb0, 0xfb, 0xad, 0x14, 0x2c, 0x45, 0x09, 0xcf, - 0xca, 0xd1, 0xc6, 0x3f, 0xe8, 0xe9, 0xe4, 0x33, 0x79, 0x64, 0xe6, 0xdf, 0xd2, 0xb0, 0xd8, 0x6f, - 0xf2, 0x3c, 0xc9, 0xe4, 0x4f, 0x75, 0x79, 0x0a, 0x43, 0xe4, 0x02, 0xd5, 0x30, 0x57, 0xf7, 0x2c, - 0xe4, 0x0e, 0x95, 0xa8, 0x10, 0xcc, 0xfd, 0x6d, 0x1e, 0x16, 0x04, 0xae, 0xf4, 0xcd, 0x14, 0xf8, - 0x9f, 0x63, 0x45, 0x2b, 0x90, 0x6d, 0x39, 0x46, 0xcf, 0x9f, 0x33, 0x6c, 0x38, 0x06, 0xff, 0x8c, - 0x9a, 0x24, 0x63, 0x8f, 0x98, 0x13, 0xa2, 0x2f, 0x43, 0xde, 0xa3, 0xae, 0x46, 0xc9, 0x5e, 0x77, - 0xe4, 0x3f, 0x38, 0x93, 0x52, 0x9a, 0x92, 0x2f, 0x9c, 0xb9, 0x3e, 0x04, 0x07, 0x32, 0x4b, 0x7f, - 0x9b, 0x82, 0xb9, 0x18, 0x3d, 0x7a, 0x03, 0xa0, 0xa5, 0x3d, 0xb8, 0x6b, 0xbb, 0x44, 0x33, 0xba, - 0x43, 0x3d, 0x72, 0x87, 0x9a, 0x56, 0x59, 0xfc, 0x41, 0x5f, 0x79, 0xcd, 0xa6, 0x77, 0xdc, 0x26, - 0x75, 0x4d, 0x7b, 0x4f, 0xec, 0x6f, 0x6f, 0x04, 0x72, 0xb0, 0x22, 0x13, 0x61, 0xb8, 0x60, 0xb8, - 0x9a, 0x69, 0x6f, 0x3a, 0x06, 0xa9, 0x92, 0x5d, 0xc7, 0x25, 0x52, 0x07, 0xf9, 0x89, 0x6a, 0xfe, - 0xf5, 0xb4, 0x7a, 0x5f, 0x0a, 0x3c, 0x80, 0x93, 0xef, 0x70, 0x6c, 0x3b, 0x56, 0xa7, 0x45, 0xea, - 0x44, 0x77, 0xc6, 0xf5, 0xe7, 0x73, 0x49, 0x77, 0x38, 0x62, 0x1a, 0x9e, 0xe2, 0x0e, 0x47, 0x5c, - 0xf2, 0xf0, 0x1d, 0x8e, 0x18, 0xc7, 0x59, 0xdc, 0xe1, 0x88, 0xa9, 0x38, 0xe8, 0xbf, 0xe4, 0xd2, - 0x3d, 0x2f, 0x73, 0x26, 0x17, 0x02, 0xaf, 0x42, 0xe1, 0x90, 0xab, 0xb9, 0xd5, 0x6d, 0x13, 0xff, - 0xa8, 0x31, 0xff, 0xc6, 0xc9, 0x76, 0x08, 0xc6, 0x2a, 0x0d, 0xfa, 0x1c, 0x2c, 0xdc, 0x77, 0xdc, - 0x03, 0xcb, 0xd1, 0x8c, 0x8a, 0xd1, 0x32, 0xbd, 0xe0, 0xd3, 0x8d, 0xf9, 0x70, 0x2f, 0xe4, 0x5e, - 0x9c, 0x00, 0xf7, 0xf2, 0x94, 0xbe, 0x9f, 0x85, 0xf3, 0x7d, 0xa7, 0x48, 0xb2, 0x08, 0x12, 0x79, - 0x81, 0xf4, 0xa3, 0xbe, 0x40, 0x26, 0xf9, 0x0b, 0x0c, 0xfc, 0x2f, 0xbd, 0xec, 0xfb, 0xff, 0x2f, - 0xbd, 0xdc, 0x23, 0xc4, 0xc3, 0x89, 0x04, 0xf1, 0x70, 0xf2, 0x54, 0xe2, 0x61, 0x7e, 0xfc, 0xf1, - 0xb0, 0x7a, 0xe5, 0x9d, 0xf7, 0x2e, 0x3d, 0xf5, 0xc3, 0xf7, 0x2e, 0x3d, 0xf5, 0xee, 0x7b, 0x97, - 0x9e, 0xfa, 0xda, 0xf1, 0xa5, 0xd4, 0x3b, 0xc7, 0x97, 0x52, 0x3f, 0x3c, 0xbe, 0x94, 0x7a, 0xf7, - 0xf8, 0x52, 0xea, 0x5f, 0x8e, 0x2f, 0xa5, 0xbe, 0xfe, 0xaf, 0x97, 0x9e, 0xfa, 0x52, 0xfa, 0xf0, - 0xea, 0xff, 0x07, 0x00, 0x00, 0xff, 0xff, 0xa7, 0x89, 0x67, 0x2c, 0x3b, 0x77, 0x00, 0x00, + 0x55, 0xdb, 0x2f, 0xbb, 0x7d, 0xda, 0xcf, 0x3b, 0x9e, 0xdd, 0x5e, 0x6f, 0x32, 0x9e, 0xf4, 0x26, + 0xd1, 0x6c, 0x76, 0xb7, 0xbd, 0x33, 0xbb, 0x99, 0xcc, 0xee, 0x92, 0x47, 0x3f, 0x3c, 0x19, 0x67, + 0x6c, 0x4f, 0xe7, 0xb6, 0xc7, 0x43, 0x02, 0x24, 0x5b, 0xae, 0xbe, 0xb6, 0x2b, 0xae, 0xae, 0xaa, + 0x54, 0xdd, 0xee, 0x99, 0x5e, 0xf8, 0x08, 0x8f, 0x0f, 0x84, 0x00, 0x05, 0x22, 0x81, 0x14, 0x08, + 0x88, 0x04, 0x09, 0x44, 0x88, 0x14, 0x29, 0x88, 0x8f, 0x28, 0x20, 0x84, 0x90, 0x58, 0x21, 0x84, + 0x22, 0xbe, 0x22, 0xa4, 0x18, 0x62, 0x1e, 0x82, 0x0f, 0x04, 0xbf, 0xcc, 0x17, 0xba, 0x8f, 0xaa, + 0xba, 0x55, 0xdd, 0xed, 0xee, 0x9a, 0xf5, 0x74, 0xfc, 0x31, 0x7f, 0xee, 0xf3, 0xba, 0xe7, 0x3e, + 0xce, 0xeb, 0x3e, 0xca, 0xb0, 0x46, 0x8f, 0x88, 0x47, 0x35, 0xfd, 0xa8, 0x6c, 0xd8, 0xec, 0xef, + 0x35, 0xcd, 0x31, 0xd6, 0x1c, 0x53, 0xa3, 0xfb, 0xb6, 0xdb, 0x5e, 0xeb, 0x5e, 0x5d, 0x3b, 0x20, + 0x16, 0x71, 0x35, 0x4a, 0x5a, 0x65, 0xc7, 0xb5, 0xa9, 0x8d, 0x56, 0x15, 0x86, 0x32, 0x3d, 0x22, + 0x65, 0xcd, 0x31, 0xca, 0x3e, 0x43, 0xb9, 0x7b, 0x75, 0xe5, 0xe5, 0x03, 0x83, 0x1e, 0x76, 0xf6, + 0xca, 0xba, 0xdd, 0x5e, 0x3b, 0xb0, 0x0f, 0xec, 0x35, 0xce, 0xb7, 0xd7, 0xd9, 0xe7, 0xbf, 0xf8, + 0x0f, 0xfe, 0x97, 0x90, 0xb7, 0x52, 0x3a, 0xba, 0xe1, 0xb1, 0xb6, 0x59, 0xbb, 0xba, 0xed, 0x92, + 0x01, 0x6d, 0xae, 0xbc, 0x16, 0xd2, 0xb4, 0x35, 0xfd, 0xd0, 0xb0, 0x88, 0xdb, 0x5b, 0x73, 0x8e, + 0x0e, 0x38, 0x93, 0x4b, 0x3c, 0xbb, 0xe3, 0xea, 0x24, 0x11, 0x97, 0xb7, 0xd6, 0x26, 0x54, 0x1b, + 0xd4, 0xd6, 0xda, 0x30, 0x2e, 0xb7, 0x63, 0x51, 0xa3, 0xdd, 0xdf, 0xcc, 0xf5, 0x51, 0x0c, 0x9e, + 0x7e, 0x48, 0xda, 0x5a, 0x1f, 0xdf, 0xab, 0xc3, 0xf8, 0x3a, 0xd4, 0x30, 0xd7, 0x0c, 0x8b, 0x7a, + 0xd4, 0xed, 0x63, 0xba, 0x36, 0x68, 0xba, 0x34, 0xc7, 0x31, 0x0d, 0x5d, 0xa3, 0x86, 0x6d, 0x0d, + 0xe8, 0x51, 0xe9, 0x77, 0x52, 0x30, 0x53, 0x69, 0xb5, 0x6c, 0xab, 0xe9, 0x10, 0x1d, 0xbd, 0x04, + 0x79, 0x4a, 0x2c, 0xcd, 0xa2, 0x1b, 0xf5, 0x62, 0xea, 0x72, 0xea, 0xca, 0x4c, 0x75, 0xf1, 0x9d, + 0xe3, 0xd5, 0xa7, 0x4e, 0x8e, 0x57, 0xf3, 0x3b, 0x12, 0x8e, 0x03, 0x0a, 0xf4, 0x61, 0x28, 0xe8, + 0x66, 0xc7, 0xa3, 0xc4, 0xdd, 0xd6, 0xda, 0xa4, 0x98, 0xe6, 0x0c, 0x17, 0x24, 0x43, 0xa1, 0x16, + 0xa2, 0xb0, 0x4a, 0x87, 0x5e, 0x80, 0xe9, 0x2e, 0x71, 0x3d, 0xc3, 0xb6, 0x8a, 0x19, 0xce, 0xb2, + 0x20, 0x59, 0xa6, 0x77, 0x05, 0x18, 0xfb, 0xf8, 0xd2, 0x9f, 0xa7, 0x20, 0x53, 0x71, 0x1c, 0xf4, + 0x16, 0xe4, 0xd9, 0x94, 0xb4, 0x34, 0xaa, 0x71, 0xbd, 0x0a, 0xd7, 0x5e, 0x29, 0x8b, 0x11, 0x2a, + 0xab, 0x23, 0x54, 0x76, 0x8e, 0x0e, 0x18, 0xc0, 0x2b, 0x33, 0xea, 0x72, 0xf7, 0x6a, 0xf9, 0xce, + 0xde, 0x17, 0x88, 0x4e, 0xb7, 0x08, 0xd5, 0xaa, 0x48, 0xb6, 0x02, 0x21, 0x0c, 0x07, 0x52, 0xd1, + 0x16, 0x64, 0x3d, 0x87, 0xe8, 0xbc, 0x13, 0x85, 0x6b, 0x2f, 0x96, 0x07, 0x2d, 0x64, 0x65, 0x28, + 0x99, 0xec, 0x8a, 0xe3, 0xb0, 0x41, 0xab, 0xce, 0x4a, 0xc1, 0x59, 0xf6, 0x0b, 0x73, 0x31, 0xa5, + 0x1f, 0xa4, 0x60, 0xb1, 0xd2, 0xa1, 0x87, 0x6f, 0xdf, 0x23, 0x7b, 0x87, 0xb6, 0x7d, 0x54, 0x69, + 0xb5, 0x5c, 0xf4, 0x79, 0x98, 0xde, 0xeb, 0x18, 0x26, 0x35, 0x2c, 0xd9, 0x89, 0x1b, 0xe5, 0x11, + 0xf6, 0x52, 0xae, 0x0a, 0xfa, 0xb8, 0xa8, 0x6a, 0x81, 0x0d, 0x97, 0x44, 0x62, 0x5f, 0x2a, 0xd2, + 0x21, 0x4f, 0x1e, 0x50, 0xe2, 0x5a, 0x9a, 0x29, 0x3b, 0xf2, 0xfa, 0xc8, 0x16, 0xd6, 0x25, 0x43, + 0x5f, 0x13, 0xb3, 0x6c, 0xd6, 0x7d, 0x2c, 0x0e, 0x04, 0x97, 0x9a, 0x30, 0x5b, 0xb5, 0x6d, 0xb6, + 0x00, 0x35, 0x87, 0xcd, 0x4d, 0x0d, 0x32, 0x9a, 0xe3, 0xc8, 0x1e, 0xbd, 0x7f, 0x64, 0x7b, 0x15, + 0xc7, 0xa9, 0x16, 0xe4, 0x88, 0xb1, 0xb9, 0xc5, 0x8c, 0xbb, 0xf4, 0x2c, 0x3c, 0x33, 0xa4, 0xab, + 0xa5, 0xdf, 0x4f, 0x43, 0xa1, 0xd6, 0xdc, 0xb8, 0xe3, 0xb0, 0x75, 0x6b, 0xbb, 0x13, 0x58, 0x0b, + 0x38, 0xb2, 0x16, 0x5e, 0x19, 0xd9, 0x25, 0x45, 0xbb, 0x61, 0x0b, 0x02, 0x7d, 0x16, 0xa6, 0x3c, + 0xaa, 0xd1, 0x8e, 0xc7, 0xd7, 0x7c, 0xe1, 0xda, 0xb5, 0x44, 0x52, 0x39, 0x67, 0x75, 0x5e, 0xca, + 0x9d, 0x12, 0xbf, 0xb1, 0x94, 0x58, 0xfa, 0x38, 0x20, 0x85, 0xf8, 0x26, 0xd1, 0x68, 0xc7, 0x8d, + 0x98, 0x59, 0x6a, 0x84, 0x99, 0xfd, 0x75, 0x0a, 0x16, 0x14, 0x09, 0x9b, 0x86, 0x47, 0xd1, 0x4f, + 0xf7, 0x0d, 0x73, 0x79, 0xbc, 0x61, 0x66, 0xdc, 0x7c, 0x90, 0x03, 0xd7, 0xe1, 0x43, 0x94, 0x21, + 0xfe, 0x34, 0xe4, 0x0c, 0x4a, 0xda, 0x5e, 0x31, 0x7d, 0x39, 0x73, 0xa5, 0x70, 0xed, 0xa5, 0x24, + 0xa3, 0x51, 0x9d, 0x93, 0x82, 0x73, 0x1b, 0x4c, 0x04, 0x16, 0x92, 0x4a, 0x7f, 0x10, 0xed, 0xc4, + 0xb9, 0xf4, 0x67, 0xdf, 0xc9, 0xc0, 0x52, 0xdf, 0xbc, 0x26, 0x98, 0x29, 0xd4, 0x80, 0x65, 0x8f, + 0xda, 0xae, 0x76, 0x40, 0x76, 0x89, 0xd5, 0xb2, 0x5d, 0x49, 0x20, 0x75, 0x7d, 0x8f, 0xe4, 0x5b, + 0x6e, 0x0e, 0xa0, 0xc1, 0x03, 0x39, 0xd1, 0x55, 0xc8, 0x39, 0x87, 0x9a, 0x47, 0xa4, 0xee, 0xcf, + 0xf9, 0x63, 0xdb, 0x60, 0xc0, 0x87, 0xc7, 0xab, 0xc0, 0xa3, 0x03, 0xff, 0x85, 0x05, 0x25, 0xfa, + 0x20, 0x4c, 0xb9, 0x44, 0xf3, 0x6c, 0xab, 0x98, 0xe5, 0x3c, 0xc1, 0xba, 0xc4, 0x1c, 0x8a, 0x25, + 0x16, 0x5d, 0x03, 0x70, 0x09, 0x75, 0x7b, 0x35, 0xbb, 0x63, 0xd1, 0x62, 0xee, 0x72, 0xea, 0x4a, + 0x2e, 0xb4, 0x3c, 0x1c, 0x60, 0xb0, 0x42, 0x85, 0x7e, 0x23, 0x05, 0xcf, 0x99, 0x9a, 0x47, 0x31, + 0xd9, 0xb0, 0x0c, 0x6a, 0x68, 0xa6, 0xf1, 0xb6, 0x61, 0x1d, 0xec, 0x18, 0x6d, 0xb6, 0x3c, 0xda, + 0x4e, 0x71, 0x8a, 0x2f, 0xc5, 0x0f, 0x8d, 0xb7, 0x14, 0x19, 0x5b, 0xf5, 0x79, 0xd9, 0xe2, 0x73, + 0x9b, 0xc3, 0xc5, 0xe2, 0xd3, 0xda, 0x2c, 0xb5, 0xf8, 0xc2, 0x6a, 0xb8, 0xf6, 0x83, 0xde, 0x1d, + 0x87, 0x79, 0x7f, 0x0f, 0xad, 0xc1, 0x8c, 0xa5, 0xb5, 0x89, 0xe7, 0x68, 0x3a, 0x91, 0x93, 0xb6, + 0x24, 0xdb, 0x99, 0xd9, 0xf6, 0x11, 0x38, 0xa4, 0x41, 0x97, 0x21, 0x6b, 0x85, 0x8b, 0x2a, 0xf0, + 0x10, 0x7c, 0x35, 0x71, 0x4c, 0xe9, 0x2b, 0x69, 0x98, 0x96, 0x6b, 0x6c, 0x02, 0x3e, 0x6e, 0x3b, + 0xe2, 0xe3, 0xc6, 0xb0, 0x3f, 0xa1, 0xd9, 0x50, 0xff, 0xb6, 0x1b, 0xf3, 0x6f, 0xe5, 0xb1, 0x25, + 0x9e, 0xee, 0xdb, 0xbe, 0x9e, 0x86, 0x59, 0x49, 0xc9, 0x17, 0xe2, 0x04, 0x86, 0xa6, 0x19, 0x19, + 0x9a, 0xab, 0xe3, 0x76, 0x24, 0xc8, 0xa2, 0x06, 0x8e, 0xcf, 0x4f, 0xc5, 0xc6, 0xe7, 0xd5, 0x64, + 0x62, 0x4f, 0x1f, 0xa4, 0xbf, 0x49, 0xc1, 0xa2, 0x4a, 0x3e, 0x01, 0x07, 0x8e, 0xa3, 0x0e, 0xfc, + 0xe5, 0x44, 0xdd, 0x19, 0xe2, 0xc1, 0x7f, 0x33, 0xd6, 0x0d, 0xee, 0xc2, 0x2f, 0x43, 0x96, 0xf6, + 0x1c, 0xdf, 0xc8, 0x82, 0xa1, 0xdd, 0xe9, 0x39, 0x04, 0x73, 0x0c, 0xf3, 0x60, 0x26, 0xe9, 0x12, + 0x53, 0xda, 0x56, 0xe0, 0xc1, 0x36, 0x19, 0x30, 0xf0, 0x60, 0xfc, 0x17, 0x16, 0x94, 0x49, 0x5c, + 0xf6, 0xaf, 0xa6, 0x00, 0xf5, 0x4f, 0x45, 0x12, 0x9f, 0xfd, 0xbc, 0xef, 0x61, 0x85, 0x7e, 0x73, + 0x11, 0x0f, 0xdb, 0xef, 0x53, 0x33, 0xa7, 0xf9, 0xd4, 0xd2, 0xaf, 0x67, 0xa2, 0x63, 0xc4, 0xc6, + 0x61, 0x02, 0x36, 0xe1, 0xcf, 0x42, 0x7a, 0xf4, 0x2c, 0x64, 0xc6, 0x9e, 0x85, 0x37, 0x61, 0xce, + 0xd4, 0x28, 0xf1, 0xa8, 0x1f, 0xc5, 0x44, 0x38, 0xb9, 0x28, 0x59, 0xe7, 0x36, 0x55, 0x24, 0x8e, + 0xd2, 0xb2, 0x60, 0xdd, 0x22, 0x9e, 0xee, 0x1a, 0xdc, 0x23, 0xf3, 0xe8, 0xa2, 0x04, 0xeb, 0x7a, + 0x88, 0xc2, 0x2a, 0x1d, 0xba, 0x03, 0x17, 0x75, 0xbb, 0xed, 0x68, 0xd4, 0xd8, 0x33, 0x89, 0x1c, + 0x48, 0xd6, 0x8b, 0xe2, 0xd4, 0xe5, 0xcc, 0x95, 0x99, 0xea, 0xb3, 0x27, 0xc7, 0xab, 0x17, 0x6b, + 0x83, 0x08, 0xf0, 0x60, 0xbe, 0xd2, 0xdf, 0xa7, 0x60, 0x39, 0x3e, 0x21, 0x13, 0xb0, 0xbf, 0xdd, + 0xa8, 0xfd, 0x25, 0xf3, 0x52, 0x4c, 0xc7, 0x21, 0x36, 0xf8, 0x47, 0x29, 0x98, 0x0f, 0x49, 0x5d, + 0xe2, 0xb1, 0x58, 0xa7, 0x5a, 0xe0, 0x73, 0xea, 0xdc, 0x3f, 0x3c, 0x5e, 0x2d, 0x48, 0x32, 0x65, + 0x29, 0x5c, 0x86, 0xec, 0xa1, 0xed, 0xd1, 0xf8, 0x62, 0xb9, 0x65, 0x7b, 0x14, 0x73, 0x0c, 0xa3, + 0x70, 0x6c, 0x97, 0xf2, 0xb5, 0x92, 0x0b, 0x29, 0x1a, 0xb6, 0x4b, 0x31, 0xc7, 0x70, 0x0a, 0x8d, + 0x1e, 0xca, 0x25, 0x11, 0x52, 0x68, 0xf4, 0x10, 0x73, 0x4c, 0xe9, 0x26, 0x5c, 0xf0, 0x15, 0x75, + 0x1c, 0x33, 0x12, 0x99, 0x6d, 0x7a, 0xd7, 0x69, 0x69, 0x54, 0xa8, 0x9c, 0x57, 0x22, 0xb3, 0x8f, + 0xc0, 0x21, 0x4d, 0xe9, 0xbb, 0xa1, 0xd7, 0x61, 0x13, 0x6f, 0x5b, 0xc4, 0xa2, 0x63, 0x78, 0x9d, + 0x5f, 0x4c, 0x41, 0xde, 0x25, 0xbc, 0x20, 0xf4, 0xc6, 0x2e, 0xb6, 0xe2, 0xed, 0x60, 0x29, 0xa0, + 0xfa, 0x92, 0x3f, 0xd5, 0x3e, 0xe4, 0xe1, 0xf1, 0x6a, 0x71, 0x18, 0x35, 0x0e, 0x1a, 0x66, 0xab, + 0x6f, 0x28, 0x19, 0xf3, 0x51, 0x2d, 0xe2, 0x19, 0x2e, 0x69, 0xf1, 0x7e, 0xe4, 0x42, 0x1f, 0x55, + 0x17, 0x60, 0xec, 0xe3, 0x19, 0xa9, 0xde, 0x71, 0x5d, 0x62, 0x89, 0x59, 0x53, 0x48, 0x6b, 0x02, + 0x8c, 0x7d, 0x3c, 0x1b, 0x60, 0xad, 0xab, 0x19, 0xa6, 0xb6, 0x67, 0x12, 0x39, 0x81, 0xc1, 0x00, + 0x57, 0x7c, 0x04, 0x0e, 0x69, 0x98, 0xec, 0x0e, 0x1f, 0xea, 0x16, 0x9f, 0x4d, 0x45, 0xb6, 0x98, + 0x81, 0x16, 0xf6, 0xf1, 0xa5, 0x6f, 0x64, 0x94, 0xb9, 0xb0, 0x5a, 0x06, 0x37, 0xd9, 0xd1, 0x73, + 0xf1, 0x7a, 0x10, 0x5c, 0xc5, 0x92, 0x7b, 0x5f, 0x34, 0x4e, 0x3e, 0x3c, 0x5e, 0x5d, 0x08, 0xc4, + 0x45, 0x43, 0x27, 0x3a, 0x60, 0x3e, 0xc8, 0xa3, 0x0d, 0xd7, 0xde, 0x23, 0x2c, 0xe3, 0x93, 0xe1, + 0x39, 0x49, 0x82, 0xa9, 0xf8, 0x2b, 0x45, 0x10, 0x8e, 0xca, 0x45, 0x5d, 0x40, 0x0c, 0xb0, 0xe3, + 0x6a, 0x96, 0xc7, 0x15, 0xe1, 0xad, 0x65, 0x13, 0xb7, 0xb6, 0x22, 0x5b, 0x43, 0x9b, 0x7d, 0xd2, + 0xf0, 0x80, 0x16, 0x94, 0xc0, 0x92, 0x3b, 0x35, 0x59, 0x7f, 0x01, 0xa6, 0xdb, 0xc4, 0xf3, 0xb4, + 0x03, 0xc2, 0x73, 0x6c, 0x25, 0xa0, 0x6d, 0x09, 0x30, 0xf6, 0xf1, 0xa5, 0xff, 0xcb, 0xc1, 0x92, + 0x3f, 0x4b, 0x2e, 0x69, 0x11, 0x8b, 0xe5, 0xcc, 0x13, 0x08, 0x42, 0x6a, 0x35, 0x97, 0x4e, 0x5a, + 0xcd, 0x65, 0xc6, 0xac, 0xe6, 0xca, 0x00, 0x84, 0xea, 0xad, 0x5a, 0xa5, 0x46, 0x5c, 0xca, 0xe7, + 0x67, 0xb6, 0x3a, 0xcf, 0x54, 0x5a, 0xdf, 0xa9, 0xd5, 0x05, 0x14, 0x2b, 0x14, 0xe8, 0x45, 0x98, + 0x11, 0xbf, 0x6e, 0x93, 0x1e, 0x1f, 0xe2, 0xd9, 0xea, 0x1c, 0x33, 0x05, 0x41, 0x7e, 0x9b, 0xf4, + 0x70, 0x88, 0x47, 0x35, 0x58, 0x62, 0x3f, 0x2a, 0x8d, 0x8d, 0x9a, 0x69, 0x10, 0x8b, 0xf2, 0x36, + 0xa6, 0x38, 0xd3, 0xc5, 0x93, 0xe3, 0xd5, 0x25, 0xc6, 0x14, 0x41, 0xe2, 0x7e, 0x7a, 0xf4, 0x09, + 0x58, 0x8c, 0x00, 0x59, 0xc3, 0xd3, 0x5c, 0xc6, 0xf2, 0xc9, 0xf1, 0xea, 0x62, 0x44, 0x06, 0x6b, + 0xbf, 0x8f, 0x1a, 0x95, 0x60, 0x4a, 0xd7, 0x78, 0xdb, 0x79, 0xce, 0x07, 0x6c, 0x3d, 0xc8, 0xbe, + 0x49, 0x0c, 0x5a, 0x85, 0x9c, 0xae, 0x31, 0xd1, 0x33, 0x9c, 0x64, 0x86, 0x45, 0x0a, 0xd1, 0x1f, + 0x01, 0x67, 0x03, 0xa5, 0x87, 0x9d, 0x80, 0x70, 0xa0, 0x14, 0xed, 0x15, 0x0a, 0x36, 0x50, 0x7a, + 0xa0, 0x6f, 0x21, 0x1c, 0xa8, 0x50, 0xd1, 0x10, 0xcf, 0x5a, 0xa7, 0xf6, 0x11, 0xb1, 0x8a, 0xb3, + 0x7c, 0xda, 0x78, 0xeb, 0x3b, 0x0c, 0x80, 0x05, 0x1c, 0xbd, 0x01, 0xf3, 0x7b, 0xfe, 0x2e, 0x14, + 0x47, 0x14, 0xe7, 0x38, 0x25, 0x3a, 0x39, 0x5e, 0x9d, 0xaf, 0x46, 0x30, 0x38, 0x46, 0xc9, 0x78, + 0x75, 0xe2, 0x52, 0x63, 0xdf, 0xd0, 0x35, 0x4a, 0x98, 0x3a, 0xf3, 0x21, 0x6f, 0x2d, 0x82, 0xc1, + 0x31, 0xca, 0xd2, 0x3f, 0xa4, 0xe0, 0x62, 0xdf, 0xda, 0x9f, 0x40, 0xbc, 0xbf, 0x17, 0x8d, 0xf7, + 0xd7, 0xc6, 0x0e, 0x35, 0x81, 0x92, 0x43, 0x02, 0xfe, 0xff, 0xe6, 0x83, 0x80, 0xef, 0xef, 0x1c, + 0xbd, 0x07, 0xb2, 0x86, 0xd3, 0xf5, 0x64, 0xf4, 0xcc, 0x33, 0x67, 0xbb, 0xd1, 0xd8, 0x6d, 0x62, + 0x0e, 0x45, 0x57, 0x20, 0xef, 0x74, 0xf6, 0x4c, 0x43, 0xdf, 0xac, 0x72, 0x2b, 0xcc, 0x8b, 0x9d, + 0xc2, 0x86, 0x84, 0xe1, 0x00, 0xcb, 0x56, 0x88, 0x61, 0x89, 0x5d, 0xc3, 0xcd, 0x2a, 0x37, 0xc0, + 0xbc, 0x58, 0x21, 0x1b, 0x01, 0x14, 0x2b, 0x14, 0xe8, 0x15, 0x98, 0x3e, 0x70, 0x3a, 0x3c, 0x1b, + 0x13, 0x61, 0xff, 0x69, 0xe6, 0x7e, 0x3e, 0xd9, 0xb8, 0x2b, 0x53, 0x0d, 0xff, 0x4f, 0xec, 0x93, + 0xa1, 0x06, 0x2c, 0x13, 0x8b, 0x05, 0x99, 0x2d, 0x8d, 0xd7, 0x92, 0xfa, 0x21, 0x69, 0x75, 0x4c, + 0xc2, 0xed, 0x30, 0x1f, 0x6e, 0x87, 0xac, 0x0f, 0xa0, 0xc1, 0x03, 0x39, 0xd1, 0x9b, 0x90, 0x3e, + 0xd4, 0xe4, 0x2e, 0xc3, 0xf3, 0x23, 0x07, 0xf9, 0x56, 0xa5, 0x3a, 0x75, 0x72, 0xbc, 0x9a, 0xbe, + 0x55, 0xc1, 0xe9, 0x43, 0x8d, 0x2d, 0x2c, 0xef, 0xc8, 0x70, 0x82, 0x58, 0xe3, 0x15, 0xa7, 0x79, + 0x56, 0xc9, 0x17, 0x56, 0x33, 0x82, 0xc1, 0x31, 0x4a, 0xf4, 0x29, 0xc8, 0xed, 0x1b, 0x26, 0xf1, + 0x8a, 0x79, 0x3e, 0xc1, 0x1f, 0x18, 0xd9, 0xf6, 0x4d, 0xc3, 0x54, 0x92, 0x38, 0xf6, 0xcb, 0xc3, + 0x42, 0x04, 0x3a, 0x82, 0xdc, 0xa1, 0x6d, 0x1f, 0x79, 0xc5, 0x19, 0x2e, 0xeb, 0x8d, 0x71, 0x17, + 0x8b, 0x5c, 0x00, 0xe5, 0x5b, 0x8c, 0x79, 0xdd, 0xa2, 0x6e, 0xaf, 0xfa, 0xac, 0xdf, 0x00, 0x87, + 0xfd, 0xc2, 0x3f, 0xaf, 0xe6, 0xd9, 0x1f, 0x7c, 0x16, 0x44, 0x1b, 0x68, 0x1f, 0x0a, 0xba, 0x67, + 0xf8, 0x5b, 0x5a, 0xdc, 0x11, 0x8c, 0x55, 0xde, 0xf6, 0xed, 0x58, 0x56, 0x17, 0xb8, 0x63, 0x0e, + 0xe1, 0x58, 0x15, 0x8c, 0x3c, 0x58, 0xd4, 0x62, 0x7b, 0xc3, 0xdc, 0x8d, 0x8c, 0x93, 0xfc, 0xf6, + 0x6d, 0x6e, 0x73, 0x4f, 0x19, 0x87, 0xe2, 0xbe, 0x06, 0xd0, 0x16, 0x5c, 0x90, 0xcb, 0x84, 0x50, + 0xd7, 0xd0, 0xbd, 0x26, 0x71, 0xbb, 0xc4, 0xe5, 0x5e, 0x29, 0x1f, 0xa4, 0xc2, 0x17, 0xd6, 0xfb, + 0x49, 0xf0, 0x20, 0x3e, 0x56, 0xf1, 0x18, 0x4e, 0xf7, 0x7a, 0xbd, 0xa3, 0x99, 0x4d, 0xa6, 0x2f, + 0x77, 0x5a, 0xf9, 0x30, 0x83, 0xd8, 0x68, 0x28, 0x48, 0x1c, 0xa5, 0x45, 0x37, 0x60, 0x56, 0xc8, + 0xac, 0x19, 0xa6, 0xd1, 0x69, 0x73, 0xa7, 0x95, 0xaf, 0x2e, 0x4b, 0xde, 0xd9, 0x75, 0x05, 0x87, + 0x23, 0x94, 0xa8, 0xc9, 0x32, 0xb0, 0x03, 0x57, 0x6b, 0x91, 0xe2, 0xd3, 0x7c, 0xc4, 0xae, 0x8c, + 0x1c, 0xb1, 0xbb, 0x82, 0x5e, 0xcd, 0xd5, 0x38, 0x00, 0xfb, 0x92, 0x56, 0x6e, 0x00, 0x84, 0xeb, + 0x04, 0x2d, 0x42, 0xe6, 0x88, 0xf4, 0x44, 0x8e, 0x86, 0xd9, 0x9f, 0x68, 0x19, 0x72, 0x5d, 0xcd, + 0xec, 0xc8, 0x9a, 0x11, 0x8b, 0x1f, 0x6f, 0xa4, 0x6f, 0xa4, 0x58, 0xc6, 0xed, 0xc7, 0xdf, 0x09, + 0x78, 0xce, 0xad, 0xa8, 0xe7, 0xbc, 0x32, 0xae, 0x31, 0x0c, 0xf1, 0x97, 0xff, 0x95, 0x09, 0xfc, + 0xe5, 0x96, 0xd0, 0x0c, 0xad, 0x40, 0xda, 0x70, 0x64, 0x7a, 0x0a, 0x92, 0x29, 0xbd, 0xd1, 0xc0, + 0x69, 0xc3, 0x09, 0x2a, 0x9d, 0xf4, 0xd0, 0x4a, 0xe7, 0x25, 0xc8, 0x77, 0x3c, 0xe6, 0x02, 0x83, + 0x24, 0x25, 0xe8, 0xcd, 0x5d, 0x09, 0xc7, 0x01, 0x05, 0xf7, 0xbe, 0x9a, 0xe7, 0xdd, 0xb7, 0xdd, + 0x96, 0x4c, 0x4e, 0x84, 0xf7, 0x95, 0x30, 0x1c, 0x60, 0x99, 0xf7, 0x75, 0x5c, 0xa3, 0x2b, 0x23, + 0x5c, 0x2e, 0x8c, 0xcf, 0x8d, 0x00, 0x8a, 0x15, 0x0a, 0x4e, 0xaf, 0x79, 0x5e, 0xe3, 0xd0, 0xd5, + 0x3c, 0x22, 0x93, 0x12, 0x41, 0x1f, 0x40, 0xb1, 0x42, 0x81, 0x74, 0x98, 0x32, 0xb5, 0x3d, 0x62, + 0x0a, 0x27, 0x57, 0xb8, 0xf6, 0xe6, 0xb8, 0x03, 0x2b, 0x87, 0xad, 0xbc, 0xc9, 0xb9, 0x85, 0x9b, + 0x09, 0xb2, 0x52, 0x01, 0xc4, 0x52, 0x34, 0xaa, 0xc0, 0x14, 0xd5, 0x0c, 0x8b, 0xfa, 0x6e, 0xf1, + 0x59, 0x65, 0x61, 0x94, 0x75, 0xdb, 0x25, 0x3c, 0x2f, 0x66, 0x14, 0xa1, 0x08, 0xfe, 0xd3, 0xc3, + 0x92, 0x71, 0xe5, 0x75, 0x28, 0x28, 0x2d, 0x25, 0x5a, 0xa8, 0x3f, 0x4c, 0xc3, 0x82, 0x54, 0xba, + 0xe1, 0xda, 0x0e, 0x71, 0x69, 0x0f, 0x6d, 0xc2, 0x72, 0x5b, 0x7b, 0xe0, 0x6f, 0x5e, 0x12, 0xb7, + 0x6b, 0xe8, 0x64, 0xbb, 0xd3, 0x96, 0x15, 0x56, 0x91, 0x85, 0x9b, 0xad, 0x01, 0x78, 0x3c, 0x90, + 0x0b, 0x7d, 0x04, 0xe6, 0xda, 0xda, 0x83, 0x6d, 0xbb, 0x45, 0x1a, 0x76, 0x8b, 0x89, 0x11, 0xeb, + 0x64, 0x89, 0x39, 0x83, 0x2d, 0x15, 0x81, 0xa3, 0x74, 0xe8, 0x4b, 0x29, 0x98, 0xb3, 0xbb, 0xc4, + 0xf5, 0x6c, 0xb3, 0x85, 0x35, 0x6a, 0xd8, 0xc5, 0x0c, 0x1f, 0xa0, 0xda, 0xb8, 0xb3, 0xe0, 0x77, + 0xa8, 0x7c, 0x47, 0x95, 0x22, 0x66, 0x23, 0xf0, 0x47, 0x11, 0x1c, 0x8e, 0x36, 0xb8, 0xf2, 0x09, + 0x40, 0xfd, 0xbc, 0x89, 0xc6, 0xf7, 0x3f, 0x73, 0xc1, 0xf8, 0x62, 0x79, 0x50, 0x8f, 0x7e, 0x0e, + 0xf2, 0xba, 0xe6, 0x68, 0xba, 0x41, 0x99, 0x10, 0xd6, 0xa5, 0x8f, 0x8d, 0xdb, 0x25, 0x5f, 0x46, + 0xb9, 0x26, 0x05, 0x88, 0xde, 0x5c, 0xf6, 0xcd, 0xc9, 0x07, 0x3f, 0x3c, 0x5e, 0x9d, 0xf5, 0x69, + 0x99, 0xc3, 0xc0, 0x41, 0x8b, 0xe8, 0x97, 0x53, 0x50, 0xd0, 0x4c, 0xd3, 0xd6, 0x35, 0xca, 0xeb, + 0x5b, 0xe1, 0x33, 0x2a, 0x89, 0x35, 0xa8, 0x84, 0x32, 0x84, 0x12, 0xfe, 0x29, 0x44, 0x41, 0xc1, + 0xf4, 0xe9, 0xa1, 0x36, 0xcd, 0x66, 0x78, 0x46, 0xfe, 0x26, 0x2d, 0x39, 0xbb, 0x1f, 0x7f, 0x54, + 0x45, 0x48, 0x4b, 0xa8, 0xf1, 0xbe, 0xa0, 0x52, 0xf7, 0xe1, 0x7d, 0x4a, 0x84, 0x8d, 0xae, 0x1c, + 0xc1, 0x5c, 0x64, 0x28, 0x07, 0x4c, 0x6e, 0x5d, 0x9d, 0xdc, 0x11, 0x8e, 0xbb, 0xec, 0xdf, 0xc6, + 0x28, 0x7f, 0xba, 0xa3, 0x59, 0xd4, 0xa0, 0x3d, 0x65, 0x31, 0xac, 0x58, 0xb0, 0x18, 0x1f, 0xb5, + 0xc7, 0xda, 0x9e, 0x09, 0xf3, 0xd1, 0xc1, 0x79, 0x9c, 0xad, 0x95, 0xbe, 0x75, 0x31, 0x88, 0x79, + 0x7c, 0x5b, 0xfb, 0xe3, 0x00, 0xfb, 0x86, 0xa5, 0x99, 0xc6, 0xdb, 0xc4, 0xf5, 0xf8, 0x42, 0x9f, + 0xa9, 0xae, 0x32, 0x6f, 0x7b, 0x33, 0x80, 0x3e, 0x3c, 0x5e, 0x9d, 0x0b, 0x7e, 0xf1, 0x42, 0x55, + 0x61, 0x49, 0x5e, 0x0c, 0xb7, 0x0c, 0xcf, 0x31, 0xb5, 0xde, 0xa0, 0x62, 0xb8, 0x1e, 0xa2, 0xb0, + 0x4a, 0x17, 0x6c, 0xbd, 0x64, 0x87, 0x6e, 0xbd, 0x28, 0xfb, 0xe0, 0xb9, 0x11, 0xfb, 0xe0, 0x75, + 0x28, 0x58, 0x84, 0xde, 0xb7, 0xdd, 0x23, 0xb9, 0xe1, 0xca, 0xc8, 0x4b, 0xbe, 0x0e, 0xdb, 0x21, + 0xea, 0x61, 0xf4, 0x27, 0x56, 0xd9, 0x58, 0x0a, 0x25, 0x7f, 0xd6, 0x09, 0xf3, 0xa2, 0xbc, 0xf4, + 0x55, 0x36, 0x8d, 0xb7, 0x55, 0x24, 0x8e, 0xd2, 0x2a, 0x7b, 0x02, 0xb5, 0x8d, 0x3a, 0xe6, 0xd5, + 0x6f, 0xff, 0x9e, 0x00, 0x43, 0x61, 0x95, 0x0e, 0x5d, 0x85, 0x82, 0x27, 0x7c, 0x36, 0x67, 0xbb, + 0x20, 0x3a, 0xca, 0x58, 0x9a, 0x21, 0x18, 0xab, 0x34, 0x68, 0x0d, 0x66, 0x5a, 0x96, 0x57, 0xb7, + 0xdb, 0x9a, 0x61, 0xf1, 0x12, 0x5a, 0x39, 0x20, 0xac, 0x6f, 0x37, 0x05, 0x02, 0x87, 0x34, 0x08, + 0xc3, 0xd3, 0xa2, 0x70, 0xaa, 0x98, 0xbc, 0x20, 0xa2, 0x46, 0x97, 0xf0, 0x93, 0xc4, 0x22, 0xf0, + 0xc5, 0xb1, 0x72, 0x72, 0xbc, 0xfa, 0x74, 0x63, 0x20, 0x05, 0x1e, 0xc2, 0x89, 0x6c, 0xc8, 0xef, + 0x8b, 0xdc, 0xda, 0x93, 0xa9, 0xf2, 0x5a, 0xc2, 0x52, 0x20, 0x98, 0x9f, 0xbc, 0x04, 0xb0, 0x55, + 0x19, 0xab, 0x17, 0x71, 0xd0, 0x08, 0xba, 0xcf, 0x72, 0x0e, 0x1e, 0x57, 0x0c, 0xe2, 0xf1, 0x2c, + 0x79, 0xac, 0xfb, 0x13, 0xd1, 0x88, 0x54, 0xfd, 0x80, 0xbf, 0x0b, 0xd4, 0x08, 0x64, 0xf1, 0x2d, + 0xbc, 0x28, 0x19, 0x56, 0x9a, 0x42, 0x9f, 0x87, 0x19, 0x4d, 0xec, 0x43, 0x13, 0xaf, 0x38, 0xc7, + 0x7d, 0xe5, 0x5a, 0xc2, 0x7c, 0x24, 0xb4, 0x1f, 0x09, 0xf0, 0x70, 0x28, 0x13, 0xfd, 0x52, 0x0a, + 0x16, 0x5a, 0xb6, 0x7e, 0x44, 0xdc, 0xf5, 0x07, 0xd4, 0xd5, 0x2a, 0xee, 0x81, 0x57, 0x9c, 0x4f, + 0x16, 0x1c, 0x98, 0xdd, 0x97, 0xeb, 0x51, 0x19, 0xc2, 0x2b, 0x3f, 0x23, 0x5b, 0x5e, 0x88, 0x61, + 0x71, 0xbc, 0x49, 0x16, 0x9f, 0x16, 0x8f, 0x3a, 0x7b, 0xc4, 0x24, 0x34, 0xd4, 0x63, 0x81, 0xeb, + 0x51, 0x4d, 0xa4, 0xc7, 0xed, 0x98, 0x10, 0xa1, 0x48, 0x51, 0x2a, 0xb2, 0x18, 0x47, 0xe3, 0xbe, + 0x56, 0xd1, 0x97, 0x53, 0x80, 0x34, 0xc7, 0x10, 0x95, 0x4d, 0xa8, 0xcc, 0x22, 0x57, 0xa6, 0x9e, + 0x48, 0x99, 0x4a, 0x9f, 0x18, 0xa1, 0x4e, 0xb0, 0xd7, 0x59, 0x69, 0x6c, 0xc4, 0x08, 0xf0, 0x80, + 0xb6, 0xd1, 0xb7, 0x53, 0xb0, 0xa2, 0xdb, 0x16, 0x75, 0x6d, 0xd3, 0x64, 0xf3, 0x6a, 0x69, 0x07, + 0xaa, 0x6a, 0x4b, 0x5c, 0xb5, 0xcd, 0x44, 0xaa, 0xd5, 0x86, 0x8a, 0x13, 0x2a, 0xfa, 0xf6, 0xb1, + 0x32, 0x9c, 0x10, 0x9f, 0xa2, 0x13, 0x1f, 0x45, 0x4f, 0x6e, 0x3e, 0x28, 0xaa, 0xa2, 0x47, 0x18, + 0xc5, 0x66, 0x9f, 0x98, 0xd8, 0x28, 0xf6, 0x13, 0xe0, 0x01, 0x6d, 0xa3, 0x2e, 0x2c, 0xeb, 0xf1, + 0xcd, 0x23, 0x4c, 0xf6, 0x8b, 0xcb, 0xb2, 0x74, 0x1c, 0x90, 0x81, 0x6f, 0xda, 0xba, 0x66, 0x8a, + 0x3d, 0x5b, 0x4c, 0xf6, 0x89, 0x4b, 0x2c, 0x9d, 0x88, 0x5c, 0xb8, 0x36, 0x40, 0x12, 0x1e, 0x28, + 0x1f, 0xd5, 0x20, 0x4b, 0xa8, 0xde, 0x2a, 0x5e, 0xe4, 0xed, 0x8c, 0xde, 0x00, 0x59, 0xa7, 0x7a, + 0x4b, 0xec, 0x4e, 0xb1, 0xbf, 0x30, 0x67, 0x46, 0x9f, 0x02, 0x74, 0x68, 0x7b, 0x94, 0xd5, 0x4a, + 0x15, 0x8f, 0xe5, 0xcb, 0xbc, 0xae, 0x7a, 0x86, 0x97, 0xca, 0xc1, 0x40, 0xdc, 0xea, 0xa3, 0xc0, + 0x03, 0xb8, 0x10, 0x0d, 0x02, 0x16, 0x9f, 0x93, 0x22, 0x9f, 0x93, 0x8f, 0x26, 0x9a, 0x93, 0xed, + 0x90, 0x5f, 0x4c, 0xc6, 0x85, 0x58, 0xbc, 0xe3, 0xb3, 0xa0, 0x36, 0x83, 0x5c, 0x58, 0xf0, 0x74, + 0xcd, 0x34, 0xac, 0x03, 0xdf, 0x0f, 0x15, 0x9f, 0x7d, 0x34, 0x87, 0x16, 0xb8, 0x95, 0x66, 0x54, + 0x1e, 0x8e, 0x37, 0x80, 0xbe, 0x00, 0x73, 0x7b, 0xca, 0x9d, 0x3e, 0xaf, 0xb8, 0x32, 0xe6, 0xa9, + 0xbe, 0x7a, 0x13, 0x30, 0x8c, 0xc1, 0x2a, 0xd4, 0xc3, 0x51, 0xd1, 0x2b, 0x55, 0x58, 0x1e, 0xe4, + 0x04, 0x93, 0x14, 0x0e, 0x2b, 0x35, 0xb8, 0x38, 0xd0, 0x81, 0x25, 0x12, 0xb2, 0x0e, 0xcf, 0x0c, + 0x71, 0x3c, 0x89, 0xc4, 0x6c, 0xc1, 0xea, 0x08, 0x27, 0x91, 0x54, 0xab, 0x21, 0x86, 0x9c, 0x48, + 0xcc, 0xc7, 0x60, 0x31, 0xbe, 0xf6, 0x12, 0x95, 0x66, 0xdf, 0x00, 0x98, 0x8b, 0xdc, 0xd0, 0x41, + 0x25, 0x98, 0x32, 0xd9, 0xbc, 0xb5, 0xe4, 0xbe, 0x30, 0x3f, 0x34, 0xd8, 0xe4, 0x10, 0x2c, 0x31, + 0x6a, 0x36, 0x98, 0x1e, 0x91, 0x0d, 0xbe, 0x1a, 0xbd, 0x77, 0xf6, 0xde, 0xf8, 0xbd, 0x33, 0xff, + 0xd6, 0x4f, 0xe4, 0x96, 0x04, 0x01, 0xd0, 0xc3, 0xcd, 0xd5, 0x6c, 0xb2, 0xa3, 0xef, 0x60, 0xb3, + 0x35, 0x3c, 0x66, 0x52, 0xf6, 0x63, 0x15, 0xc1, 0xea, 0x59, 0x58, 0xee, 0xf4, 0xb3, 0x30, 0xe5, + 0x78, 0x6d, 0xea, 0xd4, 0xe3, 0xb5, 0xb7, 0xd4, 0x04, 0x65, 0x3a, 0x99, 0x3d, 0xcb, 0x13, 0x76, + 0xe5, 0x98, 0xd5, 0x97, 0xa4, 0x66, 0x28, 0x5f, 0x84, 0xbc, 0x5f, 0x81, 0xf0, 0x84, 0x33, 0x41, + 0xe6, 0xe5, 0xd7, 0x7f, 0x41, 0x95, 0x9a, 0xf7, 0x21, 0x4a, 0xde, 0xe5, 0x83, 0x70, 0xd0, 0x8c, + 0x98, 0x0e, 0x79, 0xea, 0x2c, 0xf2, 0xd4, 0x44, 0xd3, 0x21, 0x39, 0xd5, 0xe9, 0xf0, 0x85, 0x61, + 0x45, 0x30, 0xcb, 0xda, 0xd5, 0xf4, 0xbb, 0x10, 0xcd, 0xda, 0x87, 0xa6, 0xe0, 0x75, 0x58, 0xb4, + 0xec, 0x16, 0xff, 0x7b, 0x4b, 0xf3, 0x8e, 0x9a, 0xc6, 0xdb, 0x84, 0xa7, 0xa4, 0xb9, 0x30, 0xcd, + 0xd9, 0x8e, 0xe1, 0x71, 0x1f, 0x07, 0x7a, 0x1e, 0x72, 0x2d, 0xcb, 0xdb, 0x68, 0xc8, 0xf3, 0xa5, + 0x60, 0x53, 0xb0, 0xbe, 0xdd, 0xdc, 0x68, 0x60, 0x81, 0x63, 0x05, 0x82, 0x4b, 0x0e, 0x0c, 0x8f, + 0xba, 0xbd, 0x8d, 0x86, 0x48, 0x0c, 0x65, 0x81, 0x80, 0x43, 0x30, 0x56, 0x69, 0xf8, 0x4d, 0x4e, + 0xc2, 0xd6, 0x9c, 0xe6, 0xf6, 0x94, 0x2e, 0x14, 0x17, 0x62, 0x37, 0x39, 0x07, 0xd0, 0xe0, 0x81, + 0x9c, 0xf1, 0xe2, 0x66, 0x71, 0xcc, 0xe2, 0x46, 0x55, 0x44, 0x21, 0x2a, 0x2e, 0x0d, 0x51, 0x44, + 0x15, 0x34, 0x90, 0x93, 0x49, 0x8c, 0x0f, 0xe3, 0x46, 0xa3, 0xfb, 0x5a, 0x11, 0xf1, 0xc1, 0x0f, + 0x24, 0x6e, 0x0f, 0xa0, 0xc1, 0x03, 0x39, 0x87, 0x48, 0xbc, 0xce, 0x2b, 0xb1, 0xd3, 0x25, 0x5e, + 0x1f, 0x28, 0xf1, 0x3a, 0xaa, 0x03, 0xb0, 0x8c, 0x56, 0xdc, 0x85, 0xe5, 0xa9, 0xcd, 0x4c, 0xf5, + 0xfd, 0xfe, 0x3a, 0xbc, 0x1d, 0x60, 0x58, 0xb5, 0x13, 0xfe, 0xe2, 0xd5, 0xa8, 0xc2, 0x57, 0xfa, + 0x56, 0x06, 0x66, 0x6a, 0xb6, 0xb5, 0x6f, 0x1c, 0x6c, 0x69, 0x93, 0x78, 0xa5, 0xb0, 0x0b, 0x59, + 0x2e, 0x5d, 0x6c, 0x4b, 0xbd, 0x36, 0xda, 0xd4, 0x7c, 0xdd, 0xca, 0x75, 0x8d, 0x6a, 0x22, 0x03, + 0x09, 0xaa, 0x78, 0x06, 0xc2, 0x5c, 0x1e, 0xb2, 0x00, 0xf6, 0x0c, 0x4b, 0x73, 0x7b, 0x0c, 0x26, + 0xf7, 0x9a, 0xde, 0x48, 0x20, 0xbd, 0x1a, 0x30, 0x8b, 0x36, 0x82, 0x5e, 0x84, 0x08, 0xac, 0xb4, + 0xb0, 0xf2, 0x11, 0x98, 0x09, 0x88, 0x13, 0x85, 0xb5, 0x8f, 0xc2, 0x42, 0xac, 0xad, 0x51, 0xec, + 0xb3, 0x6a, 0x54, 0xfb, 0xcb, 0x14, 0xcc, 0x05, 0x5a, 0x4f, 0xe0, 0xec, 0xe1, 0x4e, 0xf4, 0xec, + 0xe1, 0x43, 0xe3, 0x0f, 0xe9, 0x90, 0xd3, 0x07, 0x7e, 0x49, 0xd8, 0xb5, 0xad, 0x5b, 0x8d, 0xca, + 0x79, 0xbc, 0x24, 0x2c, 0x34, 0x3b, 0xcb, 0x4b, 0xc2, 0x52, 0xe2, 0xe9, 0xf7, 0x5f, 0xf9, 0x81, + 0x92, 0xa0, 0x3c, 0x97, 0x07, 0x4a, 0x42, 0xb5, 0x21, 0x53, 0x7a, 0x08, 0x17, 0x24, 0xc1, 0xe3, + 0xbe, 0x61, 0xfe, 0xb5, 0x70, 0x98, 0xce, 0xe5, 0xeb, 0x88, 0x1f, 0xa6, 0x61, 0x2e, 0x32, 0xe1, + 0x49, 0x6e, 0xd9, 0x5e, 0x8d, 0xde, 0xb2, 0x4d, 0xf6, 0x8e, 0x21, 0x93, 0xe0, 0x1d, 0x43, 0xf6, + 0x4c, 0xde, 0x31, 0xe4, 0x7e, 0x0c, 0xef, 0x18, 0xfe, 0x34, 0x05, 0xbc, 0x54, 0x46, 0xb7, 0x21, + 0x67, 0xb2, 0x8a, 0x5d, 0x1a, 0xc7, 0x68, 0xb7, 0xc4, 0xeb, 0x7b, 0x5e, 0x6f, 0xf3, 0x9b, 0x38, + 0xfc, 0x27, 0x16, 0x32, 0xd0, 0xbd, 0xbe, 0x47, 0x67, 0x2f, 0x8f, 0xfd, 0xe8, 0x8c, 0x8b, 0x1c, + 0xf6, 0xd0, 0xec, 0x27, 0xa1, 0x38, 0xec, 0x71, 0xda, 0xbb, 0x3b, 0x72, 0x2d, 0x7d, 0x2f, 0x05, + 0xb3, 0xaa, 0x0a, 0xfc, 0x12, 0x97, 0xd5, 0x72, 0x6c, 0x7e, 0xd2, 0x28, 0x36, 0xe3, 0xc5, 0x25, + 0x2e, 0x1f, 0x88, 0x43, 0x3c, 0x5b, 0x36, 0xba, 0x76, 0xd3, 0x30, 0xfd, 0xa5, 0x16, 0x2c, 0x9b, + 0x5a, 0x85, 0x41, 0xb1, 0xc4, 0x32, 0xf3, 0xd2, 0x89, 0x4b, 0x39, 0x65, 0xec, 0x60, 0xb7, 0x26, + 0xe1, 0x38, 0xa0, 0x60, 0x4b, 0xfd, 0x88, 0xf4, 0x38, 0x71, 0x36, 0xba, 0xd4, 0x6f, 0x0b, 0x30, + 0xf6, 0xf1, 0xa5, 0x3a, 0x64, 0x39, 0xcb, 0x7b, 0x21, 0xe3, 0xb9, 0xba, 0x1c, 0x85, 0xe0, 0x4d, + 0x5d, 0xd3, 0xd5, 0x31, 0x83, 0x33, 0x74, 0x2b, 0xb8, 0x85, 0x1b, 0xa0, 0xeb, 0x1e, 0xc5, 0x0c, + 0x5e, 0xfa, 0x93, 0x14, 0xa4, 0x6f, 0x55, 0x50, 0x0d, 0x32, 0xf4, 0x88, 0xc8, 0x95, 0xf0, 0xc1, + 0x91, 0x33, 0xb7, 0x73, 0x7b, 0xfd, 0x56, 0x45, 0xde, 0xc7, 0x62, 0x7f, 0x62, 0xc6, 0x8d, 0x3e, + 0x0f, 0x40, 0x0f, 0x0d, 0xb7, 0xd5, 0xd0, 0x5c, 0xda, 0x1b, 0x7b, 0x15, 0xec, 0x04, 0x2c, 0xb7, + 0x2a, 0xd5, 0xc5, 0x93, 0xe3, 0xd5, 0x59, 0x15, 0x82, 0x15, 0x91, 0xa5, 0x5f, 0x49, 0x43, 0xf6, + 0x16, 0x31, 0xdb, 0x13, 0x08, 0x7a, 0xb7, 0x23, 0x41, 0xef, 0x85, 0xd1, 0x77, 0x80, 0x88, 0xd9, + 0x1e, 0x1a, 0xf1, 0x9a, 0xb1, 0x88, 0xf7, 0xe2, 0x78, 0xe2, 0x4e, 0x0f, 0x77, 0x7f, 0x96, 0x82, + 0x3c, 0x23, 0x9b, 0x40, 0xac, 0xfb, 0x54, 0x34, 0xd6, 0x7d, 0x60, 0x2c, 0xf5, 0x87, 0x04, 0xba, + 0xd7, 0x60, 0x91, 0x61, 0x23, 0x51, 0xce, 0xbf, 0xe6, 0x9d, 0x1a, 0x7a, 0xcd, 0xfb, 0xab, 0xb2, + 0xb3, 0xe7, 0x32, 0x62, 0xfd, 0x53, 0x1a, 0x20, 0x9c, 0xb0, 0x27, 0xe1, 0xea, 0x4c, 0xc3, 0x15, + 0xb3, 0xf9, 0x8d, 0x46, 0x65, 0xeb, 0x1c, 0xda, 0x3c, 0x53, 0xeb, 0x0c, 0x6d, 0x9e, 0x8b, 0x1b, + 0x6d, 0xf3, 0x8c, 0xec, 0x3c, 0xda, 0x3c, 0xd3, 0x6b, 0xb8, 0xcd, 0x33, 0xec, 0x23, 0xd8, 0xbc, + 0x3f, 0xc4, 0xe7, 0xd2, 0xe6, 0xc3, 0x09, 0x7b, 0x62, 0xf3, 0x67, 0x6e, 0xf3, 0x9b, 0xd5, 0xda, + 0xcd, 0x73, 0x68, 0xf3, 0x4c, 0xad, 0x33, 0xb4, 0x79, 0x2e, 0x6e, 0xb4, 0xcd, 0x33, 0xb2, 0xf3, + 0x68, 0xf3, 0x4c, 0xaf, 0x21, 0x36, 0xff, 0x6b, 0x29, 0x58, 0x64, 0xe8, 0xc7, 0x5c, 0xce, 0x32, + 0xdb, 0xd0, 0x74, 0x6a, 0xf4, 0xdb, 0x46, 0x85, 0x43, 0xb1, 0xc4, 0x72, 0x6f, 0xe2, 0x4f, 0xde, + 0xb9, 0xf4, 0x26, 0xe1, 0x52, 0x78, 0xe2, 0x4d, 0xce, 0xd4, 0x9b, 0xfc, 0x63, 0x1a, 0x66, 0x82, + 0xd2, 0x95, 0x3f, 0x87, 0xd3, 0xa8, 0x56, 0x37, 0xdc, 0xf8, 0xd8, 0xd6, 0x05, 0x18, 0xfb, 0x78, + 0xf4, 0x05, 0x98, 0x21, 0xc1, 0x59, 0xbc, 0x30, 0x89, 0xd7, 0xc7, 0x2f, 0x92, 0xcb, 0xb1, 0x03, + 0xf8, 0x60, 0xa1, 0x87, 0xe7, 0xee, 0xa1, 0x78, 0xfe, 0x68, 0x80, 0x9f, 0x41, 0xb2, 0xa2, 0xb0, + 0x59, 0xd9, 0xf6, 0xf8, 0xfe, 0xab, 0xff, 0x68, 0x20, 0x82, 0xc1, 0x31, 0x4a, 0xf4, 0x1a, 0xcc, + 0x3a, 0x44, 0xe1, 0xcc, 0x72, 0x4e, 0x5e, 0x4a, 0x35, 0x14, 0x38, 0x8e, 0x50, 0xad, 0xfc, 0x04, + 0xcc, 0x3f, 0xfa, 0xc9, 0x22, 0x7f, 0x91, 0xbf, 0x69, 0x1f, 0xd4, 0x6c, 0xd3, 0x24, 0xfa, 0x64, + 0x3e, 0xc8, 0x92, 0xf4, 0x45, 0xbe, 0xaa, 0xde, 0x19, 0xbe, 0xc8, 0x8f, 0x88, 0x1d, 0xfd, 0x22, + 0x5f, 0x25, 0x3f, 0x8f, 0x2f, 0xf2, 0x55, 0xfd, 0x86, 0xb8, 0xf2, 0x36, 0x14, 0x55, 0xaa, 0xc7, + 0xbd, 0x41, 0xf9, 0xf5, 0xd8, 0xa8, 0x9d, 0x4b, 0x8f, 0x7d, 0x92, 0x06, 0xd4, 0xbf, 0x12, 0x9e, + 0x78, 0xee, 0x33, 0xf5, 0xdc, 0x5f, 0x49, 0xc3, 0xb4, 0xff, 0xbc, 0xe2, 0xfc, 0x9d, 0x73, 0x48, + 0xcd, 0xce, 0xf0, 0x9c, 0xc3, 0x97, 0x78, 0xba, 0x57, 0xf1, 0x60, 0x5e, 0x12, 0xfa, 0x6f, 0xf3, + 0xaf, 0x47, 0xde, 0x46, 0x97, 0x62, 0x6f, 0xf3, 0x51, 0x94, 0x3a, 0x7a, 0x6d, 0x57, 0xde, 0x1c, + 0x88, 0x5f, 0xd4, 0x90, 0xb4, 0xd8, 0xc7, 0xf3, 0x37, 0xd9, 0x52, 0xce, 0x93, 0x37, 0xd9, 0xe7, + 0xf6, 0x4d, 0xf6, 0x77, 0x53, 0x50, 0x90, 0xb3, 0x74, 0x1e, 0x8f, 0xc0, 0xfc, 0x2b, 0x69, 0x83, + 0xc3, 0xcc, 0x37, 0x73, 0x81, 0xf2, 0x3f, 0xa6, 0xcb, 0xf1, 0x8f, 0xf2, 0x52, 0x7c, 0xf4, 0xe5, + 0x78, 0x71, 0x4a, 0x91, 0x3b, 0xf5, 0x94, 0x62, 0x6a, 0xac, 0x87, 0x61, 0xd3, 0x89, 0x1e, 0x86, + 0xe5, 0x13, 0x3c, 0x0c, 0x9b, 0x49, 0xf8, 0x30, 0x0c, 0x46, 0x3e, 0x0c, 0x7b, 0x2b, 0x78, 0x18, + 0x56, 0xe0, 0xab, 0xe3, 0x46, 0x12, 0x7f, 0x9a, 0xf0, 0x55, 0xd8, 0xec, 0x8f, 0xe1, 0x55, 0xd8, + 0xff, 0x64, 0x60, 0x2e, 0xe2, 0xaf, 0xc7, 0xba, 0x1a, 0xf7, 0x6a, 0x34, 0xe8, 0xf7, 0xdf, 0x77, + 0x93, 0x22, 0x4f, 0xb9, 0xef, 0x96, 0x19, 0xf3, 0x82, 0x55, 0xdc, 0x5b, 0x27, 0xb9, 0xef, 0x96, + 0x1d, 0xfb, 0xbe, 0x5b, 0x6e, 0xfc, 0xfb, 0x6e, 0x53, 0x63, 0xde, 0x77, 0x8b, 0x86, 0xab, 0x11, + 0xf7, 0xdd, 0x0c, 0x28, 0x48, 0x37, 0xb6, 0x61, 0xed, 0xdb, 0xdc, 0x42, 0xc6, 0x79, 0x17, 0xef, + 0xcf, 0x5c, 0xcf, 0xa3, 0xa4, 0xcd, 0x38, 0x43, 0x4b, 0xdf, 0x0a, 0xc5, 0x61, 0x55, 0x76, 0xe9, + 0x3f, 0xb2, 0xb0, 0xd4, 0xc7, 0xc7, 0x12, 0x60, 0x9f, 0xa8, 0x1e, 0x4f, 0x80, 0x7d, 0x51, 0x75, + 0x1c, 0xd2, 0xb0, 0xe4, 0xcc, 0xe3, 0xec, 0x77, 0xef, 0x06, 0x7e, 0x29, 0x98, 0x9a, 0x66, 0x80, + 0xc1, 0x0a, 0x15, 0x1b, 0xef, 0x3d, 0xdb, 0x66, 0x7e, 0x2c, 0x96, 0xf8, 0x55, 0x39, 0x14, 0x4b, + 0x2c, 0x7a, 0x13, 0xe6, 0x8e, 0x88, 0x6b, 0x11, 0x73, 0xc8, 0xb7, 0x94, 0x6e, 0xab, 0x48, 0x1c, + 0xa5, 0x65, 0xf3, 0x6f, 0x7b, 0x1b, 0xed, 0x01, 0xf7, 0x1d, 0xef, 0x34, 0x39, 0x18, 0xfb, 0x78, + 0xf4, 0x19, 0x78, 0x46, 0xb7, 0x2d, 0x66, 0x44, 0xc4, 0xc5, 0xe2, 0x1b, 0xb6, 0x7e, 0x8b, 0x22, + 0x44, 0xad, 0x4a, 0xd6, 0x67, 0x6a, 0x83, 0xc9, 0xf0, 0x30, 0x7e, 0xf4, 0x31, 0x98, 0x97, 0x8f, + 0x0c, 0x7c, 0x89, 0xc2, 0xeb, 0x3d, 0x2d, 0x25, 0xce, 0xdf, 0x8e, 0x60, 0x71, 0x8c, 0x1a, 0xd5, + 0xc5, 0xd3, 0x08, 0x5e, 0xa4, 0xf8, 0x12, 0xc4, 0x0b, 0x9f, 0xc8, 0xb3, 0x06, 0x15, 0x8f, 0xfb, + 0x38, 0x50, 0x05, 0x16, 0x6c, 0xfe, 0xe4, 0xdc, 0xb0, 0x0e, 0xc4, 0x9c, 0xc8, 0xe7, 0x3b, 0xc1, + 0x6d, 0xea, 0x3b, 0x51, 0x34, 0x8e, 0xd3, 0xa3, 0x1b, 0x30, 0xab, 0xb9, 0xfa, 0xa1, 0x41, 0x89, + 0x4e, 0x3b, 0xae, 0x70, 0x99, 0x33, 0xe1, 0x43, 0xed, 0x8a, 0x82, 0xc3, 0x11, 0xca, 0x12, 0x81, + 0xc5, 0xc6, 0x6e, 0x0d, 0x3f, 0xee, 0x3a, 0xeb, 0x5b, 0x29, 0x58, 0x6a, 0xb0, 0xfe, 0x7a, 0x94, + 0x58, 0xb4, 0xaa, 0xe9, 0x47, 0xeb, 0x56, 0x0b, 0x6d, 0x41, 0x46, 0x37, 0x3d, 0x99, 0x2d, 0x8c, + 0x36, 0x24, 0xf9, 0x8d, 0x49, 0xc9, 0x5d, 0xdb, 0x6c, 0x56, 0xa7, 0x4f, 0x8e, 0x57, 0x33, 0xb5, + 0xcd, 0x26, 0x66, 0x72, 0xd0, 0x06, 0xa4, 0x89, 0x37, 0x76, 0xc9, 0x1e, 0x95, 0xb6, 0xde, 0x14, + 0xdf, 0x55, 0x58, 0x6f, 0xe2, 0x34, 0xf1, 0x4a, 0xdf, 0x4c, 0xc3, 0x42, 0xa8, 0xef, 0x7a, 0x97, + 0x58, 0x74, 0x32, 0x97, 0xed, 0x94, 0xaa, 0x60, 0xf4, 0x65, 0xbb, 0x98, 0x86, 0x43, 0xab, 0x83, + 0xcf, 0xc5, 0xaa, 0x83, 0xeb, 0x89, 0x25, 0x9f, 0x5e, 0x25, 0xfc, 0x5d, 0x0a, 0x2e, 0xc4, 0x38, + 0x26, 0x90, 0x12, 0xde, 0x8d, 0xa6, 0x84, 0xaf, 0x24, 0xed, 0xd4, 0x90, 0xd4, 0xf0, 0xeb, 0xe9, + 0xbe, 0xce, 0x4c, 0x6e, 0x57, 0xe0, 0x67, 0x61, 0xc9, 0x89, 0x9b, 0xc9, 0xd8, 0xdf, 0xef, 0xed, + 0x33, 0xb0, 0xe0, 0x5b, 0x1a, 0xfd, 0xb6, 0x87, 0xfb, 0xdb, 0x51, 0x37, 0x14, 0xb2, 0x23, 0xb6, + 0x24, 0xfe, 0x3d, 0x0d, 0x17, 0x07, 0xae, 0x91, 0x27, 0xbb, 0x12, 0x67, 0xba, 0x2b, 0xf1, 0xbb, + 0x69, 0x80, 0x86, 0x6b, 0xb7, 0x09, 0x3d, 0x24, 0x1d, 0x6f, 0x02, 0x2e, 0xe8, 0xd3, 0x11, 0x17, + 0x34, 0x3a, 0x81, 0x0a, 0x95, 0x1b, 0xea, 0x7d, 0x3e, 0x13, 0xf3, 0x3e, 0x57, 0x93, 0x08, 0x3d, + 0xdd, 0xf1, 0xfc, 0x55, 0x0a, 0xe6, 0x43, 0xe2, 0x09, 0xf8, 0x9c, 0x46, 0xd4, 0xe7, 0xbc, 0x98, + 0xa0, 0x2b, 0x43, 0x37, 0x3c, 0x97, 0x43, 0x1a, 0x4c, 0xda, 0x36, 0xe5, 0xd9, 0x28, 0x7a, 0x11, + 0x66, 0xee, 0xbb, 0x86, 0xf8, 0xa1, 0x5e, 0x10, 0xbb, 0xe7, 0x03, 0x71, 0x88, 0x67, 0xa5, 0x98, + 0x4b, 0xb4, 0x16, 0xa7, 0x4d, 0x73, 0xda, 0x59, 0xf1, 0xa6, 0x42, 0xc0, 0x70, 0x80, 0x2d, 0xfd, + 0xde, 0x94, 0x3a, 0x62, 0xe7, 0x71, 0xbb, 0x13, 0x79, 0x00, 0x5e, 0x67, 0x2f, 0xcc, 0x2a, 0xc7, + 0xfb, 0x0c, 0x41, 0xb4, 0x53, 0xe5, 0x66, 0x20, 0x21, 0x76, 0x3f, 0x3c, 0x44, 0x60, 0xa5, 0x19, + 0xe4, 0xc2, 0x9c, 0x1b, 0x0c, 0x3e, 0xf1, 0x3c, 0x69, 0xed, 0x1f, 0x4e, 0xd0, 0x6e, 0x38, 0x79, + 0x61, 0x12, 0x8c, 0x55, 0x99, 0x38, 0xda, 0x04, 0x7f, 0x58, 0x6e, 0x53, 0x63, 0xbf, 0x27, 0xef, + 0x19, 0xca, 0x7c, 0x36, 0x7c, 0x58, 0xae, 0x22, 0x71, 0x94, 0x16, 0xed, 0xc3, 0x8c, 0xff, 0x2a, + 0xc6, 0x93, 0xa5, 0xc8, 0x68, 0x65, 0x83, 0x17, 0x35, 0xe4, 0x8b, 0x1d, 0xc3, 0x25, 0x6d, 0x62, + 0x51, 0xa5, 0xe8, 0xf1, 0xb1, 0x1e, 0x0e, 0x45, 0xb3, 0xf9, 0x76, 0x3b, 0xd6, 0x1d, 0x4b, 0x7c, + 0xb5, 0x8a, 0xa7, 0xb7, 0xf9, 0x70, 0xbe, 0x71, 0x88, 0xc2, 0x2a, 0x1d, 0xda, 0x82, 0x0b, 0x9a, + 0x49, 0x5c, 0x8a, 0x89, 0x43, 0x34, 0xca, 0x3f, 0xbf, 0xd5, 0xd5, 0x4c, 0x99, 0xd8, 0x06, 0x9f, + 0x31, 0xaa, 0xf4, 0x93, 0xe0, 0x41, 0x7c, 0x6c, 0xf9, 0xdc, 0x37, 0xe8, 0xe1, 0x76, 0xa3, 0xce, + 0x73, 0xdb, 0x7c, 0xb8, 0x7c, 0xee, 0x09, 0x30, 0xf6, 0xf1, 0x2b, 0x1f, 0x85, 0x85, 0xd8, 0xe4, + 0x27, 0xaa, 0xb5, 0x7f, 0x2b, 0x0b, 0x8b, 0x71, 0xff, 0xf3, 0x24, 0xa8, 0x9d, 0x65, 0x50, 0x43, + 0x9d, 0x88, 0x81, 0x4f, 0x8d, 0xf9, 0xa6, 0x3d, 0x3e, 0x29, 0x49, 0x4d, 0xfc, 0xdd, 0x2e, 0x8c, + 0xbf, 0x48, 0x41, 0xde, 0x7f, 0x5b, 0x35, 0x81, 0x40, 0x7c, 0x27, 0x12, 0x88, 0x5f, 0x1e, 0xc3, + 0xb4, 0x85, 0x6a, 0x43, 0xff, 0x41, 0xc8, 0xf7, 0x52, 0x30, 0xeb, 0x13, 0x4d, 0x20, 0x52, 0x6e, + 0x47, 0x23, 0xe5, 0x0b, 0x63, 0x77, 0x60, 0x48, 0x9c, 0xfc, 0x5a, 0x3a, 0x54, 0xff, 0xd1, 0xc2, + 0x96, 0xfa, 0x39, 0x92, 0xf4, 0x98, 0x9f, 0x23, 0x79, 0xc4, 0x8d, 0xda, 0xf7, 0x42, 0xa6, 0xe3, + 0x9a, 0x32, 0x8b, 0x0e, 0x2e, 0x42, 0xdf, 0xc5, 0x9b, 0x98, 0xc1, 0x59, 0xb8, 0xee, 0x78, 0x52, + 0xa4, 0xd8, 0xfe, 0x98, 0xf5, 0xf7, 0x58, 0xb7, 0x83, 0x3d, 0xd6, 0xed, 0xf8, 0x1e, 0xeb, 0x54, + 0x48, 0xd9, 0xbf, 0xc7, 0x5a, 0xfa, 0xef, 0x0c, 0x2c, 0x0f, 0x72, 0xef, 0xa8, 0x07, 0x53, 0xa6, + 0xd1, 0x36, 0xe4, 0x35, 0xf3, 0x71, 0x2c, 0x6d, 0x90, 0x98, 0xf2, 0x26, 0x97, 0x21, 0x2c, 0xed, + 0x52, 0xb0, 0x4b, 0xca, 0x81, 0x7d, 0x1f, 0xf4, 0x91, 0x0d, 0xa2, 0x9f, 0xe7, 0x5f, 0x2c, 0xfe, + 0x62, 0x87, 0x78, 0xd4, 0x5f, 0x07, 0xb5, 0x47, 0x6b, 0x1d, 0x4b, 0x29, 0xb1, 0xef, 0x2b, 0xf9, + 0xe0, 0xfe, 0xef, 0x2b, 0xf9, 0xcd, 0xae, 0x18, 0x50, 0x50, 0x54, 0x7f, 0xac, 0xdf, 0xf7, 0x39, + 0x82, 0xb9, 0x88, 0x9e, 0x8f, 0xf5, 0xf3, 0x3e, 0x26, 0x2c, 0xf5, 0xed, 0x87, 0x30, 0x9b, 0x30, + 0xed, 0x83, 0x26, 0x19, 0x60, 0x13, 0x9b, 0x12, 0x8e, 0x03, 0x0a, 0x16, 0xd5, 0xa8, 0xed, 0x18, + 0x7a, 0xb0, 0x35, 0x18, 0x44, 0xb5, 0x1d, 0x01, 0xc6, 0x3e, 0xbe, 0xf4, 0xed, 0x34, 0x2c, 0xc6, + 0x37, 0x4c, 0xde, 0xe5, 0x57, 0xe8, 0x3e, 0x08, 0x53, 0xfc, 0x5f, 0x51, 0x91, 0x78, 0xd4, 0x6b, + 0x72, 0x28, 0x96, 0x58, 0xb4, 0x06, 0x33, 0x86, 0xd5, 0x22, 0x0f, 0xb8, 0xb5, 0x64, 0xa3, 0xbb, + 0x51, 0x1b, 0x3e, 0x02, 0x87, 0x34, 0xac, 0x69, 0x66, 0x3f, 0xbe, 0x65, 0xf9, 0x4d, 0x33, 0xeb, + 0xc2, 0x1c, 0xc3, 0x86, 0x29, 0x66, 0x55, 0xc1, 0x30, 0x0d, 0x38, 0xbd, 0x60, 0x19, 0x10, 0xe1, + 0xd7, 0x60, 0xea, 0x5a, 0x4f, 0xe4, 0x5a, 0x39, 0x25, 0x03, 0x0a, 0x51, 0x58, 0xa5, 0x2b, 0xd5, + 0x41, 0xbc, 0x57, 0x60, 0xce, 0xa0, 0x1b, 0x8c, 0x53, 0xe0, 0x0c, 0x76, 0x37, 0x1a, 0x98, 0xc1, + 0xd1, 0x7b, 0x20, 0xdb, 0x75, 0x8d, 0x96, 0x1c, 0x29, 0xfe, 0x75, 0x89, 0x5d, 0xbc, 0x51, 0xc7, + 0x1c, 0x5a, 0xfa, 0xe3, 0x34, 0xcc, 0xef, 0x68, 0x8e, 0x13, 0x3e, 0xf8, 0x9f, 0x40, 0xec, 0xb9, + 0x1b, 0x89, 0x3d, 0xa3, 0xaf, 0xa9, 0x44, 0x15, 0x1c, 0x5a, 0x08, 0xfe, 0x4c, 0xac, 0x10, 0xfc, + 0x70, 0x52, 0xc1, 0xa7, 0x17, 0x83, 0xef, 0xa4, 0x00, 0x45, 0x19, 0x26, 0x10, 0xe6, 0x76, 0xa2, + 0x61, 0x6e, 0x2d, 0x61, 0x97, 0x86, 0x04, 0xbb, 0xdf, 0x4e, 0xc1, 0x4a, 0x94, 0xf0, 0xbc, 0x5c, + 0x6d, 0xfc, 0xc3, 0xbe, 0x41, 0x3e, 0x97, 0x57, 0x66, 0xfe, 0x2d, 0x0d, 0xcb, 0x83, 0x16, 0xcf, + 0x93, 0x4c, 0xfe, 0x4c, 0xb7, 0xa7, 0x30, 0x44, 0x1e, 0x50, 0x8d, 0x72, 0x75, 0xcf, 0x43, 0xae, + 0xab, 0x44, 0x85, 0x60, 0xed, 0xef, 0xf2, 0xb0, 0x20, 0x70, 0xa5, 0xaf, 0xa6, 0xc0, 0xff, 0xf4, + 0x2b, 0x5a, 0x83, 0x6c, 0xdb, 0x6e, 0xf5, 0xfd, 0x23, 0x88, 0x2d, 0xbb, 0xc5, 0x3f, 0xd9, 0x26, + 0xc9, 0xd8, 0x4f, 0xcc, 0x09, 0xd1, 0xe7, 0x20, 0xef, 0x51, 0x57, 0xa3, 0xe4, 0xa0, 0x37, 0xf6, + 0x3f, 0x53, 0x93, 0x52, 0x9a, 0x92, 0x2f, 0x5c, 0xb9, 0x3e, 0x04, 0x07, 0x32, 0x4b, 0x7f, 0x9b, + 0x82, 0x85, 0x18, 0x3d, 0x7a, 0x0b, 0xa0, 0xad, 0x3d, 0xb8, 0x6b, 0xb9, 0x44, 0x6b, 0xf5, 0x46, + 0x7a, 0xe4, 0x0e, 0x35, 0xcc, 0xb2, 0xf8, 0x77, 0x8a, 0xe5, 0x0d, 0x8b, 0xde, 0x71, 0x9b, 0xd4, + 0x35, 0xac, 0x03, 0x71, 0xbe, 0xbd, 0x15, 0xc8, 0xc1, 0x8a, 0x4c, 0x84, 0xe1, 0xe9, 0x96, 0xab, + 0x19, 0xd6, 0xb6, 0xdd, 0x22, 0x55, 0xb2, 0x6f, 0xbb, 0x44, 0xea, 0x20, 0x3f, 0x87, 0xcd, 0xbf, + 0xd4, 0x56, 0x1f, 0x48, 0x81, 0x87, 0x70, 0xf2, 0x13, 0x8e, 0x5d, 0xdb, 0xec, 0xb4, 0x49, 0x9d, + 0xe8, 0xf6, 0xa4, 0xfe, 0xd1, 0x5d, 0xd2, 0x13, 0x8e, 0x98, 0x86, 0x67, 0x78, 0xc2, 0x11, 0x97, + 0x3c, 0xfa, 0x84, 0x23, 0xc6, 0x71, 0x1e, 0x4f, 0x38, 0x62, 0x2a, 0x0e, 0xfb, 0xbf, 0x75, 0xe9, + 0xbe, 0xce, 0x9c, 0xcb, 0x8d, 0xc0, 0xab, 0x50, 0xe8, 0x72, 0x35, 0x77, 0x7a, 0x0e, 0xf1, 0xaf, + 0x1a, 0xf3, 0x6f, 0x9c, 0xec, 0x86, 0x60, 0xac, 0xd2, 0xa0, 0x4f, 0xc2, 0xd2, 0x7d, 0xdb, 0x3d, + 0x32, 0x6d, 0xad, 0x55, 0x69, 0xb5, 0x0d, 0x2f, 0xf8, 0x4c, 0x64, 0x3e, 0x3c, 0x0b, 0xb9, 0x17, + 0x27, 0xc0, 0xfd, 0x3c, 0xa5, 0xef, 0x64, 0xe1, 0xe2, 0xc0, 0x25, 0x92, 0x2c, 0x82, 0x44, 0x3a, + 0x90, 0x7e, 0xd4, 0x0e, 0x64, 0x92, 0x77, 0x60, 0xe8, 0xff, 0xed, 0xcb, 0xbe, 0xfb, 0xff, 0xdb, + 0x97, 0x7b, 0x84, 0x78, 0x38, 0x95, 0x20, 0x1e, 0x4e, 0x9f, 0x49, 0x3c, 0xcc, 0x4f, 0x3e, 0x1e, + 0x56, 0xaf, 0xbc, 0xf3, 0xa3, 0x4b, 0x4f, 0x7d, 0xff, 0x47, 0x97, 0x9e, 0xfa, 0xc1, 0x8f, 0x2e, + 0x3d, 0xf5, 0xa5, 0x93, 0x4b, 0xa9, 0x77, 0x4e, 0x2e, 0xa5, 0xbe, 0x7f, 0x72, 0x29, 0xf5, 0x83, + 0x93, 0x4b, 0xa9, 0x7f, 0x39, 0xb9, 0x94, 0xfa, 0xf2, 0xbf, 0x5e, 0x7a, 0xea, 0xb3, 0xe9, 0xee, + 0xd5, 0xff, 0x0f, 0x00, 0x00, 0xff, 0xff, 0x3f, 0x9b, 0x31, 0x65, 0xe9, 0x78, 0x00, 0x00, } func (m *AddonSpec) Marshal() (dAtA []byte, err error) { @@ -3382,6 +3446,49 @@ func (m *AddonSpec) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } +func (m *App) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *App) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *App) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.Spec.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + { + size, err := m.ObjectMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + func (m *AuthzWebhookAddr) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -3429,6 +3536,39 @@ func (m *AuthzWebhookAddr) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } +func (m *BootstrapApp) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *BootstrapApp) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *BootstrapApp) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.App.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + func (m *BuiltinAuthzWebhookAddr) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -4936,6 +5076,22 @@ func (m *ClusterSpec) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + if len(m.BootstrapApps) > 0 { + for iNdEx := len(m.BootstrapApps) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.BootstrapApps[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0xd2 + } + } if len(m.ScalingMachines) > 0 { for iNdEx := len(m.ScalingMachines) - 1; iNdEx >= 0; iNdEx-- { { @@ -8939,6 +9095,19 @@ func (m *AddonSpec) Size() (n int) { return n } +func (m *App) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.ObjectMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = m.Spec.Size() + n += 1 + l + sovGenerated(uint64(l)) + return n +} + func (m *AuthzWebhookAddr) Size() (n int) { if m == nil { return 0 @@ -8956,6 +9125,17 @@ func (m *AuthzWebhookAddr) Size() (n int) { return n } +func (m *BootstrapApp) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.App.Size() + n += 1 + l + sovGenerated(uint64(l)) + return n +} + func (m *BuiltinAuthzWebhookAddr) Size() (n int) { if m == nil { return 0 @@ -9611,6 +9791,12 @@ func (m *ClusterSpec) Size() (n int) { n += 2 + l + sovGenerated(uint64(l)) } } + if len(m.BootstrapApps) > 0 { + for _, e := range m.BootstrapApps { + l = e.Size() + n += 2 + l + sovGenerated(uint64(l)) + } + } return n } @@ -10960,6 +11146,17 @@ func (this *AddonSpec) String() string { }, "") return s } +func (this *App) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&App{`, + `ObjectMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ObjectMeta), "ObjectMeta", "v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `Spec:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Spec), "AppSpec", "v11.AppSpec", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} func (this *AuthzWebhookAddr) String() string { if this == nil { return "nil" @@ -10971,6 +11168,16 @@ func (this *AuthzWebhookAddr) String() string { }, "") return s } +func (this *BootstrapApp) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&BootstrapApp{`, + `App:` + strings.Replace(strings.Replace(this.App.String(), "App", "App", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} func (this *BuiltinAuthzWebhookAddr) String() string { if this == nil { return "nil" @@ -11417,6 +11624,11 @@ func (this *ClusterSpec) String() string { repeatedStringForScalingMachines += strings.Replace(strings.Replace(f.String(), "ClusterMachine", "ClusterMachine", 1), `&`, ``, 1) + "," } repeatedStringForScalingMachines += "}" + repeatedStringForBootstrapApps := "[]BootstrapApp{" + for _, f := range this.BootstrapApps { + repeatedStringForBootstrapApps += strings.Replace(strings.Replace(f.String(), "BootstrapApp", "BootstrapApp", 1), `&`, ``, 1) + "," + } + repeatedStringForBootstrapApps += "}" keysForDockerExtraArgs := make([]string, 0, len(this.DockerExtraArgs)) for k := range this.DockerExtraArgs { keysForDockerExtraArgs = append(keysForDockerExtraArgs, k) @@ -11497,11 +11709,12 @@ func (this *ClusterSpec) String() string { `ControllerManagerExtraArgs:` + mapStringForControllerManagerExtraArgs + `,`, `SchedulerExtraArgs:` + mapStringForSchedulerExtraArgs + `,`, `ServiceCIDR:` + valueToStringGenerated(this.ServiceCIDR) + `,`, - `ClusterCredentialRef:` + strings.Replace(fmt.Sprintf("%v", this.ClusterCredentialRef), "LocalObjectReference", "v11.LocalObjectReference", 1) + `,`, + `ClusterCredentialRef:` + strings.Replace(fmt.Sprintf("%v", this.ClusterCredentialRef), "LocalObjectReference", "v12.LocalObjectReference", 1) + `,`, `Etcd:` + strings.Replace(this.Etcd.String(), "Etcd", "Etcd", 1) + `,`, `HostnameAsNodename:` + fmt.Sprintf("%v", this.HostnameAsNodename) + `,`, `NetworkArgs:` + mapStringForNetworkArgs + `,`, `ScalingMachines:` + repeatedStringForScalingMachines + `,`, + `BootstrapApps:` + repeatedStringForBootstrapApps + `,`, `}`, }, "") return s @@ -12732,6 +12945,125 @@ func (m *AddonSpec) Unmarshal(dAtA []byte) error { } return nil } +func (m *App) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: App: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: App: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ObjectMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ObjectMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Spec", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Spec.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} func (m *AuthzWebhookAddr) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 @@ -12857,6 +13189,92 @@ func (m *AuthzWebhookAddr) Unmarshal(dAtA []byte) error { } return nil } +func (m *BootstrapApp) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: BootstrapApp: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: BootstrapApp: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field App", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.App.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} func (m *BuiltinAuthzWebhookAddr) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 @@ -17283,7 +17701,7 @@ func (m *ClusterMachine) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.Taints = append(m.Taints, v11.Taint{}) + m.Taints = append(m.Taints, v12.Taint{}) if err := m.Taints[len(m.Taints)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } @@ -19119,7 +19537,7 @@ func (m *ClusterSpec) Unmarshal(dAtA []byte) error { return io.ErrUnexpectedEOF } if m.ClusterCredentialRef == nil { - m.ClusterCredentialRef = &v11.LocalObjectReference{} + m.ClusterCredentialRef = &v12.LocalObjectReference{} } if err := m.ClusterCredentialRef.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err @@ -19342,6 +19760,40 @@ func (m *ClusterSpec) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex + case 26: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field BootstrapApps", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.BootstrapApps = append(m.BootstrapApps, BootstrapApp{}) + if err := m.BootstrapApps[len(m.BootstrapApps)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) @@ -26170,7 +26622,7 @@ func (m *MachineSpec) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.Taints = append(m.Taints, v11.Taint{}) + m.Taints = append(m.Taints, v12.Taint{}) if err := m.Taints[len(m.Taints)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } diff --git a/api/platform/v1/generated.proto b/api/platform/v1/generated.proto index 44b2186c0..2e9df8ee3 100644 --- a/api/platform/v1/generated.proto +++ b/api/platform/v1/generated.proto @@ -28,6 +28,7 @@ import "k8s.io/apimachinery/pkg/apis/meta/v1/generated.proto"; import "k8s.io/apimachinery/pkg/runtime/generated.proto"; import "k8s.io/apimachinery/pkg/runtime/schema/generated.proto"; import "k8s.io/apimachinery/pkg/util/intstr/generated.proto"; +import "tkestack.io/tke/api/application/v1/generated.proto"; // Package-wide variables from generator "generated". option go_package = "v1"; @@ -41,6 +42,14 @@ message AddonSpec { optional string version = 3; } +message App { + // +optional + optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; + + // +optional + optional tkestack.io.tke.api.application.v1.AppSpec spec = 2; +} + message AuthzWebhookAddr { // +optional optional BuiltinAuthzWebhookAddr builtin = 1; @@ -49,6 +58,10 @@ message AuthzWebhookAddr { optional ExternalAuthzWebhookAddr external = 2; } +message BootstrapApp { + optional App app = 1; +} + message BuiltinAuthzWebhookAddr { } @@ -524,6 +537,10 @@ message ClusterSpec { // +optional repeated ClusterMachine scalingMachines = 25; + + // BootstrapApps will install apps during creating cluster + // +optional + repeated BootstrapApp bootstrapApps = 26; } // ClusterStatus represents information about the status of a cluster. diff --git a/api/platform/v1/types.go b/api/platform/v1/types.go index 59a9c1ecb..6353d15d4 100644 --- a/api/platform/v1/types.go +++ b/api/platform/v1/types.go @@ -23,6 +23,7 @@ import ( "k8s.io/apimachinery/pkg/api/resource" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/util/intstr" + applicationv1 "tkestack.io/tke/api/application/v1" ) // +genclient @@ -156,6 +157,9 @@ type ClusterSpec struct { NetworkArgs map[string]string `json:"networkArgs,omitempty" protobuf:"bytes,24,name=networkArgs"` // +optional ScalingMachines []ClusterMachine `json:"scalingMachines,omitempty" protobuf:"bytes,25,opt,name=scalingMachines"` + // BootstrapApps will install apps during creating cluster + // +optional + BootstrapApps BootstrapApps `json:"bootstrapApps,omitempty" protobuf:"bytes,26,opt,name=bootstrapApps"` } // ClusterStatus represents information about the status of a cluster. @@ -396,6 +400,19 @@ type ClusterFeature struct { Upgrade Upgrade `json:"upgrade,omitempty" protobuf:"bytes,22,opt,name=upgrade"` } +type BootstrapApps []BootstrapApp + +type BootstrapApp struct { + App App `json:"app,omitempty" protobuf:"bytes,1,opt,name=app"` +} + +type App struct { + // +optional + metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + // +optional + Spec applicationv1.AppSpec `json:"spec,omitempty" protobuf:"bytes,2,opt,name=spec"` +} + type HA struct { TKEHA *TKEHA `json:"tke,omitempty" protobuf:"bytes,1,opt,name=tke"` ThirdPartyHA *ThirdPartyHA `json:"thirdParty,omitempty" protobuf:"bytes,2,opt,name=thirdParty"` diff --git a/api/platform/v1/types_swagger_doc_generated.go b/api/platform/v1/types_swagger_doc_generated.go index 5f8d5e8ab..68ba5d5e4 100644 --- a/api/platform/v1/types_swagger_doc_generated.go +++ b/api/platform/v1/types_swagger_doc_generated.go @@ -279,6 +279,7 @@ var map_ClusterSpec = map[string]string{ "clusterCredentialRef": "ClusterCredentialRef for isolate sensitive information. If not specified, cluster controller will create one; If specified, provider must make sure is valid.", "etcd": "Etcd holds configuration for etcd.", "hostnameAsNodename": "If true will use hostname as nodename, if false will use machine IP as nodename.", + "bootstrapApps": "BootstrapApps will install apps during creating cluster", } func (ClusterSpec) SwaggerDoc() map[string]string { diff --git a/api/platform/v1/zz_generated.conversion.go b/api/platform/v1/zz_generated.conversion.go index 7be5c397c..f85acdaf2 100644 --- a/api/platform/v1/zz_generated.conversion.go +++ b/api/platform/v1/zz_generated.conversion.go @@ -50,6 +50,16 @@ func RegisterConversions(s *runtime.Scheme) error { }); err != nil { return err } + if err := s.AddGeneratedConversionFunc((*App)(nil), (*platform.App)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1_App_To_platform_App(a.(*App), b.(*platform.App), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*platform.App)(nil), (*App)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_platform_App_To_v1_App(a.(*platform.App), b.(*App), scope) + }); err != nil { + return err + } if err := s.AddGeneratedConversionFunc((*AuthzWebhookAddr)(nil), (*platform.AuthzWebhookAddr)(nil), func(a, b interface{}, scope conversion.Scope) error { return Convert_v1_AuthzWebhookAddr_To_platform_AuthzWebhookAddr(a.(*AuthzWebhookAddr), b.(*platform.AuthzWebhookAddr), scope) }); err != nil { @@ -1082,6 +1092,28 @@ func Convert_platform_AddonSpec_To_v1_AddonSpec(in *platform.AddonSpec, out *Add return autoConvert_platform_AddonSpec_To_v1_AddonSpec(in, out, s) } +func autoConvert_v1_App_To_platform_App(in *App, out *platform.App, s conversion.Scope) error { + out.ObjectMeta = in.ObjectMeta + out.Spec = in.Spec + return nil +} + +// Convert_v1_App_To_platform_App is an autogenerated conversion function. +func Convert_v1_App_To_platform_App(in *App, out *platform.App, s conversion.Scope) error { + return autoConvert_v1_App_To_platform_App(in, out, s) +} + +func autoConvert_platform_App_To_v1_App(in *platform.App, out *App, s conversion.Scope) error { + out.ObjectMeta = in.ObjectMeta + out.Spec = in.Spec + return nil +} + +// Convert_platform_App_To_v1_App is an autogenerated conversion function. +func Convert_platform_App_To_v1_App(in *platform.App, out *App, s conversion.Scope) error { + return autoConvert_platform_App_To_v1_App(in, out, s) +} + func autoConvert_v1_AuthzWebhookAddr_To_platform_AuthzWebhookAddr(in *AuthzWebhookAddr, out *platform.AuthzWebhookAddr, s conversion.Scope) error { out.Builtin = (*platform.BuiltinAuthzWebhookAddr)(unsafe.Pointer(in.Builtin)) out.External = (*platform.ExternalAuthzWebhookAddr)(unsafe.Pointer(in.External)) @@ -1859,6 +1891,7 @@ func autoConvert_v1_ClusterSpec_To_platform_ClusterSpec(in *ClusterSpec, out *pl out.HostnameAsNodename = in.HostnameAsNodename out.NetworkArgs = *(*map[string]string)(unsafe.Pointer(&in.NetworkArgs)) out.ScalingMachines = *(*[]platform.ClusterMachine)(unsafe.Pointer(&in.ScalingMachines)) + out.BootstrapApps = *(*platform.BootstrapApps)(unsafe.Pointer(&in.BootstrapApps)) return nil } @@ -1896,6 +1929,7 @@ func autoConvert_platform_ClusterSpec_To_v1_ClusterSpec(in *platform.ClusterSpec out.Etcd = (*Etcd)(unsafe.Pointer(in.Etcd)) out.HostnameAsNodename = in.HostnameAsNodename out.NetworkArgs = *(*map[string]string)(unsafe.Pointer(&in.NetworkArgs)) + out.BootstrapApps = *(*BootstrapApps)(unsafe.Pointer(&in.BootstrapApps)) return nil } diff --git a/api/platform/v1/zz_generated.deepcopy.go b/api/platform/v1/zz_generated.deepcopy.go index 06fcd3ccf..87eb67795 100644 --- a/api/platform/v1/zz_generated.deepcopy.go +++ b/api/platform/v1/zz_generated.deepcopy.go @@ -44,6 +44,24 @@ func (in *AddonSpec) DeepCopy() *AddonSpec { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *App) DeepCopyInto(out *App) { + *out = *in + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + in.Spec.DeepCopyInto(&out.Spec) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new App. +func (in *App) DeepCopy() *App { + if in == nil { + return nil + } + out := new(App) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *AuthzWebhookAddr) DeepCopyInto(out *AuthzWebhookAddr) { *out = *in @@ -70,6 +88,45 @@ func (in *AuthzWebhookAddr) DeepCopy() *AuthzWebhookAddr { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *BootstrapApp) DeepCopyInto(out *BootstrapApp) { + *out = *in + in.App.DeepCopyInto(&out.App) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new BootstrapApp. +func (in *BootstrapApp) DeepCopy() *BootstrapApp { + if in == nil { + return nil + } + out := new(BootstrapApp) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in BootstrapApps) DeepCopyInto(out *BootstrapApps) { + { + in := &in + *out = make(BootstrapApps, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + return + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new BootstrapApps. +func (in BootstrapApps) DeepCopy() BootstrapApps { + if in == nil { + return nil + } + out := new(BootstrapApps) + in.DeepCopyInto(out) + return *out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *BuiltinAuthzWebhookAddr) DeepCopyInto(out *BuiltinAuthzWebhookAddr) { *out = *in @@ -915,6 +972,13 @@ func (in *ClusterSpec) DeepCopyInto(out *ClusterSpec) { (*in)[i].DeepCopyInto(&(*out)[i]) } } + if in.BootstrapApps != nil { + in, out := &in.BootstrapApps, &out.BootstrapApps + *out = make(BootstrapApps, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } return } diff --git a/api/platform/v1/zz_generated.defaults.go b/api/platform/v1/zz_generated.defaults.go index bf0ada0d2..e41cb7f08 100644 --- a/api/platform/v1/zz_generated.defaults.go +++ b/api/platform/v1/zz_generated.defaults.go @@ -24,6 +24,7 @@ package v1 import ( runtime "k8s.io/apimachinery/pkg/runtime" + applicationv1 "tkestack.io/tke/api/application/v1" ) // RegisterDefaults adds defaulters functions to the given scheme. @@ -72,6 +73,10 @@ func SetObjectDefaults_CSIOperatorList(in *CSIOperatorList) { func SetObjectDefaults_Cluster(in *Cluster) { SetDefaults_ClusterSpec(&in.Spec) + for i := range in.Spec.BootstrapApps { + a := &in.Spec.BootstrapApps[i] + applicationv1.SetDefaults_AppSpec(&a.App.Spec) + } SetDefaults_ClusterStatus(&in.Status) } diff --git a/api/platform/validation/cluster.go b/api/platform/validation/cluster.go index bdfa30ac9..37928c0ec 100644 --- a/api/platform/validation/cluster.go +++ b/api/platform/validation/cluster.go @@ -23,6 +23,7 @@ import ( "os" "path" "path/filepath" + "reflect" "strings" apimachineryvalidation "k8s.io/apimachinery/pkg/api/validation" @@ -66,10 +67,19 @@ func ValidateClusterUpdate(cluster *types.Cluster, oldCluster *types.Cluster) fi allErrs = append(allErrs, ValidatClusterSpec(&cluster.Spec, field.NewPath("spec"), false)...) allErrs = append(allErrs, ValidateClusterByProvider(cluster)...) allErrs = append(allErrs, ValidateClusterScale(cluster.Cluster, oldCluster.Cluster, fldPath.Child("machines"))...) + allErrs = append(allErrs, ValidateBootstrapApps(cluster.Cluster, oldCluster.Cluster, fldPath.Child("bootstrapApps"))...) return allErrs } +func ValidateBootstrapApps(cluster *platform.Cluster, oldCluster *platform.Cluster, fldPath *field.Path) field.ErrorList { + allErrs := field.ErrorList{} + if !reflect.DeepEqual(cluster.Spec.BootstrapApps, oldCluster.Spec.BootstrapApps) { + allErrs = append(allErrs, field.Invalid(fldPath, "bootstrapApps", "bootstrap apps are not allowed be edited")) + } + return allErrs +} + // ValidateClusterScale tests if master scale up/down to a cluster is valid. func ValidateClusterScale(cluster *platform.Cluster, oldCluster *platform.Cluster, fldPath *field.Path) field.ErrorList { diff --git a/api/platform/zz_generated.deepcopy.go b/api/platform/zz_generated.deepcopy.go index 624333b9f..0b21b7d81 100644 --- a/api/platform/zz_generated.deepcopy.go +++ b/api/platform/zz_generated.deepcopy.go @@ -43,6 +43,24 @@ func (in *AddonSpec) DeepCopy() *AddonSpec { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *App) DeepCopyInto(out *App) { + *out = *in + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + in.Spec.DeepCopyInto(&out.Spec) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new App. +func (in *App) DeepCopy() *App { + if in == nil { + return nil + } + out := new(App) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *AuthzWebhookAddr) DeepCopyInto(out *AuthzWebhookAddr) { *out = *in @@ -69,6 +87,45 @@ func (in *AuthzWebhookAddr) DeepCopy() *AuthzWebhookAddr { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *BootstapApp) DeepCopyInto(out *BootstapApp) { + *out = *in + in.App.DeepCopyInto(&out.App) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new BootstapApp. +func (in *BootstapApp) DeepCopy() *BootstapApp { + if in == nil { + return nil + } + out := new(BootstapApp) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in BootstrapApps) DeepCopyInto(out *BootstrapApps) { + { + in := &in + *out = make(BootstrapApps, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + return + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new BootstrapApps. +func (in BootstrapApps) DeepCopy() BootstrapApps { + if in == nil { + return nil + } + out := new(BootstrapApps) + in.DeepCopyInto(out) + return *out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *BuiltinAuthzWebhookAddr) DeepCopyInto(out *BuiltinAuthzWebhookAddr) { *out = *in @@ -914,6 +971,13 @@ func (in *ClusterSpec) DeepCopyInto(out *ClusterSpec) { (*out)[key] = val } } + if in.BootstrapApps != nil { + in, out := &in.BootstrapApps, &out.BootstrapApps + *out = make(BootstrapApps, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } return } diff --git a/cmd/tke-installer/app/installer/installer.go b/cmd/tke-installer/app/installer/installer.go index 086ee343e..4ad11aa39 100644 --- a/cmd/tke-installer/app/installer/installer.go +++ b/cmd/tke-installer/app/installer/installer.go @@ -1491,6 +1491,7 @@ func (t *TKE) prepareBaremetalProviderConfig(ctx context.Context) error { providerConfig.Business.Enabled = true } providerConfig.PlatformAPIClientConfig = "conf/tke-platform-config.yaml" + providerConfig.ApplicationAPIClientConfig = "conf/tke-application-config.yaml" // todo using ingress to expose authz service for ha.( // users do not known nodeport when assigned vport in third party loadbalance) providerConfig.AuthzWebhook.Endpoint = t.authzWebhookBuiltinEndpoint() diff --git a/cmd/tke-installer/app/installer/manifests/tke-platform-controller/tke-platform-controller.yaml b/cmd/tke-installer/app/installer/manifests/tke-platform-controller/tke-platform-controller.yaml index 4b9ee3a83..44e01bf8b 100644 --- a/cmd/tke-installer/app/installer/manifests/tke-platform-controller/tke-platform-controller.yaml +++ b/cmd/tke-installer/app/installer/manifests/tke-platform-controller/tke-platform-controller.yaml @@ -137,6 +137,10 @@ data: api_server = "https://tke-platform-api" api_server_client_config = "/app/conf/tke-platform-config.yaml" + [client.application] + api_server = "https://tke-application-api" + api_server_client_config = "/app/conf/tke-application-config.yaml" + [registry] container_domain = "{{ .RegistryDomain }}" container_namespace = "{{ .RegistryNamespace }}" @@ -164,3 +168,23 @@ data: cluster: tke user: admin-cert name: tke + + tke-application-config.yaml: | + apiVersion: v1 + kind: Config + clusters: + - name: tke + cluster: + certificate-authority: /app/certs/ca.crt + server: https://tke-application-api + users: + - name: admin-cert + user: + client-certificate: /app/certs/admin.crt + client-key: /app/certs/admin.key + current-context: tke + contexts: + - context: + cluster: tke + user: admin-cert + name: tke \ No newline at end of file diff --git a/cmd/tke-platform-controller/app/config/config.go b/cmd/tke-platform-controller/app/config/config.go index f5420144d..c4a8cc30a 100644 --- a/cmd/tke-platform-controller/app/config/config.go +++ b/cmd/tke-platform-controller/app/config/config.go @@ -46,8 +46,10 @@ type Config struct { LeaderElectionClient *versionedclientset.Clientset // the rest config for the platform apiserver PlatformAPIServerClientConfig *restclient.Config - Component controlleroptions.ComponentConfiguration - Features *options.FeatureOptions + // the rest config for the application apiserver + ApplicationAPIServerClientConfig *restclient.Config + Component controlleroptions.ComponentConfiguration + Features *options.FeatureOptions ClusterController clusterconfig.ClusterControllerConfiguration MachineController machineconfig.MachineControllerConfiguration @@ -73,6 +75,11 @@ func CreateConfigFromOptions(serverName string, opts *options.Options) (*Config, config.Timeout = opts.Component.LeaderElection.RenewDeadline leaderElectionClient := versionedclientset.NewForConfigOrDie(restclient.AddUserAgent(&config, "leader-election")) + applicationAPIServerClientConfig, _, err := controllerconfig.BuildClientConfig(opts.ApplicationAPIClient) + if err != nil { + return nil, err + } + controllerManagerConfig := &Config{ ServerName: serverName, LeaderElectionClient: leaderElectionClient, @@ -83,7 +90,8 @@ func CreateConfigFromOptions(serverName string, opts *options.Options) (*Config, Authentication: apiserver.AuthenticationInfo{ Authenticator: anonymous.NewAuthenticator(), }, - Features: opts.FeatureOptions, + Features: opts.FeatureOptions, + ApplicationAPIServerClientConfig: applicationAPIServerClientConfig, } if err := opts.Component.ApplyTo(&controllerManagerConfig.Component); err != nil { diff --git a/cmd/tke-platform-controller/app/context.go b/cmd/tke-platform-controller/app/context.go index 5428ed967..a86d8cfb3 100755 --- a/cmd/tke-platform-controller/app/context.go +++ b/cmd/tke-platform-controller/app/context.go @@ -26,7 +26,10 @@ import ( "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/apimachinery/pkg/util/wait" cacheddiscovery "k8s.io/client-go/discovery/cached" + "k8s.io/client-go/rest" "k8s.io/client-go/restmapper" + versionedclientset "tkestack.io/tke/api/client/clientset/versioned" + applicationv1 "tkestack.io/tke/api/client/clientset/versioned/typed/application/v1" versionedinformers "tkestack.io/tke/api/client/informers/externalversions" "tkestack.io/tke/cmd/tke-platform-controller/app/config" "tkestack.io/tke/pkg/controller" @@ -71,8 +74,9 @@ type ControllerContext struct { ControllerStartInterval time.Duration // Remote write/read address for prometheus - RemoteAddresses []string - RemoteType string + RemoteAddresses []string + RemoteType string + ApplicationClient applicationv1.ApplicationV1Interface } // IsControllerEnabled returns whether the controller has been enabled @@ -84,6 +88,15 @@ func (c ControllerContext) IsControllerEnabled(name string) bool { // controllers such as the cloud provider and clientBuilder. rootClientBuilder is only used for // the shared-informers client and token controller. func CreateControllerContext(cfg *config.Config, rootClientBuilder controller.ClientBuilder, stop <-chan struct{}) (ControllerContext, error) { + var applicationClientset *versionedclientset.Clientset + var applicationClient applicationv1.ApplicationV1Interface + var err error + if cfg.ApplicationAPIServerClientConfig != nil { + applicationClientset, err = versionedclientset.NewForConfig(rest.AddUserAgent(cfg.ApplicationAPIServerClientConfig, "tke-platform-controller")) + if err != nil { + return ControllerContext{}, fmt.Errorf("failed to create the application client: %v", err) + } + } versionedClient := rootClientBuilder.ClientOrDie("shared-informers") sharedInformers := versionedinformers.NewSharedInformerFactory(versionedClient, controller.ResyncPeriod(&cfg.Component)()) @@ -105,6 +118,11 @@ func CreateControllerContext(cfg *config.Config, rootClientBuilder controller.Cl if err != nil { return ControllerContext{}, err } + if applicationClientset != nil { + applicationClient = applicationClientset.ApplicationV1() + } else { + applicationClient = nil + } ctx := ControllerContext{ ClientBuilder: rootClientBuilder, @@ -118,6 +136,7 @@ func CreateControllerContext(cfg *config.Config, rootClientBuilder controller.Cl ControllerStartInterval: cfg.Component.ControllerStartInterval, RemoteAddresses: cfg.Features.MonitorStorageAddresses, RemoteType: cfg.Features.MonitorStorageType, + ApplicationClient: applicationClient, } return ctx, nil } diff --git a/cmd/tke-platform-controller/app/controller.go b/cmd/tke-platform-controller/app/controller.go index da5b4ad92..fb99e0d8a 100644 --- a/cmd/tke-platform-controller/app/controller.go +++ b/cmd/tke-platform-controller/app/controller.go @@ -60,6 +60,7 @@ func NewControllerInitializers() map[string]InitFunc { controllers["prometheus"] = startPrometheusController controllers["ipam"] = startIPAMController controllers["lbcf"] = startLBCFControllerController + controllers["bootstrapapps"] = startBootstrapAppsController return controllers } diff --git a/cmd/tke-platform-controller/app/options/options.go b/cmd/tke-platform-controller/app/options/options.go index 543b01aa9..08f2f500d 100644 --- a/cmd/tke-platform-controller/app/options/options.go +++ b/cmd/tke-platform-controller/app/options/options.go @@ -37,13 +37,14 @@ const ( // Options is the main context object for the TKE controller manager. type Options struct { - Log *log.Options - Debug *apiserveroptions.DebugOptions - SecureServing *apiserveroptions.SecureServingOptions - Component *controlleroptions.ComponentOptions - PlatformAPIClient *controlleroptions.APIServerClientOptions - Registry *apiserveroptions.RegistryOptions - FeatureOptions *FeatureOptions + Log *log.Options + Debug *apiserveroptions.DebugOptions + SecureServing *apiserveroptions.SecureServingOptions + Component *controlleroptions.ComponentOptions + ApplicationAPIClient *controlleroptions.APIServerClientOptions + PlatformAPIClient *controlleroptions.APIServerClientOptions + Registry *apiserveroptions.RegistryOptions + FeatureOptions *FeatureOptions ClusterController *ClusterControllerOptions MachineController *MachineControllerOptions @@ -52,13 +53,14 @@ type Options struct { // NewOptions creates a new Options with a default config. func NewOptions(serverName string, allControllers []string, disabledByDefaultControllers []string) *Options { return &Options{ - Log: log.NewOptions(), - Debug: apiserveroptions.NewDebugOptions(), - SecureServing: apiserveroptions.NewSecureServingOptions(serverName, 9445), - Component: controlleroptions.NewComponentOptions(allControllers, disabledByDefaultControllers), - PlatformAPIClient: controlleroptions.NewAPIServerClientOptions("platform", true), - Registry: apiserveroptions.NewRegistryOptions(), - FeatureOptions: NewFeatureOptions(), + Log: log.NewOptions(), + Debug: apiserveroptions.NewDebugOptions(), + SecureServing: apiserveroptions.NewSecureServingOptions(serverName, 9445), + Component: controlleroptions.NewComponentOptions(allControllers, disabledByDefaultControllers), + PlatformAPIClient: controlleroptions.NewAPIServerClientOptions("platform", true), + ApplicationAPIClient: controlleroptions.NewAPIServerClientOptions("application", false), + Registry: apiserveroptions.NewRegistryOptions(), + FeatureOptions: NewFeatureOptions(), ClusterController: NewClusterControllerOptions(), MachineController: NewMachineControllerOptions(), @@ -72,6 +74,7 @@ func (o *Options) AddFlags(fs *pflag.FlagSet) { o.SecureServing.AddFlags(fs) o.Component.AddFlags(fs) o.PlatformAPIClient.AddFlags(fs) + o.ApplicationAPIClient.AddFlags(fs) o.Registry.AddFlags(fs) o.FeatureOptions.AddFlags(fs) o.ClusterController.AddFlags(fs) @@ -88,6 +91,7 @@ func (o *Options) ApplyFlags() []error { errs = append(errs, o.SecureServing.ApplyFlags()...) errs = append(errs, o.Component.ApplyFlags()...) errs = append(errs, o.PlatformAPIClient.ApplyFlags()...) + errs = append(errs, o.ApplicationAPIClient.ApplyFlags()...) errs = append(errs, o.Registry.ApplyFlags()...) errs = append(errs, o.FeatureOptions.ApplyFlags()...) errs = append(errs, o.ClusterController.ApplyFlags()...) diff --git a/cmd/tke-platform-controller/app/platform.go b/cmd/tke-platform-controller/app/platform.go index 870415c66..0018c70a9 100755 --- a/cmd/tke-platform-controller/app/platform.go +++ b/cmd/tke-platform-controller/app/platform.go @@ -23,6 +23,8 @@ import ( "time" "k8s.io/apimachinery/pkg/runtime/schema" + versionedclientset "tkestack.io/tke/api/client/clientset/versioned" + "tkestack.io/tke/api/client/informers/externalversions" platformv1 "tkestack.io/tke/api/platform/v1" "tkestack.io/tke/pkg/platform/controller/addon/cronhpa" "tkestack.io/tke/pkg/platform/controller/addon/helm" @@ -34,6 +36,7 @@ import ( "tkestack.io/tke/pkg/platform/controller/addon/storage/csioperator" "tkestack.io/tke/pkg/platform/controller/addon/storage/volumedecorator" "tkestack.io/tke/pkg/platform/controller/addon/tappcontroller" + bootstrapps "tkestack.io/tke/pkg/platform/controller/bootstrapapps" clustercontroller "tkestack.io/tke/pkg/platform/controller/cluster" "tkestack.io/tke/pkg/platform/controller/machine" ) @@ -276,3 +279,29 @@ func startLBCFControllerController(ctx ControllerContext) (http.Handler, bool, e return nil, true, nil } + +func startBootstrapAppsController(ctx ControllerContext) (http.Handler, bool, error) { + if !ctx.AvailableResources[schema.GroupVersionResource{Group: platformv1.GroupName, Version: "v1", Resource: "clusters"}] || + ctx.ApplicationClient == nil { + return nil, false, nil + } + appclientset := versionedclientset.NewForConfigOrDie(ctx.Config.ApplicationAPIServerClientConfig) + appInformerFactory := externalversions.NewSharedInformerFactory(appclientset, ctx.ResyncPeriod()) + + ctrl := bootstrapps.NewBootstrapAppsController( + ctx.ClientBuilder.ClientOrDie("bootstrap-apps-controller").PlatformV1(), + appclientset.ApplicationV1(), + ctx.InformerFactory.Platform().V1().Clusters(), + appInformerFactory.Application().V1().Apps(), + ctx.Config.ClusterController, + platformv1.ClusterFinalize, + ) + + appInformerFactory.Start(ctx.Stop) + + go func() { + _ = ctrl.Run(ctx.Config.ClusterController.ConcurrentClusterSyncs, ctx.Stop) + }() + + return nil, true, nil +} diff --git a/pkg/platform/controller/bootstrapapps/controller.go b/pkg/platform/controller/bootstrapapps/controller.go new file mode 100644 index 000000000..07cc56837 --- /dev/null +++ b/pkg/platform/controller/bootstrapapps/controller.go @@ -0,0 +1,260 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ + +package clusterapp + +import ( + "context" + "fmt" + "math/rand" + "time" + + "golang.org/x/time/rate" + apierrors "k8s.io/apimachinery/pkg/api/errors" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + utilruntime "k8s.io/apimachinery/pkg/util/runtime" + "k8s.io/apimachinery/pkg/util/wait" + "k8s.io/client-go/tools/cache" + "k8s.io/client-go/util/retry" + "k8s.io/client-go/util/workqueue" + applicationv1 "tkestack.io/tke/api/application/v1" + applicationversionedclient "tkestack.io/tke/api/client/clientset/versioned/typed/application/v1" + platformversionedclient "tkestack.io/tke/api/client/clientset/versioned/typed/platform/v1" + applicationv1informer "tkestack.io/tke/api/client/informers/externalversions/application/v1" + platformv1informer "tkestack.io/tke/api/client/informers/externalversions/platform/v1" + applicationv1lister "tkestack.io/tke/api/client/listers/application/v1" + platformv1lister "tkestack.io/tke/api/client/listers/platform/v1" + platformv1 "tkestack.io/tke/api/platform/v1" + controllerutil "tkestack.io/tke/pkg/controller" + clusterconfig "tkestack.io/tke/pkg/platform/controller/cluster/config" + "tkestack.io/tke/pkg/util/log" + "tkestack.io/tke/pkg/util/metrics" +) + +const ( + conditionTypeHealthCheck = "HealthCheck" + conditionTypeEnsureBootstrapApps = "EnsureBootstrapApps" +) + +// BootstrapAppsController is responsible for performing actions dependent upon a cluster phase. +type BootstrapAppsController struct { + queue workqueue.RateLimitingInterface + clsLister platformv1lister.ClusterLister + clsSynced cache.InformerSynced + appLister applicationv1lister.AppLister + appSynced cache.InformerSynced + + log log.Logger + platformClient platformversionedclient.PlatformV1Interface + applicationClient applicationversionedclient.ApplicationV1Interface +} + +// NewBootstrapAppsController creates a new Controller object. +func NewBootstrapAppsController( + platformClient platformversionedclient.PlatformV1Interface, + applicationClient applicationversionedclient.ApplicationV1Interface, + clsInformer platformv1informer.ClusterInformer, + appInformer applicationv1informer.AppInformer, + configuration clusterconfig.ClusterControllerConfiguration, + finalizerToken platformv1.FinalizerName) *BootstrapAppsController { + rand.Seed(time.Now().Unix()) + rateLimit := workqueue.NewMaxOfRateLimiter( + workqueue.NewItemExponentialFailureRateLimiter(5*time.Millisecond, 1000*time.Second), + &workqueue.BucketRateLimiter{Limiter: rate.NewLimiter(rate.Limit(configuration.BucketRateLimiterLimit), configuration.BucketRateLimiterBurst)}, + ) + c := &BootstrapAppsController{ + queue: workqueue.NewNamedRateLimitingQueue(rateLimit, "cluster"), + + log: log.WithName("BootstrapAppsController"), + platformClient: platformClient, + applicationClient: applicationClient, + } + + if platformClient != nil && platformClient.RESTClient().GetRateLimiter() != nil { + _ = metrics.RegisterMetricAndTrackRateLimiterUsage("bootstrapApps_controller", platformClient.RESTClient().GetRateLimiter()) + } + + clsInformer.Informer().AddEventHandlerWithResyncPeriod( + cache.ResourceEventHandlerFuncs{ + UpdateFunc: func(oldObj, newObj interface{}) { + old, ok1 := oldObj.(*platformv1.Cluster) + cur, ok2 := newObj.(*platformv1.Cluster) + if ok1 && ok2 && c.needsUpdate(old, cur) { + c.enqueue(cur) + } + }, + }, + configuration.ClusterSyncPeriod, + ) + + c.clsLister = clsInformer.Lister() + c.clsSynced = clsInformer.Informer().HasSynced + c.appLister = appInformer.Lister() + c.appSynced = appInformer.Informer().HasSynced + + return c +} + +func (c *BootstrapAppsController) enqueue(obj *platformv1.Cluster) { + key, err := controllerutil.KeyFunc(obj) + if err != nil { + utilruntime.HandleError(fmt.Errorf("couldn't get key for object %+v: %v", obj, err)) + return + } + c.queue.Add(key) +} + +func (c *BootstrapAppsController) needsUpdate(old *platformv1.Cluster, new *platformv1.Cluster) bool { + healthCheckDone := false + for _, condition := range new.Status.Conditions { + if condition.Type == conditionTypeHealthCheck && condition.Status == platformv1.ConditionTrue { + healthCheckDone = true + } + if condition.Type == conditionTypeEnsureBootstrapApps && condition.Status == platformv1.ConditionTrue { + return false + } + } + + return healthCheckDone +} + +// Run will set up the event handlers for types we are interested in, as well +// as syncing informer caches and starting workers. +func (c *BootstrapAppsController) Run(workers int, stopCh <-chan struct{}) error { + defer utilruntime.HandleCrash() + defer c.queue.ShutDown() + + // Start the informer factories to begin populating the informer caches + log.Info("Starting bootstrapApps controller") + defer log.Info("Shutting down bootstrapApps controller") + + if ok := cache.WaitForCacheSync(stopCh, c.clsSynced); !ok { + return fmt.Errorf("failed to wait for cluster caches to sync") + } + + for i := 0; i < workers; i++ { + go wait.Until(c.worker, time.Second, stopCh) + } + + <-stopCh + + return nil +} + +// worker processes the queue of persistent event objects. +// Each cluster can be in the queue at most once. +// The system ensures that no two workers can process +// the same namespace at the same time. +func (c *BootstrapAppsController) worker() { + for c.processNextWorkItem() { + } +} + +func (c *BootstrapAppsController) processNextWorkItem() bool { + key, quit := c.queue.Get() + if quit { + return false + } + defer c.queue.Done(key) + + err := c.sync(key.(string)) + if err == nil { + c.queue.Forget(key) + return true + } + + utilruntime.HandleError(fmt.Errorf("error processing cluster %v (will retry): %v", key, err)) + c.queue.AddRateLimited(key) + return true +} + +// sync will sync the Cluster with the given key if it has had +// its expectations fulfilled, meaning it did not expect to see any more of its +// namespaces created or deleted. This function is not meant to be invoked +// concurrently with the same key. +func (c *BootstrapAppsController) sync(key string) error { + ctx := c.log.WithValues("bootstrapApps", key).WithContext(context.TODO()) + + startTime := time.Now() + defer func() { + log.FromContext(ctx).Info("Finished syncing bootstrap apps", "processTime", time.Since(startTime).String()) + }() + + _, name, err := cache.SplitMetaNamespaceKey(key) + if err != nil { + return err + } + + cluster, err := c.clsLister.Get(name) + if apierrors.IsNotFound(err) { + log.FromContext(ctx).Info("cluster has been deleted") + } + if err != nil { + utilruntime.HandleError(fmt.Errorf("unable to retrieve cluster %v from store: %v", key, err)) + return err + } + + return c.syncBootstrapApps(ctx, cluster) +} + +func (c *BootstrapAppsController) syncBootstrapApps(ctx context.Context, cls *platformv1.Cluster) error { + logger := log.FromContext(ctx) + conditon := platformv1.ClusterCondition{ + Type: conditionTypeEnsureBootstrapApps, + Status: platformv1.ConditionTrue, + } + + for _, clusterApp := range cls.Spec.BootstrapApps { + clusterApp.App.Spec.TargetCluster = cls.Name + err := c.installApplication(ctx, clusterApp) + if err != nil && apierrors.IsAlreadyExists(err) { + conditon.Status = platformv1.ConditionFalse + conditon.Reason = clusterApp.App.Name + conditon.Message = err.Error() + err := c.updateClsCondition(ctx, cls.Name, conditon) + if err != nil { + return fmt.Errorf("update cls conditon failed: %v", err) + } + return fmt.Errorf("install application failed. %v, %v", clusterApp.App.Name, err) + } + logger.Infof("finish application installation %v", clusterApp.App.Name) + } + return c.updateClsCondition(ctx, cls.Name, conditon) +} + +func (c *BootstrapAppsController) installApplication(ctx context.Context, clusterApp platformv1.BootstrapApp) error { + app := applicationv1.App{ + ObjectMeta: clusterApp.App.ObjectMeta, + Spec: clusterApp.App.Spec, + } + _, err := c.applicationClient.Apps(clusterApp.App.Namespace).Create(ctx, &app, metav1.CreateOptions{}) + + return err +} + +func (c *BootstrapAppsController) updateClsCondition(ctx context.Context, clsName string, condition platformv1.ClusterCondition) error { + return retry.RetryOnConflict(retry.DefaultRetry, func() error { + cls, err := c.clsLister.Get(clsName) + if err != nil { + return err + } + cls.SetCondition(condition, false) + _, err = c.platformClient.Clusters().Update(ctx, cls, metav1.UpdateOptions{}) + return err + }) +} diff --git a/pkg/platform/provider/baremetal/config/config.go b/pkg/platform/provider/baremetal/config/config.go index 5a3b4a3dc..3c2b0e4b0 100644 --- a/pkg/platform/provider/baremetal/config/config.go +++ b/pkg/platform/provider/baremetal/config/config.go @@ -45,17 +45,18 @@ func New(filename string) (*Config, error) { } type Config struct { - PlatformAPIClientConfig string `yaml:"platformAPIClientConfig"` - Registry Registry `yaml:"registry"` - Audit Audit `yaml:"audit"` - Feature Feature `yaml:"feature"` - Docker Docker `yaml:"docker"` - Kubelet Kubelet `yaml:"kubelet"` - APIServer APIServer `yaml:"apiServer"` - ControllerManager ControllerManager `yaml:"controllerManager"` - Scheduler Scheduler `yaml:"scheduler"` - AuthzWebhook AuthzWebhook `yaml:"authzWebhook"` - Business Business `yaml:"business"` + PlatformAPIClientConfig string `yaml:"platformAPIClientConfig"` + ApplicationAPIClientConfig string `yaml:"applicationAPIClientConfig"` + Registry Registry `yaml:"registry"` + Audit Audit `yaml:"audit"` + Feature Feature `yaml:"feature"` + Docker Docker `yaml:"docker"` + Kubelet Kubelet `yaml:"kubelet"` + APIServer APIServer `yaml:"apiServer"` + ControllerManager ControllerManager `yaml:"controllerManager"` + Scheduler Scheduler `yaml:"scheduler"` + AuthzWebhook AuthzWebhook `yaml:"authzWebhook"` + Business Business `yaml:"business"` } func (c *Config) Save(filename string) error { diff --git a/pkg/platform/registry/cluster/strategy.go b/pkg/platform/registry/cluster/strategy.go index d4c8ea6fc..498805db8 100644 --- a/pkg/platform/registry/cluster/strategy.go +++ b/pkg/platform/registry/cluster/strategy.go @@ -24,6 +24,7 @@ import ( "regexp" "strings" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/fields" "k8s.io/apimachinery/pkg/labels" "k8s.io/apimachinery/pkg/runtime" @@ -36,6 +37,7 @@ import ( "tkestack.io/tke/api/platform" "tkestack.io/tke/api/platform/validation" "tkestack.io/tke/pkg/apiserver/authentication" + helmutil "tkestack.io/tke/pkg/application/helm/util" clusterutil "tkestack.io/tke/pkg/platform/provider/baremetal/cluster" clusterprovider "tkestack.io/tke/pkg/platform/provider/cluster" "tkestack.io/tke/pkg/util" @@ -141,6 +143,19 @@ func (s *Strategy) PrepareForCreate(ctx context.Context, obj runtime.Object) { if err != nil { panic(err) } + for i, app := range cluster.Spec.BootstrapApps { + if len(app.App.Spec.Values.RawValues) != 0 { + app.App.Spec.Values.RawValues = helmutil.SafeEncodeValue(app.App.Spec.Values.RawValues) + } + if len(app.App.Namespace) == 0 { + app.App.Namespace = metav1.NamespaceDefault + } + if len(app.App.Name) == 0 { + app.App.Name = "bootstrapapp-" + app.App.Namespace + "-" + app.App.Spec.Name + } + app.App.Spec.TargetCluster = "" + cluster.Spec.BootstrapApps[i] = app + } } // AfterCreate implements a further operation to run after a resource is From 5a57d71d1bc63fc6c2060a70869097dc1bd59b49 Mon Sep 17 00:00:00 2001 From: Chris Date: Fri, 13 Aug 2021 09:39:47 +0800 Subject: [PATCH 04/62] fix(audit): add application.GroupName to controlPlaneGroups (#1475) --- pkg/audit/api/api.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/pkg/audit/api/api.go b/pkg/audit/api/api.go index 923e25984..ad5cb6ad0 100644 --- a/pkg/audit/api/api.go +++ b/pkg/audit/api/api.go @@ -44,6 +44,7 @@ import ( "tkestack.io/tke/api/notify" "tkestack.io/tke/api/platform" "tkestack.io/tke/api/registry" + "tkestack.io/tke/api/application" auditconfig "tkestack.io/tke/pkg/audit/apis/config" auditconfigv1 "tkestack.io/tke/pkg/audit/apis/config/v1" "tkestack.io/tke/pkg/audit/config/codec" @@ -84,6 +85,7 @@ func init() { monitor.GroupName, business.GroupName, auth.GroupName, + application.GroupName, ) k8sClient = initK8sClient() initWatcher() From 53eb3a196f435b330d9a00b9832d72335e68b0e8 Mon Sep 17 00:00:00 2001 From: GaoXiaodong <13814823514@163.com> Date: Fri, 13 Aug 2021 09:53:59 +0800 Subject: [PATCH 05/62] feat(platform): add api-resources support for the target cluster (#1457) Co-authored-by: xdonggao --- .../clustergroupapiresourceitems.go | 84 + .../fake/fake_clustergroupapiresourceitems.go | 71 + .../fake/fake_platform_client.go | 4 + .../internalversion/generated_expansion.go | 2 + .../internalversion/platform_client.go | 5 + .../v1/clustergroupapiresourceitems.go | 84 + .../fake/fake_clustergroupapiresourceitems.go | 71 + .../platform/v1/fake/fake_platform_client.go | 4 + .../typed/platform/v1/generated_expansion.go | 2 + .../typed/platform/v1/platform_client.go | 5 + .../clustergroupapiresourceitems.go | 70 + .../internalversion/expansion_generated.go | 4 + .../v1/clustergroupapiresourceitems.go | 70 + .../platform/v1/expansion_generated.go | 4 + api/openapi/zz_generated.openapi.go | 204 ++ api/platform/register.go | 3 + api/platform/types.go | 55 + api/platform/v1/generated.pb.go | 1957 +++++++++++++---- api/platform/v1/generated.proto | 56 + api/platform/v1/register.go | 3 + api/platform/v1/types.go | 55 + .../v1/types_swagger_doc_generated.go | 36 + api/platform/v1/zz_generated.conversion.go | 112 + api/platform/v1/zz_generated.deepcopy.go | 97 + api/platform/zz_generated.deepcopy.go | 97 + .../registry/cluster/storage/api_resources.go | 97 + .../registry/cluster/storage/storage.go | 5 + pkg/platform/registry/rest/rest.go | 1 + 28 files changed, 2784 insertions(+), 474 deletions(-) create mode 100644 api/client/clientset/internalversion/typed/platform/internalversion/clustergroupapiresourceitems.go create mode 100644 api/client/clientset/internalversion/typed/platform/internalversion/fake/fake_clustergroupapiresourceitems.go create mode 100644 api/client/clientset/versioned/typed/platform/v1/clustergroupapiresourceitems.go create mode 100644 api/client/clientset/versioned/typed/platform/v1/fake/fake_clustergroupapiresourceitems.go create mode 100644 api/client/listers/platform/internalversion/clustergroupapiresourceitems.go create mode 100644 api/client/listers/platform/v1/clustergroupapiresourceitems.go create mode 100644 pkg/platform/registry/cluster/storage/api_resources.go diff --git a/api/client/clientset/internalversion/typed/platform/internalversion/clustergroupapiresourceitems.go b/api/client/clientset/internalversion/typed/platform/internalversion/clustergroupapiresourceitems.go new file mode 100644 index 000000000..ec89fa607 --- /dev/null +++ b/api/client/clientset/internalversion/typed/platform/internalversion/clustergroupapiresourceitems.go @@ -0,0 +1,84 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2020 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ + +// Code generated by client-gen. DO NOT EDIT. + +package internalversion + +import ( + "context" + "time" + + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + rest "k8s.io/client-go/rest" + scheme "tkestack.io/tke/api/client/clientset/internalversion/scheme" + platform "tkestack.io/tke/api/platform" +) + +// ClusterGroupAPIResourceItemsesGetter has a method to return a ClusterGroupAPIResourceItemsInterface. +// A group's client should implement this interface. +type ClusterGroupAPIResourceItemsesGetter interface { + ClusterGroupAPIResourceItemses() ClusterGroupAPIResourceItemsInterface +} + +// ClusterGroupAPIResourceItemsInterface has methods to work with ClusterGroupAPIResourceItems resources. +type ClusterGroupAPIResourceItemsInterface interface { + Get(ctx context.Context, name string, opts v1.GetOptions) (*platform.ClusterGroupAPIResourceItems, error) + List(ctx context.Context, opts v1.ListOptions) (*platform.ClusterGroupAPIResourceItemsList, error) + ClusterGroupAPIResourceItemsExpansion +} + +// clusterGroupAPIResourceItemses implements ClusterGroupAPIResourceItemsInterface +type clusterGroupAPIResourceItemses struct { + client rest.Interface +} + +// newClusterGroupAPIResourceItemses returns a ClusterGroupAPIResourceItemses +func newClusterGroupAPIResourceItemses(c *PlatformClient) *clusterGroupAPIResourceItemses { + return &clusterGroupAPIResourceItemses{ + client: c.RESTClient(), + } +} + +// Get takes name of the clusterGroupAPIResourceItems, and returns the corresponding clusterGroupAPIResourceItems object, and an error if there is any. +func (c *clusterGroupAPIResourceItemses) Get(ctx context.Context, name string, options v1.GetOptions) (result *platform.ClusterGroupAPIResourceItems, err error) { + result = &platform.ClusterGroupAPIResourceItems{} + err = c.client.Get(). + Resource("clustergroupapiresourceitemses"). + Name(name). + VersionedParams(&options, scheme.ParameterCodec). + Do(ctx). + Into(result) + return +} + +// List takes label and field selectors, and returns the list of ClusterGroupAPIResourceItemses that match those selectors. +func (c *clusterGroupAPIResourceItemses) List(ctx context.Context, opts v1.ListOptions) (result *platform.ClusterGroupAPIResourceItemsList, err error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } + result = &platform.ClusterGroupAPIResourceItemsList{} + err = c.client.Get(). + Resource("clustergroupapiresourceitemses"). + VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). + Do(ctx). + Into(result) + return +} diff --git a/api/client/clientset/internalversion/typed/platform/internalversion/fake/fake_clustergroupapiresourceitems.go b/api/client/clientset/internalversion/typed/platform/internalversion/fake/fake_clustergroupapiresourceitems.go new file mode 100644 index 000000000..cbe67c61c --- /dev/null +++ b/api/client/clientset/internalversion/typed/platform/internalversion/fake/fake_clustergroupapiresourceitems.go @@ -0,0 +1,71 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2020 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ + +// Code generated by client-gen. DO NOT EDIT. + +package fake + +import ( + "context" + + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + labels "k8s.io/apimachinery/pkg/labels" + schema "k8s.io/apimachinery/pkg/runtime/schema" + testing "k8s.io/client-go/testing" + platform "tkestack.io/tke/api/platform" +) + +// FakeClusterGroupAPIResourceItemses implements ClusterGroupAPIResourceItemsInterface +type FakeClusterGroupAPIResourceItemses struct { + Fake *FakePlatform +} + +var clustergroupapiresourceitemsesResource = schema.GroupVersionResource{Group: "platform.tkestack.io", Version: "", Resource: "clustergroupapiresourceitemses"} + +var clustergroupapiresourceitemsesKind = schema.GroupVersionKind{Group: "platform.tkestack.io", Version: "", Kind: "ClusterGroupAPIResourceItems"} + +// Get takes name of the clusterGroupAPIResourceItems, and returns the corresponding clusterGroupAPIResourceItems object, and an error if there is any. +func (c *FakeClusterGroupAPIResourceItemses) Get(ctx context.Context, name string, options v1.GetOptions) (result *platform.ClusterGroupAPIResourceItems, err error) { + obj, err := c.Fake. + Invokes(testing.NewRootGetAction(clustergroupapiresourceitemsesResource, name), &platform.ClusterGroupAPIResourceItems{}) + if obj == nil { + return nil, err + } + return obj.(*platform.ClusterGroupAPIResourceItems), err +} + +// List takes label and field selectors, and returns the list of ClusterGroupAPIResourceItemses that match those selectors. +func (c *FakeClusterGroupAPIResourceItemses) List(ctx context.Context, opts v1.ListOptions) (result *platform.ClusterGroupAPIResourceItemsList, err error) { + obj, err := c.Fake. + Invokes(testing.NewRootListAction(clustergroupapiresourceitemsesResource, clustergroupapiresourceitemsesKind, opts), &platform.ClusterGroupAPIResourceItemsList{}) + if obj == nil { + return nil, err + } + + label, _, _ := testing.ExtractFromListOptions(opts) + if label == nil { + label = labels.Everything() + } + list := &platform.ClusterGroupAPIResourceItemsList{ListMeta: obj.(*platform.ClusterGroupAPIResourceItemsList).ListMeta} + for _, item := range obj.(*platform.ClusterGroupAPIResourceItemsList).Items { + if label.Matches(labels.Set(item.Labels)) { + list.Items = append(list.Items, item) + } + } + return list, err +} diff --git a/api/client/clientset/internalversion/typed/platform/internalversion/fake/fake_platform_client.go b/api/client/clientset/internalversion/typed/platform/internalversion/fake/fake_platform_client.go index b63568ae9..1a64cc02f 100644 --- a/api/client/clientset/internalversion/typed/platform/internalversion/fake/fake_platform_client.go +++ b/api/client/clientset/internalversion/typed/platform/internalversion/fake/fake_platform_client.go @@ -50,6 +50,10 @@ func (c *FakePlatform) ClusterCredentials() internalversion.ClusterCredentialInt return &FakeClusterCredentials{c} } +func (c *FakePlatform) ClusterGroupAPIResourceItemses() internalversion.ClusterGroupAPIResourceItemsInterface { + return &FakeClusterGroupAPIResourceItemses{c} +} + func (c *FakePlatform) ConfigMaps() internalversion.ConfigMapInterface { return &FakeConfigMaps{c} } diff --git a/api/client/clientset/internalversion/typed/platform/internalversion/generated_expansion.go b/api/client/clientset/internalversion/typed/platform/internalversion/generated_expansion.go index 6a9da218c..255cfa87d 100644 --- a/api/client/clientset/internalversion/typed/platform/internalversion/generated_expansion.go +++ b/api/client/clientset/internalversion/typed/platform/internalversion/generated_expansion.go @@ -30,6 +30,8 @@ type ClusterAddonTypeExpansion interface{} type ClusterCredentialExpansion interface{} +type ClusterGroupAPIResourceItemsExpansion interface{} + type ConfigMapExpansion interface{} type CronHPAExpansion interface{} diff --git a/api/client/clientset/internalversion/typed/platform/internalversion/platform_client.go b/api/client/clientset/internalversion/typed/platform/internalversion/platform_client.go index 9a1ba7b7e..0e4196c55 100644 --- a/api/client/clientset/internalversion/typed/platform/internalversion/platform_client.go +++ b/api/client/clientset/internalversion/typed/platform/internalversion/platform_client.go @@ -32,6 +32,7 @@ type PlatformInterface interface { ClusterAddonsGetter ClusterAddonTypesGetter ClusterCredentialsGetter + ClusterGroupAPIResourceItemsesGetter ConfigMapsGetter CronHPAsGetter HelmsGetter @@ -71,6 +72,10 @@ func (c *PlatformClient) ClusterCredentials() ClusterCredentialInterface { return newClusterCredentials(c) } +func (c *PlatformClient) ClusterGroupAPIResourceItemses() ClusterGroupAPIResourceItemsInterface { + return newClusterGroupAPIResourceItemses(c) +} + func (c *PlatformClient) ConfigMaps() ConfigMapInterface { return newConfigMaps(c) } diff --git a/api/client/clientset/versioned/typed/platform/v1/clustergroupapiresourceitems.go b/api/client/clientset/versioned/typed/platform/v1/clustergroupapiresourceitems.go new file mode 100644 index 000000000..19926f4a4 --- /dev/null +++ b/api/client/clientset/versioned/typed/platform/v1/clustergroupapiresourceitems.go @@ -0,0 +1,84 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2020 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ + +// Code generated by client-gen. DO NOT EDIT. + +package v1 + +import ( + "context" + "time" + + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + rest "k8s.io/client-go/rest" + scheme "tkestack.io/tke/api/client/clientset/versioned/scheme" + platformv1 "tkestack.io/tke/api/platform/v1" +) + +// ClusterGroupAPIResourceItemsesGetter has a method to return a ClusterGroupAPIResourceItemsInterface. +// A group's client should implement this interface. +type ClusterGroupAPIResourceItemsesGetter interface { + ClusterGroupAPIResourceItemses() ClusterGroupAPIResourceItemsInterface +} + +// ClusterGroupAPIResourceItemsInterface has methods to work with ClusterGroupAPIResourceItems resources. +type ClusterGroupAPIResourceItemsInterface interface { + Get(ctx context.Context, name string, opts v1.GetOptions) (*platformv1.ClusterGroupAPIResourceItems, error) + List(ctx context.Context, opts v1.ListOptions) (*platformv1.ClusterGroupAPIResourceItemsList, error) + ClusterGroupAPIResourceItemsExpansion +} + +// clusterGroupAPIResourceItemses implements ClusterGroupAPIResourceItemsInterface +type clusterGroupAPIResourceItemses struct { + client rest.Interface +} + +// newClusterGroupAPIResourceItemses returns a ClusterGroupAPIResourceItemses +func newClusterGroupAPIResourceItemses(c *PlatformV1Client) *clusterGroupAPIResourceItemses { + return &clusterGroupAPIResourceItemses{ + client: c.RESTClient(), + } +} + +// Get takes name of the clusterGroupAPIResourceItems, and returns the corresponding clusterGroupAPIResourceItems object, and an error if there is any. +func (c *clusterGroupAPIResourceItemses) Get(ctx context.Context, name string, options v1.GetOptions) (result *platformv1.ClusterGroupAPIResourceItems, err error) { + result = &platformv1.ClusterGroupAPIResourceItems{} + err = c.client.Get(). + Resource("clustergroupapiresourceitemses"). + Name(name). + VersionedParams(&options, scheme.ParameterCodec). + Do(ctx). + Into(result) + return +} + +// List takes label and field selectors, and returns the list of ClusterGroupAPIResourceItemses that match those selectors. +func (c *clusterGroupAPIResourceItemses) List(ctx context.Context, opts v1.ListOptions) (result *platformv1.ClusterGroupAPIResourceItemsList, err error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } + result = &platformv1.ClusterGroupAPIResourceItemsList{} + err = c.client.Get(). + Resource("clustergroupapiresourceitemses"). + VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). + Do(ctx). + Into(result) + return +} diff --git a/api/client/clientset/versioned/typed/platform/v1/fake/fake_clustergroupapiresourceitems.go b/api/client/clientset/versioned/typed/platform/v1/fake/fake_clustergroupapiresourceitems.go new file mode 100644 index 000000000..a8644e387 --- /dev/null +++ b/api/client/clientset/versioned/typed/platform/v1/fake/fake_clustergroupapiresourceitems.go @@ -0,0 +1,71 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2020 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ + +// Code generated by client-gen. DO NOT EDIT. + +package fake + +import ( + "context" + + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + labels "k8s.io/apimachinery/pkg/labels" + schema "k8s.io/apimachinery/pkg/runtime/schema" + testing "k8s.io/client-go/testing" + platformv1 "tkestack.io/tke/api/platform/v1" +) + +// FakeClusterGroupAPIResourceItemses implements ClusterGroupAPIResourceItemsInterface +type FakeClusterGroupAPIResourceItemses struct { + Fake *FakePlatformV1 +} + +var clustergroupapiresourceitemsesResource = schema.GroupVersionResource{Group: "platform.tkestack.io", Version: "v1", Resource: "clustergroupapiresourceitemses"} + +var clustergroupapiresourceitemsesKind = schema.GroupVersionKind{Group: "platform.tkestack.io", Version: "v1", Kind: "ClusterGroupAPIResourceItems"} + +// Get takes name of the clusterGroupAPIResourceItems, and returns the corresponding clusterGroupAPIResourceItems object, and an error if there is any. +func (c *FakeClusterGroupAPIResourceItemses) Get(ctx context.Context, name string, options v1.GetOptions) (result *platformv1.ClusterGroupAPIResourceItems, err error) { + obj, err := c.Fake. + Invokes(testing.NewRootGetAction(clustergroupapiresourceitemsesResource, name), &platformv1.ClusterGroupAPIResourceItems{}) + if obj == nil { + return nil, err + } + return obj.(*platformv1.ClusterGroupAPIResourceItems), err +} + +// List takes label and field selectors, and returns the list of ClusterGroupAPIResourceItemses that match those selectors. +func (c *FakeClusterGroupAPIResourceItemses) List(ctx context.Context, opts v1.ListOptions) (result *platformv1.ClusterGroupAPIResourceItemsList, err error) { + obj, err := c.Fake. + Invokes(testing.NewRootListAction(clustergroupapiresourceitemsesResource, clustergroupapiresourceitemsesKind, opts), &platformv1.ClusterGroupAPIResourceItemsList{}) + if obj == nil { + return nil, err + } + + label, _, _ := testing.ExtractFromListOptions(opts) + if label == nil { + label = labels.Everything() + } + list := &platformv1.ClusterGroupAPIResourceItemsList{ListMeta: obj.(*platformv1.ClusterGroupAPIResourceItemsList).ListMeta} + for _, item := range obj.(*platformv1.ClusterGroupAPIResourceItemsList).Items { + if label.Matches(labels.Set(item.Labels)) { + list.Items = append(list.Items, item) + } + } + return list, err +} diff --git a/api/client/clientset/versioned/typed/platform/v1/fake/fake_platform_client.go b/api/client/clientset/versioned/typed/platform/v1/fake/fake_platform_client.go index baf19d09b..764e70bbb 100644 --- a/api/client/clientset/versioned/typed/platform/v1/fake/fake_platform_client.go +++ b/api/client/clientset/versioned/typed/platform/v1/fake/fake_platform_client.go @@ -50,6 +50,10 @@ func (c *FakePlatformV1) ClusterCredentials() v1.ClusterCredentialInterface { return &FakeClusterCredentials{c} } +func (c *FakePlatformV1) ClusterGroupAPIResourceItemses() v1.ClusterGroupAPIResourceItemsInterface { + return &FakeClusterGroupAPIResourceItemses{c} +} + func (c *FakePlatformV1) ConfigMaps() v1.ConfigMapInterface { return &FakeConfigMaps{c} } diff --git a/api/client/clientset/versioned/typed/platform/v1/generated_expansion.go b/api/client/clientset/versioned/typed/platform/v1/generated_expansion.go index 4c373192e..5d3c68d93 100644 --- a/api/client/clientset/versioned/typed/platform/v1/generated_expansion.go +++ b/api/client/clientset/versioned/typed/platform/v1/generated_expansion.go @@ -30,6 +30,8 @@ type ClusterAddonTypeExpansion interface{} type ClusterCredentialExpansion interface{} +type ClusterGroupAPIResourceItemsExpansion interface{} + type ConfigMapExpansion interface{} type CronHPAExpansion interface{} diff --git a/api/client/clientset/versioned/typed/platform/v1/platform_client.go b/api/client/clientset/versioned/typed/platform/v1/platform_client.go index 42fe0f9bd..e3bf8fa3d 100644 --- a/api/client/clientset/versioned/typed/platform/v1/platform_client.go +++ b/api/client/clientset/versioned/typed/platform/v1/platform_client.go @@ -33,6 +33,7 @@ type PlatformV1Interface interface { ClusterAddonsGetter ClusterAddonTypesGetter ClusterCredentialsGetter + ClusterGroupAPIResourceItemsesGetter ConfigMapsGetter CronHPAsGetter HelmsGetter @@ -72,6 +73,10 @@ func (c *PlatformV1Client) ClusterCredentials() ClusterCredentialInterface { return newClusterCredentials(c) } +func (c *PlatformV1Client) ClusterGroupAPIResourceItemses() ClusterGroupAPIResourceItemsInterface { + return newClusterGroupAPIResourceItemses(c) +} + func (c *PlatformV1Client) ConfigMaps() ConfigMapInterface { return newConfigMaps(c) } diff --git a/api/client/listers/platform/internalversion/clustergroupapiresourceitems.go b/api/client/listers/platform/internalversion/clustergroupapiresourceitems.go new file mode 100644 index 000000000..bba3950a3 --- /dev/null +++ b/api/client/listers/platform/internalversion/clustergroupapiresourceitems.go @@ -0,0 +1,70 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2020 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ + +// Code generated by lister-gen. DO NOT EDIT. + +package internalversion + +import ( + "k8s.io/apimachinery/pkg/api/errors" + "k8s.io/apimachinery/pkg/labels" + "k8s.io/client-go/tools/cache" + platform "tkestack.io/tke/api/platform" +) + +// ClusterGroupAPIResourceItemsLister helps list ClusterGroupAPIResourceItemses. +// All objects returned here must be treated as read-only. +type ClusterGroupAPIResourceItemsLister interface { + // List lists all ClusterGroupAPIResourceItemses in the indexer. + // Objects returned here must be treated as read-only. + List(selector labels.Selector) (ret []*platform.ClusterGroupAPIResourceItems, err error) + // Get retrieves the ClusterGroupAPIResourceItems from the index for a given name. + // Objects returned here must be treated as read-only. + Get(name string) (*platform.ClusterGroupAPIResourceItems, error) + ClusterGroupAPIResourceItemsListerExpansion +} + +// clusterGroupAPIResourceItemsLister implements the ClusterGroupAPIResourceItemsLister interface. +type clusterGroupAPIResourceItemsLister struct { + indexer cache.Indexer +} + +// NewClusterGroupAPIResourceItemsLister returns a new ClusterGroupAPIResourceItemsLister. +func NewClusterGroupAPIResourceItemsLister(indexer cache.Indexer) ClusterGroupAPIResourceItemsLister { + return &clusterGroupAPIResourceItemsLister{indexer: indexer} +} + +// List lists all ClusterGroupAPIResourceItemses in the indexer. +func (s *clusterGroupAPIResourceItemsLister) List(selector labels.Selector) (ret []*platform.ClusterGroupAPIResourceItems, err error) { + err = cache.ListAll(s.indexer, selector, func(m interface{}) { + ret = append(ret, m.(*platform.ClusterGroupAPIResourceItems)) + }) + return ret, err +} + +// Get retrieves the ClusterGroupAPIResourceItems from the index for a given name. +func (s *clusterGroupAPIResourceItemsLister) Get(name string) (*platform.ClusterGroupAPIResourceItems, error) { + obj, exists, err := s.indexer.GetByKey(name) + if err != nil { + return nil, err + } + if !exists { + return nil, errors.NewNotFound(platform.Resource("clustergroupapiresourceitems"), name) + } + return obj.(*platform.ClusterGroupAPIResourceItems), nil +} diff --git a/api/client/listers/platform/internalversion/expansion_generated.go b/api/client/listers/platform/internalversion/expansion_generated.go index aff10cacc..c27609ad1 100644 --- a/api/client/listers/platform/internalversion/expansion_generated.go +++ b/api/client/listers/platform/internalversion/expansion_generated.go @@ -36,6 +36,10 @@ type ClusterAddonListerExpansion interface{} // ClusterCredentialLister. type ClusterCredentialListerExpansion interface{} +// ClusterGroupAPIResourceItemsListerExpansion allows custom methods to be added to +// ClusterGroupAPIResourceItemsLister. +type ClusterGroupAPIResourceItemsListerExpansion interface{} + // ConfigMapListerExpansion allows custom methods to be added to // ConfigMapLister. type ConfigMapListerExpansion interface{} diff --git a/api/client/listers/platform/v1/clustergroupapiresourceitems.go b/api/client/listers/platform/v1/clustergroupapiresourceitems.go new file mode 100644 index 000000000..4581f415f --- /dev/null +++ b/api/client/listers/platform/v1/clustergroupapiresourceitems.go @@ -0,0 +1,70 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2020 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ + +// Code generated by lister-gen. DO NOT EDIT. + +package v1 + +import ( + "k8s.io/apimachinery/pkg/api/errors" + "k8s.io/apimachinery/pkg/labels" + "k8s.io/client-go/tools/cache" + v1 "tkestack.io/tke/api/platform/v1" +) + +// ClusterGroupAPIResourceItemsLister helps list ClusterGroupAPIResourceItemses. +// All objects returned here must be treated as read-only. +type ClusterGroupAPIResourceItemsLister interface { + // List lists all ClusterGroupAPIResourceItemses in the indexer. + // Objects returned here must be treated as read-only. + List(selector labels.Selector) (ret []*v1.ClusterGroupAPIResourceItems, err error) + // Get retrieves the ClusterGroupAPIResourceItems from the index for a given name. + // Objects returned here must be treated as read-only. + Get(name string) (*v1.ClusterGroupAPIResourceItems, error) + ClusterGroupAPIResourceItemsListerExpansion +} + +// clusterGroupAPIResourceItemsLister implements the ClusterGroupAPIResourceItemsLister interface. +type clusterGroupAPIResourceItemsLister struct { + indexer cache.Indexer +} + +// NewClusterGroupAPIResourceItemsLister returns a new ClusterGroupAPIResourceItemsLister. +func NewClusterGroupAPIResourceItemsLister(indexer cache.Indexer) ClusterGroupAPIResourceItemsLister { + return &clusterGroupAPIResourceItemsLister{indexer: indexer} +} + +// List lists all ClusterGroupAPIResourceItemses in the indexer. +func (s *clusterGroupAPIResourceItemsLister) List(selector labels.Selector) (ret []*v1.ClusterGroupAPIResourceItems, err error) { + err = cache.ListAll(s.indexer, selector, func(m interface{}) { + ret = append(ret, m.(*v1.ClusterGroupAPIResourceItems)) + }) + return ret, err +} + +// Get retrieves the ClusterGroupAPIResourceItems from the index for a given name. +func (s *clusterGroupAPIResourceItemsLister) Get(name string) (*v1.ClusterGroupAPIResourceItems, error) { + obj, exists, err := s.indexer.GetByKey(name) + if err != nil { + return nil, err + } + if !exists { + return nil, errors.NewNotFound(v1.Resource("clustergroupapiresourceitems"), name) + } + return obj.(*v1.ClusterGroupAPIResourceItems), nil +} diff --git a/api/client/listers/platform/v1/expansion_generated.go b/api/client/listers/platform/v1/expansion_generated.go index dceb14b6a..abba5bfb8 100644 --- a/api/client/listers/platform/v1/expansion_generated.go +++ b/api/client/listers/platform/v1/expansion_generated.go @@ -36,6 +36,10 @@ type ClusterAddonListerExpansion interface{} // ClusterCredentialLister. type ClusterCredentialListerExpansion interface{} +// ClusterGroupAPIResourceItemsListerExpansion allows custom methods to be added to +// ClusterGroupAPIResourceItemsLister. +type ClusterGroupAPIResourceItemsListerExpansion interface{} + // ConfigMapListerExpansion allows custom methods to be added to // ConfigMapLister. type ConfigMapListerExpansion interface{} diff --git a/api/openapi/zz_generated.openapi.go b/api/openapi/zz_generated.openapi.go index b83f802eb..f8623b997 100644 --- a/api/openapi/zz_generated.openapi.go +++ b/api/openapi/zz_generated.openapi.go @@ -977,6 +977,9 @@ func GetOpenAPIDefinitions(ref common.ReferenceCallback) map[string]common.OpenA "tkestack.io/tke/api/platform/v1.ClusterCredential": schema_tke_api_platform_v1_ClusterCredential(ref), "tkestack.io/tke/api/platform/v1.ClusterCredentialList": schema_tke_api_platform_v1_ClusterCredentialList(ref), "tkestack.io/tke/api/platform/v1.ClusterFeature": schema_tke_api_platform_v1_ClusterFeature(ref), + "tkestack.io/tke/api/platform/v1.ClusterGroupAPIResourceItem": schema_tke_api_platform_v1_ClusterGroupAPIResourceItem(ref), + "tkestack.io/tke/api/platform/v1.ClusterGroupAPIResourceItems": schema_tke_api_platform_v1_ClusterGroupAPIResourceItems(ref), + "tkestack.io/tke/api/platform/v1.ClusterGroupAPIResourceItemsList": schema_tke_api_platform_v1_ClusterGroupAPIResourceItemsList(ref), "tkestack.io/tke/api/platform/v1.ClusterList": schema_tke_api_platform_v1_ClusterList(ref), "tkestack.io/tke/api/platform/v1.ClusterMachine": schema_tke_api_platform_v1_ClusterMachine(ref), "tkestack.io/tke/api/platform/v1.ClusterProperty": schema_tke_api_platform_v1_ClusterProperty(ref), @@ -47032,6 +47035,207 @@ func schema_tke_api_platform_v1_ClusterFeature(ref common.ReferenceCallback) com } } +func schema_tke_api_platform_v1_ClusterGroupAPIResourceItem(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "ClusterGroupAPIResourceItem specifies the name of a resource and whether it is namespaced.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "Name": { + SchemaProps: spec.SchemaProps{ + Description: "name is the plural name of the resource.", + Type: []string{"string"}, + Format: "", + }, + }, + "SingularName": { + SchemaProps: spec.SchemaProps{ + Description: "singularName is the singular name of the resource. This allows clients to handle plural and singular opaquely. The singularName is more correct for reporting status on a single item and both singular and plural are allowed from the kubectl CLI interface.", + Type: []string{"string"}, + Format: "", + }, + }, + "Namespaced": { + SchemaProps: spec.SchemaProps{ + Description: "namespaced indicates if a resource is namespaced or not.", + Type: []string{"boolean"}, + Format: "", + }, + }, + "Group": { + SchemaProps: spec.SchemaProps{ + Description: "group is the preferred group of the resource. Empty implies the group of the containing resource list. For subresources, this may have a different value, for example: Scale\".", + Type: []string{"string"}, + Format: "", + }, + }, + "Version": { + SchemaProps: spec.SchemaProps{ + Description: "version is the preferred version of the resource. Empty implies the version of the containing resource list For subresources, this may have a different value, for example: v1 (while inside a v1beta1 version of the core resource's group)\".", + Type: []string{"string"}, + Format: "", + }, + }, + "Kind": { + SchemaProps: spec.SchemaProps{ + Description: "kind is the kind for the resource (e.g. 'Foo' is the kind for a resource 'foo')", + Type: []string{"string"}, + Format: "", + }, + }, + "Verbs": { + SchemaProps: spec.SchemaProps{ + Description: "verbs is a list of supported kube verbs (this includes get, list, watch, create, update, patch, delete, deletecollection, and proxy)", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "ShortNames": { + SchemaProps: spec.SchemaProps{ + Description: "shortNames is a list of suggested short names of the resource.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "Categories": { + SchemaProps: spec.SchemaProps{ + Description: "categories is a list of the grouped resources this resource belongs to (e.g. 'all')", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + }, + Required: []string{"Name", "SingularName", "Namespaced", "Group", "Version", "Kind", "Verbs", "ShortNames", "Categories"}, + }, + }, + } +} + +func schema_tke_api_platform_v1_ClusterGroupAPIResourceItems(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "ClusterGroupAPIResourceItems contains the GKV for the current kubernetes cluster", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), + }, + }, + "groupVersion": { + SchemaProps: spec.SchemaProps{ + Description: "groupVersion is the group and version this APIResourceList is for.", + Type: []string{"string"}, + Format: "", + }, + }, + "apiResources": { + SchemaProps: spec.SchemaProps{ + Description: "resources contains the name of the resources and if they are namespaced.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("tkestack.io/tke/api/platform/v1.ClusterGroupAPIResourceItem"), + }, + }, + }, + }, + }, + }, + Required: []string{"groupVersion", "apiResources"}, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta", "tkestack.io/tke/api/platform/v1.ClusterGroupAPIResourceItem"}, + } +} + +func schema_tke_api_platform_v1_ClusterGroupAPIResourceItemsList(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "ClusterGroupAPIResourceItemsList is the whole list of all ClusterAPIResource.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), + }, + }, + "Items": { + SchemaProps: spec.SchemaProps{ + Description: "List of ClusterGroupAPIResourceItems", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("tkestack.io/tke/api/platform/v1.ClusterGroupAPIResourceItems"), + }, + }, + }, + }, + }, + }, + Required: []string{"Items"}, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta", "tkestack.io/tke/api/platform/v1.ClusterGroupAPIResourceItems"}, + } +} + func schema_tke_api_platform_v1_ClusterList(ref common.ReferenceCallback) common.OpenAPIDefinition { return common.OpenAPIDefinition{ Schema: spec.Schema{ diff --git a/api/platform/register.go b/api/platform/register.go index 30f41b9b0..4f8c6b644 100644 --- a/api/platform/register.go +++ b/api/platform/register.go @@ -118,6 +118,9 @@ func addKnownTypes(scheme *runtime.Scheme) error { &LBCF{}, &LBCFList{}, &LBCFProxyOptions{}, + + &ClusterGroupAPIResourceItems{}, + &ClusterGroupAPIResourceItemsList{}, ) return nil } diff --git a/api/platform/types.go b/api/platform/types.go index 04fa33a61..9964a63d6 100644 --- a/api/platform/types.go +++ b/api/platform/types.go @@ -1688,3 +1688,58 @@ type LBCFList struct { // List of CronHPAs Items []LBCF } + +// +genclient:nonNamespaced +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// ClusterGroupAPIResourceItemsList is the whole list of all ClusterAPIResource. +type ClusterGroupAPIResourceItemsList struct { + metav1.TypeMeta + // +optional + metav1.ListMeta + // List of ClusterAPIResource + Items []ClusterGroupAPIResourceItems +} + +// +genclient +// +genclient:nonNamespaced +// +genclient:onlyVerbs=list,get +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// ClusterGroupAPIResourceItems contains the GKV for the current kubernetes cluster +type ClusterGroupAPIResourceItems struct { + metav1.TypeMeta + // +optional + metav1.ObjectMeta + // groupVersion is the group and version this APIResourceList is for. + GroupVersion string + // resources contains the name of the resources and if they are namespaced. + APIResources []ClusterGroupAPIResourceItem +} + +// ClusterGroupAPIResourceItem specifies the name of a resource and whether it is namespaced. +type ClusterGroupAPIResourceItem struct { + // name is the plural name of the resource. + Name string + // singularName is the singular name of the resource. This allows clients to handle plural and singular opaquely. + // The singularName is more correct for reporting status on a single item and both singular and plural are allowed + // from the kubectl CLI interface. + SingularName string + // namespaced indicates if a resource is namespaced or not. + Namespaced bool + // group is the preferred group of the resource. Empty implies the group of the containing resource list. + // For subresources, this may have a different value, for example: Scale". + Group string + // version is the preferred version of the resource. Empty implies the version of the containing resource list + // For subresources, this may have a different value, for example: v1 (while inside a v1beta1 version of the core resource's group)". + Version string + // kind is the kind for the resource (e.g. 'Foo' is the kind for a resource 'foo') + Kind string + // verbs is a list of supported kube verbs (this includes get, list, watch, create, + // update, patch, delete, deletecollection, and proxy) + Verbs []string + // shortNames is a list of suggested short names of the resource. + ShortNames []string + // categories is a list of the grouped resources this resource belongs to (e.g. 'all') + Categories []string +} diff --git a/api/platform/v1/generated.pb.go b/api/platform/v1/generated.pb.go index 1be5126af..7d7a3f6f6 100644 --- a/api/platform/v1/generated.pb.go +++ b/api/platform/v1/generated.pb.go @@ -777,10 +777,94 @@ func (m *ClusterFeature) XXX_DiscardUnknown() { var xxx_messageInfo_ClusterFeature proto.InternalMessageInfo +func (m *ClusterGroupAPIResourceItem) Reset() { *m = ClusterGroupAPIResourceItem{} } +func (*ClusterGroupAPIResourceItem) ProtoMessage() {} +func (*ClusterGroupAPIResourceItem) Descriptor() ([]byte, []int) { + return fileDescriptor_6e12a3c1f6fbf61e, []int{26} +} +func (m *ClusterGroupAPIResourceItem) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ClusterGroupAPIResourceItem) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ClusterGroupAPIResourceItem) XXX_Merge(src proto.Message) { + xxx_messageInfo_ClusterGroupAPIResourceItem.Merge(m, src) +} +func (m *ClusterGroupAPIResourceItem) XXX_Size() int { + return m.Size() +} +func (m *ClusterGroupAPIResourceItem) XXX_DiscardUnknown() { + xxx_messageInfo_ClusterGroupAPIResourceItem.DiscardUnknown(m) +} + +var xxx_messageInfo_ClusterGroupAPIResourceItem proto.InternalMessageInfo + +func (m *ClusterGroupAPIResourceItems) Reset() { *m = ClusterGroupAPIResourceItems{} } +func (*ClusterGroupAPIResourceItems) ProtoMessage() {} +func (*ClusterGroupAPIResourceItems) Descriptor() ([]byte, []int) { + return fileDescriptor_6e12a3c1f6fbf61e, []int{27} +} +func (m *ClusterGroupAPIResourceItems) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ClusterGroupAPIResourceItems) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ClusterGroupAPIResourceItems) XXX_Merge(src proto.Message) { + xxx_messageInfo_ClusterGroupAPIResourceItems.Merge(m, src) +} +func (m *ClusterGroupAPIResourceItems) XXX_Size() int { + return m.Size() +} +func (m *ClusterGroupAPIResourceItems) XXX_DiscardUnknown() { + xxx_messageInfo_ClusterGroupAPIResourceItems.DiscardUnknown(m) +} + +var xxx_messageInfo_ClusterGroupAPIResourceItems proto.InternalMessageInfo + +func (m *ClusterGroupAPIResourceItemsList) Reset() { *m = ClusterGroupAPIResourceItemsList{} } +func (*ClusterGroupAPIResourceItemsList) ProtoMessage() {} +func (*ClusterGroupAPIResourceItemsList) Descriptor() ([]byte, []int) { + return fileDescriptor_6e12a3c1f6fbf61e, []int{28} +} +func (m *ClusterGroupAPIResourceItemsList) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ClusterGroupAPIResourceItemsList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ClusterGroupAPIResourceItemsList) XXX_Merge(src proto.Message) { + xxx_messageInfo_ClusterGroupAPIResourceItemsList.Merge(m, src) +} +func (m *ClusterGroupAPIResourceItemsList) XXX_Size() int { + return m.Size() +} +func (m *ClusterGroupAPIResourceItemsList) XXX_DiscardUnknown() { + xxx_messageInfo_ClusterGroupAPIResourceItemsList.DiscardUnknown(m) +} + +var xxx_messageInfo_ClusterGroupAPIResourceItemsList proto.InternalMessageInfo + func (m *ClusterList) Reset() { *m = ClusterList{} } func (*ClusterList) ProtoMessage() {} func (*ClusterList) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{26} + return fileDescriptor_6e12a3c1f6fbf61e, []int{29} } func (m *ClusterList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -808,7 +892,7 @@ var xxx_messageInfo_ClusterList proto.InternalMessageInfo func (m *ClusterMachine) Reset() { *m = ClusterMachine{} } func (*ClusterMachine) ProtoMessage() {} func (*ClusterMachine) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{27} + return fileDescriptor_6e12a3c1f6fbf61e, []int{30} } func (m *ClusterMachine) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -836,7 +920,7 @@ var xxx_messageInfo_ClusterMachine proto.InternalMessageInfo func (m *ClusterProperty) Reset() { *m = ClusterProperty{} } func (*ClusterProperty) ProtoMessage() {} func (*ClusterProperty) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{28} + return fileDescriptor_6e12a3c1f6fbf61e, []int{31} } func (m *ClusterProperty) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -864,7 +948,7 @@ var xxx_messageInfo_ClusterProperty proto.InternalMessageInfo func (m *ClusterResource) Reset() { *m = ClusterResource{} } func (*ClusterResource) ProtoMessage() {} func (*ClusterResource) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{29} + return fileDescriptor_6e12a3c1f6fbf61e, []int{32} } func (m *ClusterResource) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -892,7 +976,7 @@ var xxx_messageInfo_ClusterResource proto.InternalMessageInfo func (m *ClusterSpec) Reset() { *m = ClusterSpec{} } func (*ClusterSpec) ProtoMessage() {} func (*ClusterSpec) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{30} + return fileDescriptor_6e12a3c1f6fbf61e, []int{33} } func (m *ClusterSpec) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -920,7 +1004,7 @@ var xxx_messageInfo_ClusterSpec proto.InternalMessageInfo func (m *ClusterStatus) Reset() { *m = ClusterStatus{} } func (*ClusterStatus) ProtoMessage() {} func (*ClusterStatus) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{31} + return fileDescriptor_6e12a3c1f6fbf61e, []int{34} } func (m *ClusterStatus) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -948,7 +1032,7 @@ var xxx_messageInfo_ClusterStatus proto.InternalMessageInfo func (m *ConfigMap) Reset() { *m = ConfigMap{} } func (*ConfigMap) ProtoMessage() {} func (*ConfigMap) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{32} + return fileDescriptor_6e12a3c1f6fbf61e, []int{35} } func (m *ConfigMap) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -976,7 +1060,7 @@ var xxx_messageInfo_ConfigMap proto.InternalMessageInfo func (m *ConfigMapList) Reset() { *m = ConfigMapList{} } func (*ConfigMapList) ProtoMessage() {} func (*ConfigMapList) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{33} + return fileDescriptor_6e12a3c1f6fbf61e, []int{36} } func (m *ConfigMapList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1004,7 +1088,7 @@ var xxx_messageInfo_ConfigMapList proto.InternalMessageInfo func (m *CronHPA) Reset() { *m = CronHPA{} } func (*CronHPA) ProtoMessage() {} func (*CronHPA) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{34} + return fileDescriptor_6e12a3c1f6fbf61e, []int{37} } func (m *CronHPA) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1032,7 +1116,7 @@ var xxx_messageInfo_CronHPA proto.InternalMessageInfo func (m *CronHPAList) Reset() { *m = CronHPAList{} } func (*CronHPAList) ProtoMessage() {} func (*CronHPAList) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{35} + return fileDescriptor_6e12a3c1f6fbf61e, []int{38} } func (m *CronHPAList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1060,7 +1144,7 @@ var xxx_messageInfo_CronHPAList proto.InternalMessageInfo func (m *CronHPAProxyOptions) Reset() { *m = CronHPAProxyOptions{} } func (*CronHPAProxyOptions) ProtoMessage() {} func (*CronHPAProxyOptions) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{36} + return fileDescriptor_6e12a3c1f6fbf61e, []int{39} } func (m *CronHPAProxyOptions) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1088,7 +1172,7 @@ var xxx_messageInfo_CronHPAProxyOptions proto.InternalMessageInfo func (m *CronHPASpec) Reset() { *m = CronHPASpec{} } func (*CronHPASpec) ProtoMessage() {} func (*CronHPASpec) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{37} + return fileDescriptor_6e12a3c1f6fbf61e, []int{40} } func (m *CronHPASpec) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1116,7 +1200,7 @@ var xxx_messageInfo_CronHPASpec proto.InternalMessageInfo func (m *CronHPAStatus) Reset() { *m = CronHPAStatus{} } func (*CronHPAStatus) ProtoMessage() {} func (*CronHPAStatus) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{38} + return fileDescriptor_6e12a3c1f6fbf61e, []int{41} } func (m *CronHPAStatus) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1144,7 +1228,7 @@ var xxx_messageInfo_CronHPAStatus proto.InternalMessageInfo func (m *Etcd) Reset() { *m = Etcd{} } func (*Etcd) ProtoMessage() {} func (*Etcd) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{39} + return fileDescriptor_6e12a3c1f6fbf61e, []int{42} } func (m *Etcd) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1172,7 +1256,7 @@ var xxx_messageInfo_Etcd proto.InternalMessageInfo func (m *ExternalAuthzWebhookAddr) Reset() { *m = ExternalAuthzWebhookAddr{} } func (*ExternalAuthzWebhookAddr) ProtoMessage() {} func (*ExternalAuthzWebhookAddr) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{40} + return fileDescriptor_6e12a3c1f6fbf61e, []int{43} } func (m *ExternalAuthzWebhookAddr) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1200,7 +1284,7 @@ var xxx_messageInfo_ExternalAuthzWebhookAddr proto.InternalMessageInfo func (m *ExternalEtcd) Reset() { *m = ExternalEtcd{} } func (*ExternalEtcd) ProtoMessage() {} func (*ExternalEtcd) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{41} + return fileDescriptor_6e12a3c1f6fbf61e, []int{44} } func (m *ExternalEtcd) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1228,7 +1312,7 @@ var xxx_messageInfo_ExternalEtcd proto.InternalMessageInfo func (m *File) Reset() { *m = File{} } func (*File) ProtoMessage() {} func (*File) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{42} + return fileDescriptor_6e12a3c1f6fbf61e, []int{45} } func (m *File) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1256,7 +1340,7 @@ var xxx_messageInfo_File proto.InternalMessageInfo func (m *HA) Reset() { *m = HA{} } func (*HA) ProtoMessage() {} func (*HA) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{43} + return fileDescriptor_6e12a3c1f6fbf61e, []int{46} } func (m *HA) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1284,7 +1368,7 @@ var xxx_messageInfo_HA proto.InternalMessageInfo func (m *Helm) Reset() { *m = Helm{} } func (*Helm) ProtoMessage() {} func (*Helm) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{44} + return fileDescriptor_6e12a3c1f6fbf61e, []int{47} } func (m *Helm) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1312,7 +1396,7 @@ var xxx_messageInfo_Helm proto.InternalMessageInfo func (m *HelmList) Reset() { *m = HelmList{} } func (*HelmList) ProtoMessage() {} func (*HelmList) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{45} + return fileDescriptor_6e12a3c1f6fbf61e, []int{48} } func (m *HelmList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1340,7 +1424,7 @@ var xxx_messageInfo_HelmList proto.InternalMessageInfo func (m *HelmProxyOptions) Reset() { *m = HelmProxyOptions{} } func (*HelmProxyOptions) ProtoMessage() {} func (*HelmProxyOptions) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{46} + return fileDescriptor_6e12a3c1f6fbf61e, []int{49} } func (m *HelmProxyOptions) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1368,7 +1452,7 @@ var xxx_messageInfo_HelmProxyOptions proto.InternalMessageInfo func (m *HelmSpec) Reset() { *m = HelmSpec{} } func (*HelmSpec) ProtoMessage() {} func (*HelmSpec) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{47} + return fileDescriptor_6e12a3c1f6fbf61e, []int{50} } func (m *HelmSpec) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1396,7 +1480,7 @@ var xxx_messageInfo_HelmSpec proto.InternalMessageInfo func (m *HelmStatus) Reset() { *m = HelmStatus{} } func (*HelmStatus) ProtoMessage() {} func (*HelmStatus) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{48} + return fileDescriptor_6e12a3c1f6fbf61e, []int{51} } func (m *HelmStatus) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1424,7 +1508,7 @@ var xxx_messageInfo_HelmStatus proto.InternalMessageInfo func (m *IPAM) Reset() { *m = IPAM{} } func (*IPAM) ProtoMessage() {} func (*IPAM) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{49} + return fileDescriptor_6e12a3c1f6fbf61e, []int{52} } func (m *IPAM) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1452,7 +1536,7 @@ var xxx_messageInfo_IPAM proto.InternalMessageInfo func (m *IPAMList) Reset() { *m = IPAMList{} } func (*IPAMList) ProtoMessage() {} func (*IPAMList) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{50} + return fileDescriptor_6e12a3c1f6fbf61e, []int{53} } func (m *IPAMList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1480,7 +1564,7 @@ var xxx_messageInfo_IPAMList proto.InternalMessageInfo func (m *IPAMProxyOptions) Reset() { *m = IPAMProxyOptions{} } func (*IPAMProxyOptions) ProtoMessage() {} func (*IPAMProxyOptions) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{51} + return fileDescriptor_6e12a3c1f6fbf61e, []int{54} } func (m *IPAMProxyOptions) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1508,7 +1592,7 @@ var xxx_messageInfo_IPAMProxyOptions proto.InternalMessageInfo func (m *IPAMSpec) Reset() { *m = IPAMSpec{} } func (*IPAMSpec) ProtoMessage() {} func (*IPAMSpec) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{52} + return fileDescriptor_6e12a3c1f6fbf61e, []int{55} } func (m *IPAMSpec) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1536,7 +1620,7 @@ var xxx_messageInfo_IPAMSpec proto.InternalMessageInfo func (m *IPAMStatus) Reset() { *m = IPAMStatus{} } func (*IPAMStatus) ProtoMessage() {} func (*IPAMStatus) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{53} + return fileDescriptor_6e12a3c1f6fbf61e, []int{56} } func (m *IPAMStatus) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1564,7 +1648,7 @@ var xxx_messageInfo_IPAMStatus proto.InternalMessageInfo func (m *LBCF) Reset() { *m = LBCF{} } func (*LBCF) ProtoMessage() {} func (*LBCF) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{54} + return fileDescriptor_6e12a3c1f6fbf61e, []int{57} } func (m *LBCF) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1592,7 +1676,7 @@ var xxx_messageInfo_LBCF proto.InternalMessageInfo func (m *LBCFList) Reset() { *m = LBCFList{} } func (*LBCFList) ProtoMessage() {} func (*LBCFList) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{55} + return fileDescriptor_6e12a3c1f6fbf61e, []int{58} } func (m *LBCFList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1620,7 +1704,7 @@ var xxx_messageInfo_LBCFList proto.InternalMessageInfo func (m *LBCFProxyOptions) Reset() { *m = LBCFProxyOptions{} } func (*LBCFProxyOptions) ProtoMessage() {} func (*LBCFProxyOptions) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{56} + return fileDescriptor_6e12a3c1f6fbf61e, []int{59} } func (m *LBCFProxyOptions) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1648,7 +1732,7 @@ var xxx_messageInfo_LBCFProxyOptions proto.InternalMessageInfo func (m *LBCFSpec) Reset() { *m = LBCFSpec{} } func (*LBCFSpec) ProtoMessage() {} func (*LBCFSpec) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{57} + return fileDescriptor_6e12a3c1f6fbf61e, []int{60} } func (m *LBCFSpec) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1676,7 +1760,7 @@ var xxx_messageInfo_LBCFSpec proto.InternalMessageInfo func (m *LBCFStatus) Reset() { *m = LBCFStatus{} } func (*LBCFStatus) ProtoMessage() {} func (*LBCFStatus) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{58} + return fileDescriptor_6e12a3c1f6fbf61e, []int{61} } func (m *LBCFStatus) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1704,7 +1788,7 @@ var xxx_messageInfo_LBCFStatus proto.InternalMessageInfo func (m *LocalEtcd) Reset() { *m = LocalEtcd{} } func (*LocalEtcd) ProtoMessage() {} func (*LocalEtcd) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{59} + return fileDescriptor_6e12a3c1f6fbf61e, []int{62} } func (m *LocalEtcd) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1732,7 +1816,7 @@ var xxx_messageInfo_LocalEtcd proto.InternalMessageInfo func (m *LogCollector) Reset() { *m = LogCollector{} } func (*LogCollector) ProtoMessage() {} func (*LogCollector) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{60} + return fileDescriptor_6e12a3c1f6fbf61e, []int{63} } func (m *LogCollector) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1760,7 +1844,7 @@ var xxx_messageInfo_LogCollector proto.InternalMessageInfo func (m *LogCollectorList) Reset() { *m = LogCollectorList{} } func (*LogCollectorList) ProtoMessage() {} func (*LogCollectorList) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{61} + return fileDescriptor_6e12a3c1f6fbf61e, []int{64} } func (m *LogCollectorList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1788,7 +1872,7 @@ var xxx_messageInfo_LogCollectorList proto.InternalMessageInfo func (m *LogCollectorProxyOptions) Reset() { *m = LogCollectorProxyOptions{} } func (*LogCollectorProxyOptions) ProtoMessage() {} func (*LogCollectorProxyOptions) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{62} + return fileDescriptor_6e12a3c1f6fbf61e, []int{65} } func (m *LogCollectorProxyOptions) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1816,7 +1900,7 @@ var xxx_messageInfo_LogCollectorProxyOptions proto.InternalMessageInfo func (m *LogCollectorSpec) Reset() { *m = LogCollectorSpec{} } func (*LogCollectorSpec) ProtoMessage() {} func (*LogCollectorSpec) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{63} + return fileDescriptor_6e12a3c1f6fbf61e, []int{66} } func (m *LogCollectorSpec) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1844,7 +1928,7 @@ var xxx_messageInfo_LogCollectorSpec proto.InternalMessageInfo func (m *LogCollectorStatus) Reset() { *m = LogCollectorStatus{} } func (*LogCollectorStatus) ProtoMessage() {} func (*LogCollectorStatus) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{64} + return fileDescriptor_6e12a3c1f6fbf61e, []int{67} } func (m *LogCollectorStatus) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1872,7 +1956,7 @@ var xxx_messageInfo_LogCollectorStatus proto.InternalMessageInfo func (m *Machine) Reset() { *m = Machine{} } func (*Machine) ProtoMessage() {} func (*Machine) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{65} + return fileDescriptor_6e12a3c1f6fbf61e, []int{68} } func (m *Machine) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1900,7 +1984,7 @@ var xxx_messageInfo_Machine proto.InternalMessageInfo func (m *MachineAddress) Reset() { *m = MachineAddress{} } func (*MachineAddress) ProtoMessage() {} func (*MachineAddress) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{66} + return fileDescriptor_6e12a3c1f6fbf61e, []int{69} } func (m *MachineAddress) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1928,7 +2012,7 @@ var xxx_messageInfo_MachineAddress proto.InternalMessageInfo func (m *MachineCondition) Reset() { *m = MachineCondition{} } func (*MachineCondition) ProtoMessage() {} func (*MachineCondition) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{67} + return fileDescriptor_6e12a3c1f6fbf61e, []int{70} } func (m *MachineCondition) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1956,7 +2040,7 @@ var xxx_messageInfo_MachineCondition proto.InternalMessageInfo func (m *MachineList) Reset() { *m = MachineList{} } func (*MachineList) ProtoMessage() {} func (*MachineList) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{68} + return fileDescriptor_6e12a3c1f6fbf61e, []int{71} } func (m *MachineList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1984,7 +2068,7 @@ var xxx_messageInfo_MachineList proto.InternalMessageInfo func (m *MachineSpec) Reset() { *m = MachineSpec{} } func (*MachineSpec) ProtoMessage() {} func (*MachineSpec) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{69} + return fileDescriptor_6e12a3c1f6fbf61e, []int{72} } func (m *MachineSpec) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2012,7 +2096,7 @@ var xxx_messageInfo_MachineSpec proto.InternalMessageInfo func (m *MachineStatus) Reset() { *m = MachineStatus{} } func (*MachineStatus) ProtoMessage() {} func (*MachineStatus) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{70} + return fileDescriptor_6e12a3c1f6fbf61e, []int{73} } func (m *MachineStatus) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2040,7 +2124,7 @@ var xxx_messageInfo_MachineStatus proto.InternalMessageInfo func (m *MachineSystemInfo) Reset() { *m = MachineSystemInfo{} } func (*MachineSystemInfo) ProtoMessage() {} func (*MachineSystemInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{71} + return fileDescriptor_6e12a3c1f6fbf61e, []int{74} } func (m *MachineSystemInfo) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2068,7 +2152,7 @@ var xxx_messageInfo_MachineSystemInfo proto.InternalMessageInfo func (m *PVCRProxyOptions) Reset() { *m = PVCRProxyOptions{} } func (*PVCRProxyOptions) ProtoMessage() {} func (*PVCRProxyOptions) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{72} + return fileDescriptor_6e12a3c1f6fbf61e, []int{75} } func (m *PVCRProxyOptions) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2096,7 +2180,7 @@ var xxx_messageInfo_PVCRProxyOptions proto.InternalMessageInfo func (m *PersistentBackEnd) Reset() { *m = PersistentBackEnd{} } func (*PersistentBackEnd) ProtoMessage() {} func (*PersistentBackEnd) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{73} + return fileDescriptor_6e12a3c1f6fbf61e, []int{76} } func (m *PersistentBackEnd) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2124,7 +2208,7 @@ var xxx_messageInfo_PersistentBackEnd proto.InternalMessageInfo func (m *PersistentEvent) Reset() { *m = PersistentEvent{} } func (*PersistentEvent) ProtoMessage() {} func (*PersistentEvent) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{74} + return fileDescriptor_6e12a3c1f6fbf61e, []int{77} } func (m *PersistentEvent) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2152,7 +2236,7 @@ var xxx_messageInfo_PersistentEvent proto.InternalMessageInfo func (m *PersistentEventList) Reset() { *m = PersistentEventList{} } func (*PersistentEventList) ProtoMessage() {} func (*PersistentEventList) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{75} + return fileDescriptor_6e12a3c1f6fbf61e, []int{78} } func (m *PersistentEventList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2180,7 +2264,7 @@ var xxx_messageInfo_PersistentEventList proto.InternalMessageInfo func (m *PersistentEventSpec) Reset() { *m = PersistentEventSpec{} } func (*PersistentEventSpec) ProtoMessage() {} func (*PersistentEventSpec) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{76} + return fileDescriptor_6e12a3c1f6fbf61e, []int{79} } func (m *PersistentEventSpec) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2208,7 +2292,7 @@ var xxx_messageInfo_PersistentEventSpec proto.InternalMessageInfo func (m *PersistentEventStatus) Reset() { *m = PersistentEventStatus{} } func (*PersistentEventStatus) ProtoMessage() {} func (*PersistentEventStatus) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{77} + return fileDescriptor_6e12a3c1f6fbf61e, []int{80} } func (m *PersistentEventStatus) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2236,7 +2320,7 @@ var xxx_messageInfo_PersistentEventStatus proto.InternalMessageInfo func (m *Prometheus) Reset() { *m = Prometheus{} } func (*Prometheus) ProtoMessage() {} func (*Prometheus) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{78} + return fileDescriptor_6e12a3c1f6fbf61e, []int{81} } func (m *Prometheus) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2264,7 +2348,7 @@ var xxx_messageInfo_Prometheus proto.InternalMessageInfo func (m *PrometheusList) Reset() { *m = PrometheusList{} } func (*PrometheusList) ProtoMessage() {} func (*PrometheusList) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{79} + return fileDescriptor_6e12a3c1f6fbf61e, []int{82} } func (m *PrometheusList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2292,7 +2376,7 @@ var xxx_messageInfo_PrometheusList proto.InternalMessageInfo func (m *PrometheusRemoteAddr) Reset() { *m = PrometheusRemoteAddr{} } func (*PrometheusRemoteAddr) ProtoMessage() {} func (*PrometheusRemoteAddr) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{80} + return fileDescriptor_6e12a3c1f6fbf61e, []int{83} } func (m *PrometheusRemoteAddr) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2320,7 +2404,7 @@ var xxx_messageInfo_PrometheusRemoteAddr proto.InternalMessageInfo func (m *PrometheusSpec) Reset() { *m = PrometheusSpec{} } func (*PrometheusSpec) ProtoMessage() {} func (*PrometheusSpec) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{81} + return fileDescriptor_6e12a3c1f6fbf61e, []int{84} } func (m *PrometheusSpec) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2348,7 +2432,7 @@ var xxx_messageInfo_PrometheusSpec proto.InternalMessageInfo func (m *PrometheusStatus) Reset() { *m = PrometheusStatus{} } func (*PrometheusStatus) ProtoMessage() {} func (*PrometheusStatus) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{82} + return fileDescriptor_6e12a3c1f6fbf61e, []int{85} } func (m *PrometheusStatus) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2376,7 +2460,7 @@ var xxx_messageInfo_PrometheusStatus proto.InternalMessageInfo func (m *Registry) Reset() { *m = Registry{} } func (*Registry) ProtoMessage() {} func (*Registry) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{83} + return fileDescriptor_6e12a3c1f6fbf61e, []int{86} } func (m *Registry) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2404,7 +2488,7 @@ var xxx_messageInfo_Registry proto.InternalMessageInfo func (m *RegistryList) Reset() { *m = RegistryList{} } func (*RegistryList) ProtoMessage() {} func (*RegistryList) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{84} + return fileDescriptor_6e12a3c1f6fbf61e, []int{87} } func (m *RegistryList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2432,7 +2516,7 @@ var xxx_messageInfo_RegistryList proto.InternalMessageInfo func (m *RegistrySpec) Reset() { *m = RegistrySpec{} } func (*RegistrySpec) ProtoMessage() {} func (*RegistrySpec) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{85} + return fileDescriptor_6e12a3c1f6fbf61e, []int{88} } func (m *RegistrySpec) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2460,7 +2544,7 @@ var xxx_messageInfo_RegistrySpec proto.InternalMessageInfo func (m *ResourceRequirements) Reset() { *m = ResourceRequirements{} } func (*ResourceRequirements) ProtoMessage() {} func (*ResourceRequirements) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{86} + return fileDescriptor_6e12a3c1f6fbf61e, []int{89} } func (m *ResourceRequirements) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2488,7 +2572,7 @@ var xxx_messageInfo_ResourceRequirements proto.InternalMessageInfo func (m *StorageBackEndCLS) Reset() { *m = StorageBackEndCLS{} } func (*StorageBackEndCLS) ProtoMessage() {} func (*StorageBackEndCLS) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{87} + return fileDescriptor_6e12a3c1f6fbf61e, []int{90} } func (m *StorageBackEndCLS) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2516,7 +2600,7 @@ var xxx_messageInfo_StorageBackEndCLS proto.InternalMessageInfo func (m *StorageBackEndES) Reset() { *m = StorageBackEndES{} } func (*StorageBackEndES) ProtoMessage() {} func (*StorageBackEndES) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{88} + return fileDescriptor_6e12a3c1f6fbf61e, []int{91} } func (m *StorageBackEndES) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2544,7 +2628,7 @@ var xxx_messageInfo_StorageBackEndES proto.InternalMessageInfo func (m *TKEHA) Reset() { *m = TKEHA{} } func (*TKEHA) ProtoMessage() {} func (*TKEHA) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{89} + return fileDescriptor_6e12a3c1f6fbf61e, []int{92} } func (m *TKEHA) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2572,7 +2656,7 @@ var xxx_messageInfo_TKEHA proto.InternalMessageInfo func (m *TappController) Reset() { *m = TappController{} } func (*TappController) ProtoMessage() {} func (*TappController) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{90} + return fileDescriptor_6e12a3c1f6fbf61e, []int{93} } func (m *TappController) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2600,7 +2684,7 @@ var xxx_messageInfo_TappController proto.InternalMessageInfo func (m *TappControllerList) Reset() { *m = TappControllerList{} } func (*TappControllerList) ProtoMessage() {} func (*TappControllerList) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{91} + return fileDescriptor_6e12a3c1f6fbf61e, []int{94} } func (m *TappControllerList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2628,7 +2712,7 @@ var xxx_messageInfo_TappControllerList proto.InternalMessageInfo func (m *TappControllerProxyOptions) Reset() { *m = TappControllerProxyOptions{} } func (*TappControllerProxyOptions) ProtoMessage() {} func (*TappControllerProxyOptions) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{92} + return fileDescriptor_6e12a3c1f6fbf61e, []int{95} } func (m *TappControllerProxyOptions) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2656,7 +2740,7 @@ var xxx_messageInfo_TappControllerProxyOptions proto.InternalMessageInfo func (m *TappControllerSpec) Reset() { *m = TappControllerSpec{} } func (*TappControllerSpec) ProtoMessage() {} func (*TappControllerSpec) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{93} + return fileDescriptor_6e12a3c1f6fbf61e, []int{96} } func (m *TappControllerSpec) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2684,7 +2768,7 @@ var xxx_messageInfo_TappControllerSpec proto.InternalMessageInfo func (m *TappControllerStatus) Reset() { *m = TappControllerStatus{} } func (*TappControllerStatus) ProtoMessage() {} func (*TappControllerStatus) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{94} + return fileDescriptor_6e12a3c1f6fbf61e, []int{97} } func (m *TappControllerStatus) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2712,7 +2796,7 @@ var xxx_messageInfo_TappControllerStatus proto.InternalMessageInfo func (m *ThirdPartyHA) Reset() { *m = ThirdPartyHA{} } func (*ThirdPartyHA) ProtoMessage() {} func (*ThirdPartyHA) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{95} + return fileDescriptor_6e12a3c1f6fbf61e, []int{98} } func (m *ThirdPartyHA) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2740,7 +2824,7 @@ var xxx_messageInfo_ThirdPartyHA proto.InternalMessageInfo func (m *Upgrade) Reset() { *m = Upgrade{} } func (*Upgrade) ProtoMessage() {} func (*Upgrade) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{96} + return fileDescriptor_6e12a3c1f6fbf61e, []int{99} } func (m *Upgrade) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2768,7 +2852,7 @@ var xxx_messageInfo_Upgrade proto.InternalMessageInfo func (m *UpgradeStrategy) Reset() { *m = UpgradeStrategy{} } func (*UpgradeStrategy) ProtoMessage() {} func (*UpgradeStrategy) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{97} + return fileDescriptor_6e12a3c1f6fbf61e, []int{100} } func (m *UpgradeStrategy) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2796,7 +2880,7 @@ var xxx_messageInfo_UpgradeStrategy proto.InternalMessageInfo func (m *VolumeDecorator) Reset() { *m = VolumeDecorator{} } func (*VolumeDecorator) ProtoMessage() {} func (*VolumeDecorator) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{98} + return fileDescriptor_6e12a3c1f6fbf61e, []int{101} } func (m *VolumeDecorator) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2824,7 +2908,7 @@ var xxx_messageInfo_VolumeDecorator proto.InternalMessageInfo func (m *VolumeDecoratorList) Reset() { *m = VolumeDecoratorList{} } func (*VolumeDecoratorList) ProtoMessage() {} func (*VolumeDecoratorList) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{99} + return fileDescriptor_6e12a3c1f6fbf61e, []int{102} } func (m *VolumeDecoratorList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2852,7 +2936,7 @@ var xxx_messageInfo_VolumeDecoratorList proto.InternalMessageInfo func (m *VolumeDecoratorSpec) Reset() { *m = VolumeDecoratorSpec{} } func (*VolumeDecoratorSpec) ProtoMessage() {} func (*VolumeDecoratorSpec) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{100} + return fileDescriptor_6e12a3c1f6fbf61e, []int{103} } func (m *VolumeDecoratorSpec) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2880,7 +2964,7 @@ var xxx_messageInfo_VolumeDecoratorSpec proto.InternalMessageInfo func (m *VolumeDecoratorStatus) Reset() { *m = VolumeDecoratorStatus{} } func (*VolumeDecoratorStatus) ProtoMessage() {} func (*VolumeDecoratorStatus) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{101} + return fileDescriptor_6e12a3c1f6fbf61e, []int{104} } func (m *VolumeDecoratorStatus) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2933,6 +3017,9 @@ func init() { proto.RegisterType((*ClusterCredentialList)(nil), "tkestack.io.tke.api.platform.v1.ClusterCredentialList") proto.RegisterType((*ClusterFeature)(nil), "tkestack.io.tke.api.platform.v1.ClusterFeature") proto.RegisterMapType((map[HookType]string)(nil), "tkestack.io.tke.api.platform.v1.ClusterFeature.HooksEntry") + proto.RegisterType((*ClusterGroupAPIResourceItem)(nil), "tkestack.io.tke.api.platform.v1.ClusterGroupAPIResourceItem") + proto.RegisterType((*ClusterGroupAPIResourceItems)(nil), "tkestack.io.tke.api.platform.v1.ClusterGroupAPIResourceItems") + proto.RegisterType((*ClusterGroupAPIResourceItemsList)(nil), "tkestack.io.tke.api.platform.v1.ClusterGroupAPIResourceItemsList") proto.RegisterType((*ClusterList)(nil), "tkestack.io.tke.api.platform.v1.ClusterList") proto.RegisterType((*ClusterMachine)(nil), "tkestack.io.tke.api.platform.v1.ClusterMachine") proto.RegisterMapType((map[string]string)(nil), "tkestack.io.tke.api.platform.v1.ClusterMachine.LabelsEntry") @@ -3035,377 +3122,391 @@ func init() { } var fileDescriptor_6e12a3c1f6fbf61e = []byte{ - // 5919 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x3d, 0x5b, 0x6c, 0x24, 0xd9, - 0x55, 0xdb, 0x2f, 0xbb, 0x7d, 0xda, 0xcf, 0x3b, 0x9e, 0xdd, 0x5e, 0x6f, 0x32, 0x9e, 0xf4, 0x26, - 0xd1, 0x6c, 0x76, 0xb7, 0xbd, 0x33, 0xbb, 0x99, 0xcc, 0xee, 0x92, 0x47, 0x3f, 0x3c, 0x19, 0x67, - 0x6c, 0x4f, 0xe7, 0xb6, 0xc7, 0x43, 0x02, 0x24, 0x5b, 0xae, 0xbe, 0xb6, 0x2b, 0xae, 0xae, 0xaa, - 0x54, 0xdd, 0xee, 0x99, 0x5e, 0xf8, 0x08, 0x8f, 0x0f, 0x84, 0x00, 0x05, 0x22, 0x81, 0x14, 0x08, - 0x88, 0x04, 0x09, 0x44, 0x88, 0x14, 0x29, 0x88, 0x8f, 0x28, 0x20, 0x84, 0x90, 0x58, 0x21, 0x84, - 0x22, 0xbe, 0x22, 0xa4, 0x18, 0x62, 0x1e, 0x82, 0x0f, 0x04, 0xbf, 0xcc, 0x17, 0xba, 0x8f, 0xaa, - 0xba, 0x55, 0xdd, 0xed, 0xee, 0x9a, 0xf5, 0x74, 0xfc, 0x31, 0x7f, 0xee, 0xf3, 0xba, 0xe7, 0x3e, - 0xce, 0xeb, 0x3e, 0xca, 0xb0, 0x46, 0x8f, 0x88, 0x47, 0x35, 0xfd, 0xa8, 0x6c, 0xd8, 0xec, 0xef, - 0x35, 0xcd, 0x31, 0xd6, 0x1c, 0x53, 0xa3, 0xfb, 0xb6, 0xdb, 0x5e, 0xeb, 0x5e, 0x5d, 0x3b, 0x20, - 0x16, 0x71, 0x35, 0x4a, 0x5a, 0x65, 0xc7, 0xb5, 0xa9, 0x8d, 0x56, 0x15, 0x86, 0x32, 0x3d, 0x22, - 0x65, 0xcd, 0x31, 0xca, 0x3e, 0x43, 0xb9, 0x7b, 0x75, 0xe5, 0xe5, 0x03, 0x83, 0x1e, 0x76, 0xf6, - 0xca, 0xba, 0xdd, 0x5e, 0x3b, 0xb0, 0x0f, 0xec, 0x35, 0xce, 0xb7, 0xd7, 0xd9, 0xe7, 0xbf, 0xf8, - 0x0f, 0xfe, 0x97, 0x90, 0xb7, 0x52, 0x3a, 0xba, 0xe1, 0xb1, 0xb6, 0x59, 0xbb, 0xba, 0xed, 0x92, - 0x01, 0x6d, 0xae, 0xbc, 0x16, 0xd2, 0xb4, 0x35, 0xfd, 0xd0, 0xb0, 0x88, 0xdb, 0x5b, 0x73, 0x8e, - 0x0e, 0x38, 0x93, 0x4b, 0x3c, 0xbb, 0xe3, 0xea, 0x24, 0x11, 0x97, 0xb7, 0xd6, 0x26, 0x54, 0x1b, - 0xd4, 0xd6, 0xda, 0x30, 0x2e, 0xb7, 0x63, 0x51, 0xa3, 0xdd, 0xdf, 0xcc, 0xf5, 0x51, 0x0c, 0x9e, - 0x7e, 0x48, 0xda, 0x5a, 0x1f, 0xdf, 0xab, 0xc3, 0xf8, 0x3a, 0xd4, 0x30, 0xd7, 0x0c, 0x8b, 0x7a, - 0xd4, 0xed, 0x63, 0xba, 0x36, 0x68, 0xba, 0x34, 0xc7, 0x31, 0x0d, 0x5d, 0xa3, 0x86, 0x6d, 0x0d, - 0xe8, 0x51, 0xe9, 0x77, 0x52, 0x30, 0x53, 0x69, 0xb5, 0x6c, 0xab, 0xe9, 0x10, 0x1d, 0xbd, 0x04, - 0x79, 0x4a, 0x2c, 0xcd, 0xa2, 0x1b, 0xf5, 0x62, 0xea, 0x72, 0xea, 0xca, 0x4c, 0x75, 0xf1, 0x9d, - 0xe3, 0xd5, 0xa7, 0x4e, 0x8e, 0x57, 0xf3, 0x3b, 0x12, 0x8e, 0x03, 0x0a, 0xf4, 0x61, 0x28, 0xe8, - 0x66, 0xc7, 0xa3, 0xc4, 0xdd, 0xd6, 0xda, 0xa4, 0x98, 0xe6, 0x0c, 0x17, 0x24, 0x43, 0xa1, 0x16, - 0xa2, 0xb0, 0x4a, 0x87, 0x5e, 0x80, 0xe9, 0x2e, 0x71, 0x3d, 0xc3, 0xb6, 0x8a, 0x19, 0xce, 0xb2, - 0x20, 0x59, 0xa6, 0x77, 0x05, 0x18, 0xfb, 0xf8, 0xd2, 0x9f, 0xa7, 0x20, 0x53, 0x71, 0x1c, 0xf4, - 0x16, 0xe4, 0xd9, 0x94, 0xb4, 0x34, 0xaa, 0x71, 0xbd, 0x0a, 0xd7, 0x5e, 0x29, 0x8b, 0x11, 0x2a, - 0xab, 0x23, 0x54, 0x76, 0x8e, 0x0e, 0x18, 0xc0, 0x2b, 0x33, 0xea, 0x72, 0xf7, 0x6a, 0xf9, 0xce, - 0xde, 0x17, 0x88, 0x4e, 0xb7, 0x08, 0xd5, 0xaa, 0x48, 0xb6, 0x02, 0x21, 0x0c, 0x07, 0x52, 0xd1, - 0x16, 0x64, 0x3d, 0x87, 0xe8, 0xbc, 0x13, 0x85, 0x6b, 0x2f, 0x96, 0x07, 0x2d, 0x64, 0x65, 0x28, - 0x99, 0xec, 0x8a, 0xe3, 0xb0, 0x41, 0xab, 0xce, 0x4a, 0xc1, 0x59, 0xf6, 0x0b, 0x73, 0x31, 0xa5, - 0x1f, 0xa4, 0x60, 0xb1, 0xd2, 0xa1, 0x87, 0x6f, 0xdf, 0x23, 0x7b, 0x87, 0xb6, 0x7d, 0x54, 0x69, - 0xb5, 0x5c, 0xf4, 0x79, 0x98, 0xde, 0xeb, 0x18, 0x26, 0x35, 0x2c, 0xd9, 0x89, 0x1b, 0xe5, 0x11, - 0xf6, 0x52, 0xae, 0x0a, 0xfa, 0xb8, 0xa8, 0x6a, 0x81, 0x0d, 0x97, 0x44, 0x62, 0x5f, 0x2a, 0xd2, - 0x21, 0x4f, 0x1e, 0x50, 0xe2, 0x5a, 0x9a, 0x29, 0x3b, 0xf2, 0xfa, 0xc8, 0x16, 0xd6, 0x25, 0x43, - 0x5f, 0x13, 0xb3, 0x6c, 0xd6, 0x7d, 0x2c, 0x0e, 0x04, 0x97, 0x9a, 0x30, 0x5b, 0xb5, 0x6d, 0xb6, - 0x00, 0x35, 0x87, 0xcd, 0x4d, 0x0d, 0x32, 0x9a, 0xe3, 0xc8, 0x1e, 0xbd, 0x7f, 0x64, 0x7b, 0x15, - 0xc7, 0xa9, 0x16, 0xe4, 0x88, 0xb1, 0xb9, 0xc5, 0x8c, 0xbb, 0xf4, 0x2c, 0x3c, 0x33, 0xa4, 0xab, - 0xa5, 0xdf, 0x4f, 0x43, 0xa1, 0xd6, 0xdc, 0xb8, 0xe3, 0xb0, 0x75, 0x6b, 0xbb, 0x13, 0x58, 0x0b, - 0x38, 0xb2, 0x16, 0x5e, 0x19, 0xd9, 0x25, 0x45, 0xbb, 0x61, 0x0b, 0x02, 0x7d, 0x16, 0xa6, 0x3c, - 0xaa, 0xd1, 0x8e, 0xc7, 0xd7, 0x7c, 0xe1, 0xda, 0xb5, 0x44, 0x52, 0x39, 0x67, 0x75, 0x5e, 0xca, - 0x9d, 0x12, 0xbf, 0xb1, 0x94, 0x58, 0xfa, 0x38, 0x20, 0x85, 0xf8, 0x26, 0xd1, 0x68, 0xc7, 0x8d, - 0x98, 0x59, 0x6a, 0x84, 0x99, 0xfd, 0x75, 0x0a, 0x16, 0x14, 0x09, 0x9b, 0x86, 0x47, 0xd1, 0x4f, - 0xf7, 0x0d, 0x73, 0x79, 0xbc, 0x61, 0x66, 0xdc, 0x7c, 0x90, 0x03, 0xd7, 0xe1, 0x43, 0x94, 0x21, - 0xfe, 0x34, 0xe4, 0x0c, 0x4a, 0xda, 0x5e, 0x31, 0x7d, 0x39, 0x73, 0xa5, 0x70, 0xed, 0xa5, 0x24, - 0xa3, 0x51, 0x9d, 0x93, 0x82, 0x73, 0x1b, 0x4c, 0x04, 0x16, 0x92, 0x4a, 0x7f, 0x10, 0xed, 0xc4, - 0xb9, 0xf4, 0x67, 0xdf, 0xc9, 0xc0, 0x52, 0xdf, 0xbc, 0x26, 0x98, 0x29, 0xd4, 0x80, 0x65, 0x8f, - 0xda, 0xae, 0x76, 0x40, 0x76, 0x89, 0xd5, 0xb2, 0x5d, 0x49, 0x20, 0x75, 0x7d, 0x8f, 0xe4, 0x5b, - 0x6e, 0x0e, 0xa0, 0xc1, 0x03, 0x39, 0xd1, 0x55, 0xc8, 0x39, 0x87, 0x9a, 0x47, 0xa4, 0xee, 0xcf, - 0xf9, 0x63, 0xdb, 0x60, 0xc0, 0x87, 0xc7, 0xab, 0xc0, 0xa3, 0x03, 0xff, 0x85, 0x05, 0x25, 0xfa, - 0x20, 0x4c, 0xb9, 0x44, 0xf3, 0x6c, 0xab, 0x98, 0xe5, 0x3c, 0xc1, 0xba, 0xc4, 0x1c, 0x8a, 0x25, - 0x16, 0x5d, 0x03, 0x70, 0x09, 0x75, 0x7b, 0x35, 0xbb, 0x63, 0xd1, 0x62, 0xee, 0x72, 0xea, 0x4a, - 0x2e, 0xb4, 0x3c, 0x1c, 0x60, 0xb0, 0x42, 0x85, 0x7e, 0x23, 0x05, 0xcf, 0x99, 0x9a, 0x47, 0x31, - 0xd9, 0xb0, 0x0c, 0x6a, 0x68, 0xa6, 0xf1, 0xb6, 0x61, 0x1d, 0xec, 0x18, 0x6d, 0xb6, 0x3c, 0xda, - 0x4e, 0x71, 0x8a, 0x2f, 0xc5, 0x0f, 0x8d, 0xb7, 0x14, 0x19, 0x5b, 0xf5, 0x79, 0xd9, 0xe2, 0x73, - 0x9b, 0xc3, 0xc5, 0xe2, 0xd3, 0xda, 0x2c, 0xb5, 0xf8, 0xc2, 0x6a, 0xb8, 0xf6, 0x83, 0xde, 0x1d, - 0x87, 0x79, 0x7f, 0x0f, 0xad, 0xc1, 0x8c, 0xa5, 0xb5, 0x89, 0xe7, 0x68, 0x3a, 0x91, 0x93, 0xb6, - 0x24, 0xdb, 0x99, 0xd9, 0xf6, 0x11, 0x38, 0xa4, 0x41, 0x97, 0x21, 0x6b, 0x85, 0x8b, 0x2a, 0xf0, - 0x10, 0x7c, 0x35, 0x71, 0x4c, 0xe9, 0x2b, 0x69, 0x98, 0x96, 0x6b, 0x6c, 0x02, 0x3e, 0x6e, 0x3b, - 0xe2, 0xe3, 0xc6, 0xb0, 0x3f, 0xa1, 0xd9, 0x50, 0xff, 0xb6, 0x1b, 0xf3, 0x6f, 0xe5, 0xb1, 0x25, - 0x9e, 0xee, 0xdb, 0xbe, 0x9e, 0x86, 0x59, 0x49, 0xc9, 0x17, 0xe2, 0x04, 0x86, 0xa6, 0x19, 0x19, - 0x9a, 0xab, 0xe3, 0x76, 0x24, 0xc8, 0xa2, 0x06, 0x8e, 0xcf, 0x4f, 0xc5, 0xc6, 0xe7, 0xd5, 0x64, - 0x62, 0x4f, 0x1f, 0xa4, 0xbf, 0x49, 0xc1, 0xa2, 0x4a, 0x3e, 0x01, 0x07, 0x8e, 0xa3, 0x0e, 0xfc, - 0xe5, 0x44, 0xdd, 0x19, 0xe2, 0xc1, 0x7f, 0x33, 0xd6, 0x0d, 0xee, 0xc2, 0x2f, 0x43, 0x96, 0xf6, - 0x1c, 0xdf, 0xc8, 0x82, 0xa1, 0xdd, 0xe9, 0x39, 0x04, 0x73, 0x0c, 0xf3, 0x60, 0x26, 0xe9, 0x12, - 0x53, 0xda, 0x56, 0xe0, 0xc1, 0x36, 0x19, 0x30, 0xf0, 0x60, 0xfc, 0x17, 0x16, 0x94, 0x49, 0x5c, - 0xf6, 0xaf, 0xa6, 0x00, 0xf5, 0x4f, 0x45, 0x12, 0x9f, 0xfd, 0xbc, 0xef, 0x61, 0x85, 0x7e, 0x73, - 0x11, 0x0f, 0xdb, 0xef, 0x53, 0x33, 0xa7, 0xf9, 0xd4, 0xd2, 0xaf, 0x67, 0xa2, 0x63, 0xc4, 0xc6, - 0x61, 0x02, 0x36, 0xe1, 0xcf, 0x42, 0x7a, 0xf4, 0x2c, 0x64, 0xc6, 0x9e, 0x85, 0x37, 0x61, 0xce, - 0xd4, 0x28, 0xf1, 0xa8, 0x1f, 0xc5, 0x44, 0x38, 0xb9, 0x28, 0x59, 0xe7, 0x36, 0x55, 0x24, 0x8e, - 0xd2, 0xb2, 0x60, 0xdd, 0x22, 0x9e, 0xee, 0x1a, 0xdc, 0x23, 0xf3, 0xe8, 0xa2, 0x04, 0xeb, 0x7a, - 0x88, 0xc2, 0x2a, 0x1d, 0xba, 0x03, 0x17, 0x75, 0xbb, 0xed, 0x68, 0xd4, 0xd8, 0x33, 0x89, 0x1c, - 0x48, 0xd6, 0x8b, 0xe2, 0xd4, 0xe5, 0xcc, 0x95, 0x99, 0xea, 0xb3, 0x27, 0xc7, 0xab, 0x17, 0x6b, - 0x83, 0x08, 0xf0, 0x60, 0xbe, 0xd2, 0xdf, 0xa7, 0x60, 0x39, 0x3e, 0x21, 0x13, 0xb0, 0xbf, 0xdd, - 0xa8, 0xfd, 0x25, 0xf3, 0x52, 0x4c, 0xc7, 0x21, 0x36, 0xf8, 0x47, 0x29, 0x98, 0x0f, 0x49, 0x5d, - 0xe2, 0xb1, 0x58, 0xa7, 0x5a, 0xe0, 0x73, 0xea, 0xdc, 0x3f, 0x3c, 0x5e, 0x2d, 0x48, 0x32, 0x65, - 0x29, 0x5c, 0x86, 0xec, 0xa1, 0xed, 0xd1, 0xf8, 0x62, 0xb9, 0x65, 0x7b, 0x14, 0x73, 0x0c, 0xa3, - 0x70, 0x6c, 0x97, 0xf2, 0xb5, 0x92, 0x0b, 0x29, 0x1a, 0xb6, 0x4b, 0x31, 0xc7, 0x70, 0x0a, 0x8d, - 0x1e, 0xca, 0x25, 0x11, 0x52, 0x68, 0xf4, 0x10, 0x73, 0x4c, 0xe9, 0x26, 0x5c, 0xf0, 0x15, 0x75, - 0x1c, 0x33, 0x12, 0x99, 0x6d, 0x7a, 0xd7, 0x69, 0x69, 0x54, 0xa8, 0x9c, 0x57, 0x22, 0xb3, 0x8f, - 0xc0, 0x21, 0x4d, 0xe9, 0xbb, 0xa1, 0xd7, 0x61, 0x13, 0x6f, 0x5b, 0xc4, 0xa2, 0x63, 0x78, 0x9d, - 0x5f, 0x4c, 0x41, 0xde, 0x25, 0xbc, 0x20, 0xf4, 0xc6, 0x2e, 0xb6, 0xe2, 0xed, 0x60, 0x29, 0xa0, - 0xfa, 0x92, 0x3f, 0xd5, 0x3e, 0xe4, 0xe1, 0xf1, 0x6a, 0x71, 0x18, 0x35, 0x0e, 0x1a, 0x66, 0xab, - 0x6f, 0x28, 0x19, 0xf3, 0x51, 0x2d, 0xe2, 0x19, 0x2e, 0x69, 0xf1, 0x7e, 0xe4, 0x42, 0x1f, 0x55, - 0x17, 0x60, 0xec, 0xe3, 0x19, 0xa9, 0xde, 0x71, 0x5d, 0x62, 0x89, 0x59, 0x53, 0x48, 0x6b, 0x02, - 0x8c, 0x7d, 0x3c, 0x1b, 0x60, 0xad, 0xab, 0x19, 0xa6, 0xb6, 0x67, 0x12, 0x39, 0x81, 0xc1, 0x00, - 0x57, 0x7c, 0x04, 0x0e, 0x69, 0x98, 0xec, 0x0e, 0x1f, 0xea, 0x16, 0x9f, 0x4d, 0x45, 0xb6, 0x98, - 0x81, 0x16, 0xf6, 0xf1, 0xa5, 0x6f, 0x64, 0x94, 0xb9, 0xb0, 0x5a, 0x06, 0x37, 0xd9, 0xd1, 0x73, - 0xf1, 0x7a, 0x10, 0x5c, 0xc5, 0x92, 0x7b, 0x5f, 0x34, 0x4e, 0x3e, 0x3c, 0x5e, 0x5d, 0x08, 0xc4, - 0x45, 0x43, 0x27, 0x3a, 0x60, 0x3e, 0xc8, 0xa3, 0x0d, 0xd7, 0xde, 0x23, 0x2c, 0xe3, 0x93, 0xe1, - 0x39, 0x49, 0x82, 0xa9, 0xf8, 0x2b, 0x45, 0x10, 0x8e, 0xca, 0x45, 0x5d, 0x40, 0x0c, 0xb0, 0xe3, - 0x6a, 0x96, 0xc7, 0x15, 0xe1, 0xad, 0x65, 0x13, 0xb7, 0xb6, 0x22, 0x5b, 0x43, 0x9b, 0x7d, 0xd2, - 0xf0, 0x80, 0x16, 0x94, 0xc0, 0x92, 0x3b, 0x35, 0x59, 0x7f, 0x01, 0xa6, 0xdb, 0xc4, 0xf3, 0xb4, - 0x03, 0xc2, 0x73, 0x6c, 0x25, 0xa0, 0x6d, 0x09, 0x30, 0xf6, 0xf1, 0xa5, 0xff, 0xcb, 0xc1, 0x92, - 0x3f, 0x4b, 0x2e, 0x69, 0x11, 0x8b, 0xe5, 0xcc, 0x13, 0x08, 0x42, 0x6a, 0x35, 0x97, 0x4e, 0x5a, - 0xcd, 0x65, 0xc6, 0xac, 0xe6, 0xca, 0x00, 0x84, 0xea, 0xad, 0x5a, 0xa5, 0x46, 0x5c, 0xca, 0xe7, - 0x67, 0xb6, 0x3a, 0xcf, 0x54, 0x5a, 0xdf, 0xa9, 0xd5, 0x05, 0x14, 0x2b, 0x14, 0xe8, 0x45, 0x98, - 0x11, 0xbf, 0x6e, 0x93, 0x1e, 0x1f, 0xe2, 0xd9, 0xea, 0x1c, 0x33, 0x05, 0x41, 0x7e, 0x9b, 0xf4, - 0x70, 0x88, 0x47, 0x35, 0x58, 0x62, 0x3f, 0x2a, 0x8d, 0x8d, 0x9a, 0x69, 0x10, 0x8b, 0xf2, 0x36, - 0xa6, 0x38, 0xd3, 0xc5, 0x93, 0xe3, 0xd5, 0x25, 0xc6, 0x14, 0x41, 0xe2, 0x7e, 0x7a, 0xf4, 0x09, - 0x58, 0x8c, 0x00, 0x59, 0xc3, 0xd3, 0x5c, 0xc6, 0xf2, 0xc9, 0xf1, 0xea, 0x62, 0x44, 0x06, 0x6b, - 0xbf, 0x8f, 0x1a, 0x95, 0x60, 0x4a, 0xd7, 0x78, 0xdb, 0x79, 0xce, 0x07, 0x6c, 0x3d, 0xc8, 0xbe, - 0x49, 0x0c, 0x5a, 0x85, 0x9c, 0xae, 0x31, 0xd1, 0x33, 0x9c, 0x64, 0x86, 0x45, 0x0a, 0xd1, 0x1f, - 0x01, 0x67, 0x03, 0xa5, 0x87, 0x9d, 0x80, 0x70, 0xa0, 0x14, 0xed, 0x15, 0x0a, 0x36, 0x50, 0x7a, - 0xa0, 0x6f, 0x21, 0x1c, 0xa8, 0x50, 0xd1, 0x10, 0xcf, 0x5a, 0xa7, 0xf6, 0x11, 0xb1, 0x8a, 0xb3, - 0x7c, 0xda, 0x78, 0xeb, 0x3b, 0x0c, 0x80, 0x05, 0x1c, 0xbd, 0x01, 0xf3, 0x7b, 0xfe, 0x2e, 0x14, - 0x47, 0x14, 0xe7, 0x38, 0x25, 0x3a, 0x39, 0x5e, 0x9d, 0xaf, 0x46, 0x30, 0x38, 0x46, 0xc9, 0x78, - 0x75, 0xe2, 0x52, 0x63, 0xdf, 0xd0, 0x35, 0x4a, 0x98, 0x3a, 0xf3, 0x21, 0x6f, 0x2d, 0x82, 0xc1, - 0x31, 0xca, 0xd2, 0x3f, 0xa4, 0xe0, 0x62, 0xdf, 0xda, 0x9f, 0x40, 0xbc, 0xbf, 0x17, 0x8d, 0xf7, - 0xd7, 0xc6, 0x0e, 0x35, 0x81, 0x92, 0x43, 0x02, 0xfe, 0xff, 0xe6, 0x83, 0x80, 0xef, 0xef, 0x1c, - 0xbd, 0x07, 0xb2, 0x86, 0xd3, 0xf5, 0x64, 0xf4, 0xcc, 0x33, 0x67, 0xbb, 0xd1, 0xd8, 0x6d, 0x62, - 0x0e, 0x45, 0x57, 0x20, 0xef, 0x74, 0xf6, 0x4c, 0x43, 0xdf, 0xac, 0x72, 0x2b, 0xcc, 0x8b, 0x9d, - 0xc2, 0x86, 0x84, 0xe1, 0x00, 0xcb, 0x56, 0x88, 0x61, 0x89, 0x5d, 0xc3, 0xcd, 0x2a, 0x37, 0xc0, - 0xbc, 0x58, 0x21, 0x1b, 0x01, 0x14, 0x2b, 0x14, 0xe8, 0x15, 0x98, 0x3e, 0x70, 0x3a, 0x3c, 0x1b, - 0x13, 0x61, 0xff, 0x69, 0xe6, 0x7e, 0x3e, 0xd9, 0xb8, 0x2b, 0x53, 0x0d, 0xff, 0x4f, 0xec, 0x93, - 0xa1, 0x06, 0x2c, 0x13, 0x8b, 0x05, 0x99, 0x2d, 0x8d, 0xd7, 0x92, 0xfa, 0x21, 0x69, 0x75, 0x4c, - 0xc2, 0xed, 0x30, 0x1f, 0x6e, 0x87, 0xac, 0x0f, 0xa0, 0xc1, 0x03, 0x39, 0xd1, 0x9b, 0x90, 0x3e, - 0xd4, 0xe4, 0x2e, 0xc3, 0xf3, 0x23, 0x07, 0xf9, 0x56, 0xa5, 0x3a, 0x75, 0x72, 0xbc, 0x9a, 0xbe, - 0x55, 0xc1, 0xe9, 0x43, 0x8d, 0x2d, 0x2c, 0xef, 0xc8, 0x70, 0x82, 0x58, 0xe3, 0x15, 0xa7, 0x79, - 0x56, 0xc9, 0x17, 0x56, 0x33, 0x82, 0xc1, 0x31, 0x4a, 0xf4, 0x29, 0xc8, 0xed, 0x1b, 0x26, 0xf1, - 0x8a, 0x79, 0x3e, 0xc1, 0x1f, 0x18, 0xd9, 0xf6, 0x4d, 0xc3, 0x54, 0x92, 0x38, 0xf6, 0xcb, 0xc3, - 0x42, 0x04, 0x3a, 0x82, 0xdc, 0xa1, 0x6d, 0x1f, 0x79, 0xc5, 0x19, 0x2e, 0xeb, 0x8d, 0x71, 0x17, - 0x8b, 0x5c, 0x00, 0xe5, 0x5b, 0x8c, 0x79, 0xdd, 0xa2, 0x6e, 0xaf, 0xfa, 0xac, 0xdf, 0x00, 0x87, - 0xfd, 0xc2, 0x3f, 0xaf, 0xe6, 0xd9, 0x1f, 0x7c, 0x16, 0x44, 0x1b, 0x68, 0x1f, 0x0a, 0xba, 0x67, - 0xf8, 0x5b, 0x5a, 0xdc, 0x11, 0x8c, 0x55, 0xde, 0xf6, 0xed, 0x58, 0x56, 0x17, 0xb8, 0x63, 0x0e, - 0xe1, 0x58, 0x15, 0x8c, 0x3c, 0x58, 0xd4, 0x62, 0x7b, 0xc3, 0xdc, 0x8d, 0x8c, 0x93, 0xfc, 0xf6, - 0x6d, 0x6e, 0x73, 0x4f, 0x19, 0x87, 0xe2, 0xbe, 0x06, 0xd0, 0x16, 0x5c, 0x90, 0xcb, 0x84, 0x50, - 0xd7, 0xd0, 0xbd, 0x26, 0x71, 0xbb, 0xc4, 0xe5, 0x5e, 0x29, 0x1f, 0xa4, 0xc2, 0x17, 0xd6, 0xfb, - 0x49, 0xf0, 0x20, 0x3e, 0x56, 0xf1, 0x18, 0x4e, 0xf7, 0x7a, 0xbd, 0xa3, 0x99, 0x4d, 0xa6, 0x2f, - 0x77, 0x5a, 0xf9, 0x30, 0x83, 0xd8, 0x68, 0x28, 0x48, 0x1c, 0xa5, 0x45, 0x37, 0x60, 0x56, 0xc8, - 0xac, 0x19, 0xa6, 0xd1, 0x69, 0x73, 0xa7, 0x95, 0xaf, 0x2e, 0x4b, 0xde, 0xd9, 0x75, 0x05, 0x87, - 0x23, 0x94, 0xa8, 0xc9, 0x32, 0xb0, 0x03, 0x57, 0x6b, 0x91, 0xe2, 0xd3, 0x7c, 0xc4, 0xae, 0x8c, - 0x1c, 0xb1, 0xbb, 0x82, 0x5e, 0xcd, 0xd5, 0x38, 0x00, 0xfb, 0x92, 0x56, 0x6e, 0x00, 0x84, 0xeb, - 0x04, 0x2d, 0x42, 0xe6, 0x88, 0xf4, 0x44, 0x8e, 0x86, 0xd9, 0x9f, 0x68, 0x19, 0x72, 0x5d, 0xcd, - 0xec, 0xc8, 0x9a, 0x11, 0x8b, 0x1f, 0x6f, 0xa4, 0x6f, 0xa4, 0x58, 0xc6, 0xed, 0xc7, 0xdf, 0x09, - 0x78, 0xce, 0xad, 0xa8, 0xe7, 0xbc, 0x32, 0xae, 0x31, 0x0c, 0xf1, 0x97, 0xff, 0x95, 0x09, 0xfc, - 0xe5, 0x96, 0xd0, 0x0c, 0xad, 0x40, 0xda, 0x70, 0x64, 0x7a, 0x0a, 0x92, 0x29, 0xbd, 0xd1, 0xc0, - 0x69, 0xc3, 0x09, 0x2a, 0x9d, 0xf4, 0xd0, 0x4a, 0xe7, 0x25, 0xc8, 0x77, 0x3c, 0xe6, 0x02, 0x83, - 0x24, 0x25, 0xe8, 0xcd, 0x5d, 0x09, 0xc7, 0x01, 0x05, 0xf7, 0xbe, 0x9a, 0xe7, 0xdd, 0xb7, 0xdd, - 0x96, 0x4c, 0x4e, 0x84, 0xf7, 0x95, 0x30, 0x1c, 0x60, 0x99, 0xf7, 0x75, 0x5c, 0xa3, 0x2b, 0x23, - 0x5c, 0x2e, 0x8c, 0xcf, 0x8d, 0x00, 0x8a, 0x15, 0x0a, 0x4e, 0xaf, 0x79, 0x5e, 0xe3, 0xd0, 0xd5, - 0x3c, 0x22, 0x93, 0x12, 0x41, 0x1f, 0x40, 0xb1, 0x42, 0x81, 0x74, 0x98, 0x32, 0xb5, 0x3d, 0x62, - 0x0a, 0x27, 0x57, 0xb8, 0xf6, 0xe6, 0xb8, 0x03, 0x2b, 0x87, 0xad, 0xbc, 0xc9, 0xb9, 0x85, 0x9b, - 0x09, 0xb2, 0x52, 0x01, 0xc4, 0x52, 0x34, 0xaa, 0xc0, 0x14, 0xd5, 0x0c, 0x8b, 0xfa, 0x6e, 0xf1, - 0x59, 0x65, 0x61, 0x94, 0x75, 0xdb, 0x25, 0x3c, 0x2f, 0x66, 0x14, 0xa1, 0x08, 0xfe, 0xd3, 0xc3, - 0x92, 0x71, 0xe5, 0x75, 0x28, 0x28, 0x2d, 0x25, 0x5a, 0xa8, 0x3f, 0x4c, 0xc3, 0x82, 0x54, 0xba, - 0xe1, 0xda, 0x0e, 0x71, 0x69, 0x0f, 0x6d, 0xc2, 0x72, 0x5b, 0x7b, 0xe0, 0x6f, 0x5e, 0x12, 0xb7, - 0x6b, 0xe8, 0x64, 0xbb, 0xd3, 0x96, 0x15, 0x56, 0x91, 0x85, 0x9b, 0xad, 0x01, 0x78, 0x3c, 0x90, - 0x0b, 0x7d, 0x04, 0xe6, 0xda, 0xda, 0x83, 0x6d, 0xbb, 0x45, 0x1a, 0x76, 0x8b, 0x89, 0x11, 0xeb, - 0x64, 0x89, 0x39, 0x83, 0x2d, 0x15, 0x81, 0xa3, 0x74, 0xe8, 0x4b, 0x29, 0x98, 0xb3, 0xbb, 0xc4, - 0xf5, 0x6c, 0xb3, 0x85, 0x35, 0x6a, 0xd8, 0xc5, 0x0c, 0x1f, 0xa0, 0xda, 0xb8, 0xb3, 0xe0, 0x77, - 0xa8, 0x7c, 0x47, 0x95, 0x22, 0x66, 0x23, 0xf0, 0x47, 0x11, 0x1c, 0x8e, 0x36, 0xb8, 0xf2, 0x09, - 0x40, 0xfd, 0xbc, 0x89, 0xc6, 0xf7, 0x3f, 0x73, 0xc1, 0xf8, 0x62, 0x79, 0x50, 0x8f, 0x7e, 0x0e, - 0xf2, 0xba, 0xe6, 0x68, 0xba, 0x41, 0x99, 0x10, 0xd6, 0xa5, 0x8f, 0x8d, 0xdb, 0x25, 0x5f, 0x46, - 0xb9, 0x26, 0x05, 0x88, 0xde, 0x5c, 0xf6, 0xcd, 0xc9, 0x07, 0x3f, 0x3c, 0x5e, 0x9d, 0xf5, 0x69, - 0x99, 0xc3, 0xc0, 0x41, 0x8b, 0xe8, 0x97, 0x53, 0x50, 0xd0, 0x4c, 0xd3, 0xd6, 0x35, 0xca, 0xeb, - 0x5b, 0xe1, 0x33, 0x2a, 0x89, 0x35, 0xa8, 0x84, 0x32, 0x84, 0x12, 0xfe, 0x29, 0x44, 0x41, 0xc1, - 0xf4, 0xe9, 0xa1, 0x36, 0xcd, 0x66, 0x78, 0x46, 0xfe, 0x26, 0x2d, 0x39, 0xbb, 0x1f, 0x7f, 0x54, - 0x45, 0x48, 0x4b, 0xa8, 0xf1, 0xbe, 0xa0, 0x52, 0xf7, 0xe1, 0x7d, 0x4a, 0x84, 0x8d, 0xae, 0x1c, - 0xc1, 0x5c, 0x64, 0x28, 0x07, 0x4c, 0x6e, 0x5d, 0x9d, 0xdc, 0x11, 0x8e, 0xbb, 0xec, 0xdf, 0xc6, - 0x28, 0x7f, 0xba, 0xa3, 0x59, 0xd4, 0xa0, 0x3d, 0x65, 0x31, 0xac, 0x58, 0xb0, 0x18, 0x1f, 0xb5, - 0xc7, 0xda, 0x9e, 0x09, 0xf3, 0xd1, 0xc1, 0x79, 0x9c, 0xad, 0x95, 0xbe, 0x75, 0x31, 0x88, 0x79, - 0x7c, 0x5b, 0xfb, 0xe3, 0x00, 0xfb, 0x86, 0xa5, 0x99, 0xc6, 0xdb, 0xc4, 0xf5, 0xf8, 0x42, 0x9f, - 0xa9, 0xae, 0x32, 0x6f, 0x7b, 0x33, 0x80, 0x3e, 0x3c, 0x5e, 0x9d, 0x0b, 0x7e, 0xf1, 0x42, 0x55, - 0x61, 0x49, 0x5e, 0x0c, 0xb7, 0x0c, 0xcf, 0x31, 0xb5, 0xde, 0xa0, 0x62, 0xb8, 0x1e, 0xa2, 0xb0, - 0x4a, 0x17, 0x6c, 0xbd, 0x64, 0x87, 0x6e, 0xbd, 0x28, 0xfb, 0xe0, 0xb9, 0x11, 0xfb, 0xe0, 0x75, - 0x28, 0x58, 0x84, 0xde, 0xb7, 0xdd, 0x23, 0xb9, 0xe1, 0xca, 0xc8, 0x4b, 0xbe, 0x0e, 0xdb, 0x21, - 0xea, 0x61, 0xf4, 0x27, 0x56, 0xd9, 0x58, 0x0a, 0x25, 0x7f, 0xd6, 0x09, 0xf3, 0xa2, 0xbc, 0xf4, - 0x55, 0x36, 0x8d, 0xb7, 0x55, 0x24, 0x8e, 0xd2, 0x2a, 0x7b, 0x02, 0xb5, 0x8d, 0x3a, 0xe6, 0xd5, - 0x6f, 0xff, 0x9e, 0x00, 0x43, 0x61, 0x95, 0x0e, 0x5d, 0x85, 0x82, 0x27, 0x7c, 0x36, 0x67, 0xbb, - 0x20, 0x3a, 0xca, 0x58, 0x9a, 0x21, 0x18, 0xab, 0x34, 0x68, 0x0d, 0x66, 0x5a, 0x96, 0x57, 0xb7, - 0xdb, 0x9a, 0x61, 0xf1, 0x12, 0x5a, 0x39, 0x20, 0xac, 0x6f, 0x37, 0x05, 0x02, 0x87, 0x34, 0x08, - 0xc3, 0xd3, 0xa2, 0x70, 0xaa, 0x98, 0xbc, 0x20, 0xa2, 0x46, 0x97, 0xf0, 0x93, 0xc4, 0x22, 0xf0, - 0xc5, 0xb1, 0x72, 0x72, 0xbc, 0xfa, 0x74, 0x63, 0x20, 0x05, 0x1e, 0xc2, 0x89, 0x6c, 0xc8, 0xef, - 0x8b, 0xdc, 0xda, 0x93, 0xa9, 0xf2, 0x5a, 0xc2, 0x52, 0x20, 0x98, 0x9f, 0xbc, 0x04, 0xb0, 0x55, - 0x19, 0xab, 0x17, 0x71, 0xd0, 0x08, 0xba, 0xcf, 0x72, 0x0e, 0x1e, 0x57, 0x0c, 0xe2, 0xf1, 0x2c, - 0x79, 0xac, 0xfb, 0x13, 0xd1, 0x88, 0x54, 0xfd, 0x80, 0xbf, 0x0b, 0xd4, 0x08, 0x64, 0xf1, 0x2d, - 0xbc, 0x28, 0x19, 0x56, 0x9a, 0x42, 0x9f, 0x87, 0x19, 0x4d, 0xec, 0x43, 0x13, 0xaf, 0x38, 0xc7, - 0x7d, 0xe5, 0x5a, 0xc2, 0x7c, 0x24, 0xb4, 0x1f, 0x09, 0xf0, 0x70, 0x28, 0x13, 0xfd, 0x52, 0x0a, - 0x16, 0x5a, 0xb6, 0x7e, 0x44, 0xdc, 0xf5, 0x07, 0xd4, 0xd5, 0x2a, 0xee, 0x81, 0x57, 0x9c, 0x4f, - 0x16, 0x1c, 0x98, 0xdd, 0x97, 0xeb, 0x51, 0x19, 0xc2, 0x2b, 0x3f, 0x23, 0x5b, 0x5e, 0x88, 0x61, - 0x71, 0xbc, 0x49, 0x16, 0x9f, 0x16, 0x8f, 0x3a, 0x7b, 0xc4, 0x24, 0x34, 0xd4, 0x63, 0x81, 0xeb, - 0x51, 0x4d, 0xa4, 0xc7, 0xed, 0x98, 0x10, 0xa1, 0x48, 0x51, 0x2a, 0xb2, 0x18, 0x47, 0xe3, 0xbe, - 0x56, 0xd1, 0x97, 0x53, 0x80, 0x34, 0xc7, 0x10, 0x95, 0x4d, 0xa8, 0xcc, 0x22, 0x57, 0xa6, 0x9e, - 0x48, 0x99, 0x4a, 0x9f, 0x18, 0xa1, 0x4e, 0xb0, 0xd7, 0x59, 0x69, 0x6c, 0xc4, 0x08, 0xf0, 0x80, - 0xb6, 0xd1, 0xb7, 0x53, 0xb0, 0xa2, 0xdb, 0x16, 0x75, 0x6d, 0xd3, 0x64, 0xf3, 0x6a, 0x69, 0x07, - 0xaa, 0x6a, 0x4b, 0x5c, 0xb5, 0xcd, 0x44, 0xaa, 0xd5, 0x86, 0x8a, 0x13, 0x2a, 0xfa, 0xf6, 0xb1, - 0x32, 0x9c, 0x10, 0x9f, 0xa2, 0x13, 0x1f, 0x45, 0x4f, 0x6e, 0x3e, 0x28, 0xaa, 0xa2, 0x47, 0x18, - 0xc5, 0x66, 0x9f, 0x98, 0xd8, 0x28, 0xf6, 0x13, 0xe0, 0x01, 0x6d, 0xa3, 0x2e, 0x2c, 0xeb, 0xf1, - 0xcd, 0x23, 0x4c, 0xf6, 0x8b, 0xcb, 0xb2, 0x74, 0x1c, 0x90, 0x81, 0x6f, 0xda, 0xba, 0x66, 0x8a, - 0x3d, 0x5b, 0x4c, 0xf6, 0x89, 0x4b, 0x2c, 0x9d, 0x88, 0x5c, 0xb8, 0x36, 0x40, 0x12, 0x1e, 0x28, - 0x1f, 0xd5, 0x20, 0x4b, 0xa8, 0xde, 0x2a, 0x5e, 0xe4, 0xed, 0x8c, 0xde, 0x00, 0x59, 0xa7, 0x7a, - 0x4b, 0xec, 0x4e, 0xb1, 0xbf, 0x30, 0x67, 0x46, 0x9f, 0x02, 0x74, 0x68, 0x7b, 0x94, 0xd5, 0x4a, - 0x15, 0x8f, 0xe5, 0xcb, 0xbc, 0xae, 0x7a, 0x86, 0x97, 0xca, 0xc1, 0x40, 0xdc, 0xea, 0xa3, 0xc0, - 0x03, 0xb8, 0x10, 0x0d, 0x02, 0x16, 0x9f, 0x93, 0x22, 0x9f, 0x93, 0x8f, 0x26, 0x9a, 0x93, 0xed, - 0x90, 0x5f, 0x4c, 0xc6, 0x85, 0x58, 0xbc, 0xe3, 0xb3, 0xa0, 0x36, 0x83, 0x5c, 0x58, 0xf0, 0x74, - 0xcd, 0x34, 0xac, 0x03, 0xdf, 0x0f, 0x15, 0x9f, 0x7d, 0x34, 0x87, 0x16, 0xb8, 0x95, 0x66, 0x54, - 0x1e, 0x8e, 0x37, 0x80, 0xbe, 0x00, 0x73, 0x7b, 0xca, 0x9d, 0x3e, 0xaf, 0xb8, 0x32, 0xe6, 0xa9, - 0xbe, 0x7a, 0x13, 0x30, 0x8c, 0xc1, 0x2a, 0xd4, 0xc3, 0x51, 0xd1, 0x2b, 0x55, 0x58, 0x1e, 0xe4, - 0x04, 0x93, 0x14, 0x0e, 0x2b, 0x35, 0xb8, 0x38, 0xd0, 0x81, 0x25, 0x12, 0xb2, 0x0e, 0xcf, 0x0c, - 0x71, 0x3c, 0x89, 0xc4, 0x6c, 0xc1, 0xea, 0x08, 0x27, 0x91, 0x54, 0xab, 0x21, 0x86, 0x9c, 0x48, - 0xcc, 0xc7, 0x60, 0x31, 0xbe, 0xf6, 0x12, 0x95, 0x66, 0xdf, 0x00, 0x98, 0x8b, 0xdc, 0xd0, 0x41, - 0x25, 0x98, 0x32, 0xd9, 0xbc, 0xb5, 0xe4, 0xbe, 0x30, 0x3f, 0x34, 0xd8, 0xe4, 0x10, 0x2c, 0x31, - 0x6a, 0x36, 0x98, 0x1e, 0x91, 0x0d, 0xbe, 0x1a, 0xbd, 0x77, 0xf6, 0xde, 0xf8, 0xbd, 0x33, 0xff, - 0xd6, 0x4f, 0xe4, 0x96, 0x04, 0x01, 0xd0, 0xc3, 0xcd, 0xd5, 0x6c, 0xb2, 0xa3, 0xef, 0x60, 0xb3, - 0x35, 0x3c, 0x66, 0x52, 0xf6, 0x63, 0x15, 0xc1, 0xea, 0x59, 0x58, 0xee, 0xf4, 0xb3, 0x30, 0xe5, - 0x78, 0x6d, 0xea, 0xd4, 0xe3, 0xb5, 0xb7, 0xd4, 0x04, 0x65, 0x3a, 0x99, 0x3d, 0xcb, 0x13, 0x76, - 0xe5, 0x98, 0xd5, 0x97, 0xa4, 0x66, 0x28, 0x5f, 0x84, 0xbc, 0x5f, 0x81, 0xf0, 0x84, 0x33, 0x41, - 0xe6, 0xe5, 0xd7, 0x7f, 0x41, 0x95, 0x9a, 0xf7, 0x21, 0x4a, 0xde, 0xe5, 0x83, 0x70, 0xd0, 0x8c, - 0x98, 0x0e, 0x79, 0xea, 0x2c, 0xf2, 0xd4, 0x44, 0xd3, 0x21, 0x39, 0xd5, 0xe9, 0xf0, 0x85, 0x61, - 0x45, 0x30, 0xcb, 0xda, 0xd5, 0xf4, 0xbb, 0x10, 0xcd, 0xda, 0x87, 0xa6, 0xe0, 0x75, 0x58, 0xb4, - 0xec, 0x16, 0xff, 0x7b, 0x4b, 0xf3, 0x8e, 0x9a, 0xc6, 0xdb, 0x84, 0xa7, 0xa4, 0xb9, 0x30, 0xcd, - 0xd9, 0x8e, 0xe1, 0x71, 0x1f, 0x07, 0x7a, 0x1e, 0x72, 0x2d, 0xcb, 0xdb, 0x68, 0xc8, 0xf3, 0xa5, - 0x60, 0x53, 0xb0, 0xbe, 0xdd, 0xdc, 0x68, 0x60, 0x81, 0x63, 0x05, 0x82, 0x4b, 0x0e, 0x0c, 0x8f, - 0xba, 0xbd, 0x8d, 0x86, 0x48, 0x0c, 0x65, 0x81, 0x80, 0x43, 0x30, 0x56, 0x69, 0xf8, 0x4d, 0x4e, - 0xc2, 0xd6, 0x9c, 0xe6, 0xf6, 0x94, 0x2e, 0x14, 0x17, 0x62, 0x37, 0x39, 0x07, 0xd0, 0xe0, 0x81, - 0x9c, 0xf1, 0xe2, 0x66, 0x71, 0xcc, 0xe2, 0x46, 0x55, 0x44, 0x21, 0x2a, 0x2e, 0x0d, 0x51, 0x44, - 0x15, 0x34, 0x90, 0x93, 0x49, 0x8c, 0x0f, 0xe3, 0x46, 0xa3, 0xfb, 0x5a, 0x11, 0xf1, 0xc1, 0x0f, - 0x24, 0x6e, 0x0f, 0xa0, 0xc1, 0x03, 0x39, 0x87, 0x48, 0xbc, 0xce, 0x2b, 0xb1, 0xd3, 0x25, 0x5e, - 0x1f, 0x28, 0xf1, 0x3a, 0xaa, 0x03, 0xb0, 0x8c, 0x56, 0xdc, 0x85, 0xe5, 0xa9, 0xcd, 0x4c, 0xf5, - 0xfd, 0xfe, 0x3a, 0xbc, 0x1d, 0x60, 0x58, 0xb5, 0x13, 0xfe, 0xe2, 0xd5, 0xa8, 0xc2, 0x57, 0xfa, - 0x56, 0x06, 0x66, 0x6a, 0xb6, 0xb5, 0x6f, 0x1c, 0x6c, 0x69, 0x93, 0x78, 0xa5, 0xb0, 0x0b, 0x59, - 0x2e, 0x5d, 0x6c, 0x4b, 0xbd, 0x36, 0xda, 0xd4, 0x7c, 0xdd, 0xca, 0x75, 0x8d, 0x6a, 0x22, 0x03, - 0x09, 0xaa, 0x78, 0x06, 0xc2, 0x5c, 0x1e, 0xb2, 0x00, 0xf6, 0x0c, 0x4b, 0x73, 0x7b, 0x0c, 0x26, - 0xf7, 0x9a, 0xde, 0x48, 0x20, 0xbd, 0x1a, 0x30, 0x8b, 0x36, 0x82, 0x5e, 0x84, 0x08, 0xac, 0xb4, - 0xb0, 0xf2, 0x11, 0x98, 0x09, 0x88, 0x13, 0x85, 0xb5, 0x8f, 0xc2, 0x42, 0xac, 0xad, 0x51, 0xec, - 0xb3, 0x6a, 0x54, 0xfb, 0xcb, 0x14, 0xcc, 0x05, 0x5a, 0x4f, 0xe0, 0xec, 0xe1, 0x4e, 0xf4, 0xec, - 0xe1, 0x43, 0xe3, 0x0f, 0xe9, 0x90, 0xd3, 0x07, 0x7e, 0x49, 0xd8, 0xb5, 0xad, 0x5b, 0x8d, 0xca, - 0x79, 0xbc, 0x24, 0x2c, 0x34, 0x3b, 0xcb, 0x4b, 0xc2, 0x52, 0xe2, 0xe9, 0xf7, 0x5f, 0xf9, 0x81, - 0x92, 0xa0, 0x3c, 0x97, 0x07, 0x4a, 0x42, 0xb5, 0x21, 0x53, 0x7a, 0x08, 0x17, 0x24, 0xc1, 0xe3, - 0xbe, 0x61, 0xfe, 0xb5, 0x70, 0x98, 0xce, 0xe5, 0xeb, 0x88, 0x1f, 0xa6, 0x61, 0x2e, 0x32, 0xe1, - 0x49, 0x6e, 0xd9, 0x5e, 0x8d, 0xde, 0xb2, 0x4d, 0xf6, 0x8e, 0x21, 0x93, 0xe0, 0x1d, 0x43, 0xf6, - 0x4c, 0xde, 0x31, 0xe4, 0x7e, 0x0c, 0xef, 0x18, 0xfe, 0x34, 0x05, 0xbc, 0x54, 0x46, 0xb7, 0x21, - 0x67, 0xb2, 0x8a, 0x5d, 0x1a, 0xc7, 0x68, 0xb7, 0xc4, 0xeb, 0x7b, 0x5e, 0x6f, 0xf3, 0x9b, 0x38, - 0xfc, 0x27, 0x16, 0x32, 0xd0, 0xbd, 0xbe, 0x47, 0x67, 0x2f, 0x8f, 0xfd, 0xe8, 0x8c, 0x8b, 0x1c, - 0xf6, 0xd0, 0xec, 0x27, 0xa1, 0x38, 0xec, 0x71, 0xda, 0xbb, 0x3b, 0x72, 0x2d, 0x7d, 0x2f, 0x05, - 0xb3, 0xaa, 0x0a, 0xfc, 0x12, 0x97, 0xd5, 0x72, 0x6c, 0x7e, 0xd2, 0x28, 0x36, 0xe3, 0xc5, 0x25, - 0x2e, 0x1f, 0x88, 0x43, 0x3c, 0x5b, 0x36, 0xba, 0x76, 0xd3, 0x30, 0xfd, 0xa5, 0x16, 0x2c, 0x9b, - 0x5a, 0x85, 0x41, 0xb1, 0xc4, 0x32, 0xf3, 0xd2, 0x89, 0x4b, 0x39, 0x65, 0xec, 0x60, 0xb7, 0x26, - 0xe1, 0x38, 0xa0, 0x60, 0x4b, 0xfd, 0x88, 0xf4, 0x38, 0x71, 0x36, 0xba, 0xd4, 0x6f, 0x0b, 0x30, - 0xf6, 0xf1, 0xa5, 0x3a, 0x64, 0x39, 0xcb, 0x7b, 0x21, 0xe3, 0xb9, 0xba, 0x1c, 0x85, 0xe0, 0x4d, - 0x5d, 0xd3, 0xd5, 0x31, 0x83, 0x33, 0x74, 0x2b, 0xb8, 0x85, 0x1b, 0xa0, 0xeb, 0x1e, 0xc5, 0x0c, - 0x5e, 0xfa, 0x93, 0x14, 0xa4, 0x6f, 0x55, 0x50, 0x0d, 0x32, 0xf4, 0x88, 0xc8, 0x95, 0xf0, 0xc1, - 0x91, 0x33, 0xb7, 0x73, 0x7b, 0xfd, 0x56, 0x45, 0xde, 0xc7, 0x62, 0x7f, 0x62, 0xc6, 0x8d, 0x3e, - 0x0f, 0x40, 0x0f, 0x0d, 0xb7, 0xd5, 0xd0, 0x5c, 0xda, 0x1b, 0x7b, 0x15, 0xec, 0x04, 0x2c, 0xb7, - 0x2a, 0xd5, 0xc5, 0x93, 0xe3, 0xd5, 0x59, 0x15, 0x82, 0x15, 0x91, 0xa5, 0x5f, 0x49, 0x43, 0xf6, - 0x16, 0x31, 0xdb, 0x13, 0x08, 0x7a, 0xb7, 0x23, 0x41, 0xef, 0x85, 0xd1, 0x77, 0x80, 0x88, 0xd9, - 0x1e, 0x1a, 0xf1, 0x9a, 0xb1, 0x88, 0xf7, 0xe2, 0x78, 0xe2, 0x4e, 0x0f, 0x77, 0x7f, 0x96, 0x82, - 0x3c, 0x23, 0x9b, 0x40, 0xac, 0xfb, 0x54, 0x34, 0xd6, 0x7d, 0x60, 0x2c, 0xf5, 0x87, 0x04, 0xba, - 0xd7, 0x60, 0x91, 0x61, 0x23, 0x51, 0xce, 0xbf, 0xe6, 0x9d, 0x1a, 0x7a, 0xcd, 0xfb, 0xab, 0xb2, - 0xb3, 0xe7, 0x32, 0x62, 0xfd, 0x53, 0x1a, 0x20, 0x9c, 0xb0, 0x27, 0xe1, 0xea, 0x4c, 0xc3, 0x15, - 0xb3, 0xf9, 0x8d, 0x46, 0x65, 0xeb, 0x1c, 0xda, 0x3c, 0x53, 0xeb, 0x0c, 0x6d, 0x9e, 0x8b, 0x1b, - 0x6d, 0xf3, 0x8c, 0xec, 0x3c, 0xda, 0x3c, 0xd3, 0x6b, 0xb8, 0xcd, 0x33, 0xec, 0x23, 0xd8, 0xbc, - 0x3f, 0xc4, 0xe7, 0xd2, 0xe6, 0xc3, 0x09, 0x7b, 0x62, 0xf3, 0x67, 0x6e, 0xf3, 0x9b, 0xd5, 0xda, - 0xcd, 0x73, 0x68, 0xf3, 0x4c, 0xad, 0x33, 0xb4, 0x79, 0x2e, 0x6e, 0xb4, 0xcd, 0x33, 0xb2, 0xf3, - 0x68, 0xf3, 0x4c, 0xaf, 0x21, 0x36, 0xff, 0x6b, 0x29, 0x58, 0x64, 0xe8, 0xc7, 0x5c, 0xce, 0x32, - 0xdb, 0xd0, 0x74, 0x6a, 0xf4, 0xdb, 0x46, 0x85, 0x43, 0xb1, 0xc4, 0x72, 0x6f, 0xe2, 0x4f, 0xde, - 0xb9, 0xf4, 0x26, 0xe1, 0x52, 0x78, 0xe2, 0x4d, 0xce, 0xd4, 0x9b, 0xfc, 0x63, 0x1a, 0x66, 0x82, - 0xd2, 0x95, 0x3f, 0x87, 0xd3, 0xa8, 0x56, 0x37, 0xdc, 0xf8, 0xd8, 0xd6, 0x05, 0x18, 0xfb, 0x78, - 0xf4, 0x05, 0x98, 0x21, 0xc1, 0x59, 0xbc, 0x30, 0x89, 0xd7, 0xc7, 0x2f, 0x92, 0xcb, 0xb1, 0x03, - 0xf8, 0x60, 0xa1, 0x87, 0xe7, 0xee, 0xa1, 0x78, 0xfe, 0x68, 0x80, 0x9f, 0x41, 0xb2, 0xa2, 0xb0, - 0x59, 0xd9, 0xf6, 0xf8, 0xfe, 0xab, 0xff, 0x68, 0x20, 0x82, 0xc1, 0x31, 0x4a, 0xf4, 0x1a, 0xcc, - 0x3a, 0x44, 0xe1, 0xcc, 0x72, 0x4e, 0x5e, 0x4a, 0x35, 0x14, 0x38, 0x8e, 0x50, 0xad, 0xfc, 0x04, - 0xcc, 0x3f, 0xfa, 0xc9, 0x22, 0x7f, 0x91, 0xbf, 0x69, 0x1f, 0xd4, 0x6c, 0xd3, 0x24, 0xfa, 0x64, - 0x3e, 0xc8, 0x92, 0xf4, 0x45, 0xbe, 0xaa, 0xde, 0x19, 0xbe, 0xc8, 0x8f, 0x88, 0x1d, 0xfd, 0x22, - 0x5f, 0x25, 0x3f, 0x8f, 0x2f, 0xf2, 0x55, 0xfd, 0x86, 0xb8, 0xf2, 0x36, 0x14, 0x55, 0xaa, 0xc7, - 0xbd, 0x41, 0xf9, 0xf5, 0xd8, 0xa8, 0x9d, 0x4b, 0x8f, 0x7d, 0x92, 0x06, 0xd4, 0xbf, 0x12, 0x9e, - 0x78, 0xee, 0x33, 0xf5, 0xdc, 0x5f, 0x49, 0xc3, 0xb4, 0xff, 0xbc, 0xe2, 0xfc, 0x9d, 0x73, 0x48, - 0xcd, 0xce, 0xf0, 0x9c, 0xc3, 0x97, 0x78, 0xba, 0x57, 0xf1, 0x60, 0x5e, 0x12, 0xfa, 0x6f, 0xf3, - 0xaf, 0x47, 0xde, 0x46, 0x97, 0x62, 0x6f, 0xf3, 0x51, 0x94, 0x3a, 0x7a, 0x6d, 0x57, 0xde, 0x1c, - 0x88, 0x5f, 0xd4, 0x90, 0xb4, 0xd8, 0xc7, 0xf3, 0x37, 0xd9, 0x52, 0xce, 0x93, 0x37, 0xd9, 0xe7, - 0xf6, 0x4d, 0xf6, 0x77, 0x53, 0x50, 0x90, 0xb3, 0x74, 0x1e, 0x8f, 0xc0, 0xfc, 0x2b, 0x69, 0x83, - 0xc3, 0xcc, 0x37, 0x73, 0x81, 0xf2, 0x3f, 0xa6, 0xcb, 0xf1, 0x8f, 0xf2, 0x52, 0x7c, 0xf4, 0xe5, - 0x78, 0x71, 0x4a, 0x91, 0x3b, 0xf5, 0x94, 0x62, 0x6a, 0xac, 0x87, 0x61, 0xd3, 0x89, 0x1e, 0x86, - 0xe5, 0x13, 0x3c, 0x0c, 0x9b, 0x49, 0xf8, 0x30, 0x0c, 0x46, 0x3e, 0x0c, 0x7b, 0x2b, 0x78, 0x18, - 0x56, 0xe0, 0xab, 0xe3, 0x46, 0x12, 0x7f, 0x9a, 0xf0, 0x55, 0xd8, 0xec, 0x8f, 0xe1, 0x55, 0xd8, - 0xff, 0x64, 0x60, 0x2e, 0xe2, 0xaf, 0xc7, 0xba, 0x1a, 0xf7, 0x6a, 0x34, 0xe8, 0xf7, 0xdf, 0x77, - 0x93, 0x22, 0x4f, 0xb9, 0xef, 0x96, 0x19, 0xf3, 0x82, 0x55, 0xdc, 0x5b, 0x27, 0xb9, 0xef, 0x96, - 0x1d, 0xfb, 0xbe, 0x5b, 0x6e, 0xfc, 0xfb, 0x6e, 0x53, 0x63, 0xde, 0x77, 0x8b, 0x86, 0xab, 0x11, - 0xf7, 0xdd, 0x0c, 0x28, 0x48, 0x37, 0xb6, 0x61, 0xed, 0xdb, 0xdc, 0x42, 0xc6, 0x79, 0x17, 0xef, - 0xcf, 0x5c, 0xcf, 0xa3, 0xa4, 0xcd, 0x38, 0x43, 0x4b, 0xdf, 0x0a, 0xc5, 0x61, 0x55, 0x76, 0xe9, - 0x3f, 0xb2, 0xb0, 0xd4, 0xc7, 0xc7, 0x12, 0x60, 0x9f, 0xa8, 0x1e, 0x4f, 0x80, 0x7d, 0x51, 0x75, - 0x1c, 0xd2, 0xb0, 0xe4, 0xcc, 0xe3, 0xec, 0x77, 0xef, 0x06, 0x7e, 0x29, 0x98, 0x9a, 0x66, 0x80, - 0xc1, 0x0a, 0x15, 0x1b, 0xef, 0x3d, 0xdb, 0x66, 0x7e, 0x2c, 0x96, 0xf8, 0x55, 0x39, 0x14, 0x4b, - 0x2c, 0x7a, 0x13, 0xe6, 0x8e, 0x88, 0x6b, 0x11, 0x73, 0xc8, 0xb7, 0x94, 0x6e, 0xab, 0x48, 0x1c, - 0xa5, 0x65, 0xf3, 0x6f, 0x7b, 0x1b, 0xed, 0x01, 0xf7, 0x1d, 0xef, 0x34, 0x39, 0x18, 0xfb, 0x78, - 0xf4, 0x19, 0x78, 0x46, 0xb7, 0x2d, 0x66, 0x44, 0xc4, 0xc5, 0xe2, 0x1b, 0xb6, 0x7e, 0x8b, 0x22, - 0x44, 0xad, 0x4a, 0xd6, 0x67, 0x6a, 0x83, 0xc9, 0xf0, 0x30, 0x7e, 0xf4, 0x31, 0x98, 0x97, 0x8f, - 0x0c, 0x7c, 0x89, 0xc2, 0xeb, 0x3d, 0x2d, 0x25, 0xce, 0xdf, 0x8e, 0x60, 0x71, 0x8c, 0x1a, 0xd5, - 0xc5, 0xd3, 0x08, 0x5e, 0xa4, 0xf8, 0x12, 0xc4, 0x0b, 0x9f, 0xc8, 0xb3, 0x06, 0x15, 0x8f, 0xfb, - 0x38, 0x50, 0x05, 0x16, 0x6c, 0xfe, 0xe4, 0xdc, 0xb0, 0x0e, 0xc4, 0x9c, 0xc8, 0xe7, 0x3b, 0xc1, - 0x6d, 0xea, 0x3b, 0x51, 0x34, 0x8e, 0xd3, 0xa3, 0x1b, 0x30, 0xab, 0xb9, 0xfa, 0xa1, 0x41, 0x89, - 0x4e, 0x3b, 0xae, 0x70, 0x99, 0x33, 0xe1, 0x43, 0xed, 0x8a, 0x82, 0xc3, 0x11, 0xca, 0x12, 0x81, - 0xc5, 0xc6, 0x6e, 0x0d, 0x3f, 0xee, 0x3a, 0xeb, 0x5b, 0x29, 0x58, 0x6a, 0xb0, 0xfe, 0x7a, 0x94, - 0x58, 0xb4, 0xaa, 0xe9, 0x47, 0xeb, 0x56, 0x0b, 0x6d, 0x41, 0x46, 0x37, 0x3d, 0x99, 0x2d, 0x8c, - 0x36, 0x24, 0xf9, 0x8d, 0x49, 0xc9, 0x5d, 0xdb, 0x6c, 0x56, 0xa7, 0x4f, 0x8e, 0x57, 0x33, 0xb5, - 0xcd, 0x26, 0x66, 0x72, 0xd0, 0x06, 0xa4, 0x89, 0x37, 0x76, 0xc9, 0x1e, 0x95, 0xb6, 0xde, 0x14, - 0xdf, 0x55, 0x58, 0x6f, 0xe2, 0x34, 0xf1, 0x4a, 0xdf, 0x4c, 0xc3, 0x42, 0xa8, 0xef, 0x7a, 0x97, - 0x58, 0x74, 0x32, 0x97, 0xed, 0x94, 0xaa, 0x60, 0xf4, 0x65, 0xbb, 0x98, 0x86, 0x43, 0xab, 0x83, - 0xcf, 0xc5, 0xaa, 0x83, 0xeb, 0x89, 0x25, 0x9f, 0x5e, 0x25, 0xfc, 0x5d, 0x0a, 0x2e, 0xc4, 0x38, - 0x26, 0x90, 0x12, 0xde, 0x8d, 0xa6, 0x84, 0xaf, 0x24, 0xed, 0xd4, 0x90, 0xd4, 0xf0, 0xeb, 0xe9, - 0xbe, 0xce, 0x4c, 0x6e, 0x57, 0xe0, 0x67, 0x61, 0xc9, 0x89, 0x9b, 0xc9, 0xd8, 0xdf, 0xef, 0xed, - 0x33, 0xb0, 0xe0, 0x5b, 0x1a, 0xfd, 0xb6, 0x87, 0xfb, 0xdb, 0x51, 0x37, 0x14, 0xb2, 0x23, 0xb6, - 0x24, 0xfe, 0x3d, 0x0d, 0x17, 0x07, 0xae, 0x91, 0x27, 0xbb, 0x12, 0x67, 0xba, 0x2b, 0xf1, 0xbb, - 0x69, 0x80, 0x86, 0x6b, 0xb7, 0x09, 0x3d, 0x24, 0x1d, 0x6f, 0x02, 0x2e, 0xe8, 0xd3, 0x11, 0x17, - 0x34, 0x3a, 0x81, 0x0a, 0x95, 0x1b, 0xea, 0x7d, 0x3e, 0x13, 0xf3, 0x3e, 0x57, 0x93, 0x08, 0x3d, - 0xdd, 0xf1, 0xfc, 0x55, 0x0a, 0xe6, 0x43, 0xe2, 0x09, 0xf8, 0x9c, 0x46, 0xd4, 0xe7, 0xbc, 0x98, - 0xa0, 0x2b, 0x43, 0x37, 0x3c, 0x97, 0x43, 0x1a, 0x4c, 0xda, 0x36, 0xe5, 0xd9, 0x28, 0x7a, 0x11, - 0x66, 0xee, 0xbb, 0x86, 0xf8, 0xa1, 0x5e, 0x10, 0xbb, 0xe7, 0x03, 0x71, 0x88, 0x67, 0xa5, 0x98, - 0x4b, 0xb4, 0x16, 0xa7, 0x4d, 0x73, 0xda, 0x59, 0xf1, 0xa6, 0x42, 0xc0, 0x70, 0x80, 0x2d, 0xfd, - 0xde, 0x94, 0x3a, 0x62, 0xe7, 0x71, 0xbb, 0x13, 0x79, 0x00, 0x5e, 0x67, 0x2f, 0xcc, 0x2a, 0xc7, - 0xfb, 0x0c, 0x41, 0xb4, 0x53, 0xe5, 0x66, 0x20, 0x21, 0x76, 0x3f, 0x3c, 0x44, 0x60, 0xa5, 0x19, - 0xe4, 0xc2, 0x9c, 0x1b, 0x0c, 0x3e, 0xf1, 0x3c, 0x69, 0xed, 0x1f, 0x4e, 0xd0, 0x6e, 0x38, 0x79, - 0x61, 0x12, 0x8c, 0x55, 0x99, 0x38, 0xda, 0x04, 0x7f, 0x58, 0x6e, 0x53, 0x63, 0xbf, 0x27, 0xef, - 0x19, 0xca, 0x7c, 0x36, 0x7c, 0x58, 0xae, 0x22, 0x71, 0x94, 0x16, 0xed, 0xc3, 0x8c, 0xff, 0x2a, - 0xc6, 0x93, 0xa5, 0xc8, 0x68, 0x65, 0x83, 0x17, 0x35, 0xe4, 0x8b, 0x1d, 0xc3, 0x25, 0x6d, 0x62, - 0x51, 0xa5, 0xe8, 0xf1, 0xb1, 0x1e, 0x0e, 0x45, 0xb3, 0xf9, 0x76, 0x3b, 0xd6, 0x1d, 0x4b, 0x7c, - 0xb5, 0x8a, 0xa7, 0xb7, 0xf9, 0x70, 0xbe, 0x71, 0x88, 0xc2, 0x2a, 0x1d, 0xda, 0x82, 0x0b, 0x9a, - 0x49, 0x5c, 0x8a, 0x89, 0x43, 0x34, 0xca, 0x3f, 0xbf, 0xd5, 0xd5, 0x4c, 0x99, 0xd8, 0x06, 0x9f, - 0x31, 0xaa, 0xf4, 0x93, 0xe0, 0x41, 0x7c, 0x6c, 0xf9, 0xdc, 0x37, 0xe8, 0xe1, 0x76, 0xa3, 0xce, - 0x73, 0xdb, 0x7c, 0xb8, 0x7c, 0xee, 0x09, 0x30, 0xf6, 0xf1, 0x2b, 0x1f, 0x85, 0x85, 0xd8, 0xe4, - 0x27, 0xaa, 0xb5, 0x7f, 0x2b, 0x0b, 0x8b, 0x71, 0xff, 0xf3, 0x24, 0xa8, 0x9d, 0x65, 0x50, 0x43, - 0x9d, 0x88, 0x81, 0x4f, 0x8d, 0xf9, 0xa6, 0x3d, 0x3e, 0x29, 0x49, 0x4d, 0xfc, 0xdd, 0x2e, 0x8c, - 0xbf, 0x48, 0x41, 0xde, 0x7f, 0x5b, 0x35, 0x81, 0x40, 0x7c, 0x27, 0x12, 0x88, 0x5f, 0x1e, 0xc3, - 0xb4, 0x85, 0x6a, 0x43, 0xff, 0x41, 0xc8, 0xf7, 0x52, 0x30, 0xeb, 0x13, 0x4d, 0x20, 0x52, 0x6e, - 0x47, 0x23, 0xe5, 0x0b, 0x63, 0x77, 0x60, 0x48, 0x9c, 0xfc, 0x5a, 0x3a, 0x54, 0xff, 0xd1, 0xc2, - 0x96, 0xfa, 0x39, 0x92, 0xf4, 0x98, 0x9f, 0x23, 0x79, 0xc4, 0x8d, 0xda, 0xf7, 0x42, 0xa6, 0xe3, - 0x9a, 0x32, 0x8b, 0x0e, 0x2e, 0x42, 0xdf, 0xc5, 0x9b, 0x98, 0xc1, 0x59, 0xb8, 0xee, 0x78, 0x52, - 0xa4, 0xd8, 0xfe, 0x98, 0xf5, 0xf7, 0x58, 0xb7, 0x83, 0x3d, 0xd6, 0xed, 0xf8, 0x1e, 0xeb, 0x54, - 0x48, 0xd9, 0xbf, 0xc7, 0x5a, 0xfa, 0xef, 0x0c, 0x2c, 0x0f, 0x72, 0xef, 0xa8, 0x07, 0x53, 0xa6, - 0xd1, 0x36, 0xe4, 0x35, 0xf3, 0x71, 0x2c, 0x6d, 0x90, 0x98, 0xf2, 0x26, 0x97, 0x21, 0x2c, 0xed, - 0x52, 0xb0, 0x4b, 0xca, 0x81, 0x7d, 0x1f, 0xf4, 0x91, 0x0d, 0xa2, 0x9f, 0xe7, 0x5f, 0x2c, 0xfe, - 0x62, 0x87, 0x78, 0xd4, 0x5f, 0x07, 0xb5, 0x47, 0x6b, 0x1d, 0x4b, 0x29, 0xb1, 0xef, 0x2b, 0xf9, - 0xe0, 0xfe, 0xef, 0x2b, 0xf9, 0xcd, 0xae, 0x18, 0x50, 0x50, 0x54, 0x7f, 0xac, 0xdf, 0xf7, 0x39, - 0x82, 0xb9, 0x88, 0x9e, 0x8f, 0xf5, 0xf3, 0x3e, 0x26, 0x2c, 0xf5, 0xed, 0x87, 0x30, 0x9b, 0x30, - 0xed, 0x83, 0x26, 0x19, 0x60, 0x13, 0x9b, 0x12, 0x8e, 0x03, 0x0a, 0x16, 0xd5, 0xa8, 0xed, 0x18, - 0x7a, 0xb0, 0x35, 0x18, 0x44, 0xb5, 0x1d, 0x01, 0xc6, 0x3e, 0xbe, 0xf4, 0xed, 0x34, 0x2c, 0xc6, - 0x37, 0x4c, 0xde, 0xe5, 0x57, 0xe8, 0x3e, 0x08, 0x53, 0xfc, 0x5f, 0x51, 0x91, 0x78, 0xd4, 0x6b, - 0x72, 0x28, 0x96, 0x58, 0xb4, 0x06, 0x33, 0x86, 0xd5, 0x22, 0x0f, 0xb8, 0xb5, 0x64, 0xa3, 0xbb, - 0x51, 0x1b, 0x3e, 0x02, 0x87, 0x34, 0xac, 0x69, 0x66, 0x3f, 0xbe, 0x65, 0xf9, 0x4d, 0x33, 0xeb, - 0xc2, 0x1c, 0xc3, 0x86, 0x29, 0x66, 0x55, 0xc1, 0x30, 0x0d, 0x38, 0xbd, 0x60, 0x19, 0x10, 0xe1, - 0xd7, 0x60, 0xea, 0x5a, 0x4f, 0xe4, 0x5a, 0x39, 0x25, 0x03, 0x0a, 0x51, 0x58, 0xa5, 0x2b, 0xd5, - 0x41, 0xbc, 0x57, 0x60, 0xce, 0xa0, 0x1b, 0x8c, 0x53, 0xe0, 0x0c, 0x76, 0x37, 0x1a, 0x98, 0xc1, - 0xd1, 0x7b, 0x20, 0xdb, 0x75, 0x8d, 0x96, 0x1c, 0x29, 0xfe, 0x75, 0x89, 0x5d, 0xbc, 0x51, 0xc7, - 0x1c, 0x5a, 0xfa, 0xe3, 0x34, 0xcc, 0xef, 0x68, 0x8e, 0x13, 0x3e, 0xf8, 0x9f, 0x40, 0xec, 0xb9, - 0x1b, 0x89, 0x3d, 0xa3, 0xaf, 0xa9, 0x44, 0x15, 0x1c, 0x5a, 0x08, 0xfe, 0x4c, 0xac, 0x10, 0xfc, - 0x70, 0x52, 0xc1, 0xa7, 0x17, 0x83, 0xef, 0xa4, 0x00, 0x45, 0x19, 0x26, 0x10, 0xe6, 0x76, 0xa2, - 0x61, 0x6e, 0x2d, 0x61, 0x97, 0x86, 0x04, 0xbb, 0xdf, 0x4e, 0xc1, 0x4a, 0x94, 0xf0, 0xbc, 0x5c, - 0x6d, 0xfc, 0xc3, 0xbe, 0x41, 0x3e, 0x97, 0x57, 0x66, 0xfe, 0x2d, 0x0d, 0xcb, 0x83, 0x16, 0xcf, - 0x93, 0x4c, 0xfe, 0x4c, 0xb7, 0xa7, 0x30, 0x44, 0x1e, 0x50, 0x8d, 0x72, 0x75, 0xcf, 0x43, 0xae, - 0xab, 0x44, 0x85, 0x60, 0xed, 0xef, 0xf2, 0xb0, 0x20, 0x70, 0xa5, 0xaf, 0xa6, 0xc0, 0xff, 0xf4, - 0x2b, 0x5a, 0x83, 0x6c, 0xdb, 0x6e, 0xf5, 0xfd, 0x23, 0x88, 0x2d, 0xbb, 0xc5, 0x3f, 0xd9, 0x26, - 0xc9, 0xd8, 0x4f, 0xcc, 0x09, 0xd1, 0xe7, 0x20, 0xef, 0x51, 0x57, 0xa3, 0xe4, 0xa0, 0x37, 0xf6, - 0x3f, 0x53, 0x93, 0x52, 0x9a, 0x92, 0x2f, 0x5c, 0xb9, 0x3e, 0x04, 0x07, 0x32, 0x4b, 0x7f, 0x9b, - 0x82, 0x85, 0x18, 0x3d, 0x7a, 0x0b, 0xa0, 0xad, 0x3d, 0xb8, 0x6b, 0xb9, 0x44, 0x6b, 0xf5, 0x46, - 0x7a, 0xe4, 0x0e, 0x35, 0xcc, 0xb2, 0xf8, 0x77, 0x8a, 0xe5, 0x0d, 0x8b, 0xde, 0x71, 0x9b, 0xd4, - 0x35, 0xac, 0x03, 0x71, 0xbe, 0xbd, 0x15, 0xc8, 0xc1, 0x8a, 0x4c, 0x84, 0xe1, 0xe9, 0x96, 0xab, - 0x19, 0xd6, 0xb6, 0xdd, 0x22, 0x55, 0xb2, 0x6f, 0xbb, 0x44, 0xea, 0x20, 0x3f, 0x87, 0xcd, 0xbf, - 0xd4, 0x56, 0x1f, 0x48, 0x81, 0x87, 0x70, 0xf2, 0x13, 0x8e, 0x5d, 0xdb, 0xec, 0xb4, 0x49, 0x9d, - 0xe8, 0xf6, 0xa4, 0xfe, 0xd1, 0x5d, 0xd2, 0x13, 0x8e, 0x98, 0x86, 0x67, 0x78, 0xc2, 0x11, 0x97, - 0x3c, 0xfa, 0x84, 0x23, 0xc6, 0x71, 0x1e, 0x4f, 0x38, 0x62, 0x2a, 0x0e, 0xfb, 0xbf, 0x75, 0xe9, - 0xbe, 0xce, 0x9c, 0xcb, 0x8d, 0xc0, 0xab, 0x50, 0xe8, 0x72, 0x35, 0x77, 0x7a, 0x0e, 0xf1, 0xaf, - 0x1a, 0xf3, 0x6f, 0x9c, 0xec, 0x86, 0x60, 0xac, 0xd2, 0xa0, 0x4f, 0xc2, 0xd2, 0x7d, 0xdb, 0x3d, - 0x32, 0x6d, 0xad, 0x55, 0x69, 0xb5, 0x0d, 0x2f, 0xf8, 0x4c, 0x64, 0x3e, 0x3c, 0x0b, 0xb9, 0x17, - 0x27, 0xc0, 0xfd, 0x3c, 0xa5, 0xef, 0x64, 0xe1, 0xe2, 0xc0, 0x25, 0x92, 0x2c, 0x82, 0x44, 0x3a, - 0x90, 0x7e, 0xd4, 0x0e, 0x64, 0x92, 0x77, 0x60, 0xe8, 0xff, 0xed, 0xcb, 0xbe, 0xfb, 0xff, 0xdb, - 0x97, 0x7b, 0x84, 0x78, 0x38, 0x95, 0x20, 0x1e, 0x4e, 0x9f, 0x49, 0x3c, 0xcc, 0x4f, 0x3e, 0x1e, - 0x56, 0xaf, 0xbc, 0xf3, 0xa3, 0x4b, 0x4f, 0x7d, 0xff, 0x47, 0x97, 0x9e, 0xfa, 0xc1, 0x8f, 0x2e, - 0x3d, 0xf5, 0xa5, 0x93, 0x4b, 0xa9, 0x77, 0x4e, 0x2e, 0xa5, 0xbe, 0x7f, 0x72, 0x29, 0xf5, 0x83, - 0x93, 0x4b, 0xa9, 0x7f, 0x39, 0xb9, 0x94, 0xfa, 0xf2, 0xbf, 0x5e, 0x7a, 0xea, 0xb3, 0xe9, 0xee, - 0xd5, 0xff, 0x0f, 0x00, 0x00, 0xff, 0xff, 0x3f, 0x9b, 0x31, 0x65, 0xe9, 0x78, 0x00, 0x00, + // 6144 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x7d, 0x5b, 0x6c, 0x24, 0xd9, + 0x59, 0xf0, 0xf6, 0xcd, 0x6e, 0x7f, 0xbe, 0x9f, 0xf1, 0xec, 0xf6, 0x7a, 0x37, 0xe3, 0x49, 0x6f, + 0x12, 0xcd, 0x66, 0x77, 0xdb, 0x3b, 0xb3, 0x9b, 0xc9, 0x6c, 0x36, 0xb7, 0xbe, 0x78, 0x77, 0x9c, + 0xb1, 0x3d, 0x9d, 0xd3, 0x33, 0xde, 0x3f, 0xf9, 0xff, 0x3f, 0xd9, 0x72, 0xf5, 0xb1, 0x5d, 0x71, + 0x75, 0x55, 0xa5, 0xea, 0xb4, 0x77, 0xbc, 0xf0, 0x10, 0x2e, 0x0f, 0x08, 0x01, 0x0a, 0x44, 0x02, + 0x29, 0x10, 0x2e, 0x09, 0x12, 0x88, 0x10, 0x29, 0x22, 0x88, 0x87, 0x28, 0x20, 0x84, 0x90, 0x58, + 0x21, 0x84, 0x22, 0x9e, 0x22, 0xa4, 0x18, 0x62, 0x02, 0x82, 0x07, 0x04, 0xaf, 0xcc, 0x13, 0x3a, + 0x97, 0x3a, 0x75, 0xaa, 0xba, 0xdb, 0xdd, 0x35, 0xeb, 0xe9, 0xf8, 0x61, 0xde, 0xba, 0xbe, 0xdb, + 0xf9, 0xce, 0xed, 0xfb, 0xbe, 0xf3, 0x9d, 0x4b, 0xc3, 0x2a, 0x3d, 0x20, 0x01, 0x35, 0xcc, 0x83, + 0x8a, 0xe5, 0xb2, 0xdf, 0xab, 0x86, 0x67, 0xad, 0x7a, 0xb6, 0x41, 0x77, 0x5d, 0xbf, 0xb3, 0x7a, + 0x78, 0x75, 0x75, 0x8f, 0x38, 0xc4, 0x37, 0x28, 0x69, 0x57, 0x3c, 0xdf, 0xa5, 0x2e, 0x5a, 0xd1, + 0x18, 0x2a, 0xf4, 0x80, 0x54, 0x0c, 0xcf, 0xaa, 0x84, 0x0c, 0x95, 0xc3, 0xab, 0xcb, 0x2f, 0xec, + 0x59, 0x74, 0xbf, 0xbb, 0x53, 0x31, 0xdd, 0xce, 0xea, 0x9e, 0xbb, 0xe7, 0xae, 0x72, 0xbe, 0x9d, + 0xee, 0x2e, 0xff, 0xe2, 0x1f, 0xfc, 0x97, 0x90, 0xb7, 0x5c, 0x3e, 0xb8, 0x11, 0xb0, 0xb2, 0x59, + 0xb9, 0xa6, 0xeb, 0x93, 0x3e, 0x65, 0x2e, 0xbf, 0x1c, 0xd1, 0x74, 0x0c, 0x73, 0xdf, 0x72, 0x88, + 0x7f, 0xb4, 0xea, 0x1d, 0xec, 0x71, 0x26, 0x9f, 0x04, 0x6e, 0xd7, 0x37, 0x49, 0x2a, 0xae, 0x60, + 0xb5, 0x43, 0xa8, 0xd1, 0xaf, 0xac, 0xd5, 0x41, 0x5c, 0x7e, 0xd7, 0xa1, 0x56, 0xa7, 0xb7, 0x98, + 0xeb, 0xc3, 0x18, 0x02, 0x73, 0x9f, 0x74, 0x8c, 0x1e, 0xbe, 0x97, 0x06, 0xf1, 0x75, 0xa9, 0x65, + 0xaf, 0x5a, 0x0e, 0x0d, 0xa8, 0xdf, 0xc3, 0x74, 0xad, 0x5f, 0x77, 0x19, 0x9e, 0x67, 0x5b, 0xa6, + 0x41, 0x2d, 0xd7, 0xe9, 0x53, 0xa3, 0xf2, 0x6f, 0x66, 0x60, 0xaa, 0xda, 0x6e, 0xbb, 0x4e, 0xcb, + 0x23, 0x26, 0x7a, 0x1e, 0x8a, 0x94, 0x38, 0x86, 0x43, 0xd7, 0x1b, 0xa5, 0xcc, 0xe5, 0xcc, 0x95, + 0xa9, 0xda, 0xc2, 0x3b, 0xc7, 0x2b, 0x8f, 0x9d, 0x1c, 0xaf, 0x14, 0xef, 0x48, 0x38, 0x56, 0x14, + 0xe8, 0x43, 0x30, 0x6d, 0xda, 0xdd, 0x80, 0x12, 0x7f, 0xcb, 0xe8, 0x90, 0x52, 0x96, 0x33, 0x5c, + 0x90, 0x0c, 0xd3, 0xf5, 0x08, 0x85, 0x75, 0x3a, 0xf4, 0x2c, 0x4c, 0x1e, 0x12, 0x3f, 0xb0, 0x5c, + 0xa7, 0x94, 0xe3, 0x2c, 0xf3, 0x92, 0x65, 0x72, 0x5b, 0x80, 0x71, 0x88, 0x2f, 0xff, 0x59, 0x06, + 0x72, 0x55, 0xcf, 0x43, 0x6f, 0x42, 0x91, 0x75, 0x49, 0xdb, 0xa0, 0x06, 0xd7, 0x6b, 0xfa, 0xda, + 0x8b, 0x15, 0xd1, 0x42, 0x15, 0xbd, 0x85, 0x2a, 0xde, 0xc1, 0x1e, 0x03, 0x04, 0x15, 0x46, 0x5d, + 0x39, 0xbc, 0x5a, 0xb9, 0xbd, 0xf3, 0x05, 0x62, 0xd2, 0x4d, 0x42, 0x8d, 0x1a, 0x92, 0xa5, 0x40, + 0x04, 0xc3, 0x4a, 0x2a, 0xda, 0x84, 0x7c, 0xe0, 0x11, 0x93, 0x57, 0x62, 0xfa, 0xda, 0x73, 0x95, + 0x7e, 0x03, 0x59, 0x6b, 0x4a, 0x26, 0xbb, 0xea, 0x79, 0xac, 0xd1, 0x6a, 0x33, 0x52, 0x70, 0x9e, + 0x7d, 0x61, 0x2e, 0xa6, 0xfc, 0x83, 0x0c, 0x2c, 0x54, 0xbb, 0x74, 0xff, 0xed, 0x37, 0xc8, 0xce, + 0xbe, 0xeb, 0x1e, 0x54, 0xdb, 0x6d, 0x1f, 0x7d, 0x1e, 0x26, 0x77, 0xba, 0x96, 0x4d, 0x2d, 0x47, + 0x56, 0xe2, 0x46, 0x65, 0xc8, 0x7c, 0xa9, 0xd4, 0x04, 0x7d, 0x52, 0x54, 0x6d, 0x9a, 0x35, 0x97, + 0x44, 0xe2, 0x50, 0x2a, 0x32, 0xa1, 0x48, 0xee, 0x51, 0xe2, 0x3b, 0x86, 0x2d, 0x2b, 0xf2, 0xca, + 0xd0, 0x12, 0xd6, 0x24, 0x43, 0x4f, 0x11, 0x33, 0xac, 0xd7, 0x43, 0x2c, 0x56, 0x82, 0xcb, 0x2d, + 0x98, 0xa9, 0xb9, 0x2e, 0x1b, 0x80, 0x86, 0xc7, 0xfa, 0xa6, 0x0e, 0x39, 0xc3, 0xf3, 0x64, 0x8d, + 0xde, 0x37, 0xb4, 0xbc, 0xaa, 0xe7, 0xd5, 0xa6, 0x65, 0x8b, 0xb1, 0xbe, 0xc5, 0x8c, 0xbb, 0xfc, + 0x24, 0x3c, 0x31, 0xa0, 0xaa, 0xe5, 0xdf, 0xc9, 0xc2, 0x74, 0xbd, 0xb5, 0x7e, 0xdb, 0x63, 0xe3, + 0xd6, 0xf5, 0xc7, 0x30, 0x16, 0x70, 0x6c, 0x2c, 0xbc, 0x38, 0xb4, 0x4a, 0x9a, 0x76, 0x83, 0x06, + 0x04, 0xfa, 0x2c, 0x4c, 0x04, 0xd4, 0xa0, 0xdd, 0x80, 0x8f, 0xf9, 0xe9, 0x6b, 0xd7, 0x52, 0x49, + 0xe5, 0x9c, 0xb5, 0x39, 0x29, 0x77, 0x42, 0x7c, 0x63, 0x29, 0xb1, 0xfc, 0x09, 0x40, 0x1a, 0xf1, + 0x6b, 0xc4, 0xa0, 0x5d, 0x3f, 0x36, 0xcd, 0x32, 0x43, 0xa6, 0xd9, 0x5f, 0x65, 0x60, 0x5e, 0x93, + 0xb0, 0x61, 0x05, 0x14, 0xfd, 0xbf, 0x9e, 0x66, 0xae, 0x8c, 0xd6, 0xcc, 0x8c, 0x9b, 0x37, 0xb2, + 0x32, 0x1d, 0x21, 0x44, 0x6b, 0xe2, 0x4f, 0x43, 0xc1, 0xa2, 0xa4, 0x13, 0x94, 0xb2, 0x97, 0x73, + 0x57, 0xa6, 0xaf, 0x3d, 0x9f, 0xa6, 0x35, 0x6a, 0xb3, 0x52, 0x70, 0x61, 0x9d, 0x89, 0xc0, 0x42, + 0x52, 0xf9, 0xf7, 0xe2, 0x95, 0x38, 0x97, 0xf6, 0xec, 0x3b, 0x39, 0x58, 0xec, 0xe9, 0xd7, 0x14, + 0x3d, 0x85, 0x9a, 0xb0, 0x14, 0x50, 0xd7, 0x37, 0xf6, 0xc8, 0x36, 0x71, 0xda, 0xae, 0x2f, 0x09, + 0xa4, 0xae, 0x4f, 0x4b, 0xbe, 0xa5, 0x56, 0x1f, 0x1a, 0xdc, 0x97, 0x13, 0x5d, 0x85, 0x82, 0xb7, + 0x6f, 0x04, 0x44, 0xea, 0xfe, 0x54, 0xd8, 0xb6, 0x4d, 0x06, 0xbc, 0x7f, 0xbc, 0x02, 0xdc, 0x3b, + 0xf0, 0x2f, 0x2c, 0x28, 0xd1, 0x07, 0x60, 0xc2, 0x27, 0x46, 0xe0, 0x3a, 0xa5, 0x3c, 0xe7, 0x51, + 0xe3, 0x12, 0x73, 0x28, 0x96, 0x58, 0x74, 0x0d, 0xc0, 0x27, 0xd4, 0x3f, 0xaa, 0xbb, 0x5d, 0x87, + 0x96, 0x0a, 0x97, 0x33, 0x57, 0x0a, 0xd1, 0xcc, 0xc3, 0x0a, 0x83, 0x35, 0x2a, 0xf4, 0xab, 0x19, + 0x78, 0xca, 0x36, 0x02, 0x8a, 0xc9, 0xba, 0x63, 0x51, 0xcb, 0xb0, 0xad, 0xb7, 0x2d, 0x67, 0xef, + 0x8e, 0xd5, 0x61, 0xc3, 0xa3, 0xe3, 0x95, 0x26, 0xf8, 0x50, 0xfc, 0xe0, 0x68, 0x43, 0x91, 0xb1, + 0xd5, 0x9e, 0x91, 0x25, 0x3e, 0xb5, 0x31, 0x58, 0x2c, 0x3e, 0xad, 0xcc, 0x72, 0x9b, 0x0f, 0xac, + 0xa6, 0xef, 0xde, 0x3b, 0xba, 0xed, 0x31, 0xeb, 0x1f, 0xa0, 0x55, 0x98, 0x72, 0x8c, 0x0e, 0x09, + 0x3c, 0xc3, 0x24, 0xb2, 0xd3, 0x16, 0x65, 0x39, 0x53, 0x5b, 0x21, 0x02, 0x47, 0x34, 0xe8, 0x32, + 0xe4, 0x9d, 0x68, 0x50, 0x29, 0x0b, 0xc1, 0x47, 0x13, 0xc7, 0x94, 0xbf, 0x92, 0x85, 0x49, 0x39, + 0xc6, 0xc6, 0x60, 0xe3, 0xb6, 0x62, 0x36, 0x6e, 0x84, 0xf9, 0x27, 0x34, 0x1b, 0x68, 0xdf, 0xb6, + 0x13, 0xf6, 0xad, 0x32, 0xb2, 0xc4, 0xd3, 0x6d, 0xdb, 0xd7, 0xb3, 0x30, 0x23, 0x29, 0xf9, 0x40, + 0x1c, 0x43, 0xd3, 0xb4, 0x62, 0x4d, 0x73, 0x75, 0xd4, 0x8a, 0xa8, 0x28, 0xaa, 0x6f, 0xfb, 0xfc, + 0xdf, 0x44, 0xfb, 0xbc, 0x94, 0x4e, 0xec, 0xe9, 0x8d, 0xf4, 0xd7, 0x19, 0x58, 0xd0, 0xc9, 0xc7, + 0x60, 0xc0, 0x71, 0xdc, 0x80, 0xbf, 0x90, 0xaa, 0x3a, 0x03, 0x2c, 0xf8, 0xaf, 0x25, 0xaa, 0xc1, + 0x4d, 0xf8, 0x65, 0xc8, 0xd3, 0x23, 0x2f, 0x9c, 0x64, 0xaa, 0x69, 0xef, 0x1c, 0x79, 0x04, 0x73, + 0x0c, 0xb3, 0x60, 0x36, 0x39, 0x24, 0xb6, 0x9c, 0x5b, 0xca, 0x82, 0x6d, 0x30, 0xa0, 0xb2, 0x60, + 0xfc, 0x0b, 0x0b, 0xca, 0x34, 0x26, 0xfb, 0x97, 0x32, 0x80, 0x7a, 0xbb, 0x22, 0x8d, 0xcd, 0x7e, + 0x26, 0xb4, 0xb0, 0x42, 0xbf, 0xd9, 0x98, 0x85, 0xed, 0xb5, 0xa9, 0xb9, 0xd3, 0x6c, 0x6a, 0xf9, + 0x57, 0x72, 0xf1, 0x36, 0x62, 0xed, 0x30, 0x86, 0x39, 0x11, 0xf6, 0x42, 0x76, 0x78, 0x2f, 0xe4, + 0x46, 0xee, 0x85, 0x57, 0x61, 0xd6, 0x36, 0x28, 0x09, 0x68, 0xe8, 0xc5, 0x84, 0x3b, 0xb9, 0x28, + 0x59, 0x67, 0x37, 0x74, 0x24, 0x8e, 0xd3, 0x32, 0x67, 0xdd, 0x26, 0x81, 0xe9, 0x5b, 0xdc, 0x22, + 0x73, 0xef, 0xa2, 0x39, 0xeb, 0x46, 0x84, 0xc2, 0x3a, 0x1d, 0xba, 0x0d, 0x17, 0x4d, 0xb7, 0xe3, + 0x19, 0xd4, 0xda, 0xb1, 0x89, 0x6c, 0x48, 0x56, 0x8b, 0xd2, 0xc4, 0xe5, 0xdc, 0x95, 0xa9, 0xda, + 0x93, 0x27, 0xc7, 0x2b, 0x17, 0xeb, 0xfd, 0x08, 0x70, 0x7f, 0xbe, 0xf2, 0xdf, 0x65, 0x60, 0x29, + 0xd9, 0x21, 0x63, 0x98, 0x7f, 0xdb, 0xf1, 0xf9, 0x97, 0xce, 0x4a, 0x31, 0x1d, 0x07, 0xcc, 0xc1, + 0x3f, 0xc8, 0xc0, 0x5c, 0x44, 0xea, 0x93, 0x80, 0xf9, 0x3a, 0x7d, 0x06, 0x3e, 0xa5, 0xf7, 0xfd, + 0xfd, 0xe3, 0x95, 0x69, 0x49, 0xa6, 0x0d, 0x85, 0xcb, 0x90, 0xdf, 0x77, 0x03, 0x9a, 0x1c, 0x2c, + 0x37, 0xdd, 0x80, 0x62, 0x8e, 0x61, 0x14, 0x9e, 0xeb, 0x53, 0x3e, 0x56, 0x0a, 0x11, 0x45, 0xd3, + 0xf5, 0x29, 0xe6, 0x18, 0x4e, 0x61, 0xd0, 0x7d, 0x39, 0x24, 0x22, 0x0a, 0x83, 0xee, 0x63, 0x8e, + 0x29, 0xbf, 0x06, 0x17, 0x42, 0x45, 0x3d, 0xcf, 0x8e, 0x79, 0x66, 0x97, 0xde, 0xf5, 0xda, 0x06, + 0x15, 0x2a, 0x17, 0x35, 0xcf, 0x1c, 0x22, 0x70, 0x44, 0x53, 0xfe, 0x6e, 0x64, 0x75, 0x58, 0xc7, + 0xbb, 0x0e, 0x71, 0xe8, 0x08, 0x56, 0xe7, 0xe7, 0x32, 0x50, 0xf4, 0x09, 0x5f, 0x10, 0x06, 0x23, + 0x2f, 0xb6, 0x92, 0xe5, 0x60, 0x29, 0xa0, 0xf6, 0x7c, 0xd8, 0xd5, 0x21, 0xe4, 0xfe, 0xf1, 0x4a, + 0x69, 0x10, 0x35, 0x56, 0x05, 0xb3, 0xd1, 0x37, 0x90, 0x8c, 0xd9, 0xa8, 0x36, 0x09, 0x2c, 0x9f, + 0xb4, 0x79, 0x3d, 0x0a, 0x91, 0x8d, 0x6a, 0x08, 0x30, 0x0e, 0xf1, 0x8c, 0xd4, 0xec, 0xfa, 0x3e, + 0x71, 0x44, 0xaf, 0x69, 0xa4, 0x75, 0x01, 0xc6, 0x21, 0x9e, 0x35, 0xb0, 0x71, 0x68, 0x58, 0xb6, + 0xb1, 0x63, 0x13, 0xd9, 0x81, 0xaa, 0x81, 0xab, 0x21, 0x02, 0x47, 0x34, 0x4c, 0x76, 0x97, 0x37, + 0x75, 0x9b, 0xf7, 0xa6, 0x26, 0x5b, 0xf4, 0x40, 0x1b, 0x87, 0xf8, 0xf2, 0x37, 0x72, 0x5a, 0x5f, + 0x38, 0x6d, 0x8b, 0x4f, 0xd9, 0xe1, 0x7d, 0xf1, 0x8a, 0x72, 0xae, 0x62, 0xc8, 0xbd, 0x37, 0xee, + 0x27, 0xef, 0x1f, 0xaf, 0xcc, 0x2b, 0x71, 0x71, 0xd7, 0x89, 0xf6, 0x98, 0x0d, 0x0a, 0x68, 0xd3, + 0x77, 0x77, 0x08, 0x8b, 0xf8, 0xa4, 0x7b, 0x4e, 0x13, 0x60, 0x6a, 0xf6, 0x4a, 0x13, 0x84, 0xe3, + 0x72, 0xd1, 0x21, 0x20, 0x06, 0xb8, 0xe3, 0x1b, 0x4e, 0xc0, 0x15, 0xe1, 0xa5, 0xe5, 0x53, 0x97, + 0xb6, 0x2c, 0x4b, 0x43, 0x1b, 0x3d, 0xd2, 0x70, 0x9f, 0x12, 0x34, 0xc7, 0x52, 0x38, 0x35, 0x58, + 0x7f, 0x16, 0x26, 0x3b, 0x24, 0x08, 0x8c, 0x3d, 0xc2, 0x63, 0x6c, 0xcd, 0xa1, 0x6d, 0x0a, 0x30, + 0x0e, 0xf1, 0xe5, 0xff, 0x29, 0xc0, 0x62, 0xd8, 0x4b, 0x3e, 0x69, 0x13, 0x87, 0xc5, 0xcc, 0x63, + 0x70, 0x42, 0xfa, 0x6a, 0x2e, 0x9b, 0x76, 0x35, 0x97, 0x1b, 0x71, 0x35, 0x57, 0x01, 0x20, 0xd4, + 0x6c, 0xd7, 0xab, 0x75, 0xe2, 0x53, 0xde, 0x3f, 0x33, 0xb5, 0x39, 0xa6, 0xd2, 0xda, 0x9d, 0x7a, + 0x43, 0x40, 0xb1, 0x46, 0x81, 0x9e, 0x83, 0x29, 0xf1, 0x75, 0x8b, 0x1c, 0xf1, 0x26, 0x9e, 0xa9, + 0xcd, 0xb2, 0xa9, 0x20, 0xc8, 0x6f, 0x91, 0x23, 0x1c, 0xe1, 0x51, 0x1d, 0x16, 0xd9, 0x47, 0xb5, + 0xb9, 0x5e, 0xb7, 0x2d, 0xe2, 0x50, 0x5e, 0xc6, 0x04, 0x67, 0xba, 0x78, 0x72, 0xbc, 0xb2, 0xc8, + 0x98, 0x62, 0x48, 0xdc, 0x4b, 0x8f, 0x3e, 0x09, 0x0b, 0x31, 0x20, 0x2b, 0x78, 0x92, 0xcb, 0x58, + 0x3a, 0x39, 0x5e, 0x59, 0x88, 0xc9, 0x60, 0xe5, 0xf7, 0x50, 0xa3, 0x32, 0x4c, 0x98, 0x06, 0x2f, + 0xbb, 0xc8, 0xf9, 0x80, 0x8d, 0x07, 0x59, 0x37, 0x89, 0x41, 0x2b, 0x50, 0x30, 0x0d, 0x26, 0x7a, + 0x8a, 0x93, 0x4c, 0x31, 0x4f, 0x21, 0xea, 0x23, 0xe0, 0xac, 0xa1, 0xcc, 0xa8, 0x12, 0x10, 0x35, + 0x94, 0xa6, 0xbd, 0x46, 0xc1, 0x1a, 0xca, 0x54, 0xfa, 0x4e, 0x47, 0x0d, 0x15, 0x29, 0x1a, 0xe1, + 0x59, 0xe9, 0xd4, 0x3d, 0x20, 0x4e, 0x69, 0x86, 0x77, 0x1b, 0x2f, 0xfd, 0x0e, 0x03, 0x60, 0x01, + 0x47, 0x1f, 0x81, 0xb9, 0x9d, 0x30, 0x0b, 0xc5, 0x11, 0xa5, 0x59, 0x4e, 0x89, 0x4e, 0x8e, 0x57, + 0xe6, 0x6a, 0x31, 0x0c, 0x4e, 0x50, 0x32, 0x5e, 0x93, 0xf8, 0xd4, 0xda, 0xb5, 0x4c, 0x83, 0x12, + 0xa6, 0xce, 0x5c, 0xc4, 0x5b, 0x8f, 0x61, 0x70, 0x82, 0xb2, 0xfc, 0xf7, 0x19, 0xb8, 0xd8, 0x33, + 0xf6, 0xc7, 0xe0, 0xef, 0xdf, 0x88, 0xfb, 0xfb, 0x6b, 0x23, 0xbb, 0x1a, 0xa5, 0xe4, 0x00, 0x87, + 0xff, 0xdf, 0x45, 0xe5, 0xf0, 0xc3, 0xcc, 0xd1, 0xd3, 0x90, 0xb7, 0xbc, 0xc3, 0x40, 0x7a, 0xcf, + 0x22, 0x33, 0xb6, 0xeb, 0xcd, 0xed, 0x16, 0xe6, 0x50, 0x74, 0x05, 0x8a, 0x5e, 0x77, 0xc7, 0xb6, + 0xcc, 0x8d, 0x1a, 0x9f, 0x85, 0x45, 0x91, 0x29, 0x6c, 0x4a, 0x18, 0x56, 0x58, 0x36, 0x42, 0x2c, + 0x47, 0x64, 0x0d, 0x37, 0x6a, 0x7c, 0x02, 0x16, 0xc5, 0x08, 0x59, 0x57, 0x50, 0xac, 0x51, 0xa0, + 0x17, 0x61, 0x72, 0xcf, 0xeb, 0xf2, 0x68, 0x4c, 0xb8, 0xfd, 0xc7, 0x99, 0xf9, 0x79, 0xbd, 0x79, + 0x57, 0x86, 0x1a, 0xe1, 0x4f, 0x1c, 0x92, 0xa1, 0x26, 0x2c, 0x11, 0x87, 0x39, 0x99, 0x4d, 0x83, + 0xaf, 0x25, 0xcd, 0x7d, 0xd2, 0xee, 0xda, 0x84, 0xcf, 0xc3, 0x62, 0x94, 0x0e, 0x59, 0xeb, 0x43, + 0x83, 0xfb, 0x72, 0xa2, 0x57, 0x21, 0xbb, 0x6f, 0xc8, 0x2c, 0xc3, 0x33, 0x43, 0x1b, 0xf9, 0x66, + 0xb5, 0x36, 0x71, 0x72, 0xbc, 0x92, 0xbd, 0x59, 0xc5, 0xd9, 0x7d, 0x83, 0x0d, 0xac, 0xe0, 0xc0, + 0xf2, 0x94, 0xaf, 0x09, 0x4a, 0x93, 0x3c, 0xaa, 0xe4, 0x03, 0xab, 0x15, 0xc3, 0xe0, 0x04, 0x25, + 0xfa, 0x14, 0x14, 0x76, 0x2d, 0x9b, 0x04, 0xa5, 0x22, 0xef, 0xe0, 0xf7, 0x0f, 0x2d, 0xfb, 0x35, + 0xcb, 0xd6, 0x82, 0x38, 0xf6, 0x15, 0x60, 0x21, 0x02, 0x1d, 0x40, 0x61, 0xdf, 0x75, 0x0f, 0x82, + 0xd2, 0x14, 0x97, 0xf5, 0x91, 0x51, 0x07, 0x8b, 0x1c, 0x00, 0x95, 0x9b, 0x8c, 0x79, 0xcd, 0xa1, + 0xfe, 0x51, 0xed, 0xc9, 0xb0, 0x00, 0x0e, 0xfb, 0xd9, 0x7f, 0x5a, 0x29, 0xb2, 0x1f, 0xbc, 0x17, + 0x44, 0x19, 0x68, 0x17, 0xa6, 0xcd, 0xc0, 0x0a, 0x53, 0x5a, 0xdc, 0x10, 0x8c, 0xb4, 0xbc, 0xed, + 0xc9, 0x58, 0xd6, 0xe6, 0xb9, 0x61, 0x8e, 0xe0, 0x58, 0x17, 0x8c, 0x02, 0x58, 0x30, 0x12, 0xb9, + 0x61, 0x6e, 0x46, 0x46, 0x09, 0x7e, 0x7b, 0x92, 0xdb, 0xdc, 0x52, 0x26, 0xa1, 0xb8, 0xa7, 0x00, + 0xb4, 0x09, 0x17, 0xe4, 0x30, 0x21, 0xd4, 0xb7, 0xcc, 0xa0, 0x45, 0xfc, 0x43, 0xe2, 0x73, 0xab, + 0x54, 0x54, 0xa1, 0xf0, 0x85, 0xb5, 0x5e, 0x12, 0xdc, 0x8f, 0x8f, 0xad, 0x78, 0x2c, 0xef, 0xf0, + 0x7a, 0xa3, 0x6b, 0xd8, 0x2d, 0xa6, 0x2f, 0x37, 0x5a, 0xc5, 0x28, 0x82, 0x58, 0x6f, 0x6a, 0x48, + 0x1c, 0xa7, 0x45, 0x37, 0x60, 0x46, 0xc8, 0xac, 0x5b, 0xb6, 0xd5, 0xed, 0x70, 0xa3, 0x55, 0xac, + 0x2d, 0x49, 0xde, 0x99, 0x35, 0x0d, 0x87, 0x63, 0x94, 0xa8, 0xc5, 0x22, 0xb0, 0x3d, 0xdf, 0x68, + 0x93, 0xd2, 0xe3, 0xbc, 0xc5, 0xae, 0x0c, 0x6d, 0xb1, 0xbb, 0x82, 0x5e, 0x8f, 0xd5, 0x38, 0x00, + 0x87, 0x92, 0x96, 0x6f, 0x00, 0x44, 0xe3, 0x04, 0x2d, 0x40, 0xee, 0x80, 0x1c, 0x89, 0x18, 0x0d, + 0xb3, 0x9f, 0x68, 0x09, 0x0a, 0x87, 0x86, 0xdd, 0x95, 0x6b, 0x46, 0x2c, 0x3e, 0x3e, 0x92, 0xbd, + 0x91, 0x29, 0xff, 0x6e, 0x0e, 0x9e, 0x92, 0x23, 0xee, 0x75, 0xdf, 0xed, 0x7a, 0xd5, 0xe6, 0x3a, + 0x96, 0xfb, 0x74, 0xcc, 0x34, 0xa9, 0x5c, 0x59, 0x66, 0x50, 0xae, 0x8c, 0x35, 0x45, 0x60, 0x39, + 0x7b, 0x5d, 0xdb, 0xd0, 0x53, 0xb5, 0xaa, 0x29, 0x5a, 0x1a, 0x0e, 0xc7, 0x28, 0xd1, 0x35, 0x00, + 0x95, 0x94, 0x6b, 0x4b, 0x9b, 0xa4, 0xa2, 0x0e, 0x95, 0xb9, 0x6b, 0x63, 0x8d, 0x8a, 0x2d, 0xe0, + 0xf7, 0x98, 0x9e, 0xd2, 0x2a, 0xa9, 0x39, 0xc7, 0x95, 0xc7, 0x02, 0xa7, 0x27, 0x04, 0x0a, 0x43, + 0x12, 0x02, 0x97, 0x21, 0x7f, 0x60, 0x39, 0x6d, 0x19, 0x67, 0xa9, 0xfa, 0xdd, 0xb2, 0x9c, 0x36, + 0xe6, 0x18, 0xe6, 0xfe, 0x0e, 0x89, 0xbf, 0x13, 0xda, 0x0f, 0xee, 0xfe, 0xb6, 0x19, 0x00, 0x0b, + 0x38, 0x33, 0xad, 0xc1, 0xbe, 0xeb, 0x53, 0xae, 0x31, 0x37, 0x19, 0x53, 0xc2, 0xb4, 0xb6, 0x14, + 0x14, 0x6b, 0x14, 0xdc, 0x59, 0x1b, 0x94, 0xec, 0xb9, 0xbe, 0x45, 0x84, 0x59, 0x90, 0xf4, 0x75, + 0x05, 0xc5, 0x1a, 0x45, 0xf9, 0x4f, 0xb2, 0xf0, 0xf4, 0x29, 0x5d, 0x14, 0x8c, 0x21, 0xda, 0xbb, + 0x01, 0x33, 0xbc, 0x65, 0xe3, 0x29, 0x6e, 0xd5, 0xc7, 0xaf, 0x6b, 0x38, 0x1c, 0xa3, 0x44, 0x87, + 0x30, 0x63, 0x78, 0x56, 0xa8, 0x6f, 0x50, 0xca, 0x71, 0x2b, 0xf8, 0xd1, 0x51, 0xad, 0x60, 0xbf, + 0x0a, 0x47, 0xe5, 0x6a, 0x88, 0x00, 0xc7, 0xca, 0x29, 0xff, 0x38, 0x03, 0x97, 0x4f, 0x6b, 0xb4, + 0x9e, 0x30, 0x21, 0x77, 0xe6, 0x61, 0xc2, 0x4e, 0x3c, 0x4c, 0xf8, 0xd8, 0xbb, 0xa9, 0x73, 0x30, + 0x20, 0x62, 0xf8, 0x6e, 0x06, 0xc2, 0xf0, 0x79, 0x0c, 0x81, 0xcf, 0x66, 0xbc, 0x46, 0x57, 0x46, + 0xad, 0xd1, 0x00, 0xe5, 0xff, 0x23, 0xa7, 0xc2, 0x9d, 0x4d, 0xa1, 0x19, 0x5a, 0x86, 0xac, 0xe5, + 0x49, 0x63, 0x03, 0x92, 0x29, 0xbb, 0xde, 0xc4, 0x59, 0xcb, 0x53, 0x89, 0x8a, 0xec, 0xc0, 0x44, + 0xc5, 0xf3, 0x50, 0xec, 0x06, 0x2c, 0x82, 0x51, 0x6b, 0x0c, 0x55, 0x9b, 0xbb, 0x12, 0x8e, 0x15, + 0x05, 0x0f, 0x9e, 0x8c, 0x20, 0x78, 0xcb, 0xf5, 0xdb, 0x72, 0x6d, 0x21, 0x82, 0x27, 0x09, 0xc3, + 0x0a, 0xcb, 0x66, 0xac, 0xe7, 0x5b, 0x87, 0x32, 0x40, 0x2d, 0x44, 0xe1, 0x75, 0x53, 0x41, 0xb1, + 0x46, 0xc1, 0xe9, 0x8d, 0x20, 0x68, 0xee, 0xfb, 0x46, 0x40, 0xe4, 0x9a, 0x42, 0xd0, 0x2b, 0x28, + 0xd6, 0x28, 0x90, 0x09, 0x13, 0xb6, 0xb1, 0x43, 0x6c, 0x61, 0x63, 0xa6, 0xaf, 0xbd, 0x3a, 0x6a, + 0xc3, 0xca, 0x66, 0xab, 0x6c, 0x70, 0x6e, 0x11, 0x25, 0xa8, 0x45, 0xa5, 0x00, 0x62, 0x29, 0x1a, + 0x55, 0x61, 0x82, 0x1a, 0x96, 0x43, 0xc3, 0xa8, 0xe6, 0x49, 0x6d, 0x60, 0x54, 0x4c, 0xd7, 0x27, + 0x7c, 0x59, 0xcb, 0x28, 0x22, 0x11, 0xfc, 0x33, 0xc0, 0x92, 0x71, 0xf9, 0x15, 0x98, 0xd6, 0x4a, + 0x4a, 0xe5, 0x67, 0x7e, 0x98, 0x85, 0x79, 0xa9, 0x74, 0xd3, 0x77, 0x3d, 0xe2, 0xd3, 0x23, 0xb4, + 0x01, 0x4b, 0x1d, 0xe3, 0x5e, 0xb8, 0xf7, 0x40, 0xfc, 0x43, 0xcb, 0x24, 0x5b, 0xdd, 0x8e, 0x4c, + 0x90, 0x94, 0x58, 0xb4, 0xb8, 0xd9, 0x07, 0x8f, 0xfb, 0x72, 0xa1, 0x0f, 0xc3, 0x6c, 0xc7, 0xb8, + 0xb7, 0xe5, 0xb6, 0x49, 0xd3, 0x6d, 0x33, 0x31, 0x62, 0x9c, 0x2c, 0x32, 0x5f, 0xbe, 0xa9, 0x23, + 0x70, 0x9c, 0x0e, 0x7d, 0x29, 0x03, 0xb3, 0x2e, 0xf3, 0x07, 0xae, 0xdd, 0xc6, 0x06, 0xb5, 0x5c, + 0x69, 0xa4, 0xea, 0xa3, 0xf6, 0x42, 0x58, 0xa1, 0xca, 0x6d, 0x5d, 0x8a, 0xe8, 0x0d, 0x15, 0x4e, + 0xc4, 0x70, 0x38, 0x5e, 0xe0, 0xf2, 0x27, 0x01, 0xf5, 0xf2, 0xa6, 0x6a, 0xdf, 0x7f, 0x2f, 0xa8, + 0xf6, 0x0d, 0xed, 0x06, 0xfa, 0x69, 0x28, 0x9a, 0x86, 0x67, 0x98, 0x16, 0x65, 0x42, 0x58, 0x95, + 0x3e, 0x3e, 0x6a, 0x95, 0x42, 0x19, 0x95, 0xba, 0x14, 0x20, 0x6a, 0x73, 0x39, 0x9c, 0x4e, 0x21, + 0xf8, 0xfe, 0xf1, 0xca, 0x4c, 0x48, 0xcb, 0x0c, 0x06, 0x56, 0x25, 0xa2, 0x5f, 0xc8, 0xc0, 0xb4, + 0x61, 0xdb, 0xae, 0x69, 0x50, 0x9e, 0x9e, 0x12, 0x36, 0xa3, 0x9a, 0x5a, 0x83, 0x6a, 0x24, 0x43, + 0x28, 0x11, 0x6e, 0x22, 0x4e, 0x6b, 0x98, 0x1e, 0x3d, 0xf4, 0xa2, 0x59, 0x0f, 0x4f, 0xc9, 0x6f, + 0x1e, 0x68, 0x30, 0x45, 0x3e, 0xf1, 0xa0, 0x8a, 0x90, 0xb6, 0x50, 0xe3, 0xbd, 0x2a, 0xd1, 0x16, + 0xc2, 0x7b, 0x94, 0x88, 0x0a, 0x5d, 0x3e, 0x80, 0xd9, 0x58, 0x53, 0xf6, 0xe9, 0xdc, 0x86, 0xde, + 0xb9, 0x43, 0x0c, 0x77, 0x25, 0x3c, 0x4c, 0x55, 0xf9, 0x74, 0xd7, 0x70, 0xa8, 0x45, 0x8f, 0xb4, + 0xc1, 0xb0, 0xec, 0xc0, 0x42, 0xb2, 0xd5, 0x1e, 0x6a, 0x79, 0x36, 0xcc, 0xc5, 0x1b, 0xe7, 0x61, + 0x96, 0x56, 0xfe, 0xd6, 0x45, 0xe5, 0xf3, 0xf8, 0xae, 0xd4, 0x27, 0x00, 0x76, 0x2d, 0xc7, 0xb0, + 0xad, 0xb7, 0x89, 0x1f, 0xf0, 0x81, 0x3e, 0x55, 0x5b, 0x61, 0xd6, 0xf6, 0x35, 0x05, 0xbd, 0x7f, + 0xbc, 0x32, 0xab, 0xbe, 0x78, 0x24, 0xaa, 0xb1, 0xa4, 0xcf, 0x65, 0xb5, 0xad, 0xc0, 0xb3, 0x8d, + 0xa3, 0x7e, 0xb9, 0xac, 0x46, 0x84, 0xc2, 0x3a, 0x9d, 0xca, 0x9c, 0xe6, 0x07, 0x66, 0x4e, 0x53, + 0x44, 0xad, 0x0d, 0x98, 0x76, 0x08, 0x7d, 0xcb, 0xf5, 0x0f, 0xe4, 0x7e, 0x09, 0x23, 0x2f, 0x87, + 0x3a, 0x6c, 0x45, 0xa8, 0xfb, 0xf1, 0x4f, 0xac, 0xb3, 0xb1, 0x15, 0x90, 0xfc, 0x6c, 0x10, 0x66, + 0x45, 0x79, 0xe6, 0x4a, 0xdb, 0xf3, 0xd9, 0xd2, 0x91, 0x38, 0x4e, 0xab, 0xa5, 0xf4, 0xea, 0xeb, + 0x0d, 0xcc, 0x93, 0x57, 0xbd, 0x29, 0x3d, 0x86, 0xc2, 0x3a, 0x1d, 0xba, 0x0a, 0xd3, 0x81, 0xb0, + 0xd9, 0x9c, 0xed, 0x82, 0xa8, 0x28, 0x63, 0x69, 0x45, 0x60, 0xac, 0xd3, 0xa0, 0x55, 0x98, 0x6a, + 0x3b, 0x41, 0xc3, 0xed, 0x18, 0x96, 0xc3, 0x33, 0x60, 0xda, 0xfe, 0x7e, 0x63, 0xab, 0x25, 0x10, + 0x38, 0xa2, 0x41, 0x18, 0x1e, 0x17, 0x79, 0x8f, 0xaa, 0xcd, 0xf3, 0x19, 0xd4, 0x3a, 0x24, 0x22, + 0x38, 0x07, 0x3e, 0x38, 0x96, 0x4f, 0x8e, 0x57, 0x1e, 0x6f, 0xf6, 0xa5, 0xc0, 0x03, 0x38, 0x91, + 0x0b, 0xc5, 0x5d, 0xb1, 0x34, 0x0e, 0xe4, 0x4a, 0x77, 0x35, 0xe5, 0x4a, 0x5e, 0xf5, 0x4f, 0x51, + 0x02, 0xd8, 0xa8, 0x4c, 0xa4, 0x7b, 0xb0, 0x2a, 0x04, 0xbd, 0xc5, 0x62, 0x0e, 0xee, 0x57, 0xd8, + 0x2a, 0x61, 0x66, 0xd4, 0xe3, 0x4f, 0x71, 0x8f, 0x54, 0x7b, 0x7f, 0x18, 0xd6, 0x37, 0x95, 0x2c, + 0x9e, 0x81, 0x8f, 0x93, 0x61, 0xad, 0x28, 0xf4, 0x79, 0x98, 0x32, 0xc4, 0x36, 0x12, 0x09, 0x4a, + 0xb3, 0xdc, 0x56, 0xae, 0xa6, 0x8c, 0x47, 0xa2, 0xf9, 0x23, 0x01, 0x01, 0x8e, 0x64, 0xa2, 0x9f, + 0xcf, 0xc0, 0x7c, 0xdb, 0x35, 0x0f, 0x88, 0xbf, 0x76, 0x8f, 0xfa, 0x46, 0xd5, 0xdf, 0x0b, 0x4a, + 0x73, 0xe9, 0x9c, 0x03, 0x9b, 0xf7, 0x95, 0x46, 0x5c, 0x86, 0xb0, 0xca, 0x4f, 0xc8, 0x92, 0xe7, + 0x13, 0x58, 0x9c, 0x2c, 0x92, 0xf9, 0xa7, 0x85, 0x83, 0xee, 0x0e, 0xb1, 0x09, 0x8d, 0xf4, 0x98, + 0xe7, 0x7a, 0xd4, 0x52, 0xe9, 0x71, 0x2b, 0x21, 0x44, 0x28, 0x52, 0x92, 0x8a, 0x2c, 0x24, 0xd1, + 0xb8, 0xa7, 0x54, 0xf4, 0xe5, 0x0c, 0x20, 0xc3, 0xb3, 0x44, 0x62, 0x22, 0x52, 0x66, 0x81, 0x2b, + 0xd3, 0x48, 0xa5, 0x4c, 0xb5, 0x47, 0x8c, 0x50, 0x47, 0x6d, 0x55, 0x54, 0x9b, 0xeb, 0x09, 0x02, + 0xdc, 0xa7, 0x6c, 0xf4, 0xed, 0x0c, 0x2c, 0x9b, 0xae, 0x43, 0x7d, 0xd7, 0xb6, 0x59, 0xbf, 0x3a, + 0xc6, 0x9e, 0xae, 0xda, 0x22, 0x57, 0x6d, 0x23, 0x95, 0x6a, 0xf5, 0x81, 0xe2, 0x84, 0x8a, 0xe1, + 0xfc, 0x58, 0x1e, 0x4c, 0x88, 0x4f, 0xd1, 0x89, 0xb7, 0x62, 0x20, 0x73, 0x87, 0x9a, 0xaa, 0xe8, + 0x01, 0x5a, 0xb1, 0xd5, 0x23, 0x26, 0xd1, 0x8a, 0xbd, 0x04, 0xb8, 0x4f, 0xd9, 0xe8, 0x10, 0x96, + 0xcc, 0x64, 0xee, 0x17, 0x93, 0xdd, 0xd2, 0x92, 0xcc, 0xfc, 0xf4, 0x89, 0xc0, 0x37, 0x5c, 0xd3, + 0xb0, 0xc5, 0x22, 0x1c, 0x93, 0x5d, 0xe2, 0x13, 0xc7, 0x24, 0x22, 0x16, 0xae, 0xf7, 0x91, 0x84, + 0xfb, 0xca, 0x47, 0x75, 0xc8, 0x13, 0x6a, 0xb6, 0x4b, 0x17, 0x79, 0x39, 0xc3, 0xf3, 0x97, 0x6b, + 0xd4, 0x6c, 0x8b, 0xe4, 0x32, 0xfb, 0x85, 0x39, 0x33, 0xfa, 0x14, 0xa0, 0x7d, 0x37, 0xa0, 0x6c, + 0xad, 0x54, 0x0d, 0x58, 0xbc, 0xcc, 0xd7, 0x55, 0x4f, 0xf0, 0x34, 0x8d, 0x6a, 0x88, 0x9b, 0x3d, + 0x14, 0xb8, 0x0f, 0x17, 0xa2, 0xca, 0x61, 0xf1, 0x3e, 0x29, 0xa5, 0x5b, 0x11, 0xf3, 0x3e, 0xd9, + 0x8a, 0xf8, 0x45, 0x67, 0x5c, 0x48, 0xf8, 0x3b, 0xde, 0x0b, 0x7a, 0x31, 0xc8, 0x87, 0xf9, 0xc0, + 0x34, 0x6c, 0xcb, 0xd9, 0x0b, 0xed, 0x50, 0xe9, 0xc9, 0x07, 0x33, 0x68, 0xca, 0xac, 0xb4, 0xe2, + 0xf2, 0x70, 0xb2, 0x00, 0xf4, 0x05, 0x98, 0xdd, 0xd1, 0x8e, 0xe4, 0x06, 0xa5, 0xe5, 0x11, 0x0f, + 0xe5, 0xe8, 0x07, 0x79, 0x23, 0x1f, 0xac, 0x43, 0x03, 0x1c, 0x17, 0xbd, 0x5c, 0x83, 0xa5, 0x7e, + 0x46, 0x30, 0xcd, 0xc2, 0x61, 0xb9, 0x0e, 0x17, 0xfb, 0x1a, 0xb0, 0x54, 0x42, 0xd6, 0xe0, 0x89, + 0x01, 0x86, 0x27, 0x95, 0x98, 0x4d, 0x58, 0x19, 0x62, 0x24, 0xd2, 0x6a, 0x35, 0x60, 0x22, 0xa7, + 0x12, 0xf3, 0x71, 0x58, 0x48, 0x8e, 0xbd, 0x54, 0x4b, 0xb3, 0x6f, 0x00, 0xcc, 0xc6, 0x0e, 0xd8, + 0xa1, 0x32, 0x4c, 0xd8, 0xac, 0xdf, 0xda, 0x72, 0x5b, 0x87, 0xef, 0xf9, 0x6d, 0x70, 0x08, 0x96, + 0x18, 0x3d, 0x1a, 0xcc, 0x0e, 0x89, 0x06, 0x5f, 0x8a, 0x1f, 0x1b, 0x7d, 0x4f, 0xf2, 0xd8, 0x68, + 0x78, 0x68, 0x2f, 0x76, 0xc8, 0x89, 0x00, 0x98, 0xd1, 0xde, 0x48, 0x3e, 0xdd, 0xc9, 0x15, 0xb5, + 0x57, 0x12, 0xe5, 0x0d, 0xb5, 0xed, 0x14, 0x4d, 0xb0, 0xbe, 0x95, 0x5d, 0x38, 0x7d, 0x2b, 0x5b, + 0xdb, 0x1d, 0x9f, 0x38, 0x75, 0x77, 0xfc, 0x4d, 0x3d, 0x40, 0x99, 0x4c, 0x37, 0x9f, 0xe5, 0x01, + 0x19, 0xed, 0x94, 0x44, 0x28, 0x49, 0x8f, 0x50, 0xbe, 0x08, 0xc5, 0x70, 0x05, 0xc2, 0x03, 0xce, + 0x14, 0x91, 0x57, 0xb8, 0xfe, 0x53, 0xab, 0xd4, 0x62, 0x08, 0xd1, 0xe2, 0xae, 0x10, 0x84, 0x55, + 0x31, 0xa2, 0x3b, 0xe4, 0xa1, 0x11, 0x11, 0xa7, 0xa6, 0xea, 0x0e, 0xc9, 0xa9, 0x77, 0x47, 0x28, + 0x0c, 0x6b, 0x82, 0x59, 0xd4, 0xae, 0x87, 0xdf, 0xd3, 0xf1, 0xa8, 0x7d, 0x60, 0x08, 0xde, 0x80, + 0x05, 0xc7, 0x6d, 0xf3, 0xdf, 0x9b, 0x46, 0x70, 0xd0, 0xb2, 0xde, 0x26, 0x3c, 0x24, 0x2d, 0x44, + 0x61, 0xce, 0x56, 0x02, 0x8f, 0x7b, 0x38, 0xd0, 0x33, 0x50, 0x68, 0x3b, 0xc1, 0x7a, 0x53, 0x6e, + 0x0f, 0xab, 0xa4, 0x60, 0x63, 0xab, 0xb5, 0xde, 0xc4, 0x02, 0xc7, 0x16, 0x08, 0x3e, 0xd9, 0xb3, + 0x02, 0xea, 0x1f, 0xad, 0x37, 0x45, 0x60, 0x28, 0x17, 0x08, 0x38, 0x02, 0x63, 0x9d, 0x86, 0x1f, + 0xc4, 0x26, 0x6c, 0xcc, 0x19, 0xfe, 0x91, 0x56, 0x85, 0xd2, 0x7c, 0xe2, 0x20, 0x76, 0x1f, 0x1a, + 0xdc, 0x97, 0x33, 0xb9, 0xb8, 0x59, 0x18, 0x71, 0x71, 0xa3, 0x2b, 0xa2, 0x11, 0x95, 0x16, 0x07, + 0x28, 0xa2, 0x0b, 0xea, 0xcb, 0xc9, 0x24, 0x26, 0x9b, 0x71, 0xbd, 0x79, 0xf8, 0x72, 0x09, 0xf1, + 0xc6, 0x57, 0x12, 0xb7, 0xfa, 0xd0, 0xe0, 0xbe, 0x9c, 0x03, 0x24, 0x5e, 0xe7, 0x2b, 0xb1, 0xd3, + 0x25, 0x5e, 0xef, 0x2b, 0xf1, 0x3a, 0x6a, 0x00, 0xb0, 0x88, 0x56, 0x1c, 0x65, 0xe7, 0xa1, 0xcd, + 0x54, 0xed, 0x7d, 0xe1, 0x38, 0xbc, 0xa5, 0x30, 0x6c, 0xb5, 0x13, 0x7d, 0xf1, 0xd5, 0xa8, 0xc6, + 0x57, 0xfe, 0x56, 0x0e, 0xa6, 0xea, 0xae, 0xb3, 0x6b, 0xed, 0x6d, 0x1a, 0xe3, 0xb8, 0x64, 0xb4, + 0x0d, 0x79, 0x2e, 0x5d, 0xa4, 0xa5, 0x5e, 0x1e, 0x3e, 0xd5, 0x42, 0xdd, 0x2a, 0x0d, 0x83, 0x1a, + 0x22, 0x02, 0x51, 0xab, 0x78, 0x06, 0xc2, 0x5c, 0x1e, 0x72, 0x00, 0x76, 0x2c, 0xc7, 0xf0, 0x8f, + 0x1a, 0x62, 0x57, 0x61, 0xc4, 0x4d, 0x5f, 0x25, 0xbd, 0xa6, 0x98, 0x45, 0x19, 0xaa, 0x16, 0x11, + 0x02, 0x6b, 0x25, 0x2c, 0x7f, 0x18, 0xa6, 0x14, 0x71, 0x2a, 0xb7, 0xf6, 0x31, 0x98, 0x4f, 0x94, + 0x35, 0x8c, 0x7d, 0x46, 0xf7, 0x6a, 0x7f, 0x91, 0x81, 0x59, 0xa5, 0xf5, 0x18, 0xf6, 0x1e, 0x6e, + 0xc7, 0xf7, 0x1e, 0x3e, 0x38, 0x7a, 0x93, 0x0e, 0xd8, 0x7d, 0xe0, 0x67, 0xfc, 0x7d, 0xd7, 0xb9, + 0xd9, 0xac, 0x9e, 0xc7, 0x33, 0xfe, 0x42, 0xb3, 0xb3, 0x3c, 0xe3, 0x2f, 0x25, 0x9e, 0x7e, 0x7c, + 0x9d, 0x6f, 0x28, 0x09, 0xca, 0x73, 0xb9, 0xa1, 0x24, 0x54, 0x1b, 0xd0, 0xa5, 0xfb, 0x70, 0x41, + 0x12, 0x3c, 0xec, 0x0b, 0x22, 0x5f, 0x8b, 0x9a, 0xe9, 0x5c, 0x5e, 0x6e, 0xfa, 0x61, 0x16, 0x66, + 0x63, 0x1d, 0x9e, 0xe6, 0x90, 0xfc, 0xd5, 0xf8, 0x21, 0xf9, 0x74, 0xd7, 0x90, 0x72, 0x29, 0xae, + 0x21, 0xe5, 0xcf, 0xe4, 0x1a, 0x52, 0xe1, 0x27, 0x70, 0x0d, 0xe9, 0x8f, 0x33, 0xc0, 0x97, 0xca, + 0xe8, 0x16, 0x14, 0x6c, 0xb6, 0x62, 0x97, 0x93, 0x63, 0xb8, 0x59, 0xe2, 0xeb, 0x7b, 0xbe, 0xde, + 0xe6, 0x27, 0x09, 0xf8, 0x27, 0x16, 0x32, 0xd0, 0x1b, 0x3d, 0x77, 0x46, 0x5f, 0x18, 0xf9, 0xce, + 0x28, 0x17, 0x39, 0xe8, 0x9e, 0xe8, 0xff, 0x81, 0xd2, 0xa0, 0xbb, 0xa5, 0xef, 0x6e, 0xcb, 0xb5, + 0xfc, 0xbd, 0x0c, 0xcc, 0xe8, 0x2a, 0xf0, 0x33, 0x98, 0x4e, 0xdb, 0x73, 0xf9, 0x4e, 0xa3, 0x48, + 0xc6, 0x8b, 0x33, 0x98, 0x21, 0x10, 0x47, 0x78, 0x36, 0x6c, 0x4c, 0xe3, 0x35, 0xcb, 0x0e, 0x87, + 0x9a, 0x1a, 0x36, 0xf5, 0x2a, 0x83, 0x62, 0x89, 0x65, 0xd3, 0xcb, 0x24, 0x3e, 0xe5, 0x94, 0x89, + 0x8d, 0xdd, 0xba, 0x84, 0x63, 0x45, 0xc1, 0x86, 0xfa, 0x01, 0x39, 0xe2, 0xc4, 0xf9, 0xf8, 0x50, + 0xbf, 0x25, 0xc0, 0x38, 0xc4, 0x97, 0x1b, 0x90, 0xe7, 0x2c, 0xef, 0x81, 0x5c, 0xe0, 0x9b, 0xb2, + 0x15, 0xd4, 0x95, 0xd8, 0x96, 0x6f, 0x62, 0x06, 0x67, 0xe8, 0xb6, 0x3a, 0x44, 0xaf, 0xd0, 0x8d, + 0x80, 0x62, 0x06, 0x2f, 0xff, 0x51, 0x06, 0xb2, 0x37, 0xab, 0xa8, 0x0e, 0x39, 0x7a, 0x40, 0xe4, + 0x48, 0xf8, 0xc0, 0xd0, 0x9e, 0xbb, 0x73, 0x6b, 0xed, 0x66, 0x55, 0x1e, 0xa7, 0x64, 0x3f, 0x31, + 0xe3, 0x46, 0x9f, 0x07, 0xa0, 0xfb, 0x96, 0xdf, 0x6e, 0x1a, 0x3e, 0x3d, 0x1a, 0x79, 0x14, 0xdc, + 0x51, 0x2c, 0x37, 0xab, 0xb5, 0x85, 0x93, 0xe3, 0x95, 0x19, 0x1d, 0x82, 0x35, 0x91, 0xe5, 0x5f, + 0xcc, 0x42, 0xfe, 0x26, 0xb1, 0x3b, 0x63, 0x70, 0x7a, 0xb7, 0x62, 0x4e, 0xef, 0xd9, 0xe1, 0x47, + 0xf8, 0x88, 0xdd, 0x19, 0xe8, 0xf1, 0x5a, 0x09, 0x8f, 0xf7, 0xdc, 0x68, 0xe2, 0x4e, 0x77, 0x77, + 0x7f, 0x9a, 0x81, 0x22, 0x23, 0x1b, 0x83, 0xaf, 0xfb, 0x54, 0xdc, 0xd7, 0xbd, 0x7f, 0x24, 0xf5, + 0x07, 0x38, 0xba, 0x97, 0x61, 0x81, 0x61, 0x63, 0x5e, 0x2e, 0xbc, 0xa5, 0x91, 0x19, 0x78, 0x4b, + 0xe3, 0xab, 0xb2, 0xb2, 0xe7, 0xd2, 0x63, 0xfd, 0x63, 0x16, 0x20, 0xea, 0xb0, 0x47, 0xee, 0xea, + 0x4c, 0xdd, 0x15, 0x9b, 0xf3, 0xeb, 0xcd, 0xea, 0xe6, 0x39, 0x9c, 0xf3, 0x4c, 0xad, 0x33, 0x9c, + 0xf3, 0x5c, 0xdc, 0xf0, 0x39, 0xcf, 0xc8, 0xce, 0xe3, 0x9c, 0x67, 0x7a, 0x0d, 0x9e, 0xf3, 0x0c, + 0xfb, 0x00, 0x73, 0x3e, 0x6c, 0xe2, 0x73, 0x39, 0xe7, 0xa3, 0x0e, 0x7b, 0x34, 0xe7, 0xcf, 0x7c, + 0xce, 0x6f, 0xd4, 0xea, 0xaf, 0x9d, 0xc3, 0x39, 0xcf, 0xd4, 0x3a, 0xc3, 0x39, 0xcf, 0xc5, 0x0d, + 0x9f, 0xf3, 0x8c, 0xec, 0x3c, 0xce, 0x79, 0xa6, 0xd7, 0x80, 0x39, 0xff, 0xcb, 0x19, 0x58, 0x60, + 0xe8, 0x87, 0xbc, 0x9c, 0x65, 0x73, 0xc3, 0x30, 0xa9, 0xd5, 0x3b, 0x37, 0xaa, 0x1c, 0x8a, 0x25, + 0x96, 0x5b, 0x93, 0xb0, 0xf3, 0xce, 0xa5, 0x35, 0x89, 0x86, 0xc2, 0x23, 0x6b, 0x72, 0xa6, 0xd6, + 0xe4, 0x1f, 0xb2, 0x30, 0xa5, 0x96, 0xae, 0xfc, 0x36, 0xab, 0x41, 0x8d, 0x86, 0xe5, 0x27, 0xdb, + 0xb6, 0x21, 0xc0, 0x38, 0xc4, 0xa3, 0x2f, 0xc0, 0x14, 0x51, 0x7b, 0xf1, 0x62, 0x4a, 0xbc, 0x32, + 0xfa, 0x22, 0xb9, 0x92, 0xd8, 0x80, 0x57, 0x03, 0x3d, 0xda, 0x77, 0x8f, 0xc4, 0xf3, 0x3b, 0x3f, + 0x7c, 0x0f, 0x92, 0x2d, 0x0a, 0x5b, 0xd5, 0x2d, 0x71, 0xdc, 0x3c, 0xbc, 0xf3, 0x13, 0xc3, 0xe0, + 0x04, 0x25, 0x7a, 0x19, 0x66, 0x3c, 0xa2, 0x71, 0xe6, 0x39, 0x27, 0x5f, 0x4a, 0x35, 0x35, 0x38, + 0x8e, 0x51, 0x2d, 0x7f, 0x14, 0xe6, 0x1e, 0x7c, 0x67, 0x91, 0x3f, 0xa8, 0xb1, 0xe1, 0xee, 0xd5, + 0x5d, 0xdb, 0x26, 0xe6, 0x78, 0xde, 0x53, 0x4a, 0xfb, 0xa0, 0x86, 0xae, 0xde, 0x19, 0x3e, 0xa8, + 0x11, 0x13, 0x3b, 0xfc, 0x41, 0x0d, 0x9d, 0xfc, 0x3c, 0x3e, 0xa8, 0xa1, 0xeb, 0x37, 0xc0, 0x94, + 0x77, 0xa0, 0xa4, 0x53, 0x3d, 0xec, 0x04, 0xe5, 0xd7, 0x13, 0xad, 0x76, 0x2e, 0x2d, 0xf6, 0x49, + 0x16, 0x50, 0xef, 0x48, 0x78, 0x64, 0xb9, 0xcf, 0xd4, 0x72, 0x7f, 0x25, 0x0b, 0x93, 0xe1, 0xf5, + 0x8a, 0xf3, 0xb7, 0xcf, 0x21, 0x35, 0x3b, 0xc3, 0x7d, 0x8e, 0x50, 0xe2, 0xe9, 0x56, 0x25, 0x80, + 0x39, 0x49, 0x18, 0x3e, 0xad, 0x71, 0x3d, 0xf6, 0xb4, 0x41, 0x39, 0xf1, 0xb4, 0x06, 0x8a, 0x53, + 0xc7, 0x8f, 0xed, 0xca, 0x93, 0x03, 0xc9, 0x83, 0x1a, 0x92, 0x16, 0x87, 0x78, 0xfe, 0xa4, 0x82, + 0x94, 0xf3, 0xe8, 0x49, 0x85, 0x73, 0xfb, 0xa4, 0xc2, 0x77, 0x33, 0x30, 0x2d, 0x7b, 0xe9, 0x3c, + 0x6e, 0x81, 0x85, 0x47, 0xd2, 0xfa, 0xbb, 0x99, 0x6f, 0x16, 0x94, 0xf2, 0x3f, 0xa1, 0xc3, 0xf1, + 0x0f, 0xf2, 0xd0, 0xc3, 0xf0, 0xc3, 0xf1, 0x62, 0x97, 0xa2, 0x70, 0xea, 0x2e, 0xc5, 0xc4, 0x48, + 0x17, 0xc3, 0x26, 0x53, 0x5d, 0x0c, 0x2b, 0xa6, 0xb8, 0x18, 0x36, 0x95, 0xf2, 0x62, 0x18, 0x0c, + 0xbd, 0x18, 0xf6, 0xa6, 0xba, 0x18, 0x36, 0xcd, 0x47, 0xc7, 0x8d, 0x34, 0xf6, 0x34, 0xe5, 0xad, + 0xb0, 0x99, 0x9f, 0xc0, 0xad, 0xb0, 0xff, 0xca, 0xc1, 0x6c, 0xcc, 0x5e, 0x8f, 0x74, 0x34, 0xee, + 0xa5, 0xb8, 0xd3, 0xef, 0x3d, 0xef, 0x26, 0x45, 0x9e, 0x72, 0xde, 0x2d, 0x37, 0xe2, 0x01, 0xab, + 0xa4, 0xb5, 0x4e, 0x73, 0xde, 0x2d, 0x3f, 0xf2, 0x79, 0xb7, 0xc2, 0xe8, 0xe7, 0xdd, 0x26, 0x46, + 0x3c, 0xef, 0x16, 0x77, 0x57, 0x43, 0xce, 0xbb, 0x59, 0x30, 0x2d, 0xcd, 0xd8, 0xba, 0xb3, 0xeb, + 0xf2, 0x19, 0x32, 0xca, 0xb3, 0x16, 0x61, 0xcf, 0x1d, 0x05, 0x94, 0x74, 0x18, 0x67, 0x34, 0xd3, + 0x37, 0x23, 0x71, 0x58, 0x97, 0x5d, 0xfe, 0xb7, 0x3c, 0x2c, 0xf6, 0xf0, 0xb1, 0x00, 0x38, 0x24, + 0x6a, 0x24, 0x03, 0xe0, 0x50, 0x54, 0x03, 0x47, 0x34, 0x2c, 0x38, 0x0b, 0x38, 0xfb, 0xdd, 0xbb, + 0xca, 0x2e, 0xa9, 0xae, 0x69, 0x29, 0x0c, 0xd6, 0xa8, 0x58, 0x7b, 0xef, 0xb8, 0x2e, 0xb3, 0x63, + 0x89, 0xc0, 0xaf, 0xc6, 0xa1, 0x58, 0x62, 0xd1, 0xab, 0x30, 0x7b, 0x40, 0x7c, 0x87, 0xd8, 0x03, + 0x9e, 0x42, 0xbb, 0xa5, 0x23, 0x71, 0x9c, 0x96, 0xf5, 0xbf, 0x1b, 0xac, 0x77, 0xfa, 0x9c, 0x77, + 0xbc, 0xdd, 0xe2, 0x60, 0x1c, 0xe2, 0xd1, 0x67, 0xe0, 0x09, 0xd3, 0x75, 0xd8, 0x24, 0x22, 0x3e, + 0x16, 0x4f, 0x50, 0x87, 0x25, 0x0a, 0x17, 0xb5, 0x22, 0x59, 0x9f, 0xa8, 0xf7, 0x27, 0xc3, 0x83, + 0xf8, 0xd1, 0xc7, 0x61, 0x4e, 0x5e, 0x32, 0x08, 0x25, 0x0a, 0xab, 0xf7, 0xb8, 0x94, 0x38, 0x77, + 0x2b, 0x86, 0xc5, 0x09, 0x6a, 0xd4, 0x10, 0x57, 0x23, 0xf8, 0x22, 0x25, 0x94, 0x20, 0x6e, 0xf8, + 0xc4, 0xae, 0x35, 0xe8, 0x78, 0xdc, 0xc3, 0x81, 0xaa, 0x30, 0xef, 0xf2, 0x17, 0x23, 0x2c, 0x67, + 0x4f, 0xf4, 0x89, 0xbc, 0xbe, 0xa3, 0x4e, 0x53, 0xdf, 0x8e, 0xa3, 0x71, 0x92, 0x1e, 0xdd, 0x80, + 0x19, 0xc3, 0x37, 0xf7, 0x2d, 0x4a, 0x4c, 0xda, 0xf5, 0x85, 0xc9, 0xd4, 0x2e, 0x9e, 0x57, 0x35, + 0x1c, 0x8e, 0x51, 0x96, 0x09, 0x2c, 0x34, 0xb7, 0xeb, 0xf8, 0x61, 0xaf, 0xb3, 0xbe, 0x95, 0x81, + 0xc5, 0x26, 0xab, 0x6f, 0x40, 0x89, 0x43, 0x6b, 0x86, 0x79, 0xb0, 0xe6, 0xb4, 0xd1, 0x26, 0xe4, + 0x4c, 0x3b, 0x90, 0xd1, 0xc2, 0xf0, 0x89, 0x24, 0x9f, 0x88, 0x95, 0xdc, 0xf5, 0x8d, 0x56, 0x6d, + 0xf2, 0xe4, 0x78, 0x25, 0x57, 0xdf, 0x68, 0x61, 0x26, 0x07, 0xad, 0x43, 0x96, 0x04, 0x23, 0x2f, + 0xd9, 0xe3, 0xd2, 0xd6, 0x5a, 0xe2, 0x59, 0x94, 0xb5, 0x16, 0xce, 0x92, 0xa0, 0xfc, 0xcd, 0x2c, + 0xcc, 0x47, 0xfa, 0xae, 0x1d, 0x12, 0x87, 0x8e, 0xe7, 0xb0, 0x9d, 0xb6, 0x2a, 0x18, 0x7e, 0xd8, + 0x2e, 0xa1, 0xe1, 0xc0, 0xd5, 0xc1, 0xe7, 0x12, 0xab, 0x83, 0xeb, 0xa9, 0x25, 0x9f, 0xbe, 0x4a, + 0xf8, 0xdb, 0x0c, 0x5c, 0x48, 0x70, 0x8c, 0x21, 0x24, 0xbc, 0x1b, 0x0f, 0x09, 0x5f, 0x4c, 0x5b, + 0xa9, 0x01, 0xa1, 0xe1, 0xd7, 0xb3, 0x3d, 0x95, 0x19, 0x5f, 0x56, 0xe0, 0xa7, 0x60, 0xd1, 0x4b, + 0x4e, 0x93, 0x91, 0x9f, 0xdf, 0xee, 0x99, 0x60, 0xea, 0x29, 0x9c, 0xde, 0xb9, 0x87, 0x7b, 0xcb, + 0xd1, 0x13, 0x0a, 0xf9, 0x21, 0x29, 0x89, 0x7f, 0xcd, 0xc2, 0xc5, 0xbe, 0x63, 0xe4, 0x51, 0x56, + 0xe2, 0x4c, 0xb3, 0x12, 0xbf, 0x95, 0x05, 0x68, 0xfa, 0x6e, 0x87, 0xd0, 0x7d, 0xd2, 0x1d, 0xc7, + 0x13, 0x26, 0x9f, 0x8e, 0x99, 0xa0, 0xe1, 0x01, 0x54, 0xa4, 0xdc, 0x40, 0xeb, 0xf3, 0x99, 0x84, + 0xf5, 0xb9, 0x9a, 0x46, 0xe8, 0xe9, 0x86, 0xe7, 0x2f, 0x33, 0x30, 0x17, 0x11, 0x8f, 0xc1, 0xe6, + 0x34, 0xe3, 0x36, 0xe7, 0xb9, 0x14, 0x55, 0x19, 0x98, 0xf0, 0x5c, 0x8a, 0x68, 0x30, 0xe9, 0xb8, + 0x94, 0x47, 0xa3, 0xe8, 0x39, 0x98, 0x7a, 0xcb, 0xb7, 0xc4, 0x87, 0x7e, 0x40, 0xec, 0x8d, 0x10, + 0x88, 0x23, 0x3c, 0x5b, 0x8a, 0xf9, 0xc4, 0x68, 0x73, 0xda, 0x2c, 0xa7, 0x9d, 0x11, 0x77, 0x2a, + 0x04, 0x0c, 0x2b, 0x6c, 0xf9, 0xb7, 0x27, 0xf4, 0x16, 0x3b, 0x8f, 0xe9, 0x4e, 0x14, 0x00, 0x04, + 0xdd, 0x9d, 0x28, 0xaa, 0x1c, 0xed, 0x19, 0x82, 0x78, 0xa5, 0x2a, 0x2d, 0x25, 0x21, 0x71, 0x3e, + 0x3c, 0x42, 0x60, 0xad, 0x18, 0xe4, 0xc3, 0xac, 0xaf, 0x1a, 0x9f, 0x04, 0x81, 0x9c, 0xed, 0x1f, + 0x4a, 0x51, 0x6e, 0xd4, 0x79, 0x51, 0x10, 0x8c, 0x75, 0x99, 0x38, 0x5e, 0x04, 0xbf, 0x58, 0xee, + 0x52, 0x6b, 0xf7, 0x48, 0x9e, 0x33, 0x94, 0xf1, 0x6c, 0x74, 0xb1, 0x5c, 0x47, 0xe2, 0x38, 0x2d, + 0xda, 0x85, 0x29, 0x5f, 0x3d, 0x17, 0x34, 0x39, 0xa2, 0xb2, 0xea, 0x46, 0x0d, 0xf9, 0x62, 0xd7, + 0xf2, 0x49, 0x87, 0x38, 0x54, 0x5b, 0xf4, 0x44, 0x8f, 0x04, 0x45, 0xa2, 0x59, 0x7f, 0xfb, 0x5d, + 0xe7, 0xb6, 0x23, 0x1e, 0x9d, 0xe3, 0xe1, 0x6d, 0x31, 0xea, 0x6f, 0x1c, 0xa1, 0xb0, 0x4e, 0x87, + 0x36, 0xe1, 0x82, 0x61, 0x13, 0x9f, 0x62, 0xe2, 0x11, 0x83, 0xf2, 0xd7, 0xf3, 0x0e, 0x0d, 0x5b, + 0x06, 0xb6, 0xea, 0x15, 0xb2, 0x6a, 0x2f, 0x09, 0xee, 0xc7, 0xc7, 0x86, 0xcf, 0x5b, 0x16, 0xdd, + 0xdf, 0x6a, 0x36, 0x78, 0x6c, 0x5b, 0x8c, 0x86, 0xcf, 0x1b, 0x02, 0x8c, 0x43, 0xfc, 0xf2, 0xc7, + 0x60, 0x3e, 0xd1, 0xf9, 0xa9, 0xd6, 0xda, 0xbf, 0x9e, 0x87, 0x85, 0xa4, 0xfd, 0x79, 0xe4, 0xd4, + 0xce, 0xd2, 0xa9, 0xa1, 0x6e, 0x6c, 0x82, 0x4f, 0x8c, 0x78, 0xa7, 0x3d, 0xd9, 0x29, 0x69, 0xa7, + 0xf8, 0xbb, 0x1d, 0x18, 0x7f, 0x9e, 0x81, 0x62, 0x78, 0xb7, 0x6a, 0x0c, 0x8e, 0xf8, 0x76, 0xcc, + 0x11, 0xbf, 0x30, 0xc2, 0xd4, 0x16, 0xaa, 0x0d, 0xfc, 0x7f, 0x9f, 0xef, 0x65, 0x60, 0x26, 0x24, + 0x1a, 0x83, 0xa7, 0xdc, 0x8a, 0x7b, 0xca, 0x67, 0x47, 0xae, 0xc0, 0x00, 0x3f, 0xf9, 0xb5, 0x6c, + 0xa4, 0xfe, 0x83, 0xb9, 0x2d, 0xfd, 0x39, 0x92, 0xec, 0x88, 0xcf, 0x91, 0x3c, 0x60, 0xa2, 0xf6, + 0x3d, 0x90, 0xeb, 0xfa, 0xb6, 0x8c, 0xa2, 0xd5, 0x41, 0xe8, 0xbb, 0x78, 0x03, 0x33, 0x38, 0x73, + 0xd7, 0xdd, 0x40, 0x8a, 0x14, 0xe9, 0x8f, 0x99, 0x30, 0xc7, 0xba, 0xa5, 0x72, 0xac, 0x5b, 0xc9, + 0x1c, 0xeb, 0x44, 0x44, 0xd9, 0x9b, 0x63, 0x2d, 0xff, 0x67, 0x0e, 0x96, 0xfa, 0x99, 0x77, 0x74, + 0x04, 0x13, 0xb6, 0xd5, 0xb1, 0xe4, 0x31, 0xf3, 0x51, 0x66, 0x5a, 0x3f, 0x31, 0x95, 0x0d, 0x2e, + 0x43, 0xcc, 0xb4, 0x4b, 0x2a, 0x4b, 0xca, 0x81, 0x3d, 0x0f, 0xfa, 0xc8, 0x02, 0xd1, 0xcf, 0xf0, + 0x07, 0xc7, 0xbf, 0xd8, 0x25, 0x01, 0x0d, 0xc7, 0x41, 0xfd, 0xc1, 0x4a, 0xc7, 0x52, 0x4a, 0xe2, + 0x7d, 0xa5, 0x10, 0xdc, 0xfb, 0xbe, 0x52, 0x58, 0xec, 0xb2, 0x05, 0xd3, 0x9a, 0xea, 0x0f, 0xf5, + 0x7d, 0x9f, 0x03, 0x98, 0x8d, 0xe9, 0xf9, 0x50, 0x9f, 0xf7, 0xb1, 0x61, 0xb1, 0x27, 0x1f, 0xc2, + 0xe6, 0x84, 0xed, 0xee, 0xb5, 0x48, 0x9f, 0x39, 0xb1, 0x21, 0xe1, 0x58, 0x51, 0x30, 0xaf, 0x46, + 0x5d, 0xcf, 0x32, 0x55, 0x6a, 0x50, 0x79, 0xb5, 0x3b, 0x02, 0x8c, 0x43, 0x7c, 0xf9, 0xdb, 0x59, + 0x58, 0x48, 0x26, 0x4c, 0xde, 0xe5, 0x2b, 0x74, 0x1f, 0x80, 0x09, 0xfe, 0x4f, 0x72, 0x24, 0xe9, + 0xf5, 0x5a, 0x1c, 0x8a, 0x25, 0x16, 0xad, 0xc2, 0x94, 0xe5, 0xb4, 0xc9, 0x3d, 0x3e, 0x5b, 0xf2, + 0xf1, 0x6c, 0xd4, 0x7a, 0x88, 0xc0, 0x11, 0x0d, 0x2b, 0x9a, 0xcd, 0x9f, 0x70, 0x66, 0x85, 0x45, + 0xb3, 0xd9, 0x85, 0x39, 0x86, 0x35, 0x53, 0x62, 0x56, 0xa9, 0x66, 0xea, 0xb3, 0x7b, 0xc1, 0x22, + 0x20, 0xc2, 0x8f, 0xc1, 0x34, 0x8c, 0x23, 0x11, 0x6b, 0x15, 0xb4, 0x08, 0x28, 0x42, 0x61, 0x9d, + 0xae, 0xdc, 0x00, 0x71, 0x5f, 0x81, 0x19, 0x83, 0x43, 0xd5, 0x4e, 0xca, 0x18, 0x6c, 0xaf, 0x37, + 0x31, 0x83, 0xa3, 0xa7, 0x21, 0x7f, 0xe8, 0x5b, 0x6d, 0xd9, 0x52, 0xfc, 0x75, 0x89, 0x6d, 0xbc, + 0xde, 0xc0, 0x1c, 0x5a, 0xfe, 0xc3, 0x2c, 0xcc, 0xdd, 0x31, 0x3c, 0x2f, 0xba, 0xf0, 0x3f, 0x06, + 0xdf, 0x73, 0x37, 0xe6, 0x7b, 0x86, 0x1f, 0x53, 0x89, 0x2b, 0x38, 0x70, 0x21, 0xf8, 0xff, 0x13, + 0x0b, 0xc1, 0x0f, 0xa5, 0x15, 0x7c, 0xfa, 0x62, 0xf0, 0x9d, 0x0c, 0xa0, 0x38, 0xc3, 0x18, 0xdc, + 0xdc, 0x9d, 0xb8, 0x9b, 0x5b, 0x4d, 0x59, 0xa5, 0x01, 0xce, 0xee, 0x37, 0x32, 0xb0, 0x1c, 0x27, + 0x3c, 0x2f, 0x47, 0x1b, 0x7f, 0xbf, 0xa7, 0x91, 0xcf, 0xe5, 0x91, 0x99, 0x1f, 0x67, 0x61, 0xa9, + 0xdf, 0xe0, 0x79, 0x14, 0xc9, 0x9f, 0x69, 0x7a, 0x0a, 0x43, 0xec, 0x02, 0xd5, 0x30, 0x53, 0xf7, + 0x0c, 0x14, 0x0e, 0x35, 0xaf, 0xa0, 0xc6, 0xfe, 0x36, 0x77, 0x0b, 0x02, 0x57, 0xfe, 0x6a, 0x06, + 0xc2, 0x97, 0x9b, 0xd1, 0x2a, 0xe4, 0x3b, 0x6e, 0xbb, 0xe7, 0x7f, 0x5c, 0x36, 0xdd, 0x36, 0x7f, + 0xb2, 0x4d, 0x92, 0xb1, 0x4f, 0xcc, 0x09, 0xd1, 0xe7, 0xa0, 0x18, 0x50, 0xdf, 0xa0, 0x64, 0xef, + 0x68, 0xe4, 0xff, 0x42, 0x94, 0x52, 0x5a, 0x92, 0x2f, 0x1a, 0xb9, 0x21, 0x04, 0x2b, 0x99, 0xe5, + 0xbf, 0xc9, 0xc0, 0x7c, 0x82, 0x1e, 0xbd, 0x09, 0xd0, 0x31, 0xee, 0xdd, 0x75, 0x7c, 0x62, 0xb4, + 0x8f, 0x86, 0x5a, 0xe4, 0x2e, 0xb5, 0xec, 0x8a, 0xf8, 0x37, 0xd4, 0xca, 0xba, 0x43, 0x6f, 0xfb, + 0x2d, 0xea, 0x5b, 0xce, 0x9e, 0xd8, 0xdf, 0xde, 0x54, 0x72, 0xb0, 0x26, 0x13, 0x61, 0x78, 0xbc, + 0xed, 0x1b, 0x96, 0xb3, 0xe5, 0xb6, 0x49, 0x8d, 0xec, 0xba, 0x3e, 0x91, 0x3a, 0xc8, 0xd7, 0xec, + 0xf9, 0x4b, 0x6d, 0x8d, 0xbe, 0x14, 0x78, 0x00, 0x27, 0xdf, 0xe1, 0xd8, 0x76, 0xed, 0x6e, 0x87, + 0x34, 0x88, 0xe9, 0x8e, 0xeb, 0x7f, 0x2a, 0xd3, 0xee, 0x70, 0x24, 0x34, 0x3c, 0xc3, 0x1d, 0x8e, + 0xa4, 0xe4, 0xe1, 0x3b, 0x1c, 0x09, 0x8e, 0xf3, 0xb8, 0xc3, 0x91, 0x50, 0x71, 0xd0, 0xdf, 0x4e, + 0x66, 0x7b, 0x2a, 0x73, 0x2e, 0x13, 0x81, 0x57, 0x61, 0xfa, 0x90, 0xab, 0x79, 0xe7, 0xc8, 0x23, + 0xe1, 0x51, 0x63, 0xfe, 0xc6, 0xc9, 0x76, 0x04, 0xc6, 0x3a, 0x0d, 0x7a, 0x1d, 0x16, 0xdf, 0x72, + 0xfd, 0x03, 0xdb, 0x35, 0xda, 0xd5, 0x76, 0xc7, 0x0a, 0xd4, 0x33, 0x91, 0xc5, 0x68, 0x2f, 0xe4, + 0x8d, 0x24, 0x01, 0xee, 0xe5, 0x29, 0x7f, 0x27, 0x0f, 0x17, 0xfb, 0x0e, 0x91, 0x74, 0x1e, 0x24, + 0x56, 0x81, 0xec, 0x83, 0x56, 0x20, 0x97, 0xbe, 0x02, 0x03, 0xff, 0x76, 0x33, 0xff, 0xee, 0xff, + 0x76, 0xb3, 0xf0, 0x00, 0xfe, 0x70, 0x22, 0x85, 0x3f, 0x9c, 0x3c, 0x13, 0x7f, 0x58, 0x1c, 0xbf, + 0x3f, 0xac, 0x5d, 0x79, 0xe7, 0x47, 0x97, 0x1e, 0xfb, 0xfe, 0x8f, 0x2e, 0x3d, 0xf6, 0x83, 0x1f, + 0x5d, 0x7a, 0xec, 0x4b, 0x27, 0x97, 0x32, 0xef, 0x9c, 0x5c, 0xca, 0x7c, 0xff, 0xe4, 0x52, 0xe6, + 0x07, 0x27, 0x97, 0x32, 0xff, 0x7c, 0x72, 0x29, 0xf3, 0xe5, 0x7f, 0xb9, 0xf4, 0xd8, 0x67, 0xb3, + 0x87, 0x57, 0xff, 0x37, 0x00, 0x00, 0xff, 0xff, 0x2d, 0x0a, 0x87, 0x40, 0xa8, 0x7c, 0x00, 0x00, } func (m *AddonSpec) Marshal() (dAtA []byte, err error) { @@ -4747,7 +4848,7 @@ func (m *ClusterFeature) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } -func (m *ClusterList) Marshal() (dAtA []byte, err error) { +func (m *ClusterGroupAPIResourceItem) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -4757,44 +4858,80 @@ func (m *ClusterList) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *ClusterList) MarshalTo(dAtA []byte) (int, error) { +func (m *ClusterGroupAPIResourceItem) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *ClusterList) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *ClusterGroupAPIResourceItem) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int _ = l - if len(m.Items) > 0 { - for iNdEx := len(m.Items) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.Items[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintGenerated(dAtA, i, uint64(size)) - } + if len(m.Categories) > 0 { + for iNdEx := len(m.Categories) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.Categories[iNdEx]) + copy(dAtA[i:], m.Categories[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Categories[iNdEx]))) i-- - dAtA[i] = 0x12 + dAtA[i] = 0x4a } } - { - size, err := m.ListMeta.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err + if len(m.ShortNames) > 0 { + for iNdEx := len(m.ShortNames) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.ShortNames[iNdEx]) + copy(dAtA[i:], m.ShortNames[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.ShortNames[iNdEx]))) + i-- + dAtA[i] = 0x42 } - i -= size - i = encodeVarintGenerated(dAtA, i, uint64(size)) } + if len(m.Verbs) > 0 { + for iNdEx := len(m.Verbs) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.Verbs[iNdEx]) + copy(dAtA[i:], m.Verbs[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Verbs[iNdEx]))) + i-- + dAtA[i] = 0x3a + } + } + i -= len(m.Kind) + copy(dAtA[i:], m.Kind) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Kind))) + i-- + dAtA[i] = 0x32 + i -= len(m.Version) + copy(dAtA[i:], m.Version) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Version))) + i-- + dAtA[i] = 0x2a + i -= len(m.Group) + copy(dAtA[i:], m.Group) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Group))) + i-- + dAtA[i] = 0x22 + i-- + if m.Namespaced { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x18 + i -= len(m.SingularName) + copy(dAtA[i:], m.SingularName) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.SingularName))) + i-- + dAtA[i] = 0x12 + i -= len(m.Name) + copy(dAtA[i:], m.Name) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Name))) i-- dAtA[i] = 0xa return len(dAtA) - i, nil } -func (m *ClusterMachine) Marshal() (dAtA []byte, err error) { +func (m *ClusterGroupAPIResourceItems) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -4804,20 +4941,20 @@ func (m *ClusterMachine) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *ClusterMachine) MarshalTo(dAtA []byte) (int, error) { +func (m *ClusterGroupAPIResourceItems) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *ClusterMachine) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *ClusterGroupAPIResourceItems) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int _ = l - if len(m.Taints) > 0 { - for iNdEx := len(m.Taints) - 1; iNdEx >= 0; iNdEx-- { + if len(m.APIResources) > 0 { + for iNdEx := len(m.APIResources) - 1; iNdEx >= 0; iNdEx-- { { - size, err := m.Taints[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + size, err := m.APIResources[iNdEx].MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } @@ -4825,7 +4962,153 @@ func (m *ClusterMachine) MarshalToSizedBuffer(dAtA []byte) (int, error) { i = encodeVarintGenerated(dAtA, i, uint64(size)) } i-- - dAtA[i] = 0x42 + dAtA[i] = 0x1a + } + } + i -= len(m.GroupVersion) + copy(dAtA[i:], m.GroupVersion) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.GroupVersion))) + i-- + dAtA[i] = 0x12 + { + size, err := m.ObjectMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *ClusterGroupAPIResourceItemsList) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ClusterGroupAPIResourceItemsList) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ClusterGroupAPIResourceItemsList) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.ListMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + if len(m.Items) > 0 { + for iNdEx := len(m.Items) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Items[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + } + return len(dAtA) - i, nil +} + +func (m *ClusterList) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ClusterList) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ClusterList) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Items) > 0 { + for iNdEx := len(m.Items) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Items[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + } + { + size, err := m.ListMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *ClusterMachine) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ClusterMachine) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ClusterMachine) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Taints) > 0 { + for iNdEx := len(m.Taints) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Taints[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x42 } } if len(m.Labels) > 0 { @@ -9564,6 +9847,80 @@ func (m *ClusterFeature) Size() (n int) { return n } +func (m *ClusterGroupAPIResourceItem) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Name) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.SingularName) + n += 1 + l + sovGenerated(uint64(l)) + n += 2 + l = len(m.Group) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Version) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Kind) + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Verbs) > 0 { + for _, s := range m.Verbs { + l = len(s) + n += 1 + l + sovGenerated(uint64(l)) + } + } + if len(m.ShortNames) > 0 { + for _, s := range m.ShortNames { + l = len(s) + n += 1 + l + sovGenerated(uint64(l)) + } + } + if len(m.Categories) > 0 { + for _, s := range m.Categories { + l = len(s) + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *ClusterGroupAPIResourceItems) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.ObjectMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.GroupVersion) + n += 1 + l + sovGenerated(uint64(l)) + if len(m.APIResources) > 0 { + for _, e := range m.APIResources { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *ClusterGroupAPIResourceItemsList) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.Items) > 0 { + for _, e := range m.Items { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + l = m.ListMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + return n +} + func (m *ClusterList) Size() (n int) { if m == nil { return 0 @@ -11498,6 +11855,57 @@ func (this *ClusterFeature) String() string { }, "") return s } +func (this *ClusterGroupAPIResourceItem) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ClusterGroupAPIResourceItem{`, + `Name:` + fmt.Sprintf("%v", this.Name) + `,`, + `SingularName:` + fmt.Sprintf("%v", this.SingularName) + `,`, + `Namespaced:` + fmt.Sprintf("%v", this.Namespaced) + `,`, + `Group:` + fmt.Sprintf("%v", this.Group) + `,`, + `Version:` + fmt.Sprintf("%v", this.Version) + `,`, + `Kind:` + fmt.Sprintf("%v", this.Kind) + `,`, + `Verbs:` + fmt.Sprintf("%v", this.Verbs) + `,`, + `ShortNames:` + fmt.Sprintf("%v", this.ShortNames) + `,`, + `Categories:` + fmt.Sprintf("%v", this.Categories) + `,`, + `}`, + }, "") + return s +} +func (this *ClusterGroupAPIResourceItems) String() string { + if this == nil { + return "nil" + } + repeatedStringForAPIResources := "[]ClusterGroupAPIResourceItem{" + for _, f := range this.APIResources { + repeatedStringForAPIResources += strings.Replace(strings.Replace(f.String(), "ClusterGroupAPIResourceItem", "ClusterGroupAPIResourceItem", 1), `&`, ``, 1) + "," + } + repeatedStringForAPIResources += "}" + s := strings.Join([]string{`&ClusterGroupAPIResourceItems{`, + `ObjectMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ObjectMeta), "ObjectMeta", "v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `GroupVersion:` + fmt.Sprintf("%v", this.GroupVersion) + `,`, + `APIResources:` + repeatedStringForAPIResources + `,`, + `}`, + }, "") + return s +} +func (this *ClusterGroupAPIResourceItemsList) String() string { + if this == nil { + return "nil" + } + repeatedStringForItems := "[]ClusterGroupAPIResourceItems{" + for _, f := range this.Items { + repeatedStringForItems += strings.Replace(strings.Replace(f.String(), "ClusterGroupAPIResourceItems", "ClusterGroupAPIResourceItems", 1), `&`, ``, 1) + "," + } + repeatedStringForItems += "}" + s := strings.Join([]string{`&ClusterGroupAPIResourceItemsList{`, + `Items:` + repeatedStringForItems + `,`, + `ListMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ListMeta), "ListMeta", "v1.ListMeta", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} func (this *ClusterList) String() string { if this == nil { return "nil" @@ -17211,6 +17619,607 @@ func (m *ClusterFeature) Unmarshal(dAtA []byte) error { } return nil } +func (m *ClusterGroupAPIResourceItem) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ClusterGroupAPIResourceItem: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ClusterGroupAPIResourceItem: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Name = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SingularName", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.SingularName = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Namespaced", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.Namespaced = bool(v != 0) + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Group", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Group = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Version", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Version = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 6: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Kind", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Kind = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 7: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Verbs", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Verbs = append(m.Verbs, string(dAtA[iNdEx:postIndex])) + iNdEx = postIndex + case 8: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ShortNames", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ShortNames = append(m.ShortNames, string(dAtA[iNdEx:postIndex])) + iNdEx = postIndex + case 9: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Categories", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Categories = append(m.Categories, string(dAtA[iNdEx:postIndex])) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ClusterGroupAPIResourceItems) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ClusterGroupAPIResourceItems: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ClusterGroupAPIResourceItems: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ObjectMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ObjectMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field GroupVersion", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.GroupVersion = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field APIResources", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.APIResources = append(m.APIResources, ClusterGroupAPIResourceItem{}) + if err := m.APIResources[len(m.APIResources)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ClusterGroupAPIResourceItemsList) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ClusterGroupAPIResourceItemsList: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ClusterGroupAPIResourceItemsList: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Items", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Items = append(m.Items, ClusterGroupAPIResourceItems{}) + if err := m.Items[len(m.Items)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ListMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ListMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} func (m *ClusterList) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 diff --git a/api/platform/v1/generated.proto b/api/platform/v1/generated.proto index 2e9df8ee3..3a28c5cf8 100644 --- a/api/platform/v1/generated.proto +++ b/api/platform/v1/generated.proto @@ -398,6 +398,62 @@ message ClusterFeature { optional Upgrade upgrade = 22; } +// ClusterGroupAPIResourceItem specifies the name of a resource and whether it is namespaced. +message ClusterGroupAPIResourceItem { + // name is the plural name of the resource. + optional string name = 1; + + // singularName is the singular name of the resource. This allows clients to handle plural and singular opaquely. + // The singularName is more correct for reporting status on a single item and both singular and plural are allowed + // from the kubectl CLI interface. + optional string singularName = 2; + + // namespaced indicates if a resource is namespaced or not. + optional bool namespaced = 3; + + // group is the preferred group of the resource. Empty implies the group of the containing resource list. + // For subresources, this may have a different value, for example: Scale". + optional string group = 4; + + // version is the preferred version of the resource. Empty implies the version of the containing resource list + // For subresources, this may have a different value, for example: v1 (while inside a v1beta1 version of the core resource's group)". + optional string version = 5; + + // kind is the kind for the resource (e.g. 'Foo' is the kind for a resource 'foo') + optional string kind = 6; + + // verbs is a list of supported kube verbs (this includes get, list, watch, create, + // update, patch, delete, deletecollection, and proxy) + repeated string verbs = 7; + + // shortNames is a list of suggested short names of the resource. + repeated string shortNames = 8; + + // categories is a list of the grouped resources this resource belongs to (e.g. 'all') + repeated string categories = 9; +} + +// ClusterGroupAPIResourceItems contains the GKV for the current kubernetes cluster +message ClusterGroupAPIResourceItems { + // +optional + optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; + + // groupVersion is the group and version this APIResourceList is for. + optional string groupVersion = 2; + + // resources contains the name of the resources and if they are namespaced. + repeated ClusterGroupAPIResourceItem apiResources = 3; +} + +// ClusterGroupAPIResourceItemsList is the whole list of all ClusterAPIResource. +message ClusterGroupAPIResourceItemsList { + // +optional + optional k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 3; + + // List of ClusterGroupAPIResourceItems + repeated ClusterGroupAPIResourceItems items = 2; +} + // ClusterList is the whole list of all clusters which owned by a tenant. message ClusterList { // +optional diff --git a/api/platform/v1/register.go b/api/platform/v1/register.go index 898cf6e68..34d151eeb 100644 --- a/api/platform/v1/register.go +++ b/api/platform/v1/register.go @@ -106,6 +106,9 @@ func addKnownTypes(scheme *runtime.Scheme) error { &LBCF{}, &LBCFList{}, &LBCFProxyOptions{}, + + &ClusterGroupAPIResourceItems{}, + &ClusterGroupAPIResourceItemsList{}, ) metav1.AddToGroupVersion(scheme, SchemeGroupVersion) return nil diff --git a/api/platform/v1/types.go b/api/platform/v1/types.go index 6353d15d4..7e800bb22 100644 --- a/api/platform/v1/types.go +++ b/api/platform/v1/types.go @@ -1716,3 +1716,58 @@ type LBCFStatus struct { // +optional LastReInitializingTimestamp metav1.Time `json:"lastReInitializingTimestamp" protobuf:"bytes,5,name=lastReInitializingTimestamp"` } + +// +genclient:nonNamespaced +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// ClusterGroupAPIResourceItemsList is the whole list of all ClusterAPIResource. +type ClusterGroupAPIResourceItemsList struct { + metav1.TypeMeta `json:",inline"` + // +optional + metav1.ListMeta `json:"metadata,omitempty" protobuf:"bytes,3,opt,name=metadata"` + // List of ClusterGroupAPIResourceItems + Items []ClusterGroupAPIResourceItems `protobuf:"bytes,2,rep,name=items"` +} + +// +genclient +// +genclient:nonNamespaced +// +genclient:onlyVerbs=list,get +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// ClusterGroupAPIResourceItems contains the GKV for the current kubernetes cluster +type ClusterGroupAPIResourceItems struct { + metav1.TypeMeta `json:",inline"` + // +optional + metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + // groupVersion is the group and version this APIResourceList is for. + GroupVersion string `json:"groupVersion" protobuf:"bytes,2,opt,name=groupVersion"` + // resources contains the name of the resources and if they are namespaced. + APIResources []ClusterGroupAPIResourceItem `json:"apiResources" protobuf:"bytes,3,rep,name=apiResources"` +} + +// ClusterGroupAPIResourceItem specifies the name of a resource and whether it is namespaced. +type ClusterGroupAPIResourceItem struct { + // name is the plural name of the resource. + Name string `protobuf:"bytes,1,opt,name=name"` + // singularName is the singular name of the resource. This allows clients to handle plural and singular opaquely. + // The singularName is more correct for reporting status on a single item and both singular and plural are allowed + // from the kubectl CLI interface. + SingularName string `protobuf:"bytes,2,opt,name=singularName"` + // namespaced indicates if a resource is namespaced or not. + Namespaced bool `protobuf:"varint,3,opt,name=namespaced"` + // group is the preferred group of the resource. Empty implies the group of the containing resource list. + // For subresources, this may have a different value, for example: Scale". + Group string `protobuf:"bytes,4,opt,name=group"` + // version is the preferred version of the resource. Empty implies the version of the containing resource list + // For subresources, this may have a different value, for example: v1 (while inside a v1beta1 version of the core resource's group)". + Version string `protobuf:"bytes,5,opt,name=version"` + // kind is the kind for the resource (e.g. 'Foo' is the kind for a resource 'foo') + Kind string `protobuf:"bytes,6,opt,name=kind"` + // verbs is a list of supported kube verbs (this includes get, list, watch, create, + // update, patch, delete, deletecollection, and proxy) + Verbs []string `protobuf:"bytes,7,rep,name=verbs"` + // shortNames is a list of suggested short names of the resource. + ShortNames []string `protobuf:"bytes,8,rep,name=shortNames"` + // categories is a list of the grouped resources this resource belongs to (e.g. 'all') + Categories []string `protobuf:"bytes,9,rep,name=categories"` +} diff --git a/api/platform/v1/types_swagger_doc_generated.go b/api/platform/v1/types_swagger_doc_generated.go index 68ba5d5e4..7805f2859 100644 --- a/api/platform/v1/types_swagger_doc_generated.go +++ b/api/platform/v1/types_swagger_doc_generated.go @@ -235,6 +235,42 @@ func (ClusterFeature) SwaggerDoc() map[string]string { return map_ClusterFeature } +var map_ClusterGroupAPIResourceItem = map[string]string{ + "": "ClusterGroupAPIResourceItem specifies the name of a resource and whether it is namespaced.", + "Name": "name is the plural name of the resource.", + "SingularName": "singularName is the singular name of the resource. This allows clients to handle plural and singular opaquely. The singularName is more correct for reporting status on a single item and both singular and plural are allowed from the kubectl CLI interface.", + "Namespaced": "namespaced indicates if a resource is namespaced or not.", + "Group": "group is the preferred group of the resource. Empty implies the group of the containing resource list. For subresources, this may have a different value, for example: Scale\".", + "Version": "version is the preferred version of the resource. Empty implies the version of the containing resource list For subresources, this may have a different value, for example: v1 (while inside a v1beta1 version of the core resource's group)\".", + "Kind": "kind is the kind for the resource (e.g. 'Foo' is the kind for a resource 'foo')", + "Verbs": "verbs is a list of supported kube verbs (this includes get, list, watch, create, update, patch, delete, deletecollection, and proxy)", + "ShortNames": "shortNames is a list of suggested short names of the resource.", + "Categories": "categories is a list of the grouped resources this resource belongs to (e.g. 'all')", +} + +func (ClusterGroupAPIResourceItem) SwaggerDoc() map[string]string { + return map_ClusterGroupAPIResourceItem +} + +var map_ClusterGroupAPIResourceItems = map[string]string{ + "": "ClusterGroupAPIResourceItems contains the GKV for the current kubernetes cluster", + "groupVersion": "groupVersion is the group and version this APIResourceList is for.", + "apiResources": "resources contains the name of the resources and if they are namespaced.", +} + +func (ClusterGroupAPIResourceItems) SwaggerDoc() map[string]string { + return map_ClusterGroupAPIResourceItems +} + +var map_ClusterGroupAPIResourceItemsList = map[string]string{ + "": "ClusterGroupAPIResourceItemsList is the whole list of all ClusterAPIResource.", + "Items": "List of ClusterGroupAPIResourceItems", +} + +func (ClusterGroupAPIResourceItemsList) SwaggerDoc() map[string]string { + return map_ClusterGroupAPIResourceItemsList +} + var map_ClusterList = map[string]string{ "": "ClusterList is the whole list of all clusters which owned by a tenant.", "items": "List of clusters", diff --git a/api/platform/v1/zz_generated.conversion.go b/api/platform/v1/zz_generated.conversion.go index f85acdaf2..1416269cc 100644 --- a/api/platform/v1/zz_generated.conversion.go +++ b/api/platform/v1/zz_generated.conversion.go @@ -290,6 +290,36 @@ func RegisterConversions(s *runtime.Scheme) error { }); err != nil { return err } + if err := s.AddGeneratedConversionFunc((*ClusterGroupAPIResourceItem)(nil), (*platform.ClusterGroupAPIResourceItem)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1_ClusterGroupAPIResourceItem_To_platform_ClusterGroupAPIResourceItem(a.(*ClusterGroupAPIResourceItem), b.(*platform.ClusterGroupAPIResourceItem), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*platform.ClusterGroupAPIResourceItem)(nil), (*ClusterGroupAPIResourceItem)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_platform_ClusterGroupAPIResourceItem_To_v1_ClusterGroupAPIResourceItem(a.(*platform.ClusterGroupAPIResourceItem), b.(*ClusterGroupAPIResourceItem), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*ClusterGroupAPIResourceItems)(nil), (*platform.ClusterGroupAPIResourceItems)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1_ClusterGroupAPIResourceItems_To_platform_ClusterGroupAPIResourceItems(a.(*ClusterGroupAPIResourceItems), b.(*platform.ClusterGroupAPIResourceItems), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*platform.ClusterGroupAPIResourceItems)(nil), (*ClusterGroupAPIResourceItems)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_platform_ClusterGroupAPIResourceItems_To_v1_ClusterGroupAPIResourceItems(a.(*platform.ClusterGroupAPIResourceItems), b.(*ClusterGroupAPIResourceItems), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*ClusterGroupAPIResourceItemsList)(nil), (*platform.ClusterGroupAPIResourceItemsList)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1_ClusterGroupAPIResourceItemsList_To_platform_ClusterGroupAPIResourceItemsList(a.(*ClusterGroupAPIResourceItemsList), b.(*platform.ClusterGroupAPIResourceItemsList), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*platform.ClusterGroupAPIResourceItemsList)(nil), (*ClusterGroupAPIResourceItemsList)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_platform_ClusterGroupAPIResourceItemsList_To_v1_ClusterGroupAPIResourceItemsList(a.(*platform.ClusterGroupAPIResourceItemsList), b.(*ClusterGroupAPIResourceItemsList), scope) + }); err != nil { + return err + } if err := s.AddGeneratedConversionFunc((*ClusterList)(nil), (*platform.ClusterList)(nil), func(a, b interface{}, scope conversion.Scope) error { return Convert_v1_ClusterList_To_platform_ClusterList(a.(*ClusterList), b.(*platform.ClusterList), scope) }); err != nil { @@ -1738,6 +1768,88 @@ func Convert_platform_ClusterFeature_To_v1_ClusterFeature(in *platform.ClusterFe return autoConvert_platform_ClusterFeature_To_v1_ClusterFeature(in, out, s) } +func autoConvert_v1_ClusterGroupAPIResourceItem_To_platform_ClusterGroupAPIResourceItem(in *ClusterGroupAPIResourceItem, out *platform.ClusterGroupAPIResourceItem, s conversion.Scope) error { + out.Name = in.Name + out.SingularName = in.SingularName + out.Namespaced = in.Namespaced + out.Group = in.Group + out.Version = in.Version + out.Kind = in.Kind + out.Verbs = *(*[]string)(unsafe.Pointer(&in.Verbs)) + out.ShortNames = *(*[]string)(unsafe.Pointer(&in.ShortNames)) + out.Categories = *(*[]string)(unsafe.Pointer(&in.Categories)) + return nil +} + +// Convert_v1_ClusterGroupAPIResourceItem_To_platform_ClusterGroupAPIResourceItem is an autogenerated conversion function. +func Convert_v1_ClusterGroupAPIResourceItem_To_platform_ClusterGroupAPIResourceItem(in *ClusterGroupAPIResourceItem, out *platform.ClusterGroupAPIResourceItem, s conversion.Scope) error { + return autoConvert_v1_ClusterGroupAPIResourceItem_To_platform_ClusterGroupAPIResourceItem(in, out, s) +} + +func autoConvert_platform_ClusterGroupAPIResourceItem_To_v1_ClusterGroupAPIResourceItem(in *platform.ClusterGroupAPIResourceItem, out *ClusterGroupAPIResourceItem, s conversion.Scope) error { + out.Name = in.Name + out.SingularName = in.SingularName + out.Namespaced = in.Namespaced + out.Group = in.Group + out.Version = in.Version + out.Kind = in.Kind + out.Verbs = *(*[]string)(unsafe.Pointer(&in.Verbs)) + out.ShortNames = *(*[]string)(unsafe.Pointer(&in.ShortNames)) + out.Categories = *(*[]string)(unsafe.Pointer(&in.Categories)) + return nil +} + +// Convert_platform_ClusterGroupAPIResourceItem_To_v1_ClusterGroupAPIResourceItem is an autogenerated conversion function. +func Convert_platform_ClusterGroupAPIResourceItem_To_v1_ClusterGroupAPIResourceItem(in *platform.ClusterGroupAPIResourceItem, out *ClusterGroupAPIResourceItem, s conversion.Scope) error { + return autoConvert_platform_ClusterGroupAPIResourceItem_To_v1_ClusterGroupAPIResourceItem(in, out, s) +} + +func autoConvert_v1_ClusterGroupAPIResourceItems_To_platform_ClusterGroupAPIResourceItems(in *ClusterGroupAPIResourceItems, out *platform.ClusterGroupAPIResourceItems, s conversion.Scope) error { + out.ObjectMeta = in.ObjectMeta + out.GroupVersion = in.GroupVersion + out.APIResources = *(*[]platform.ClusterGroupAPIResourceItem)(unsafe.Pointer(&in.APIResources)) + return nil +} + +// Convert_v1_ClusterGroupAPIResourceItems_To_platform_ClusterGroupAPIResourceItems is an autogenerated conversion function. +func Convert_v1_ClusterGroupAPIResourceItems_To_platform_ClusterGroupAPIResourceItems(in *ClusterGroupAPIResourceItems, out *platform.ClusterGroupAPIResourceItems, s conversion.Scope) error { + return autoConvert_v1_ClusterGroupAPIResourceItems_To_platform_ClusterGroupAPIResourceItems(in, out, s) +} + +func autoConvert_platform_ClusterGroupAPIResourceItems_To_v1_ClusterGroupAPIResourceItems(in *platform.ClusterGroupAPIResourceItems, out *ClusterGroupAPIResourceItems, s conversion.Scope) error { + out.ObjectMeta = in.ObjectMeta + out.GroupVersion = in.GroupVersion + out.APIResources = *(*[]ClusterGroupAPIResourceItem)(unsafe.Pointer(&in.APIResources)) + return nil +} + +// Convert_platform_ClusterGroupAPIResourceItems_To_v1_ClusterGroupAPIResourceItems is an autogenerated conversion function. +func Convert_platform_ClusterGroupAPIResourceItems_To_v1_ClusterGroupAPIResourceItems(in *platform.ClusterGroupAPIResourceItems, out *ClusterGroupAPIResourceItems, s conversion.Scope) error { + return autoConvert_platform_ClusterGroupAPIResourceItems_To_v1_ClusterGroupAPIResourceItems(in, out, s) +} + +func autoConvert_v1_ClusterGroupAPIResourceItemsList_To_platform_ClusterGroupAPIResourceItemsList(in *ClusterGroupAPIResourceItemsList, out *platform.ClusterGroupAPIResourceItemsList, s conversion.Scope) error { + out.ListMeta = in.ListMeta + out.Items = *(*[]platform.ClusterGroupAPIResourceItems)(unsafe.Pointer(&in.Items)) + return nil +} + +// Convert_v1_ClusterGroupAPIResourceItemsList_To_platform_ClusterGroupAPIResourceItemsList is an autogenerated conversion function. +func Convert_v1_ClusterGroupAPIResourceItemsList_To_platform_ClusterGroupAPIResourceItemsList(in *ClusterGroupAPIResourceItemsList, out *platform.ClusterGroupAPIResourceItemsList, s conversion.Scope) error { + return autoConvert_v1_ClusterGroupAPIResourceItemsList_To_platform_ClusterGroupAPIResourceItemsList(in, out, s) +} + +func autoConvert_platform_ClusterGroupAPIResourceItemsList_To_v1_ClusterGroupAPIResourceItemsList(in *platform.ClusterGroupAPIResourceItemsList, out *ClusterGroupAPIResourceItemsList, s conversion.Scope) error { + out.ListMeta = in.ListMeta + out.Items = *(*[]ClusterGroupAPIResourceItems)(unsafe.Pointer(&in.Items)) + return nil +} + +// Convert_platform_ClusterGroupAPIResourceItemsList_To_v1_ClusterGroupAPIResourceItemsList is an autogenerated conversion function. +func Convert_platform_ClusterGroupAPIResourceItemsList_To_v1_ClusterGroupAPIResourceItemsList(in *platform.ClusterGroupAPIResourceItemsList, out *ClusterGroupAPIResourceItemsList, s conversion.Scope) error { + return autoConvert_platform_ClusterGroupAPIResourceItemsList_To_v1_ClusterGroupAPIResourceItemsList(in, out, s) +} + func autoConvert_v1_ClusterList_To_platform_ClusterList(in *ClusterList, out *platform.ClusterList, s conversion.Scope) error { out.ListMeta = in.ListMeta if in.Items != nil { diff --git a/api/platform/v1/zz_generated.deepcopy.go b/api/platform/v1/zz_generated.deepcopy.go index 87eb67795..b2bcff43a 100644 --- a/api/platform/v1/zz_generated.deepcopy.go +++ b/api/platform/v1/zz_generated.deepcopy.go @@ -738,6 +738,103 @@ func (in *ClusterFeature) DeepCopy() *ClusterFeature { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ClusterGroupAPIResourceItem) DeepCopyInto(out *ClusterGroupAPIResourceItem) { + *out = *in + if in.Verbs != nil { + in, out := &in.Verbs, &out.Verbs + *out = make([]string, len(*in)) + copy(*out, *in) + } + if in.ShortNames != nil { + in, out := &in.ShortNames, &out.ShortNames + *out = make([]string, len(*in)) + copy(*out, *in) + } + if in.Categories != nil { + in, out := &in.Categories, &out.Categories + *out = make([]string, len(*in)) + copy(*out, *in) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ClusterGroupAPIResourceItem. +func (in *ClusterGroupAPIResourceItem) DeepCopy() *ClusterGroupAPIResourceItem { + if in == nil { + return nil + } + out := new(ClusterGroupAPIResourceItem) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ClusterGroupAPIResourceItems) DeepCopyInto(out *ClusterGroupAPIResourceItems) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + if in.APIResources != nil { + in, out := &in.APIResources, &out.APIResources + *out = make([]ClusterGroupAPIResourceItem, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ClusterGroupAPIResourceItems. +func (in *ClusterGroupAPIResourceItems) DeepCopy() *ClusterGroupAPIResourceItems { + if in == nil { + return nil + } + out := new(ClusterGroupAPIResourceItems) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *ClusterGroupAPIResourceItems) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ClusterGroupAPIResourceItemsList) DeepCopyInto(out *ClusterGroupAPIResourceItemsList) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]ClusterGroupAPIResourceItems, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ClusterGroupAPIResourceItemsList. +func (in *ClusterGroupAPIResourceItemsList) DeepCopy() *ClusterGroupAPIResourceItemsList { + if in == nil { + return nil + } + out := new(ClusterGroupAPIResourceItemsList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *ClusterGroupAPIResourceItemsList) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *ClusterList) DeepCopyInto(out *ClusterList) { *out = *in diff --git a/api/platform/zz_generated.deepcopy.go b/api/platform/zz_generated.deepcopy.go index 0b21b7d81..6d10a30fe 100644 --- a/api/platform/zz_generated.deepcopy.go +++ b/api/platform/zz_generated.deepcopy.go @@ -737,6 +737,103 @@ func (in *ClusterFeature) DeepCopy() *ClusterFeature { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ClusterGroupAPIResourceItem) DeepCopyInto(out *ClusterGroupAPIResourceItem) { + *out = *in + if in.Verbs != nil { + in, out := &in.Verbs, &out.Verbs + *out = make([]string, len(*in)) + copy(*out, *in) + } + if in.ShortNames != nil { + in, out := &in.ShortNames, &out.ShortNames + *out = make([]string, len(*in)) + copy(*out, *in) + } + if in.Categories != nil { + in, out := &in.Categories, &out.Categories + *out = make([]string, len(*in)) + copy(*out, *in) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ClusterGroupAPIResourceItem. +func (in *ClusterGroupAPIResourceItem) DeepCopy() *ClusterGroupAPIResourceItem { + if in == nil { + return nil + } + out := new(ClusterGroupAPIResourceItem) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ClusterGroupAPIResourceItems) DeepCopyInto(out *ClusterGroupAPIResourceItems) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + if in.APIResources != nil { + in, out := &in.APIResources, &out.APIResources + *out = make([]ClusterGroupAPIResourceItem, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ClusterGroupAPIResourceItems. +func (in *ClusterGroupAPIResourceItems) DeepCopy() *ClusterGroupAPIResourceItems { + if in == nil { + return nil + } + out := new(ClusterGroupAPIResourceItems) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *ClusterGroupAPIResourceItems) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ClusterGroupAPIResourceItemsList) DeepCopyInto(out *ClusterGroupAPIResourceItemsList) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]ClusterGroupAPIResourceItems, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ClusterGroupAPIResourceItemsList. +func (in *ClusterGroupAPIResourceItemsList) DeepCopy() *ClusterGroupAPIResourceItemsList { + if in == nil { + return nil + } + out := new(ClusterGroupAPIResourceItemsList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *ClusterGroupAPIResourceItemsList) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *ClusterList) DeepCopyInto(out *ClusterList) { *out = *in diff --git a/pkg/platform/registry/cluster/storage/api_resources.go b/pkg/platform/registry/cluster/storage/api_resources.go new file mode 100644 index 000000000..64e4dc548 --- /dev/null +++ b/pkg/platform/registry/cluster/storage/api_resources.go @@ -0,0 +1,97 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ + +package storage + +import ( + "context" + "k8s.io/apimachinery/pkg/api/errors" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apiserver/pkg/registry/generic/registry" + "k8s.io/apiserver/pkg/registry/rest" + "k8s.io/client-go/discovery" + platforminternalclient "tkestack.io/tke/api/client/clientset/internalversion/typed/platform/internalversion" + "tkestack.io/tke/api/platform" + "tkestack.io/tke/pkg/platform/proxy" + "tkestack.io/tke/pkg/platform/util" +) + +// APIResourcesREST implement bucket call interface for cluster. +type APIResourcesREST struct { + rest.Storage + store *registry.Store + platformClient platforminternalclient.PlatformInterface +} + +func (r *APIResourcesREST) New() runtime.Object { + return &platform.ClusterGroupAPIResourceItems{} +} + +// Get finds a resource in the storage by name and returns it. +func (r *APIResourcesREST) Get(ctx context.Context, clusterName string, options runtime.Object) (runtime.Object, error) { + clusterObject, err := r.store.Get(ctx, clusterName, &metav1.GetOptions{}) + if err != nil { + return nil, err + } + cluster := clusterObject.(*platform.Cluster) + if err := util.FilterCluster(ctx, cluster); err != nil { + return nil, err + } + + config, err := proxy.GetConfig(ctx, r.platformClient) + if err != nil { + return nil, errors.NewInternalError(err) + } + + discoveryclient, err := discovery.NewDiscoveryClientForConfig(config) + if err != nil { + return nil, err + } + lists, err := discoveryclient.ServerPreferredResources() + if err != nil { + return nil, err + } + items := make([]platform.ClusterGroupAPIResourceItems, 0) + for _, list := range lists { + if len(list.APIResources) == 0 { + continue + } + apiResources := make([]platform.ClusterGroupAPIResourceItem, 0) + for _, groupResource := range list.APIResources { + apiResources = append(apiResources, platform.ClusterGroupAPIResourceItem{ + Name: groupResource.Name, + SingularName: groupResource.SingularName, + Namespaced: groupResource.Namespaced, + Group: groupResource.Group, + Version: groupResource.Version, + Kind: groupResource.Kind, + Verbs: groupResource.Verbs, + ShortNames: groupResource.ShortNames, + Categories: groupResource.Categories, + }) + } + items = append(items, platform.ClusterGroupAPIResourceItems{ + GroupVersion: list.GroupVersion, + APIResources: apiResources, + }) + } + return &platform.ClusterGroupAPIResourceItemsList{ + Items: items, + }, nil +} diff --git a/pkg/platform/registry/cluster/storage/storage.go b/pkg/platform/registry/cluster/storage/storage.go index d3a5f12f7..a5b4fc8b0 100644 --- a/pkg/platform/registry/cluster/storage/storage.go +++ b/pkg/platform/registry/cluster/storage/storage.go @@ -63,6 +63,7 @@ type Storage struct { LBCFBackendRecord *LBCFBackendRecordREST Drain *DrainREST Proxy *ProxyREST + APIResources *APIResourcesREST } // NewStorage returns a Storage object that will work against clusters. @@ -166,6 +167,10 @@ func NewStorage(optsGetter genericregistry.RESTOptionsGetter, platformClient pla host: host, platformClient: platformClient, }, + APIResources: &APIResourcesREST{ + store: store, + platformClient: platformClient, + }, } } diff --git a/pkg/platform/registry/rest/rest.go b/pkg/platform/registry/rest/rest.go index c79bdd1de..d72d33d14 100644 --- a/pkg/platform/registry/rest/rest.go +++ b/pkg/platform/registry/rest/rest.go @@ -84,6 +84,7 @@ func (s *StorageProvider) v1Storage(apiResourceConfigSource serverstorage.APIRes storageMap["clusters/drain"] = clusterREST.Drain storageMap["clusters/proxy"] = clusterREST.Proxy storageMap["clusters/apply"] = clusterREST.Apply + storageMap["clusters/apiresources"] = clusterREST.APIResources storageMap["clusters/helm"] = clusterREST.Helm storageMap["clusters/tapps"] = clusterREST.TappController storageMap["clusters/csis"] = clusterREST.CSI From 083b789770c65a472f1150cd223ca9156ca35132 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=88=98=E7=A5=9E=E8=A5=BF=E7=BA=A2=E6=9F=BF?= <34213033+TomatoAres@users.noreply.github.com> Date: Fri, 13 Aug 2021 10:51:43 +0800 Subject: [PATCH 06/62] fix(platform): fix test e2e failed (#1477) 1. add platformAPIClientConfig 2. add namespace in tke-platform-api 3. modify validate spec logic Co-authored-by: Cui Shuaijie --- .../provider/baremetal/cluster/provider.go | 2 +- .../provider/baremetal/conf/config.yaml | 1 + .../provider/baremetal/validation/cluster.go | 25 ++++++++++++++----- .../tke-platform-api/tke-platform-api.yaml | 2 +- test/e2e/platform/platform_test.go | 14 +++++------ test/e2e/tke/tke.go | 13 ++++------ 6 files changed, 34 insertions(+), 23 deletions(-) diff --git a/pkg/platform/provider/baremetal/cluster/provider.go b/pkg/platform/provider/baremetal/cluster/provider.go index c9767bf60..a9bfcaa39 100644 --- a/pkg/platform/provider/baremetal/cluster/provider.go +++ b/pkg/platform/provider/baremetal/cluster/provider.go @@ -26,6 +26,7 @@ import ( "k8s.io/apimachinery/pkg/util/validation/field" "k8s.io/apiserver/pkg/server/mux" "k8s.io/client-go/tools/clientcmd" + platformv1client "tkestack.io/tke/api/client/clientset/versioned/typed/platform/v1" "tkestack.io/tke/api/platform" "tkestack.io/tke/pkg/platform/provider/baremetal/config" @@ -179,7 +180,6 @@ func NewProvider() (*Provider, error) { } } } - return p, nil } diff --git a/pkg/platform/provider/baremetal/conf/config.yaml b/pkg/platform/provider/baremetal/conf/config.yaml index 5506dca3b..7bb027160 100644 --- a/pkg/platform/provider/baremetal/conf/config.yaml +++ b/pkg/platform/provider/baremetal/conf/config.yaml @@ -1,3 +1,4 @@ +platformAPIClientConfig: conf/tke-platform-config.yaml registry: prefix: docker.io/tkestack ip: "" diff --git a/pkg/platform/provider/baremetal/validation/cluster.go b/pkg/platform/provider/baremetal/validation/cluster.go index 8d527a434..697fe34dc 100644 --- a/pkg/platform/provider/baremetal/validation/cluster.go +++ b/pkg/platform/provider/baremetal/validation/cluster.go @@ -24,12 +24,13 @@ import ( "net" "strings" + k8serror "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/util/validation/field" - "tkestack.io/tke/api/platform" - netutils "k8s.io/utils/net" + platformv1client "tkestack.io/tke/api/client/clientset/versioned/typed/platform/v1" + "tkestack.io/tke/api/platform" platformv1 "tkestack.io/tke/api/platform/v1" csioperatorimage "tkestack.io/tke/pkg/platform/provider/baremetal/phases/csioperator/images" "tkestack.io/tke/pkg/platform/provider/baremetal/phases/gpu" @@ -38,6 +39,7 @@ import ( vendor "tkestack.io/tke/pkg/platform/util/kubevendor" "tkestack.io/tke/pkg/spec" "tkestack.io/tke/pkg/util/ipallocator" + "tkestack.io/tke/pkg/util/log" "tkestack.io/tke/pkg/util/validation" utilvalidation "tkestack.io/tke/pkg/util/validation" ) @@ -98,15 +100,26 @@ func ValidateClusterSpecVersion(platformClient platformv1client.PlatformV1Interf } func getK8sValidVersions(platformClient platformv1client.PlatformV1Interface, clsName string) (validVersions []string, err error) { - k8sValidVersions := []string{} if clsName == "global" || platformClient == nil { return spec.K8sVersions, nil } - client, err := util.BuildExternalClientSetWithName(context.Background(), platformClient, "global") + + cluster, err := platformClient.Clusters().Get(context.Background(), "global", metav1.GetOptions{}) if err != nil { - return k8sValidVersions, err + if k8serror.IsNotFound(err) { + log.Warnf("global cluster is not exist") + + return spec.K8sVersions, nil + } + return nil, err } - _, k8sValidVersions, err = util.GetPlatformVersionsFromClusterInfo(context.Background(), client) + + client, err := util.BuildExternalClientSet(context.Background(), cluster, platformClient) + if err != nil { + return nil, err + } + + _, k8sValidVersions, err := util.GetPlatformVersionsFromClusterInfo(context.Background(), client) return k8sValidVersions, err } diff --git a/test/e2e/manifests/tke-platform-api/tke-platform-api.yaml b/test/e2e/manifests/tke-platform-api/tke-platform-api.yaml index d231aca50..910288551 100644 --- a/test/e2e/manifests/tke-platform-api/tke-platform-api.yaml +++ b/test/e2e/manifests/tke-platform-api/tke-platform-api.yaml @@ -83,7 +83,7 @@ data: - name: tke cluster: insecure-skip-tls-verify: true - server: https://tke-platform-api + server: https://tke-platform-api.{{ .Namespace }} users: - name: admin-cert user: diff --git a/test/e2e/platform/platform_test.go b/test/e2e/platform/platform_test.go index ad603ad76..d2d56689c 100644 --- a/test/e2e/platform/platform_test.go +++ b/test/e2e/platform/platform_test.go @@ -23,23 +23,23 @@ import ( "errors" "time" - "tkestack.io/tke/pkg/platform/apiserver/cluster" - "tkestack.io/tke/test/e2e/tke" - tke2 "tkestack.io/tke/test/tke" - "tkestack.io/tke/test/util" - "tkestack.io/tke/test/util/cloudprovider/tencent" - "tkestack.io/tke/test/util/env" - . "github.com/onsi/ginkgo" . "github.com/onsi/gomega" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + tkeclientset "tkestack.io/tke/api/client/clientset/versioned" platformv1 "tkestack.io/tke/api/platform/v1" + "tkestack.io/tke/pkg/platform/apiserver/cluster" _ "tkestack.io/tke/pkg/platform/provider/baremetal/cluster" _ "tkestack.io/tke/pkg/platform/provider/baremetal/machine" _ "tkestack.io/tke/pkg/platform/provider/imported/cluster" _ "tkestack.io/tke/pkg/platform/provider/registered/cluster" + "tkestack.io/tke/test/e2e/tke" + tke2 "tkestack.io/tke/test/tke" + "tkestack.io/tke/test/util" "tkestack.io/tke/test/util/cloudprovider" + "tkestack.io/tke/test/util/cloudprovider/tencent" + "tkestack.io/tke/test/util/env" ) const namespacePrefix = "platform-" diff --git a/test/e2e/tke/tke.go b/test/e2e/tke/tke.go index 303c1f7d2..c1ac51cdf 100644 --- a/test/e2e/tke/tke.go +++ b/test/e2e/tke/tke.go @@ -26,20 +26,17 @@ import ( "os" "time" - "k8s.io/klog" - - "github.com/onsi/gomega" - - "tkestack.io/tke/cmd/tke-installer/app/installer/types" - - "tkestack.io/tke/test/e2e" - "github.com/onsi/ginkgo" + "github.com/onsi/gomega" corev1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/util/wait" "k8s.io/client-go/kubernetes" + "k8s.io/klog" + + "tkestack.io/tke/cmd/tke-installer/app/installer/types" "tkestack.io/tke/pkg/util/apiclient" + "tkestack.io/tke/test/e2e" "tkestack.io/tke/test/e2e/certs" testclient "tkestack.io/tke/test/util/client" "tkestack.io/tke/test/util/env" From d528044d65fcf476feea84098f9029044cb1057d Mon Sep 17 00:00:00 2001 From: Leo Ryu Date: Fri, 13 Aug 2021 11:25:32 +0800 Subject: [PATCH 07/62] Revert "Revert "fix(platform): delete machine failed & move machine operation to provider (#1435)" (#1451)" (#1478) This reverts commit cad879c9cf5540e4c89309c8ef95900553760c8a. --- .../controller/cluster/cluster_controller.go | 4 +- .../cluster/deletion/cluster_deleter.go | 29 +-------- .../machine/deletion/machine_deleter.go | 56 +++--------------- .../controller/machine/machine_controller.go | 5 ++ .../provider/baremetal/cluster/delete.go | 46 +++++++++++++++ .../provider/baremetal/cluster/provider.go | 1 + .../provider/baremetal/machine/delete.go | 59 +++++++++++++++++++ .../provider/baremetal/machine/provider.go | 3 + 8 files changed, 126 insertions(+), 77 deletions(-) create mode 100644 pkg/platform/provider/baremetal/machine/delete.go diff --git a/pkg/platform/controller/cluster/cluster_controller.go b/pkg/platform/controller/cluster/cluster_controller.go index 9d0e294a3..9d1bf216d 100644 --- a/pkg/platform/controller/cluster/cluster_controller.go +++ b/pkg/platform/controller/cluster/cluster_controller.go @@ -152,7 +152,7 @@ func (c *Controller) needsUpdate(old *platformv1.Cluster, new *platformv1.Cluste return true } - if old.Status.Phase == platformv1.ClusterRunning && new.Status.Phase == platformv1.ClusterTerminating { + if old.Status.Phase != platformv1.ClusterTerminating && new.Status.Phase == platformv1.ClusterTerminating { return true } @@ -281,7 +281,7 @@ func (c *Controller) reconcile(ctx context.Context, key string, cluster *platfor log.FromContext(ctx).Info("Cluster has been terminated. Attempting to cleanup resources") err = c.deleter.Delete(ctx, key) if err == nil { - log.FromContext(ctx).Info("Machine has been successfully deleted") + log.FromContext(ctx).Info("Cluster has been successfully deleted") } default: log.FromContext(ctx).Info("unknown cluster phase", "status.phase", cluster.Status.Phase) diff --git a/pkg/platform/controller/cluster/deletion/cluster_deleter.go b/pkg/platform/controller/cluster/deletion/cluster_deleter.go index ff4cdb80c..472dc2147 100644 --- a/pkg/platform/controller/cluster/deletion/cluster_deleter.go +++ b/pkg/platform/controller/cluster/deletion/cluster_deleter.go @@ -24,9 +24,9 @@ import ( "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/fields" utilerrors "k8s.io/apimachinery/pkg/util/errors" "k8s.io/apimachinery/pkg/util/sets" + v1clientset "tkestack.io/tke/api/client/clientset/versioned/typed/platform/v1" platformv1 "tkestack.io/tke/api/platform/v1" clusterprovider "tkestack.io/tke/pkg/platform/provider/cluster" @@ -244,7 +244,6 @@ var deleteResourceFuncs = []deleteResourceFunc{ deleteIPAM, deleteTappControllers, deleteClusterProvider, - deleteMachine, } // deleteAllContent will use the client to delete each resource identified in cluster. @@ -433,29 +432,3 @@ func deleteClusterCredential(ctx context.Context, deleter *clusterDeleter, clust return nil } */ - -func deleteMachine(ctx context.Context, deleter *clusterDeleter, cluster *platformv1.Cluster) error { - log.FromContext(ctx).Info("deleteMachine doing") - - fieldSelector := fields.OneTermEqualSelector("spec.clusterName", cluster.Name).String() - machineList, err := deleter.platformClient.Machines().List(ctx, metav1.ListOptions{FieldSelector: fieldSelector}) - if err != nil { - return err - } - if len(machineList.Items) == 0 { - return nil - } - background := metav1.DeletePropagationForeground - deleteOpt := metav1.DeleteOptions{PropagationPolicy: &background} - for _, machine := range machineList.Items { - if err := deleter.platformClient.Machines().Delete(ctx, machine.Name, deleteOpt); err != nil { - if !errors.IsNotFound(err) { - return err - } - } - } - - log.FromContext(ctx).Info("deleteMachine done") - - return nil -} diff --git a/pkg/platform/controller/machine/deletion/machine_deleter.go b/pkg/platform/controller/machine/deletion/machine_deleter.go index 758ac8736..1e138fb37 100644 --- a/pkg/platform/controller/machine/deletion/machine_deleter.go +++ b/pkg/platform/controller/machine/deletion/machine_deleter.go @@ -26,12 +26,11 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" utilerrors "k8s.io/apimachinery/pkg/util/errors" "k8s.io/apimachinery/pkg/util/sets" + v1clientset "tkestack.io/tke/api/client/clientset/versioned/typed/platform/v1" - platformv1 "tkestack.io/tke/api/platform/v1" v1 "tkestack.io/tke/api/platform/v1" clusterprovider "tkestack.io/tke/pkg/platform/provider/cluster" machineprovider "tkestack.io/tke/pkg/platform/provider/machine" - "tkestack.io/tke/pkg/util/apiclient" "tkestack.io/tke/pkg/util/log" ) @@ -101,7 +100,7 @@ func (d *machineDeleter) Delete(ctx context.Context, name string) error { // ensure that the status is up to date on the machine // if we get a not found error, we assume the machine is truly gone - machine, err = d.retryOnConflictError(machine, d.updateMachineStatusFunc) + machine, err = d.retryOnConflictError(ctx, machine, d.updateMachineStatusFunc) if err != nil { if errors.IsNotFound(err) { return nil @@ -126,7 +125,7 @@ func (d *machineDeleter) Delete(ctx context.Context, name string) error { } // we have removed content, so mark it finalized by us - machine, err = d.retryOnConflictError(machine, d.finalizeMachine) + machine, err = d.retryOnConflictError(ctx, machine, d.finalizeMachine) if err != nil { // in normal practice, this should not be possible, but if a deployment is running // two controllers to do machine deletion that share a common finalizer token it's @@ -159,15 +158,15 @@ func (d *machineDeleter) deleteMachine(machine *v1.Machine) error { } // updateMachineFunc is a function that makes an update to a namespace -type updateMachineFunc func(machine *v1.Machine) (*v1.Machine, error) +type updateMachineFunc func(ctx context.Context, machine *v1.Machine) (*v1.Machine, error) // retryOnConflictError retries the specified fn if there was a conflict error // it will return an error if the UID for an object changes across retry operations. // TODO RetryOnConflict should be a generic concept in client code -func (d *machineDeleter) retryOnConflictError(machine *v1.Machine, fn updateMachineFunc) (result *v1.Machine, err error) { +func (d *machineDeleter) retryOnConflictError(ctx context.Context, machine *v1.Machine, fn updateMachineFunc) (result *v1.Machine, err error) { latestMachine := machine for { - result, err = fn(latestMachine) + result, err = fn(ctx, latestMachine) if err == nil { return result, nil } @@ -186,7 +185,7 @@ func (d *machineDeleter) retryOnConflictError(machine *v1.Machine, fn updateMach } // updateMachineStatusFunc will verify that the status of the machine is correct -func (d *machineDeleter) updateMachineStatusFunc(machine *v1.Machine) (*v1.Machine, error) { +func (d *machineDeleter) updateMachineStatusFunc(ctx context.Context, machine *v1.Machine) (*v1.Machine, error) { if machine.DeletionTimestamp.IsZero() || machine.Status.Phase == v1.MachineTerminating { return machine, nil } @@ -203,7 +202,7 @@ func finalized(machine *v1.Machine) bool { } // finalizeMachine removes the specified finalizerToken and finalizes the machine -func (d *machineDeleter) finalizeMachine(machine *v1.Machine) (*v1.Machine, error) { +func (d *machineDeleter) finalizeMachine(ctx context.Context, machine *v1.Machine) (*v1.Machine, error) { machineFinalize := v1.Machine{} machineFinalize.ObjectMeta = machine.ObjectMeta machineFinalize.Spec = machine.Spec @@ -225,7 +224,7 @@ func (d *machineDeleter) finalizeMachine(machine *v1.Machine) (*v1.Machine, erro Name(machineFinalize.Name). SubResource("finalize"). Body(&machineFinalize). - Do(context.Background()). + Do(ctx). Into(machine) if err != nil { @@ -241,7 +240,6 @@ type deleteResourceFunc func(ctx context.Context, deleter *machineDeleter, machi var deleteResourceFuncs = []deleteResourceFunc{ deleteMachineProvider, - deleteNode, } // deleteAllContent will use the client to delete each resource identified in machine. @@ -287,39 +285,3 @@ func deleteMachineProvider(ctx context.Context, deleter *machineDeleter, machine return nil } - -func deleteNode(ctx context.Context, deleter *machineDeleter, machine *v1.Machine) error { - log.FromContext(ctx).Info("deleteNode doing") - - cluster, err := clusterprovider.GetV1ClusterByName(context.Background(), deleter.platformClient, machine.Spec.ClusterName, clusterprovider.AdminUsername) - if err != nil { - return err - } - if cluster.Status.Phase == platformv1.ClusterTerminating { - return nil - } - clientset, err := cluster.Clientset() - if err != nil { - return err - } - - node, err := apiclient.GetNodeByMachineIP(ctx, clientset, machine.Spec.IP) - if err != nil { - if !errors.IsNotFound(err) { - return err - } - log.FromContext(ctx).Info("deleteNode done") - return nil - } - - err = clientset.CoreV1().Nodes().Delete(context.Background(), node.Name, metav1.DeleteOptions{}) - if err != nil { - if !errors.IsNotFound(err) { - return err - } - } - - log.FromContext(ctx).Info("deleteNode done") - - return nil -} diff --git a/pkg/platform/controller/machine/machine_controller.go b/pkg/platform/controller/machine/machine_controller.go index 60b27af0a..d53033382 100644 --- a/pkg/platform/controller/machine/machine_controller.go +++ b/pkg/platform/controller/machine/machine_controller.go @@ -34,6 +34,7 @@ import ( "k8s.io/client-go/tools/cache" "k8s.io/client-go/util/retry" "k8s.io/client-go/util/workqueue" + platformversionedclient "tkestack.io/tke/api/client/clientset/versioned/typed/platform/v1" platformv1informer "tkestack.io/tke/api/client/informers/externalversions/platform/v1" platformv1lister "tkestack.io/tke/api/client/listers/platform/v1" @@ -123,6 +124,10 @@ func (c *Controller) needsUpdate(oldMachine *platformv1.Machine, newMachine *pla return true } + if oldMachine.Status.Phase != platformv1.MachineTerminating && newMachine.Status.Phase == platformv1.MachineTerminating { + return true + } + // Control the synchronization interval through the health detection interval // to avoid version conflicts caused by concurrent modification healthCondition := newMachine.GetCondition(conditionTypeHealthCheck) diff --git a/pkg/platform/provider/baremetal/cluster/delete.go b/pkg/platform/provider/baremetal/cluster/delete.go index 982f439cf..746697a56 100644 --- a/pkg/platform/provider/baremetal/cluster/delete.go +++ b/pkg/platform/provider/baremetal/cluster/delete.go @@ -20,9 +20,14 @@ package cluster import ( "context" + "time" "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/fields" + "k8s.io/apimachinery/pkg/util/wait" + + platformv1client "tkestack.io/tke/api/client/clientset/versioned/typed/platform/v1" "tkestack.io/tke/pkg/platform/provider/baremetal/phases/kubeadm" "tkestack.io/tke/pkg/platform/provider/util/mark" typesv1 "tkestack.io/tke/pkg/platform/types/v1" @@ -75,3 +80,44 @@ func (p *Provider) EnsureRemoveNode(ctx context.Context, c *v1.Cluster) error { } return nil } + +func (p *Provider) EnsureRemoveMachine(ctx context.Context, c *v1.Cluster) error { + log.FromContext(ctx).Info("delete machine start") + fieldSelector := fields.OneTermEqualSelector("spec.clusterName", c.Name).String() + machineList, err := p.platformClient.Machines().List(ctx, metav1.ListOptions{FieldSelector: fieldSelector}) + if err != nil { + return err + } + if len(machineList.Items) == 0 { + return nil + } + for _, machine := range machineList.Items { + if err := p.platformClient.Machines().Delete(ctx, machine.Name, metav1.DeleteOptions{}); err != nil { + if errors.IsNotFound(err) { + return nil + } + return err + } + + if err = wait.PollImmediate(5*time.Second, 5*time.Minute, waitForMachineDelete(ctx, p.platformClient, machine.Name)); err != nil { + return err + } + } + + log.FromContext(ctx).Info("delete machine done") + + return nil +} + +func waitForMachineDelete(ctx context.Context, c platformv1client.PlatformV1Interface, machineName string) wait.ConditionFunc { + return func() (done bool, err error) { + + if _, err := c.Machines().Get(ctx, machineName, metav1.GetOptions{}); err != nil { + if errors.IsNotFound(err) { + return true, nil + } + } + + return false, nil + } +} diff --git a/pkg/platform/provider/baremetal/cluster/provider.go b/pkg/platform/provider/baremetal/cluster/provider.go index a9bfcaa39..4aff8e42e 100644 --- a/pkg/platform/provider/baremetal/cluster/provider.go +++ b/pkg/platform/provider/baremetal/cluster/provider.go @@ -154,6 +154,7 @@ func NewProvider() (*Provider, error) { p.EnsureRemoveNode, }, DeleteHandlers: []clusterprovider.Handler{ + p.EnsureRemoveMachine, p.EnsureCleanClusterMark, }, } diff --git a/pkg/platform/provider/baremetal/machine/delete.go b/pkg/platform/provider/baremetal/machine/delete.go new file mode 100644 index 000000000..d404e1f5b --- /dev/null +++ b/pkg/platform/provider/baremetal/machine/delete.go @@ -0,0 +1,59 @@ +package machine + +import ( + "context" + "time" + + "k8s.io/apimachinery/pkg/api/errors" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/util/wait" + "k8s.io/client-go/kubernetes" + + platformv1 "tkestack.io/tke/api/platform/v1" + typesv1 "tkestack.io/tke/pkg/platform/types/v1" + "tkestack.io/tke/pkg/util/apiclient" + "tkestack.io/tke/pkg/util/log" +) + +func (p *Provider) EnsureRemoveNode(ctx context.Context, machine *platformv1.Machine, cluster *typesv1.Cluster) error { + log.FromContext(ctx).Info("deleteNode doing") + + if cluster.Status.Phase == platformv1.ClusterTerminating { + return nil + } + + clientset, err := cluster.Clientset() + if err != nil { + return err + } + + node, err := apiclient.GetNodeByMachineIP(ctx, clientset, machine.Spec.IP) + if err != nil { + return err + } + err = clientset.CoreV1().Nodes().Delete(ctx, node.Name, metav1.DeleteOptions{}) + if err != nil { + if errors.IsNotFound(err) { + return nil + } + return err + } + if err = wait.PollImmediate(5*time.Second, 5*time.Minute, waitForNodeDelete(ctx, clientset, node.Name)); err != nil { + return err + } + + log.FromContext(ctx).Info("deleteNode done") + return nil +} + +func waitForNodeDelete(ctx context.Context, c kubernetes.Interface, nodeName string) wait.ConditionFunc { + return func() (done bool, err error) { + if _, err := c.CoreV1().Nodes().Get(ctx, nodeName, metav1.GetOptions{}); err != nil { + if errors.IsNotFound(err) { + return true, nil + } + } + + return false, nil + } +} diff --git a/pkg/platform/provider/baremetal/machine/provider.go b/pkg/platform/provider/baremetal/machine/provider.go index d816fd37c..330042b63 100644 --- a/pkg/platform/provider/baremetal/machine/provider.go +++ b/pkg/platform/provider/baremetal/machine/provider.go @@ -94,6 +94,9 @@ func NewProvider() (*Provider, error) { p.EnsureUpgrade, p.EnsurePostUpgradeHook, }, + DeleteHandlers: []machineprovider.Handler{ + p.EnsureRemoveNode, + }, } cfg, err := config.New(constants.ConfigFile) From 171672992966bca28940962692bcc714cd02de34 Mon Sep 17 00:00:00 2001 From: Chris Date: Fri, 13 Aug 2021 11:34:48 +0800 Subject: [PATCH 08/62] fix(platform): fix flannel iface (#1442) --- pkg/platform/provider/baremetal/phases/galaxy/galaxy.go | 8 +++++--- pkg/platform/provider/baremetal/phases/galaxy/template.go | 2 +- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/pkg/platform/provider/baremetal/phases/galaxy/galaxy.go b/pkg/platform/provider/baremetal/phases/galaxy/galaxy.go index 6e9a63595..9c80d14e6 100644 --- a/pkg/platform/provider/baremetal/phases/galaxy/galaxy.go +++ b/pkg/platform/provider/baremetal/phases/galaxy/galaxy.go @@ -87,7 +87,7 @@ func Install(ctx context.Context, clientset kubernetes.Interface, option *Option } } // Daemonset Flannel - flannelObj, err := daemonsetFlannel(option.Version) + flannelObj, err := daemonsetFlannel(option.NetDevice, option.Version) if err != nil { return err } @@ -164,9 +164,11 @@ func configMapGalaxy(netDevice string) ([]*corev1.ConfigMap, error) { return payloads, nil } -func daemonsetFlannel(version string) (*appsv1.DaemonSet, error) { +func daemonsetFlannel(netDevice string, version string) (*appsv1.DaemonSet, error) { imageName := images.Get(version).Flannel.FullName() - reader := strings.NewReader(strings.Replace(FlannelDaemonset, "{{ .Image }}", imageName, -1)) + flannelYaml := strings.Replace(FlannelDaemonset, "{{ .Image }}", imageName, -1) + flannelYaml = strings.Replace(flannelYaml, "{{ .IFace }}", netDevice, -1) + reader := strings.NewReader(flannelYaml) payload := &appsv1.DaemonSet{} err := yaml.NewYAMLOrJSONDecoder(reader, 4096).Decode(payload) if err != nil { diff --git a/pkg/platform/provider/baremetal/phases/galaxy/template.go b/pkg/platform/provider/baremetal/phases/galaxy/template.go index eaa3ec6bf..7f89ecb9b 100644 --- a/pkg/platform/provider/baremetal/phases/galaxy/template.go +++ b/pkg/platform/provider/baremetal/phases/galaxy/template.go @@ -180,7 +180,7 @@ spec: args: - --ip-masq - --kube-subnet-mgr - - --iface=$(HOST_IP) + - --iface={{ .IFace }} resources: requests: cpu: "100m" From 12c1a538cbd83ba9fa82c610a4cf5155d987d05f Mon Sep 17 00:00:00 2001 From: GaoXiaodong <13814823514@163.com> Date: Fri, 13 Aug 2021 14:10:18 +0800 Subject: [PATCH 09/62] fix(platform): compatible with certificate authentication (#1461) Co-authored-by: xdonggao --- .../registry/cluster/storage/proxy.go | 31 ++++++++++++++----- 1 file changed, 23 insertions(+), 8 deletions(-) diff --git a/pkg/platform/registry/cluster/storage/proxy.go b/pkg/platform/registry/cluster/storage/proxy.go index 669971f5a..76928f0c9 100644 --- a/pkg/platform/registry/cluster/storage/proxy.go +++ b/pkg/platform/registry/cluster/storage/proxy.go @@ -29,6 +29,8 @@ import ( "strconv" "strings" "time" + "tkestack.io/tke/pkg/apiserver/authentication" + "tkestack.io/tke/pkg/platform/proxy" "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" @@ -38,7 +40,6 @@ import ( platforminternalclient "tkestack.io/tke/api/client/clientset/internalversion/typed/platform/internalversion" "tkestack.io/tke/api/platform" "tkestack.io/tke/pkg/platform/apiserver/filter" - "tkestack.io/tke/pkg/platform/proxy" "tkestack.io/tke/pkg/platform/util" ) @@ -85,17 +86,27 @@ func (r *ProxyREST) Connect(ctx context.Context, clusterName string, opts runtim if err != nil { return nil, errors.NewInternalError(err) } - if config.BearerToken == "" { - return nil, errors.NewInternalError(fmt.Errorf("%s has NO BearerToken", clusterName)) - } + userName, tenantID := authentication.UsernameAndTenantID(ctx) uri, err := makeURL(config.Host, proxyOpts.Path) if err != nil { return nil, errors.NewBadRequest(err.Error()) } + TLSClientConfig := &tls.Config{} + TLSClientConfig.InsecureSkipVerify = true + + if config.TLSClientConfig.CertData != nil && config.TLSClientConfig.KeyData != nil { + cert, err := tls.X509KeyPair(config.TLSClientConfig.CertData, config.TLSClientConfig.KeyData) + if err != nil { + return nil, err + } + TLSClientConfig.Certificates = []tls.Certificate{cert} + } else if config.BearerToken == "" { + return nil, errors.NewInternalError(fmt.Errorf("%s has NO BearerToken", clusterName)) + } return &httputil.ReverseProxy{ - Director: makeDirector(cluster.ObjectMeta.Name, uri, config.BearerToken), + Director: makeDirector(cluster.ObjectMeta.Name, userName, tenantID, uri, config.BearerToken), Transport: &http.Transport{ DialContext: (&net.Dialer{ Timeout: 30 * time.Second, @@ -105,7 +116,7 @@ func (r *ProxyREST) Connect(ctx context.Context, clusterName string, opts runtim IdleConnTimeout: 90 * time.Second, TLSHandshakeTimeout: 10 * time.Second, ExpectContinueTimeout: 1 * time.Second, - TLSClientConfig: &tls.Config{InsecureSkipVerify: true}, + TLSClientConfig: TLSClientConfig, }, }, nil } @@ -115,10 +126,14 @@ func (r *ProxyREST) New() runtime.Object { return &platform.HelmProxyOptions{} } -func makeDirector(clusterName string, uri *url.URL, token string) func(req *http.Request) { +func makeDirector(clusterName, userName, tenantID string, uri *url.URL, token string) func(req *http.Request) { return func(req *http.Request) { req.Header.Set(filter.ClusterNameHeaderKey, clusterName) - req.Header.Set("Authorization", fmt.Sprintf("Bearer %s", token)) + req.Header.Set("X-Remote-User", userName) + req.Header.Set("X-Remote-Extra-TenantID", tenantID) + if token != "" { + req.Header.Set("Authorization", fmt.Sprintf("Bearer %s", token)) + } req.URL = uri } } From d9bd614ba6f125ac69d8a3b549656f70e9ec042f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=88=98=E7=A5=9E=E8=A5=BF=E7=BA=A2=E6=9F=BF?= <34213033+TomatoAres@users.noreply.github.com> Date: Fri, 13 Aug 2021 15:51:09 +0800 Subject: [PATCH 10/62] fix(platform): update csi images repo && csi-operator doc(#1414) (#1424) Co-authored-by: Cui Shuaijie --- hack/addon/readme/CSIOperator.md | 24 +++++++++++++++++-- .../addon/storage/csioperator/controller.go | 10 ++++---- 2 files changed, 28 insertions(+), 6 deletions(-) diff --git a/hack/addon/readme/CSIOperator.md b/hack/addon/readme/CSIOperator.md index c9c56bed0..8b193797d 100644 --- a/hack/addon/readme/CSIOperator.md +++ b/hack/addon/readme/CSIOperator.md @@ -1,6 +1,6 @@ # CSIOperator -## CSIOperator 介绍 +## CSIOperator 介绍 Container Storage Interface Operator(CSIOperator)用于部署和更新 Kubernetes 集群中的 CSI 驱动和外部存储组件。 @@ -31,6 +31,27 @@ CSIOperator 用于支持集群方便的使用存储资源,当前支持的存 4. 在弹出的扩展组件列表里,滑动列表窗口找到 CSIOperator 5. 单击【完成】进行安装 +### 镜像准备 + +当前支持的存储插件包括 RBD、CephFS、TencentCBS 和 TencentCFS(测试中,暂不支持), +针对不同的模式,依赖不同的 csi 镜像 + +由于支持版本较多,所有镜像都上传的话导致 `TKE Stack` 安装包太大,并且大部分并不会被使用, +因此 所有镜像均已上传 [公网 dockerhub](https://hub.docker.com/u/tkestack): + +| csi 类型及版本 |依赖的镜像及拉取命令| +|--------------|--------| +| CephRBD V0 |docker pull tkestack/csi-provisioner:v0.4.2
docker pull tkestack/csi-attacher:v0.4.2
docker pull tkestack/csi-snapshotter:v0.4.1
docker pull tkestack/livenessprobe:v0.4.1
docker pull tkestack/driver-registrar:v0.3.0
docker pull tkestack/rbdplugin:v0.3.0| +| CephRBD V1 |docker pull tkestack/csi-provisioner:v1.0.1
docker pull tkestack/csi-attacher:v1.1.0
docker pull tkestack/csi-snapshotter:v1.1.0
docker pull tkestack/livenessprobe:v1.1.0
docker pull tkestack/csi-node-driver-registrar:v1.1.0
docker pull tkestack/rbdplugin:v1.0.0| +| CephFS V0 |docker pull tkestack/csi-provisioner:v0.4.2
docker pull tkestack/csi-attacher:v0.4.2
docker pull tkestack/livenessprobe:v0.4.1
docker pull tkestack/driver-registrar:v0.3.0
docker pull tkestack/cephfsplugin:v0.3.0| +| CephFS V1 |docker pull tkestack/csi-provisioner:v1.0.1
docker pull tkestack/csi-attacher:v1.1.0
docker pull tkestack/livenessprobe:v1.1.0
docker pull tkestack/csi-node-driver-registrar:v1.1.0
docker pull tkestack/cephfsplugin:v1.0.0| +| TencentCBS V0 |docker pull tkestack/csi-provisioner:v1.0.1
docker pull tkestack/csi-attacher:v1.1.0
docker pull tkestack/driver-registrar:v0.3.0
docker pull tkestack/csi-tencentcloud-cbs:v0.2.1| +| TencentCBS V1 |docker pull tkestack/csi-provisioner:v1.2.0
docker pull tkestack/csi-attacher:v1.1.0
docker pull tkestack/csi-snapshotter:v1.2.2
docker pull tkestack/csi-node-driver-registrar:v1.1.0
docker pull tkestack/csi-tencentcloud-cbs:v1.0.0
docker pull tkestack/csi-resizer:v0.5.0| +| TencentCBS V1P1 |docker pull tkestack/csi-provisioner:v1.2.0
docker pull tkestack/csi-attacher:v1.1.0
docker pull tkestack/csi-snapshotter:v1.2.2
docker pull tkestack/csi-node-driver-registrar:v1.1.0
docker pull tkestack/csi-tencentcloud-cbs:v1.2.0
docker pull tkestack/csi-resizer:v0.5.0| + + +使用时 `csi-operator`根据配置的存储类型拉取所需的镜像 + ### 通过 CSIOperator 使用腾讯云存储资源 1. 登录 TKEStack @@ -92,4 +113,3 @@ CSIOperator 用于支持集群方便的使用存储资源,当前支持的存 详情请见 [CSIOperator Example](https://github.com/tkestack/csi-operator/blob/master/examples) - diff --git a/pkg/platform/controller/addon/storage/csioperator/controller.go b/pkg/platform/controller/addon/storage/csioperator/controller.go index 0a0567a88..d9906f060 100644 --- a/pkg/platform/controller/addon/storage/csioperator/controller.go +++ b/pkg/platform/controller/addon/storage/csioperator/controller.go @@ -25,8 +25,6 @@ import ( "sync" "time" - "tkestack.io/tke/pkg/platform/provider/baremetal/phases/csioperator/images" - appsv1 "k8s.io/api/apps/v1" corev1 "k8s.io/api/core/v1" rbacv1 "k8s.io/api/rbac/v1" @@ -40,14 +38,15 @@ import ( "k8s.io/client-go/kubernetes" "k8s.io/client-go/tools/cache" "k8s.io/client-go/util/workqueue" + clientset "tkestack.io/tke/api/client/clientset/versioned" platformv1informer "tkestack.io/tke/api/client/informers/externalversions/platform/v1" platformv1lister "tkestack.io/tke/api/client/listers/platform/v1" v1 "tkestack.io/tke/api/platform/v1" controllerutil "tkestack.io/tke/pkg/controller" storageutil "tkestack.io/tke/pkg/platform/controller/addon/storage/util" + "tkestack.io/tke/pkg/platform/provider/baremetal/phases/csioperator/images" "tkestack.io/tke/pkg/platform/util" - containerregistryutil "tkestack.io/tke/pkg/util/containerregistry" "tkestack.io/tke/pkg/util/log" "tkestack.io/tke/pkg/util/metrics" ) @@ -64,6 +63,9 @@ const ( timeOut = 5 * time.Minute maxRetryCount = 5 + + // CSIRepo link to internet docker hub, where stores all csi depends images. + CSIRepo = "tkestack" ) // Controller is responsible for performing actions dependent upon a CSIOperator phase. @@ -614,7 +616,7 @@ func genContainerArgs(svInfo *storageutil.SVInfo) []string { args := []string{ "--leader-election=true", "--kubelet-root-dir=/var/lib/kubelet", - "--registry-domain=" + containerregistryutil.GetPrefix(), + "--registry-domain=" + CSIRepo, "--logtostderr=true", "--v=5", } From e60e3f17739c53297955dee687c375034579f280 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=88=98=E7=A5=9E=E8=A5=BF=E7=BA=A2=E6=9F=BF?= <34213033+TomatoAres@users.noreply.github.com> Date: Fri, 13 Aug 2021 15:52:50 +0800 Subject: [PATCH 11/62] fix(installer): add console ip to api server certSANs(#1307) (#1479) Co-authored-by: Cui Shuaijie --- cmd/tke-installer/app/installer/installer.go | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/cmd/tke-installer/app/installer/installer.go b/cmd/tke-installer/app/installer/installer.go index 4ad11aa39..6598ac29c 100644 --- a/cmd/tke-installer/app/installer/installer.go +++ b/cmd/tke-installer/app/installer/installer.go @@ -1128,14 +1128,18 @@ func (t *TKE) runAfterClusterReady() bool { func (t *TKE) generateCertificates(ctx context.Context) error { var dnsNames []string + ips := []net.IP{net.ParseIP("127.0.0.1")} if t.Para.Config.Gateway != nil && t.Para.Config.Gateway.Domain != "" { - dnsNames = append(dnsNames, t.Para.Config.Gateway.Domain) + if ip := net.ParseIP(t.Para.Config.Gateway.Domain); ip != nil { + ips = append(ips, ip) + } else { + dnsNames = append(dnsNames, t.Para.Config.Gateway.Domain) + } } if t.Para.Config.Registry.TKERegistry != nil { dnsNames = append(dnsNames, t.Para.Config.Registry.TKERegistry.Domain, "*."+t.Para.Config.Registry.TKERegistry.Domain) } - ips := []net.IP{net.ParseIP("127.0.0.1")} for _, one := range t.Cluster.Spec.Machines { ips = append(ips, net.ParseIP(one.IP)) } From 1af74d58030e5171c1d8e5a3639d6c0339cbdd0b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=88=98=E7=A5=9E=E8=A5=BF=E7=BA=A2=E6=9F=BF?= <34213033+TomatoAres@users.noreply.github.com> Date: Fri, 13 Aug 2021 20:11:31 +0800 Subject: [PATCH 12/62] style: add license to shell (#1480) Co-authored-by: Cui Shuaijie --- build/docker/tke-auth-api/build.sh | 16 ++++++++++++ build/docker/tke-auth-controller/build.sh | 16 ++++++++++++ build/docker/tke-gateway/build.sh | 16 ++++++++++++ build/docker/tools/code-generator/code.sh | 2 +- build/docker/tools/code-generator/openapi.sh | 2 +- build/docker/tools/provider-res/download.sh | 2 +- build/docker/tools/provider-res/run.sh | 18 ++++++++++++- build/docker/tools/tke-installer/build.sh | 3 +-- .../tools/tke-installer/init_installer.sh | 2 +- build/docker/tools/tke-installer/install.sh | 4 +-- build/docker/tools/tke-installer/release.sh | 2 +- build/lib/create-manifest.sh | 2 +- build/script/openapi.sh | 2 +- cmd/tke-upgrade/upgrate.sh | 16 ++++++++++++ .../offline-pot/builder-init.sh | 23 ++++++++++++++--- .../offline-pot/builder.cfg.tpl | 19 +++++++++++++- .../best-practices/offline-pot/builder.sh | 17 +++++++++++++ .../offline-pot/clean-cluster.sh | 21 ++++++++++++++-- .../helmfile-example/docker/run.sh | 17 +++++++++++++ .../product1/tools/create_chart.sh | 16 ++++++++++++ .../helmfile-example/product1/tools/helm.sh | 16 ++++++++++++ .../product1/tools/helmfile.sh | 16 ++++++++++++ .../product1/tools/update_dependencies.sh | 16 ++++++++++++ .../product2/tools/create_chart.sh | 16 ++++++++++++ .../helmfile-example/product2/tools/helm.sh | 16 ++++++++++++ .../product2/tools/helmfile.sh | 16 ++++++++++++ .../product2/tools/update_dependencies.sh | 16 ++++++++++++ .../offline-pot/init-and-check.sh | 19 +++++++++++++- .../offline-pot/init_keepalived.sh | 21 ++++++++++++++-- .../offline-pot/install-offline-pot.sh | 23 ++++++++++++++--- .../offline-pot/install-tke-installer.sh | 19 +++++++++++++- .../mgr-scripts/cfg-salt-minion.sh | 17 +++++++++++++ .../mgr-scripts/clean-cluster-nodes.sh | 17 +++++++++++++ .../mgr-scripts/deploy-base-component.sh | 17 +++++++++++++ .../mgr-scripts/deploy-business.sh | 17 +++++++++++++ .../offline-pot/mgr-scripts/health-check.sh | 23 ++++++++++++++--- .../offline-pot/mgr-scripts/host-init.sh | 25 ++++++++++++++++--- .../offline-pot/mgr-scripts/hosts-check.sh | 19 +++++++++++++- .../mgr-scripts/init-keepalived.sh | 17 +++++++++++++ .../mgr-scripts/init-tke-config.sh | 17 +++++++++++++ .../offline-pot/mgr-scripts/operation-undo.sh | 17 +++++++++++++ .../mgr-scripts/remove-base-component.sh | 19 +++++++++++++- .../mgr-scripts/remove-business.sh | 17 +++++++++++++ .../mgr-scripts/tke-gateway-mgr.sh | 17 +++++++++++++ .../offline-pot/mgr-scripts/tke-mgr.sh | 21 ++++++++++++++-- .../offline-pot/mgr-scripts/tke-nodes-mgr.sh | 17 +++++++++++++ .../offline-pot/mgr-scripts/update-kernal.sh | 17 +++++++++++++ .../offline-pot/offline-pot-cmd.sh | 17 +++++++++++++ .../offline-pot/reinstall-offline-pot.sh | 17 +++++++++++++ .../roles/hosts-init/scripts/cdr2mask.sh | 16 ++++++++++++ .../roles/hosts-init/scripts/mask2cdr.sh | 16 ++++++++++++ .../offline-pot/roles/init_role.sh | 17 +++++++++++++ .../roles/tke-mgr/scripts/clean-cluster.sh | 20 +++++++++++++-- .../roles/tke-mgr/scripts/clean-nodes.sh | 20 +++++++++++++-- hack/boilerplate/boilerplate.sh.txt | 15 +++++++++++ pkg/registry/harbor/client/git_push.sh | 19 +++++++++++++- pkg/registry/harbor/helmClient/git_push.sh | 19 +++++++++++++- tools/clean.sh | 2 +- 58 files changed, 839 insertions(+), 43 deletions(-) create mode 100644 hack/boilerplate/boilerplate.sh.txt diff --git a/build/docker/tke-auth-api/build.sh b/build/docker/tke-auth-api/build.sh index 00acda5e2..8bdbe5967 100755 --- a/build/docker/tke-auth-api/build.sh +++ b/build/docker/tke-auth-api/build.sh @@ -1,3 +1,19 @@ #!/usr/bin/env bash +# Tencent is pleased to support the open source community by making TKEStack +# available. +# +# Copyright (C) 2012-2021 Tencent. All Rights Reserved. +# +# 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 +# +# https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the +# specific language governing permissions and limitations under the License. + cp -r pkg/auth/web "$DST_DIR" diff --git a/build/docker/tke-auth-controller/build.sh b/build/docker/tke-auth-controller/build.sh index 0c484dc34..668201ab5 100755 --- a/build/docker/tke-auth-controller/build.sh +++ b/build/docker/tke-auth-controller/build.sh @@ -1,3 +1,19 @@ #!/usr/bin/env bash +# Tencent is pleased to support the open source community by making TKEStack +# available. +# +# Copyright (C) 2012-2021 Tencent. All Rights Reserved. +# +# 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 +# +# https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the +# specific language governing permissions and limitations under the License. + cp -r hack/auth "$DST_DIR" diff --git a/build/docker/tke-gateway/build.sh b/build/docker/tke-gateway/build.sh index bc61c6a34..8f48b26df 100755 --- a/build/docker/tke-gateway/build.sh +++ b/build/docker/tke-gateway/build.sh @@ -1,5 +1,21 @@ #!/usr/bin/env bash +# Tencent is pleased to support the open source community by making TKEStack +# available. +# +# Copyright (C) 2012-2021 Tencent. All Rights Reserved. +# +# 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 +# +# https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the +# specific language governing permissions and limitations under the License. + set -o xtrace set -e diff --git a/build/docker/tools/code-generator/code.sh b/build/docker/tools/code-generator/code.sh index ba4e91bc6..543331b11 100644 --- a/build/docker/tools/code-generator/code.sh +++ b/build/docker/tools/code-generator/code.sh @@ -3,7 +3,7 @@ # Tencent is pleased to support the open source community by making TKEStack # available. # -# Copyright (C) 2012-2020 Tencent. All Rights Reserved. +# Copyright (C) 2012-2021 Tencent. All Rights Reserved. # # 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 diff --git a/build/docker/tools/code-generator/openapi.sh b/build/docker/tools/code-generator/openapi.sh index bdb8c8d80..9ecaf86e7 100644 --- a/build/docker/tools/code-generator/openapi.sh +++ b/build/docker/tools/code-generator/openapi.sh @@ -3,7 +3,7 @@ # Tencent is pleased to support the open source community by making TKEStack # available. # -# Copyright (C) 2012-2020 Tencent. All Rights Reserved. +# Copyright (C) 2012-2021 Tencent. All Rights Reserved. # # 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 diff --git a/build/docker/tools/provider-res/download.sh b/build/docker/tools/provider-res/download.sh index 6f030a8e0..34d2f24c1 100755 --- a/build/docker/tools/provider-res/download.sh +++ b/build/docker/tools/provider-res/download.sh @@ -3,7 +3,7 @@ # Tencent is pleased to support the open source community by making TKEStack # available. # -# Copyright (C) 2012-2019 Tencent. All Rights Reserved. +# Copyright (C) 2012-2021 Tencent. All Rights Reserved. # # 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 diff --git a/build/docker/tools/provider-res/run.sh b/build/docker/tools/provider-res/run.sh index e2fbff565..6bd612d3f 100755 --- a/build/docker/tools/provider-res/run.sh +++ b/build/docker/tools/provider-res/run.sh @@ -1,5 +1,21 @@ #!/usr/bin/env bash +# Tencent is pleased to support the open source community by making TKEStack +# available. +# +# Copyright (C) 2012-2021 Tencent. All Rights Reserved. +# +# 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 +# +# https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the +# specific language governing permissions and limitations under the License. + set -o errexit set -o nounset set -o pipefail @@ -15,4 +31,4 @@ VERSION=$(echo /${RPM_DIR}/${PKG}* | grep -oP '\d+\.\d+\.\d+') cd ${INSTALL_DIR} for rpm in ${RPM_DIR}/*.rpm; do rpm2cpio $rpm | cpio -idm; done -tar -cvzf /output/${PKG}-${OS}-${ARCH}-${VERSION}.tar.gz * \ No newline at end of file +tar -cvzf /output/${PKG}-${OS}-${ARCH}-${VERSION}.tar.gz * diff --git a/build/docker/tools/tke-installer/build.sh b/build/docker/tools/tke-installer/build.sh index 2b8406e91..bcd600f92 100755 --- a/build/docker/tools/tke-installer/build.sh +++ b/build/docker/tools/tke-installer/build.sh @@ -3,7 +3,7 @@ # Tencent is pleased to support the open source community by making TKEStack # available. # -# Copyright (C) 2012-2019 Tencent. All Rights Reserved. +# Copyright (C) 2012-2021 Tencent. All Rights Reserved. # # 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 @@ -16,7 +16,6 @@ # WARRANTIES OF ANY KIND, either express or implied. See the License for the # specific language governing permissions and limitations under the License. - set -o errexit set -o nounset set -o pipefail diff --git a/build/docker/tools/tke-installer/init_installer.sh b/build/docker/tools/tke-installer/init_installer.sh index afefd43ee..70a5b3dbb 100755 --- a/build/docker/tools/tke-installer/init_installer.sh +++ b/build/docker/tools/tke-installer/init_installer.sh @@ -3,7 +3,7 @@ # Tencent is pleased to support the open source community by making TKEStack # available. # -# Copyright (C) 2012-2019 Tencent. All Rights Reserved. +# Copyright (C) 2012-2021 Tencent. All Rights Reserved. # # 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 diff --git a/build/docker/tools/tke-installer/install.sh b/build/docker/tools/tke-installer/install.sh index 369c563bc..fba3b9044 100755 --- a/build/docker/tools/tke-installer/install.sh +++ b/build/docker/tools/tke-installer/install.sh @@ -3,7 +3,7 @@ # Tencent is pleased to support the open source community by making TKEStack # available. # -# Copyright (C) 2012-2019 Tencent. All Rights Reserved. +# Copyright (C) 2012-2021 Tencent. All Rights Reserved. # # 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 @@ -170,7 +170,7 @@ function check_installer() { done echo "check installer status error" docker logs tke-installer - exit 1 + exit 1 } preflight diff --git a/build/docker/tools/tke-installer/release.sh b/build/docker/tools/tke-installer/release.sh index d9073ae3d..40db55ad7 100755 --- a/build/docker/tools/tke-installer/release.sh +++ b/build/docker/tools/tke-installer/release.sh @@ -3,7 +3,7 @@ # Tencent is pleased to support the open source community by making TKEStack # available. # -# Copyright (C) 2012-2019 Tencent. All Rights Reserved. +# Copyright (C) 2012-2021 Tencent. All Rights Reserved. # # 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 diff --git a/build/lib/create-manifest.sh b/build/lib/create-manifest.sh index bf671600c..0ac63b273 100755 --- a/build/lib/create-manifest.sh +++ b/build/lib/create-manifest.sh @@ -3,7 +3,7 @@ # Tencent is pleased to support the open source community by making TKEStack # available. # -# Copyright (C) 2012-2019 Tencent. All Rights Reserved. +# Copyright (C) 2012-2021 Tencent. All Rights Reserved. # # 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 diff --git a/build/script/openapi.sh b/build/script/openapi.sh index ca72888cb..d95fbef6b 100755 --- a/build/script/openapi.sh +++ b/build/script/openapi.sh @@ -3,7 +3,7 @@ # Tencent is pleased to support the open source community by making TKEStack # available. # -# Copyright (C) 2012-2019 Tencent. All Rights Reserved. +# Copyright (C) 2012-2021 Tencent. All Rights Reserved. # # 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 diff --git a/cmd/tke-upgrade/upgrate.sh b/cmd/tke-upgrade/upgrate.sh index 4ff846716..d8b0ad624 100755 --- a/cmd/tke-upgrade/upgrate.sh +++ b/cmd/tke-upgrade/upgrate.sh @@ -1,5 +1,21 @@ #!/usr/bin/env bash +# Tencent is pleased to support the open source community by making TKEStack +# available. +# +# Copyright (C) 2012-2021 Tencent. All Rights Reserved. +# +# 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 +# +# https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the +# specific language governing permissions and limitations under the License. + export DIR="cmd/tke-upgrade" export DATADIR="${DIR}/app" export MANIFESTS="cmd/tke-installer/app/installer/manifests" diff --git a/docs/guide/zh-CN/best-practices/offline-pot/builder-init.sh b/docs/guide/zh-CN/best-practices/offline-pot/builder-init.sh index ffa409936..4f09d7431 100755 --- a/docs/guide/zh-CN/best-practices/offline-pot/builder-init.sh +++ b/docs/guide/zh-CN/best-practices/offline-pot/builder-init.sh @@ -1,4 +1,21 @@ #!/bin/bash + +# Tencent is pleased to support the open source community by making TKEStack +# available. +# +# Copyright (C) 2012-2021 Tencent. All Rights Reserved. +# +# 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 +# +# https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the +# specific language governing permissions and limitations under the License. + # Author: yhchen set -e @@ -33,10 +50,10 @@ builder_init(){ echo "##### builder init start #####" # start onestep builder init container if [ `docker ps -a | grep onestep-builder-init | wc -l ` -eq 0 ]; then - docker run --name onestep-builder-init -ti -d chenyihua/onestep-builder:v0.1 + docker run --name onestep-builder-init -ti -d chenyihua/onestep-builder:v0.1 else docker rm -f onestep-builder-init - docker run --name onestep-builder-init -ti -d chenyihua/onestep-builder:v0.1 + docker run --name onestep-builder-init -ti -d chenyihua/onestep-builder:v0.1 fi # copy onestep offline resource docker cp onestep-builder-init:/data/base-component-helms ${BUILDER_PDIR} @@ -57,7 +74,7 @@ all_func(){ main(){ if [ ! -d "${BUILDER_PDIR}/base-component-helms" ] || [ ! -d "${BUILDER_PDIR}/offline-pot-images-base" ] || \ - [ ! -d "${BUILDER_PDIR}/offline-pot-tgz-base" ]; then + [ ! -d "${BUILDER_PDIR}/offline-pot-tgz-base" ]; then $CALL_FUN || help fi } diff --git a/docs/guide/zh-CN/best-practices/offline-pot/builder.cfg.tpl b/docs/guide/zh-CN/best-practices/offline-pot/builder.cfg.tpl index 897c7f4e8..362dfb6a2 100644 --- a/docs/guide/zh-CN/best-practices/offline-pot/builder.cfg.tpl +++ b/docs/guide/zh-CN/best-practices/offline-pot/builder.cfg.tpl @@ -1,4 +1,21 @@ #!/bin/bash + +# Tencent is pleased to support the open source community by making TKEStack +# available. +# +# Copyright (C) 2012-2021 Tencent. All Rights Reserved. +# +# 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 +# +# https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the +# specific language governing permissions and limitations under the License. + # Author: yhchen set -e @@ -22,7 +39,7 @@ server_set=("tkestack" "business" "redis" "mysql" "prometheus" "kafka" "elk" "ng # whether use remote docker registry, if true will be not save business images and copy registry secret; true or false remote_registry='true' -# remote image registry url, if remote images registry need issue crt, please name: ${remote_img_registry_url}.cert.tar.gz +# remote image registry url, if remote images registry need issue crt, please name: ${remote_img_registry_url}.cert.tar.gz # on offline-pot-tgz-base dir remote_img_registry_url='reg.xx.yy.com' diff --git a/docs/guide/zh-CN/best-practices/offline-pot/builder.sh b/docs/guide/zh-CN/best-practices/offline-pot/builder.sh index 917370dad..39a6d9e13 100755 --- a/docs/guide/zh-CN/best-practices/offline-pot/builder.sh +++ b/docs/guide/zh-CN/best-practices/offline-pot/builder.sh @@ -1,4 +1,21 @@ #!/bin/bash + +# Tencent is pleased to support the open source community by making TKEStack +# available. +# +# Copyright (C) 2012-2021 Tencent. All Rights Reserved. +# +# 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 +# +# https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the +# specific language governing permissions and limitations under the License. + # Author: yhchen set -e diff --git a/docs/guide/zh-CN/best-practices/offline-pot/clean-cluster.sh b/docs/guide/zh-CN/best-practices/offline-pot/clean-cluster.sh index caffb6f1f..2b1592c01 100755 --- a/docs/guide/zh-CN/best-practices/offline-pot/clean-cluster.sh +++ b/docs/guide/zh-CN/best-practices/offline-pot/clean-cluster.sh @@ -1,4 +1,21 @@ #!/bin/bash + +# Tencent is pleased to support the open source community by making TKEStack +# available. +# +# Copyright (C) 2012-2021 Tencent. All Rights Reserved. +# +# 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 +# +# https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the +# specific language governing permissions and limitations under the License. + # Author: yhchen set -e @@ -38,7 +55,7 @@ remove_business(){ if [ -d "../tkestack" ]; then if [ `docker ps | grep tke-installer | wc -l` -eq 1 ]; then if [ -f 'offline-pot-cmd.sh' ]; then - sh ./offline-pot-cmd.sh -s remove-business.sh -f del_business + sh ./offline-pot-cmd.sh -s remove-business.sh -f del_business fi else echo "please exec install-tke-installer.sh to start tke-installer" && exit 0 @@ -75,7 +92,7 @@ clean_cluster_nodes(){ echo "###### clean cluster nodes start ######" if [ `docker ps | grep tke-installer | wc -l` -eq 1 ]; then if [ -f 'offline-pot-cmd.sh' ] && [ -d "../tkestack" ]; then - sh ./offline-pot-cmd.sh -s clean-cluster-nodes.sh -f clean_cluster + sh ./offline-pot-cmd.sh -s clean-cluster-nodes.sh -f clean_cluster fi else echo "please exec install-tke-installer.sh to start tke-installer" && exit 0 diff --git a/docs/guide/zh-CN/best-practices/offline-pot/helmfile-example/docker/run.sh b/docs/guide/zh-CN/best-practices/offline-pot/helmfile-example/docker/run.sh index 05c8013fc..99c9e576e 100644 --- a/docs/guide/zh-CN/best-practices/offline-pot/helmfile-example/docker/run.sh +++ b/docs/guide/zh-CN/best-practices/offline-pot/helmfile-example/docker/run.sh @@ -1,5 +1,22 @@ #!/bin/bash +# Tencent is pleased to support the open source community by making TKEStack +# available. +# +# Copyright (C) 2012-2021 Tencent. All Rights Reserved. +# +# 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 +# +# https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the +# specific language governing permissions and limitations under the License. + + set -e BASE_DIR=../ cd $BASE_DIR diff --git a/docs/guide/zh-CN/best-practices/offline-pot/helmfile-example/product1/tools/create_chart.sh b/docs/guide/zh-CN/best-practices/offline-pot/helmfile-example/product1/tools/create_chart.sh index 9943316ce..630522602 100644 --- a/docs/guide/zh-CN/best-practices/offline-pot/helmfile-example/product1/tools/create_chart.sh +++ b/docs/guide/zh-CN/best-practices/offline-pot/helmfile-example/product1/tools/create_chart.sh @@ -1,5 +1,21 @@ #!/bin/bash +# Tencent is pleased to support the open source community by making TKEStack +# available. +# +# Copyright (C) 2012-2021 Tencent. All Rights Reserved. +# +# 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 +# +# https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the +# specific language governing permissions and limitations under the License. + app=$1 if [ ! -n "$1" ]; then diff --git a/docs/guide/zh-CN/best-practices/offline-pot/helmfile-example/product1/tools/helm.sh b/docs/guide/zh-CN/best-practices/offline-pot/helmfile-example/product1/tools/helm.sh index 0247cd651..cc7abe9ea 100644 --- a/docs/guide/zh-CN/best-practices/offline-pot/helmfile-example/product1/tools/helm.sh +++ b/docs/guide/zh-CN/best-practices/offline-pot/helmfile-example/product1/tools/helm.sh @@ -1,5 +1,21 @@ #!/bin/bash +# Tencent is pleased to support the open source community by making TKEStack +# available. +# +# Copyright (C) 2012-2021 Tencent. All Rights Reserved. +# +# 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 +# +# https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the +# specific language governing permissions and limitations under the License. + action=$1 app=$2 env=$3 diff --git a/docs/guide/zh-CN/best-practices/offline-pot/helmfile-example/product1/tools/helmfile.sh b/docs/guide/zh-CN/best-practices/offline-pot/helmfile-example/product1/tools/helmfile.sh index c40d52e15..d4fbba2d1 100644 --- a/docs/guide/zh-CN/best-practices/offline-pot/helmfile-example/product1/tools/helmfile.sh +++ b/docs/guide/zh-CN/best-practices/offline-pot/helmfile-example/product1/tools/helmfile.sh @@ -1,5 +1,21 @@ #!/bin/bash +# Tencent is pleased to support the open source community by making TKEStack +# available. +# +# Copyright (C) 2012-2021 Tencent. All Rights Reserved. +# +# 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 +# +# https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the +# specific language governing permissions and limitations under the License. + action=$1 app=$2 env=$3 diff --git a/docs/guide/zh-CN/best-practices/offline-pot/helmfile-example/product1/tools/update_dependencies.sh b/docs/guide/zh-CN/best-practices/offline-pot/helmfile-example/product1/tools/update_dependencies.sh index 5853eb9ee..79b44db44 100644 --- a/docs/guide/zh-CN/best-practices/offline-pot/helmfile-example/product1/tools/update_dependencies.sh +++ b/docs/guide/zh-CN/best-practices/offline-pot/helmfile-example/product1/tools/update_dependencies.sh @@ -1,5 +1,21 @@ #!/bin/bash +# Tencent is pleased to support the open source community by making TKEStack +# available. +# +# Copyright (C) 2012-2021 Tencent. All Rights Reserved. +# +# 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 +# +# https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the +# specific language governing permissions and limitations under the License. + cd ../charts for file in `ls | grep -v '.sh' | grep -v 'tools'`; do echo $file diff --git a/docs/guide/zh-CN/best-practices/offline-pot/helmfile-example/product2/tools/create_chart.sh b/docs/guide/zh-CN/best-practices/offline-pot/helmfile-example/product2/tools/create_chart.sh index 26fcfbfb9..1bedd6654 100644 --- a/docs/guide/zh-CN/best-practices/offline-pot/helmfile-example/product2/tools/create_chart.sh +++ b/docs/guide/zh-CN/best-practices/offline-pot/helmfile-example/product2/tools/create_chart.sh @@ -1,5 +1,21 @@ #!/bin/bash +# Tencent is pleased to support the open source community by making TKEStack +# available. +# +# Copyright (C) 2012-2021 Tencent. All Rights Reserved. +# +# 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 +# +# https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the +# specific language governing permissions and limitations under the License. + app=$1 if [ ! -n "$1" ]; then diff --git a/docs/guide/zh-CN/best-practices/offline-pot/helmfile-example/product2/tools/helm.sh b/docs/guide/zh-CN/best-practices/offline-pot/helmfile-example/product2/tools/helm.sh index 1376f9f43..331e596bb 100644 --- a/docs/guide/zh-CN/best-practices/offline-pot/helmfile-example/product2/tools/helm.sh +++ b/docs/guide/zh-CN/best-practices/offline-pot/helmfile-example/product2/tools/helm.sh @@ -1,5 +1,21 @@ #!/bin/bash +# Tencent is pleased to support the open source community by making TKEStack +# available. +# +# Copyright (C) 2012-2021 Tencent. All Rights Reserved. +# +# 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 +# +# https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the +# specific language governing permissions and limitations under the License. + action=$1 app=$2 env=$3 diff --git a/docs/guide/zh-CN/best-practices/offline-pot/helmfile-example/product2/tools/helmfile.sh b/docs/guide/zh-CN/best-practices/offline-pot/helmfile-example/product2/tools/helmfile.sh index 464683caa..c02bdb3fa 100644 --- a/docs/guide/zh-CN/best-practices/offline-pot/helmfile-example/product2/tools/helmfile.sh +++ b/docs/guide/zh-CN/best-practices/offline-pot/helmfile-example/product2/tools/helmfile.sh @@ -1,5 +1,21 @@ #!/bin/bash +# Tencent is pleased to support the open source community by making TKEStack +# available. +# +# Copyright (C) 2012-2021 Tencent. All Rights Reserved. +# +# 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 +# +# https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the +# specific language governing permissions and limitations under the License. + action=$1 app=$2 env=$3 diff --git a/docs/guide/zh-CN/best-practices/offline-pot/helmfile-example/product2/tools/update_dependencies.sh b/docs/guide/zh-CN/best-practices/offline-pot/helmfile-example/product2/tools/update_dependencies.sh index f4894b8d3..509a1e279 100644 --- a/docs/guide/zh-CN/best-practices/offline-pot/helmfile-example/product2/tools/update_dependencies.sh +++ b/docs/guide/zh-CN/best-practices/offline-pot/helmfile-example/product2/tools/update_dependencies.sh @@ -1,5 +1,21 @@ #!/bin/bash +# Tencent is pleased to support the open source community by making TKEStack +# available. +# +# Copyright (C) 2012-2021 Tencent. All Rights Reserved. +# +# 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 +# +# https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the +# specific language governing permissions and limitations under the License. + cd ../charts for file in `ls | grep -v '.sh' | grep -v 'tools'`; do echo $file diff --git a/docs/guide/zh-CN/best-practices/offline-pot/init-and-check.sh b/docs/guide/zh-CN/best-practices/offline-pot/init-and-check.sh index 32e34030e..724f700de 100755 --- a/docs/guide/zh-CN/best-practices/offline-pot/init-and-check.sh +++ b/docs/guide/zh-CN/best-practices/offline-pot/init-and-check.sh @@ -1,4 +1,21 @@ #!/bin/bash + +# Tencent is pleased to support the open source community by making TKEStack +# available. +# +# Copyright (C) 2012-2021 Tencent. All Rights Reserved. +# +# 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 +# +# https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the +# specific language governing permissions and limitations under the License. + # Author: yhchen set -e @@ -78,7 +95,7 @@ host_init(){ remote_img_registry_url=`cat hosts | grep ^remote_img_registry_url | awk -F\' '{print $2}'` else echo "hosts file not exist, please check!!!" && exit 0 - fi + fi if [ `ls ../offline-pot-tgz/${remote_img_registry_url}.cert.tar.gz | wc -l` -gt 0 ]; then sh ./mgr-scripts/host-init.sh -f issue_img_crt 2>&1 >> /opt/tke-installer/data/host-init.log fi diff --git a/docs/guide/zh-CN/best-practices/offline-pot/init_keepalived.sh b/docs/guide/zh-CN/best-practices/offline-pot/init_keepalived.sh index d4d3a26b8..3748778c6 100755 --- a/docs/guide/zh-CN/best-practices/offline-pot/init_keepalived.sh +++ b/docs/guide/zh-CN/best-practices/offline-pot/init_keepalived.sh @@ -1,4 +1,21 @@ #!/bin/bash + +# Tencent is pleased to support the open source community by making TKEStack +# available. +# +# Copyright (C) 2012-2021 Tencent. All Rights Reserved. +# +# 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 +# +# https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the +# specific language governing permissions and limitations under the License. + # Author: yhchen set -e @@ -9,8 +26,8 @@ INSTALL_DATA_DIR=/opt/tke-installer/data/ # init keepalived, is tmp script; when tkestack keepalived issue fix will be remove init_keepalived(){ - - for i in {1..100000}; + + for i in {1..100000}; do if [ `cat ${INSTALL_DATA_DIR}/tke.log | grep 'EnsureKubeadmInitKubeConfigPhase' | grep -i 'Success' | wc -l` -gt 0 ]; then sh ./offline-pot-cmd.sh -s init-keepalived.sh -f init diff --git a/docs/guide/zh-CN/best-practices/offline-pot/install-offline-pot.sh b/docs/guide/zh-CN/best-practices/offline-pot/install-offline-pot.sh index a0443caae..982b03f67 100755 --- a/docs/guide/zh-CN/best-practices/offline-pot/install-offline-pot.sh +++ b/docs/guide/zh-CN/best-practices/offline-pot/install-offline-pot.sh @@ -1,4 +1,21 @@ #!/bin/bash + +# Tencent is pleased to support the open source community by making TKEStack +# available. +# +# Copyright (C) 2012-2021 Tencent. All Rights Reserved. +# +# 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 +# +# https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the +# specific language governing permissions and limitations under the License. + # Author: yhchen set -e @@ -74,7 +91,7 @@ init_keepalived(){ only_install_tkestack(){ echo "###### install tkestack start ######" # change tke components's replicas number - if [ -f "hosts" ]; then + if [ -f "hosts" ]; then sed -i 's/tke_replicas="1"/tke_replicas="2"/g' hosts fi # hosts init @@ -96,7 +113,7 @@ only_install_tkestack(){ defaut(){ # change tke components's replicas number - if [ -f "hosts" ]; then + if [ -f "hosts" ]; then sed -i 's/tke_replicas="2"/tke_replicas="1"/g' hosts fi # only deploy tkestack @@ -112,7 +129,7 @@ defaut(){ all_func(){ # change tke components's replicas number - if [ -f "hosts" ]; then + if [ -f "hosts" ]; then sed -i 's/tke_replicas="2"/tke_replicas="1"/g' hosts fi init_and_check diff --git a/docs/guide/zh-CN/best-practices/offline-pot/install-tke-installer.sh b/docs/guide/zh-CN/best-practices/offline-pot/install-tke-installer.sh index 22023571f..194ac93f4 100755 --- a/docs/guide/zh-CN/best-practices/offline-pot/install-tke-installer.sh +++ b/docs/guide/zh-CN/best-practices/offline-pot/install-tke-installer.sh @@ -1,4 +1,21 @@ #!/bin/bash + +# Tencent is pleased to support the open source community by making TKEStack +# available. +# +# Copyright (C) 2012-2021 Tencent. All Rights Reserved. +# +# 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 +# +# https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the +# specific language governing permissions and limitations under the License. + # Author: yhchen set -e @@ -24,7 +41,7 @@ init_tke_installer(){ fi if [ `docker images | grep tke-installer | wc -l` -gt 0 ]; then docker rmi -f `docker images | grep tke-installer | awk '{print $3}'` - fi + fi cd ${OFFLINE_POT_PDIR}tkestack if [ `echo "$version" | awk -Fv '{print $2}' | awk -F. '{print $1$2$3}'` -lt 130 ]; then if [ -d "${OFFLINE_POT_PDIR}tkestack/tke-installer-x86_64-${version}.run.tmp" ]; then diff --git a/docs/guide/zh-CN/best-practices/offline-pot/mgr-scripts/cfg-salt-minion.sh b/docs/guide/zh-CN/best-practices/offline-pot/mgr-scripts/cfg-salt-minion.sh index 1dae7dbf7..9a3d2f074 100755 --- a/docs/guide/zh-CN/best-practices/offline-pot/mgr-scripts/cfg-salt-minion.sh +++ b/docs/guide/zh-CN/best-practices/offline-pot/mgr-scripts/cfg-salt-minion.sh @@ -1,4 +1,21 @@ #!/bin/bash + +# Tencent is pleased to support the open source community by making TKEStack +# available. +# +# Copyright (C) 2012-2021 Tencent. All Rights Reserved. +# +# 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 +# +# https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the +# specific language governing permissions and limitations under the License. + # Author: yhchen set -e diff --git a/docs/guide/zh-CN/best-practices/offline-pot/mgr-scripts/clean-cluster-nodes.sh b/docs/guide/zh-CN/best-practices/offline-pot/mgr-scripts/clean-cluster-nodes.sh index e8aa79cb8..b1c165a74 100755 --- a/docs/guide/zh-CN/best-practices/offline-pot/mgr-scripts/clean-cluster-nodes.sh +++ b/docs/guide/zh-CN/best-practices/offline-pot/mgr-scripts/clean-cluster-nodes.sh @@ -1,4 +1,21 @@ #!/bin/bash + +# Tencent is pleased to support the open source community by making TKEStack +# available. +# +# Copyright (C) 2012-2021 Tencent. All Rights Reserved. +# +# 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 +# +# https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the +# specific language governing permissions and limitations under the License. + # Author: yhchen set -e diff --git a/docs/guide/zh-CN/best-practices/offline-pot/mgr-scripts/deploy-base-component.sh b/docs/guide/zh-CN/best-practices/offline-pot/mgr-scripts/deploy-base-component.sh index 01a90031f..365323044 100755 --- a/docs/guide/zh-CN/best-practices/offline-pot/mgr-scripts/deploy-base-component.sh +++ b/docs/guide/zh-CN/best-practices/offline-pot/mgr-scripts/deploy-base-component.sh @@ -1,4 +1,21 @@ #!/bin/bash + +# Tencent is pleased to support the open source community by making TKEStack +# available. +# +# Copyright (C) 2012-2021 Tencent. All Rights Reserved. +# +# 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 +# +# https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the +# specific language governing permissions and limitations under the License. + # Author: yhchen set -e diff --git a/docs/guide/zh-CN/best-practices/offline-pot/mgr-scripts/deploy-business.sh b/docs/guide/zh-CN/best-practices/offline-pot/mgr-scripts/deploy-business.sh index ef71daf06..9a89d9dd5 100755 --- a/docs/guide/zh-CN/best-practices/offline-pot/mgr-scripts/deploy-business.sh +++ b/docs/guide/zh-CN/best-practices/offline-pot/mgr-scripts/deploy-business.sh @@ -1,4 +1,21 @@ #!/bin/bash + +# Tencent is pleased to support the open source community by making TKEStack +# available. +# +# Copyright (C) 2012-2021 Tencent. All Rights Reserved. +# +# 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 +# +# https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the +# specific language governing permissions and limitations under the License. + # Author: yhchen set -e diff --git a/docs/guide/zh-CN/best-practices/offline-pot/mgr-scripts/health-check.sh b/docs/guide/zh-CN/best-practices/offline-pot/mgr-scripts/health-check.sh index f64d47b28..bf4468e1f 100755 --- a/docs/guide/zh-CN/best-practices/offline-pot/mgr-scripts/health-check.sh +++ b/docs/guide/zh-CN/best-practices/offline-pot/mgr-scripts/health-check.sh @@ -1,4 +1,21 @@ #!/bin/bash + +# Tencent is pleased to support the open source community by making TKEStack +# available. +# +# Copyright (C) 2012-2021 Tencent. All Rights Reserved. +# +# 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 +# +# https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the +# specific language governing permissions and limitations under the License. + # Author: yhchen set -e @@ -42,7 +59,7 @@ do esac done -# helm tiller deploy check +# helm tiller deploy check helm_tiller_dpl_check(){ echo "###### helm tiller deploy check start ######" ansible-playbook -f 10 -i ../hosts --tags helmtiller_health_check ../playbooks/base-component/base-component.yml \ @@ -91,7 +108,7 @@ nginx_ingress_health_check(){ ansible-playbook -f 10 -i ../hosts --tags ingress_controller_health_check ../playbooks/base-component/base-component.yml \ --extra-vars "hosts=${hosts}" echo "###### nginx ingress controller health check end ######" -} +} # kafka deploy check kafka_dpl_check(){ @@ -99,7 +116,7 @@ kafka_dpl_check(){ ansible-playbook -f 10 -i ../hosts --tags kafka_health_check ../playbooks/base-component/base-component.yml \ --extra-vars "hosts=${hosts}" echo "###### kafka deploy check end ######" -} +} # elk deploy check elk_dpl_check(){ diff --git a/docs/guide/zh-CN/best-practices/offline-pot/mgr-scripts/host-init.sh b/docs/guide/zh-CN/best-practices/offline-pot/mgr-scripts/host-init.sh index eeb0870f2..acdbfa037 100755 --- a/docs/guide/zh-CN/best-practices/offline-pot/mgr-scripts/host-init.sh +++ b/docs/guide/zh-CN/best-practices/offline-pot/mgr-scripts/host-init.sh @@ -1,4 +1,21 @@ #!/bin/bash + +# Tencent is pleased to support the open source community by making TKEStack +# available. +# +# Copyright (C) 2012-2021 Tencent. All Rights Reserved. +# +# 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 +# +# https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the +# specific language governing permissions and limitations under the License. + # Author: yhchen set -e @@ -91,7 +108,7 @@ install_base_tools(){ echo "###### install base tools end ######" } -# issue images registry crt +# issue images registry crt issue_img_crt(){ echo "###### issue images registry crt start ######" ansible-playbook -f 10 -i ../hosts --tags issue_docker_crt ../playbooks/hosts-init/hosts-init.yml \ @@ -99,7 +116,7 @@ issue_img_crt(){ echo "###### issue images registry crt end ######" } -# data disk init +# data disk init data_disk_init(){ echo "###### data disk init start ######" ansible-playbook -f 10 -i ../hosts --tags data_disk_init ../playbooks/hosts-init/hosts-init.yml \ @@ -107,7 +124,7 @@ data_disk_init(){ echo "###### data disk init end ######" } -# check iptables +# check iptables check_iptables(){ echo "###### check iptables start ######" ansible-playbook -f 10 -i ../hosts --tags check_iptables ../playbooks/hosts-init/hosts-init.yml \ @@ -149,7 +166,7 @@ all_func(){ data_disk_init check_iptables time_sync - install_stress_tools + install_stress_tools install_base_tools issue_img_crt registry_influxdb_init diff --git a/docs/guide/zh-CN/best-practices/offline-pot/mgr-scripts/hosts-check.sh b/docs/guide/zh-CN/best-practices/offline-pot/mgr-scripts/hosts-check.sh index 8ad505695..1fef1bdd0 100755 --- a/docs/guide/zh-CN/best-practices/offline-pot/mgr-scripts/hosts-check.sh +++ b/docs/guide/zh-CN/best-practices/offline-pot/mgr-scripts/hosts-check.sh @@ -1,4 +1,21 @@ #!/bin/bash + +# Tencent is pleased to support the open source community by making TKEStack +# available. +# +# Copyright (C) 2012-2021 Tencent. All Rights Reserved. +# +# 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 +# +# https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the +# specific language governing permissions and limitations under the License. + # Author: yhchen set -e @@ -44,7 +61,7 @@ check_version(){ echo "###### check system and kernal version end ######" } -# check host whether had loaded nat module +# check host whether had loaded nat module check_nat_module(){ echo "###### check host whether had loaded nat module start ######" ansible-playbook -f 10 -i ../hosts --tags check_nat_module ../playbooks/hosts-check/hosts-check.yml \ diff --git a/docs/guide/zh-CN/best-practices/offline-pot/mgr-scripts/init-keepalived.sh b/docs/guide/zh-CN/best-practices/offline-pot/mgr-scripts/init-keepalived.sh index d61850f8d..96aedb3fb 100755 --- a/docs/guide/zh-CN/best-practices/offline-pot/mgr-scripts/init-keepalived.sh +++ b/docs/guide/zh-CN/best-practices/offline-pot/mgr-scripts/init-keepalived.sh @@ -1,4 +1,21 @@ #!/bin/bash + +# Tencent is pleased to support the open source community by making TKEStack +# available. +# +# Copyright (C) 2012-2021 Tencent. All Rights Reserved. +# +# 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 +# +# https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the +# specific language governing permissions and limitations under the License. + # Author: yhchen set -e diff --git a/docs/guide/zh-CN/best-practices/offline-pot/mgr-scripts/init-tke-config.sh b/docs/guide/zh-CN/best-practices/offline-pot/mgr-scripts/init-tke-config.sh index 01d995c2d..4ac58cb4a 100755 --- a/docs/guide/zh-CN/best-practices/offline-pot/mgr-scripts/init-tke-config.sh +++ b/docs/guide/zh-CN/best-practices/offline-pot/mgr-scripts/init-tke-config.sh @@ -1,4 +1,21 @@ #!/bin/bash + +# Tencent is pleased to support the open source community by making TKEStack +# available. +# +# Copyright (C) 2012-2021 Tencent. All Rights Reserved. +# +# 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 +# +# https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the +# specific language governing permissions and limitations under the License. + # Author: yhchen set -e diff --git a/docs/guide/zh-CN/best-practices/offline-pot/mgr-scripts/operation-undo.sh b/docs/guide/zh-CN/best-practices/offline-pot/mgr-scripts/operation-undo.sh index 4e6fe272d..8e55807ee 100755 --- a/docs/guide/zh-CN/best-practices/offline-pot/mgr-scripts/operation-undo.sh +++ b/docs/guide/zh-CN/best-practices/offline-pot/mgr-scripts/operation-undo.sh @@ -1,4 +1,21 @@ #!/bin/bash + +# Tencent is pleased to support the open source community by making TKEStack +# available. +# +# Copyright (C) 2012-2021 Tencent. All Rights Reserved. +# +# 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 +# +# https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the +# specific language governing permissions and limitations under the License. + # Author: yhchen set -e diff --git a/docs/guide/zh-CN/best-practices/offline-pot/mgr-scripts/remove-base-component.sh b/docs/guide/zh-CN/best-practices/offline-pot/mgr-scripts/remove-base-component.sh index 687a0c6d0..7a2787060 100755 --- a/docs/guide/zh-CN/best-practices/offline-pot/mgr-scripts/remove-base-component.sh +++ b/docs/guide/zh-CN/best-practices/offline-pot/mgr-scripts/remove-base-component.sh @@ -1,4 +1,21 @@ #!/bin/bash + +# Tencent is pleased to support the open source community by making TKEStack +# available. +# +# Copyright (C) 2012-2021 Tencent. All Rights Reserved. +# +# 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 +# +# https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the +# specific language governing permissions and limitations under the License. + # Author: yhchen set -e @@ -162,7 +179,7 @@ all_func(){ del_minio del_nfs del_helm_tiller - + } main(){ diff --git a/docs/guide/zh-CN/best-practices/offline-pot/mgr-scripts/remove-business.sh b/docs/guide/zh-CN/best-practices/offline-pot/mgr-scripts/remove-business.sh index 533253bcf..9726825a7 100755 --- a/docs/guide/zh-CN/best-practices/offline-pot/mgr-scripts/remove-business.sh +++ b/docs/guide/zh-CN/best-practices/offline-pot/mgr-scripts/remove-business.sh @@ -1,4 +1,21 @@ #!/bin/bash + +# Tencent is pleased to support the open source community by making TKEStack +# available. +# +# Copyright (C) 2012-2021 Tencent. All Rights Reserved. +# +# 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 +# +# https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the +# specific language governing permissions and limitations under the License. + # Author: yhchen set -e diff --git a/docs/guide/zh-CN/best-practices/offline-pot/mgr-scripts/tke-gateway-mgr.sh b/docs/guide/zh-CN/best-practices/offline-pot/mgr-scripts/tke-gateway-mgr.sh index e349d0d51..602c2d19f 100755 --- a/docs/guide/zh-CN/best-practices/offline-pot/mgr-scripts/tke-gateway-mgr.sh +++ b/docs/guide/zh-CN/best-practices/offline-pot/mgr-scripts/tke-gateway-mgr.sh @@ -1,4 +1,21 @@ #!/bin/bash + +# Tencent is pleased to support the open source community by making TKEStack +# available. +# +# Copyright (C) 2012-2021 Tencent. All Rights Reserved. +# +# 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 +# +# https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the +# specific language governing permissions and limitations under the License. + # Author: yhchen set -e diff --git a/docs/guide/zh-CN/best-practices/offline-pot/mgr-scripts/tke-mgr.sh b/docs/guide/zh-CN/best-practices/offline-pot/mgr-scripts/tke-mgr.sh index 15a16e130..5af4f23cb 100755 --- a/docs/guide/zh-CN/best-practices/offline-pot/mgr-scripts/tke-mgr.sh +++ b/docs/guide/zh-CN/best-practices/offline-pot/mgr-scripts/tke-mgr.sh @@ -1,4 +1,21 @@ #!/bin/bash + +# Tencent is pleased to support the open source community by making TKEStack +# available. +# +# Copyright (C) 2012-2021 Tencent. All Rights Reserved. +# +# 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 +# +# https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the +# specific language governing permissions and limitations under the License. + # Author: yhchen set -e @@ -36,7 +53,7 @@ done init_tke_cfg(){ if [ -f "./init-tke-config.sh" ]; then sh ./init-tke-config.sh -f init - else + else echo "init-tke-config.sh not exist, please check !!!" && exit 0 fi } @@ -46,7 +63,7 @@ init_tke_cfg(){ add_tke_nodes(){ if [ -f "./tke-nodes-mgr.sh" ]; then sh ./tke-nodes-mgr.sh -f add_tke_nodes - else + else echo "tke-nodes-mgr.sh not exist, please check !!!" && exit 0 fi } diff --git a/docs/guide/zh-CN/best-practices/offline-pot/mgr-scripts/tke-nodes-mgr.sh b/docs/guide/zh-CN/best-practices/offline-pot/mgr-scripts/tke-nodes-mgr.sh index a14b1a3d0..d985dfd52 100755 --- a/docs/guide/zh-CN/best-practices/offline-pot/mgr-scripts/tke-nodes-mgr.sh +++ b/docs/guide/zh-CN/best-practices/offline-pot/mgr-scripts/tke-nodes-mgr.sh @@ -1,4 +1,21 @@ #!/bin/bash + +# Tencent is pleased to support the open source community by making TKEStack +# available. +# +# Copyright (C) 2012-2021 Tencent. All Rights Reserved. +# +# 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 +# +# https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the +# specific language governing permissions and limitations under the License. + # Author: yhchen set -e diff --git a/docs/guide/zh-CN/best-practices/offline-pot/mgr-scripts/update-kernal.sh b/docs/guide/zh-CN/best-practices/offline-pot/mgr-scripts/update-kernal.sh index f66f37bd2..b2a01b3b6 100755 --- a/docs/guide/zh-CN/best-practices/offline-pot/mgr-scripts/update-kernal.sh +++ b/docs/guide/zh-CN/best-practices/offline-pot/mgr-scripts/update-kernal.sh @@ -1,4 +1,21 @@ #!/bin/bash + +# Tencent is pleased to support the open source community by making TKEStack +# available. +# +# Copyright (C) 2012-2021 Tencent. All Rights Reserved. +# +# 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 +# +# https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the +# specific language governing permissions and limitations under the License. + # Author: yhchen set -e diff --git a/docs/guide/zh-CN/best-practices/offline-pot/offline-pot-cmd.sh b/docs/guide/zh-CN/best-practices/offline-pot/offline-pot-cmd.sh index 069cb6f3b..f83bbd0fe 100755 --- a/docs/guide/zh-CN/best-practices/offline-pot/offline-pot-cmd.sh +++ b/docs/guide/zh-CN/best-practices/offline-pot/offline-pot-cmd.sh @@ -1,4 +1,21 @@ #!/bin/bash + +# Tencent is pleased to support the open source community by making TKEStack +# available. +# +# Copyright (C) 2012-2021 Tencent. All Rights Reserved. +# +# 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 +# +# https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the +# specific language governing permissions and limitations under the License. + # Author: yhchen set -e diff --git a/docs/guide/zh-CN/best-practices/offline-pot/reinstall-offline-pot.sh b/docs/guide/zh-CN/best-practices/offline-pot/reinstall-offline-pot.sh index ad409e0df..4952e1174 100755 --- a/docs/guide/zh-CN/best-practices/offline-pot/reinstall-offline-pot.sh +++ b/docs/guide/zh-CN/best-practices/offline-pot/reinstall-offline-pot.sh @@ -1,4 +1,21 @@ #!/bin/bash + +# Tencent is pleased to support the open source community by making TKEStack +# available. +# +# Copyright (C) 2012-2021 Tencent. All Rights Reserved. +# +# 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 +# +# https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the +# specific language governing permissions and limitations under the License. + # Author: yhchen set -e diff --git a/docs/guide/zh-CN/best-practices/offline-pot/roles/hosts-init/scripts/cdr2mask.sh b/docs/guide/zh-CN/best-practices/offline-pot/roles/hosts-init/scripts/cdr2mask.sh index c8bb54cba..de120f7ba 100755 --- a/docs/guide/zh-CN/best-practices/offline-pot/roles/hosts-init/scripts/cdr2mask.sh +++ b/docs/guide/zh-CN/best-practices/offline-pot/roles/hosts-init/scripts/cdr2mask.sh @@ -1,5 +1,21 @@ #!/bin/sh +# Tencent is pleased to support the open source community by making TKEStack +# available. +# +# Copyright (C) 2012-2021 Tencent. All Rights Reserved. +# +# 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 +# +# https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the +# specific language governing permissions and limitations under the License. + if [ -z $1 ]; then echo "please input a cdr,example: 24!" && exit 1; else diff --git a/docs/guide/zh-CN/best-practices/offline-pot/roles/hosts-init/scripts/mask2cdr.sh b/docs/guide/zh-CN/best-practices/offline-pot/roles/hosts-init/scripts/mask2cdr.sh index a0a02128f..0169dbf8f 100755 --- a/docs/guide/zh-CN/best-practices/offline-pot/roles/hosts-init/scripts/mask2cdr.sh +++ b/docs/guide/zh-CN/best-practices/offline-pot/roles/hosts-init/scripts/mask2cdr.sh @@ -1,5 +1,21 @@ #!/bin/sh +# Tencent is pleased to support the open source community by making TKEStack +# available. +# +# Copyright (C) 2012-2021 Tencent. All Rights Reserved. +# +# 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 +# +# https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the +# specific language governing permissions and limitations under the License. + if [ -z $1 ]; then echo "please input a netmask,example: 255.255.255.0!" && exit 1; else diff --git a/docs/guide/zh-CN/best-practices/offline-pot/roles/init_role.sh b/docs/guide/zh-CN/best-practices/offline-pot/roles/init_role.sh index 04c140c41..ec615a0f2 100755 --- a/docs/guide/zh-CN/best-practices/offline-pot/roles/init_role.sh +++ b/docs/guide/zh-CN/best-practices/offline-pot/roles/init_role.sh @@ -1,2 +1,19 @@ #!/bin/bash + +# Tencent is pleased to support the open source community by making TKEStack +# available. +# +# Copyright (C) 2012-2021 Tencent. All Rights Reserved. +# +# 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 +# +# https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the +# specific language governing permissions and limitations under the License. + ansible-galaxy init $@ diff --git a/docs/guide/zh-CN/best-practices/offline-pot/roles/tke-mgr/scripts/clean-cluster.sh b/docs/guide/zh-CN/best-practices/offline-pot/roles/tke-mgr/scripts/clean-cluster.sh index 1aedd9ee7..94f277997 100755 --- a/docs/guide/zh-CN/best-practices/offline-pot/roles/tke-mgr/scripts/clean-cluster.sh +++ b/docs/guide/zh-CN/best-practices/offline-pot/roles/tke-mgr/scripts/clean-cluster.sh @@ -1,5 +1,21 @@ #!/bin/bash +# Tencent is pleased to support the open source community by making TKEStack +# available. +# +# Copyright (C) 2012-2021 Tencent. All Rights Reserved. +# +# 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 +# +# https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the +# specific language governing permissions and limitations under the License. + rm -rf /etc/kubernetes systemctl stop kubelet 2>/dev/null @@ -29,14 +45,14 @@ rm -rfv /var/lib/etcd || echo "not exist" rm -rfv /tmp/etc/kubernetes/ || echo "not exist" rm -rfv /usr/libexec/kubernetes/ || echo "not exist" rm -rfv /etc/keepalived/ || echo "not exist" -rm -rfv /var/lib/postgresql || echo "not exist" +rm -rfv /var/lib/postgresql || echo "not exist" rm -rfv /etc/core/token || echo "not exist" rm -rfv /var/lib/redis || echo "not exist" rm -rfv /storage || echo "not exist" rm -rfv /chart_storage || echo "not exist" if [ `ls /data/ | wc -l` -gt 0 ]; then - if [ -L "/storage" ]; then + if [ -L "/storage" ]; then rm -rf /storage fi if [ -L "/var/lib/influxdb" ]; then diff --git a/docs/guide/zh-CN/best-practices/offline-pot/roles/tke-mgr/scripts/clean-nodes.sh b/docs/guide/zh-CN/best-practices/offline-pot/roles/tke-mgr/scripts/clean-nodes.sh index 541a67a3b..0654783df 100755 --- a/docs/guide/zh-CN/best-practices/offline-pot/roles/tke-mgr/scripts/clean-nodes.sh +++ b/docs/guide/zh-CN/best-practices/offline-pot/roles/tke-mgr/scripts/clean-nodes.sh @@ -1,5 +1,21 @@ #!/bin/bash +# Tencent is pleased to support the open source community by making TKEStack +# available. +# +# Copyright (C) 2012-2021 Tencent. All Rights Reserved. +# +# 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 +# +# https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the +# specific language governing permissions and limitations under the License. + rm -rf /etc/kubernetes systemctl stop kubelet 2>/dev/null @@ -29,14 +45,14 @@ rm -rfv /var/lib/etcd || echo "not exist" rm -rfv /tmp/etc/kubernetes/ || echo "not exist" rm -rfv /usr/libexec/kubernetes/ || echo "not exist" rm -rfv /etc/keepalived/ || echo "not exist" -rm -rfv /var/lib/postgresql || echo "not exist" +rm -rfv /var/lib/postgresql || echo "not exist" rm -rfv /etc/core/token || echo "not exist" rm -rfv /var/lib/redis || echo "not exist" rm -rfv /storage || echo "not exist" rm -rfv /chart_storage || echo "not exist" if [ `ls /data/ | wc -l` -gt 0 ]; then - if [ -L "/storage" ]; then + if [ -L "/storage" ]; then rm -rf /storage fi if [ -L "/var/lib/influxdb" ]; then diff --git a/hack/boilerplate/boilerplate.sh.txt b/hack/boilerplate/boilerplate.sh.txt new file mode 100644 index 000000000..47a625a9f --- /dev/null +++ b/hack/boilerplate/boilerplate.sh.txt @@ -0,0 +1,15 @@ +# Tencent is pleased to support the open source community by making TKEStack +# available. +# +# Copyright (C) 2012-2021 Tencent. All Rights Reserved. +# +# 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 +# +# https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the +# specific language governing permissions and limitations under the License. diff --git a/pkg/registry/harbor/client/git_push.sh b/pkg/registry/harbor/client/git_push.sh index ae01b182a..89dfdbdb3 100644 --- a/pkg/registry/harbor/client/git_push.sh +++ b/pkg/registry/harbor/client/git_push.sh @@ -1,4 +1,21 @@ #!/bin/sh + +# Tencent is pleased to support the open source community by making TKEStack +# available. +# +# Copyright (C) 2012-2021 Tencent. All Rights Reserved. +# +# 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 +# +# https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the +# specific language governing permissions and limitations under the License. + # ref: https://help.github.com/articles/adding-an-existing-project-to-github-using-the-command-line/ # # Usage example: /bin/sh ./git_push.sh wing328 swagger-petstore-perl "minor update" @@ -28,7 +45,7 @@ git init # Adds the files in the local repository and stages them for commit. git add . -# Commits the tracked changes and prepares them to be pushed to a remote repository. +# Commits the tracked changes and prepares them to be pushed to a remote repository. git commit -m "$release_note" # Sets the new remote diff --git a/pkg/registry/harbor/helmClient/git_push.sh b/pkg/registry/harbor/helmClient/git_push.sh index ae01b182a..89dfdbdb3 100644 --- a/pkg/registry/harbor/helmClient/git_push.sh +++ b/pkg/registry/harbor/helmClient/git_push.sh @@ -1,4 +1,21 @@ #!/bin/sh + +# Tencent is pleased to support the open source community by making TKEStack +# available. +# +# Copyright (C) 2012-2021 Tencent. All Rights Reserved. +# +# 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 +# +# https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the +# specific language governing permissions and limitations under the License. + # ref: https://help.github.com/articles/adding-an-existing-project-to-github-using-the-command-line/ # # Usage example: /bin/sh ./git_push.sh wing328 swagger-petstore-perl "minor update" @@ -28,7 +45,7 @@ git init # Adds the files in the local repository and stages them for commit. git add . -# Commits the tracked changes and prepares them to be pushed to a remote repository. +# Commits the tracked changes and prepares them to be pushed to a remote repository. git commit -m "$release_note" # Sets the new remote diff --git a/tools/clean.sh b/tools/clean.sh index b40b7b341..30e3f2ee1 100755 --- a/tools/clean.sh +++ b/tools/clean.sh @@ -3,7 +3,7 @@ # Tencent is pleased to support the open source community by making TKEStack # available. # -# Copyright (C) 2012-2019 Tencent. All Rights Reserved. +# Copyright (C) 2012-2021 Tencent. All Rights Reserved. # # 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 From d940bf738ee5433755236237906078d8c2a5506f Mon Sep 17 00:00:00 2001 From: Pavle Lee <523260513@qq.com> Date: Mon, 16 Aug 2021 15:28:01 +0800 Subject: [PATCH 13/62] fix(platform): delete machine/cluster not found loop (#1483) * fix(cluster): fix loop work error when cluster not found * fix(cluster): fix loop work error when machine not found Co-authored-by: pavleli --- pkg/platform/controller/cluster/cluster_controller.go | 8 +++++--- pkg/platform/controller/machine/machine_controller.go | 8 +++++--- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/pkg/platform/controller/cluster/cluster_controller.go b/pkg/platform/controller/cluster/cluster_controller.go index 9d1bf216d..1c6c7f786 100644 --- a/pkg/platform/controller/cluster/cluster_controller.go +++ b/pkg/platform/controller/cluster/cluster_controller.go @@ -253,10 +253,12 @@ func (c *Controller) syncCluster(key string) error { } cluster, err := c.lister.Get(name) - if apierrors.IsNotFound(err) { - log.FromContext(ctx).Info("cluster has been deleted") - } if err != nil { + if apierrors.IsNotFound(err) { + log.FromContext(ctx).Info("cluster has been deleted") + return nil + } + utilruntime.HandleError(fmt.Errorf("unable to retrieve cluster %v from store: %v", key, err)) return err } diff --git a/pkg/platform/controller/machine/machine_controller.go b/pkg/platform/controller/machine/machine_controller.go index d53033382..40564f3c2 100644 --- a/pkg/platform/controller/machine/machine_controller.go +++ b/pkg/platform/controller/machine/machine_controller.go @@ -217,10 +217,12 @@ func (c *Controller) syncMachine(key string) error { } machine, err := c.lister.Get(name) - if apierrors.IsNotFound(err) { - log.FromContext(ctx).Info("Machine has been deleted") - } if err != nil { + if apierrors.IsNotFound(err) { + log.FromContext(ctx).Info("Machine has been deleted") + return nil + } + utilruntime.HandleError(fmt.Errorf("unable to retrieve machine %v from store: %v", key, err)) return err } From f2319e4cbe956d81fafe1064be37fc70b878d5c4 Mon Sep 17 00:00:00 2001 From: Leo Ryu Date: Mon, 16 Aug 2021 19:14:57 +0800 Subject: [PATCH 14/62] fix(platform): rm ensure mc label (#1485) --- .../controller/machine/machine_controller.go | 53 ------------------- 1 file changed, 53 deletions(-) diff --git a/pkg/platform/controller/machine/machine_controller.go b/pkg/platform/controller/machine/machine_controller.go index 40564f3c2..d99af8865 100644 --- a/pkg/platform/controller/machine/machine_controller.go +++ b/pkg/platform/controller/machine/machine_controller.go @@ -27,12 +27,10 @@ import ( "golang.org/x/time/rate" apierrors "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/types" "k8s.io/apimachinery/pkg/util/runtime" utilruntime "k8s.io/apimachinery/pkg/util/runtime" "k8s.io/apimachinery/pkg/util/wait" "k8s.io/client-go/tools/cache" - "k8s.io/client-go/util/retry" "k8s.io/client-go/util/workqueue" platformversionedclient "tkestack.io/tke/api/client/clientset/versioned/typed/platform/v1" @@ -47,7 +45,6 @@ import ( "tkestack.io/tke/pkg/util/apiclient" "tkestack.io/tke/pkg/util/log" "tkestack.io/tke/pkg/util/metrics" - "tkestack.io/tke/pkg/util/strategicpatch" ) const ( @@ -233,9 +230,6 @@ func (c *Controller) syncMachine(key string) error { } func (c *Controller) reconcile(ctx context.Context, key string, machine *platformv1.Machine) error { - - c.ensureSyncMachineNodeLabel(ctx, machine) - var err error switch machine.Status.Phase { case platformv1.MachineInitializing: @@ -344,50 +338,3 @@ func (c *Controller) checkHealth(ctx context.Context, machine *platformv1.Machin return machine } - -func (c *Controller) ensureSyncMachineNodeLabel(ctx context.Context, machine *platformv1.Machine) { - - cluster, err := clusterprovider.GetV1ClusterByName(ctx, c.platformClient, machine.Spec.ClusterName, clusterprovider.AdminUsername) - if err != nil { - log.FromContext(ctx).Error(err, "sync Machine node label error") - return - } - - client, err := cluster.Clientset() - if err != nil { - log.FromContext(ctx).Error(err, "sync Machine node label error") - return - } - - err = retry.RetryOnConflict(retry.DefaultRetry, func() error { - node, err := client.CoreV1().Nodes().Get(ctx, machine.Spec.IP, metav1.GetOptions{}) - if err != nil { - if apierrors.IsNotFound(err) { - return nil - } - return err - } - - labels := node.GetLabels() - _, ok := labels[string(apiclient.LabelMachineIPV4)] - if ok { - return nil - } - - oldNode := node.DeepCopy() - labels[string(apiclient.LabelMachineIPV4)] = machine.Spec.IP - node.SetLabels(labels) - - patchBytes, err := strategicpatch.GetPatchBytes(oldNode, node) - if err != nil { - return fmt.Errorf("GetPatchBytes for node error: %w", err) - } - - _, err = client.CoreV1().Nodes().Patch(ctx, node.Name, types.StrategicMergePatchType, patchBytes, metav1.PatchOptions{}) - return err - }) - - if err != nil { - log.FromContext(ctx).Error(err, "sync Machine node label error") - } -} From 1ae6f2f0b26a561cb74330d1378be3df352dbd41 Mon Sep 17 00:00:00 2001 From: GaoXiaodong <13814823514@163.com> Date: Tue, 17 Aug 2021 14:59:55 +0800 Subject: [PATCH 15/62] feat(platform): add statefulsets/hpa support (#1488) Co-authored-by: xdonggao --- pkg/platform/proxy/apps/rest/rest.go | 115 +++++++++-------- .../proxy/apps/statefulset/storage/hpa.go | 122 ++++++++++++++++++ .../proxy/apps/statefulset/storage/storage.go | 10 ++ 3 files changed, 191 insertions(+), 56 deletions(-) create mode 100644 pkg/platform/proxy/apps/statefulset/storage/hpa.go diff --git a/pkg/platform/proxy/apps/rest/rest.go b/pkg/platform/proxy/apps/rest/rest.go index ecaaa206f..0c5b554aa 100644 --- a/pkg/platform/proxy/apps/rest/rest.go +++ b/pkg/platform/proxy/apps/rest/rest.go @@ -81,28 +81,29 @@ func (s *StorageProvider) v1Storage(restOptionsGetter generic.RESTOptionsGetter, replicaSetStore := replicasetstorage.NewStorageV1(restOptionsGetter, platformClient) storageMap := map[string]rest.Storage{ - "controllerrevisions": controllerRevisionStore.ControllerRevision, - "daemonsets": daemonSetStore.DaemonSet, - "daemonsets/pods": daemonSetStore.Pods, - "daemonsets/status": daemonSetStore.Status, - "daemonsets/events": daemonSetStore.Events, - "deployments": deploymentStore.Deployment, - "deployments/status": deploymentStore.Status, - "deployments/scale": deploymentStore.Scale, - "deployments/rollback": deploymentStore.RolloutUndo, - "deployments/pods": deploymentStore.Pods, - "deployments/events": deploymentStore.Events, - "deployments/horizontalpodautoscalers": deploymentStore.HPAs, - "statefulsets": statefulSetStore.StatefulSet, - "statefulsets/status": statefulSetStore.Status, - "statefulsets/pods": statefulSetStore.Pods, - "statefulsets/scale": statefulSetStore.Scale, - "statefulsets/events": statefulSetStore.Events, - "replicasets": replicaSetStore.ReplicaSet, - "replicasets/pods": replicaSetStore.Pods, - "replicasets/status": replicaSetStore.Status, - "replicasets/scale": replicaSetStore.Scale, - "replicasets/events": replicaSetStore.Events, + "controllerrevisions": controllerRevisionStore.ControllerRevision, + "daemonsets": daemonSetStore.DaemonSet, + "daemonsets/pods": daemonSetStore.Pods, + "daemonsets/status": daemonSetStore.Status, + "daemonsets/events": daemonSetStore.Events, + "deployments": deploymentStore.Deployment, + "deployments/status": deploymentStore.Status, + "deployments/scale": deploymentStore.Scale, + "deployments/rollback": deploymentStore.RolloutUndo, + "deployments/pods": deploymentStore.Pods, + "deployments/events": deploymentStore.Events, + "deployments/horizontalpodautoscalers": deploymentStore.HPAs, + "statefulsets": statefulSetStore.StatefulSet, + "statefulsets/status": statefulSetStore.Status, + "statefulsets/pods": statefulSetStore.Pods, + "statefulsets/scale": statefulSetStore.Scale, + "statefulsets/events": statefulSetStore.Events, + "statefulsets/horizontalpodautoscalers": statefulSetStore.HPAs, + "replicasets": replicaSetStore.ReplicaSet, + "replicasets/pods": replicaSetStore.Pods, + "replicasets/status": replicaSetStore.Status, + "replicasets/scale": replicaSetStore.Scale, + "replicasets/events": replicaSetStore.Events, } return storageMap @@ -116,19 +117,20 @@ func (s *StorageProvider) v1Beta1Storage(restOptionsGetter generic.RESTOptionsGe statefulSetStore := statefulsetstorage.NewStorageV1Beta1(restOptionsGetter, platformClient) storageMap := map[string]rest.Storage{ - "controllerrevisions": controllerRevisionStore.ControllerRevision, - "deployments": deploymentStore.Deployment, - "deployments/status": deploymentStore.Status, - "deployments/scale": deploymentStore.Scale, - "deployments/rollback": deploymentStore.Rollback, - "deployments/pods": deploymentStore.Pods, - "deployments/events": deploymentStore.Events, - "deployments/horizontalpodautoscalers": deploymentStore.HPAs, - "statefulsets": statefulSetStore.StatefulSet, - "statefulsets/status": statefulSetStore.Status, - "statefulsets/pods": statefulSetStore.Pods, - "statefulsets/scale": statefulSetStore.Scale, - "statefulsets/events": statefulSetStore.Events, + "controllerrevisions": controllerRevisionStore.ControllerRevision, + "deployments": deploymentStore.Deployment, + "deployments/status": deploymentStore.Status, + "deployments/scale": deploymentStore.Scale, + "deployments/rollback": deploymentStore.Rollback, + "deployments/pods": deploymentStore.Pods, + "deployments/events": deploymentStore.Events, + "deployments/horizontalpodautoscalers": deploymentStore.HPAs, + "statefulsets": statefulSetStore.StatefulSet, + "statefulsets/status": statefulSetStore.Status, + "statefulsets/pods": statefulSetStore.Pods, + "statefulsets/scale": statefulSetStore.Scale, + "statefulsets/events": statefulSetStore.Events, + "statefulsets/horizontalpodautoscalers": statefulSetStore.HPAs, } return storageMap @@ -144,27 +146,28 @@ func (s *StorageProvider) v1Beta2Storage(restOptionsGetter generic.RESTOptionsGe replicaSetStore := replicasetstorage.NewStorageV1Beta2(restOptionsGetter, platformClient) storageMap := map[string]rest.Storage{ - "controllerrevisions": controllerRevisionStore.ControllerRevision, - "daemonsets": daemonSetStore.DaemonSet, - "daemonsets/pods": daemonSetStore.Pods, - "daemonsets/status": daemonSetStore.Status, - "daemonsets/events": daemonSetStore.Events, - "deployments": deploymentStore.Deployment, - "deployments/status": deploymentStore.Status, - "deployments/scale": deploymentStore.Scale, - "deployments/pods": deploymentStore.Pods, - "deployments/events": deploymentStore.Events, - "deployments/horizontalpodautoscalers": deploymentStore.HPAs, - "statefulsets": statefulSetStore.StatefulSet, - "statefulsets/status": statefulSetStore.Status, - "statefulsets/pods": statefulSetStore.Pods, - "statefulsets/scale": statefulSetStore.Scale, - "statefulsets/events": statefulSetStore.Events, - "replicasets": replicaSetStore.ReplicaSet, - "replicasets/pods": replicaSetStore.Pods, - "replicasets/status": replicaSetStore.Status, - "replicasets/scale": replicaSetStore.Scale, - "replicasets/events": replicaSetStore.Events, + "controllerrevisions": controllerRevisionStore.ControllerRevision, + "daemonsets": daemonSetStore.DaemonSet, + "daemonsets/pods": daemonSetStore.Pods, + "daemonsets/status": daemonSetStore.Status, + "daemonsets/events": daemonSetStore.Events, + "deployments": deploymentStore.Deployment, + "deployments/status": deploymentStore.Status, + "deployments/scale": deploymentStore.Scale, + "deployments/pods": deploymentStore.Pods, + "deployments/events": deploymentStore.Events, + "deployments/horizontalpodautoscalers": deploymentStore.HPAs, + "statefulsets": statefulSetStore.StatefulSet, + "statefulsets/status": statefulSetStore.Status, + "statefulsets/pods": statefulSetStore.Pods, + "statefulsets/scale": statefulSetStore.Scale, + "statefulsets/events": statefulSetStore.Events, + "statefulsets/horizontalpodautoscalers": statefulSetStore.HPAs, + "replicasets": replicaSetStore.ReplicaSet, + "replicasets/pods": replicaSetStore.Pods, + "replicasets/status": replicaSetStore.Status, + "replicasets/scale": replicaSetStore.Scale, + "replicasets/events": replicaSetStore.Events, } return storageMap diff --git a/pkg/platform/proxy/apps/statefulset/storage/hpa.go b/pkg/platform/proxy/apps/statefulset/storage/hpa.go new file mode 100644 index 000000000..d4a766463 --- /dev/null +++ b/pkg/platform/proxy/apps/statefulset/storage/hpa.go @@ -0,0 +1,122 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ + +package storage + +import ( + "context" + + "tkestack.io/tke/pkg/platform/proxy" + "tkestack.io/tke/pkg/util/apiclient" + + appsv1 "k8s.io/api/apps/v1" + autoscalingv1 "k8s.io/api/autoscaling/v1" + extensionsv1beta1 "k8s.io/api/extensions/v1beta1" + "k8s.io/apimachinery/pkg/api/errors" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/runtime/schema" + "k8s.io/apiserver/pkg/endpoints/request" + "k8s.io/apiserver/pkg/registry/rest" + "k8s.io/client-go/kubernetes" + platforminternalclient "tkestack.io/tke/api/client/clientset/internalversion/typed/platform/internalversion" +) + +// HPARest implements the REST endpoint for find hpalist by a statefulSet. +type HPARest struct { + rest.Storage + platformClient platforminternalclient.PlatformInterface +} + +var _ rest.Getter = &HPARest{} +var _ rest.GroupVersionKindProvider = &HPARest{} + +// GroupVersionKind is used to specify a particular GroupVersionKind to discovery. +func (r *HPARest) GroupVersionKind(containingGV schema.GroupVersion) schema.GroupVersionKind { + return autoscalingv1.SchemeGroupVersion.WithKind("HorizontalPodAutoscalerList") +} + +// New returns an empty object that can be used with Create and Update after +// request data has been put into it. +func (r *HPARest) New() runtime.Object { + return &autoscalingv1.HorizontalPodAutoscalerList{} +} + +// Get retrieves the object from the storage. It is required to support Patch. +func (r *HPARest) Get(ctx context.Context, name string, options *metav1.GetOptions) (runtime.Object, error) { + client, err := proxy.ClientSet(ctx, r.platformClient) + if err != nil { + return nil, err + } + + namespaceName, ok := request.NamespaceFrom(ctx) + if !ok { + return nil, errors.NewBadRequest("a namespace must be specified") + } + + if apiclient.ClusterVersionIsBefore19(client) { + return listHPAsByAppsBeta(ctx, client, namespaceName, name, options) + } + return listHPAsByApps(ctx, client, namespaceName, name, options) +} + +func listHPAsByAppsBeta(ctx context.Context, client *kubernetes.Clientset, namespaceName, name string, options *metav1.GetOptions) (runtime.Object, error) { + statefulSet, err := client.AppsV1beta1().StatefulSets(namespaceName).Get(ctx, name, *options) + if err != nil { + return nil, errors.NewNotFound(extensionsv1beta1.Resource("statefulsets/horizontalpodautoscalers"), name) + } + + hpas, err := client.AutoscalingV1().HorizontalPodAutoscalers(namespaceName).List(ctx, metav1.ListOptions{}) + if err != nil { + return nil, err + } + + hpaList := &autoscalingv1.HorizontalPodAutoscalerList{ + Items: make([]autoscalingv1.HorizontalPodAutoscaler, 0), + } + for _, hpa := range hpas.Items { + if hpa.Spec.ScaleTargetRef.Name == statefulSet.ObjectMeta.Name && hpa.Spec.ScaleTargetRef.Kind == "StatefulSet" { + hpaList.Items = append(hpaList.Items, hpa) + } + } + + return hpaList, nil +} + +func listHPAsByApps(ctx context.Context, client *kubernetes.Clientset, namespaceName, name string, options *metav1.GetOptions) (runtime.Object, error) { + statefulSet, err := client.AppsV1().StatefulSets(namespaceName).Get(ctx, name, *options) + if err != nil { + return nil, errors.NewNotFound(appsv1.Resource("statefulsets/horizontalpodautoscalers"), name) + } + + hpas, err := client.AutoscalingV1().HorizontalPodAutoscalers(namespaceName).List(ctx, metav1.ListOptions{}) + if err != nil { + return nil, err + } + + hpaList := &autoscalingv1.HorizontalPodAutoscalerList{ + Items: make([]autoscalingv1.HorizontalPodAutoscaler, 0), + } + for _, hpa := range hpas.Items { + if hpa.Spec.ScaleTargetRef.Name == statefulSet.ObjectMeta.Name && hpa.Spec.ScaleTargetRef.Kind == "StatefulSet" { + hpaList.Items = append(hpaList.Items, hpa) + } + } + + return hpaList, nil +} diff --git a/pkg/platform/proxy/apps/statefulset/storage/storage.go b/pkg/platform/proxy/apps/statefulset/storage/storage.go index 418c722cb..b98171776 100644 --- a/pkg/platform/proxy/apps/statefulset/storage/storage.go +++ b/pkg/platform/proxy/apps/statefulset/storage/storage.go @@ -45,6 +45,7 @@ type Storage struct { Status *StatusREST Scale *ScaleREST Events *EventREST + HPAs *HPARest } // REST implements pkg/api/rest.StandardStorage @@ -77,6 +78,9 @@ func NewStorageV1(_ genericregistry.RESTOptionsGetter, platformClient platformin Events: &EventREST{ platformClient: platformClient, }, + HPAs: &HPARest{ + platformClient: platformClient, + }, } } @@ -105,6 +109,9 @@ func NewStorageV1Beta1(_ genericregistry.RESTOptionsGetter, platformClient platf Events: &EventREST{ platformClient: platformClient, }, + HPAs: &HPARest{ + platformClient: platformClient, + }, } } @@ -133,6 +140,9 @@ func NewStorageV1Beta2(_ genericregistry.RESTOptionsGetter, platformClient platf Events: &EventREST{ platformClient: platformClient, }, + HPAs: &HPARest{ + platformClient: platformClient, + }, } } From 06c8baa18a5950b17ebb8b07cba785dbfbe30fed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=88=98=E7=A5=9E=E8=A5=BF=E7=BA=A2=E6=9F=BF?= <34213033+TomatoAres@users.noreply.github.com> Date: Tue, 17 Aug 2021 15:04:55 +0800 Subject: [PATCH 16/62] fix(platform): add console ip to global apiServer SAN(#1307) (#1487) Co-authored-by: Cui Shuaijie --- cmd/tke-installer/app/installer/installer.go | 1 + 1 file changed, 1 insertion(+) diff --git a/cmd/tke-installer/app/installer/installer.go b/cmd/tke-installer/app/installer/installer.go index 6598ac29c..c2902ef97 100644 --- a/cmd/tke-installer/app/installer/installer.go +++ b/cmd/tke-installer/app/installer/installer.go @@ -753,6 +753,7 @@ func (t *TKE) setClusterDefault(cluster *platformv1.Cluster, config *types.Confi } cluster.Spec.Features.EnableMasterSchedule = true + cluster.Spec.PublicAlternativeNames = append(cluster.Spec.PublicAlternativeNames, t.Para.Config.Gateway.Domain) if config.HA != nil { if t.Para.Config.HA.TKEHA != nil { cluster.Spec.Features.HA = &platformv1.HA{ From 5dff212259ced2bdb06fa97bf7e6816a409ca81e Mon Sep 17 00:00:00 2001 From: Leo Ryu Date: Tue, 17 Aug 2021 15:05:35 +0800 Subject: [PATCH 17/62] fix(platform): bootstrap not found loop (#1486) --- pkg/platform/controller/bootstrapapps/controller.go | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/pkg/platform/controller/bootstrapapps/controller.go b/pkg/platform/controller/bootstrapapps/controller.go index 07cc56837..c0e498091 100644 --- a/pkg/platform/controller/bootstrapapps/controller.go +++ b/pkg/platform/controller/bootstrapapps/controller.go @@ -201,10 +201,11 @@ func (c *BootstrapAppsController) sync(key string) error { } cluster, err := c.clsLister.Get(name) - if apierrors.IsNotFound(err) { - log.FromContext(ctx).Info("cluster has been deleted") - } if err != nil { + if apierrors.IsNotFound(err) { + log.FromContext(ctx).Info("cluster has been deleted") + return nil + } utilruntime.HandleError(fmt.Errorf("unable to retrieve cluster %v from store: %v", key, err)) return err } From 48967e3b1a5d68a9aaf5a52a67727ee5cbd803aa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=88=98=E7=A5=9E=E8=A5=BF=E7=BA=A2=E6=9F=BF?= <34213033+TomatoAres@users.noreply.github.com> Date: Tue, 17 Aug 2021 22:10:30 +0800 Subject: [PATCH 18/62] fix(platform): fix create cluster failed (#1491) Co-authored-by: Cui Shuaijie --- test/tke/tke.go | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/test/tke/tke.go b/test/tke/tke.go index c932bdea2..6ca906965 100644 --- a/test/tke/tke.go +++ b/test/tke/tke.go @@ -93,11 +93,13 @@ func (testTke *TestTKE) ClusterTemplate(nodes ...cloudprovider.Instance) *platfo func (testTke *TestTKE) CreateClusterInternal(cls *platformv1.Cluster) (cluster *platformv1.Cluster, err error) { klog.Info("Create cluster: ", cls.String()) + var counter int err = wait.PollImmediate(30*time.Second, 5*time.Minute, func() (bool, error) { cluster, err = testTke.TkeClient.PlatformV1().Clusters().Create(context.Background(), cls, metav1.CreateOptions{}) if err != nil { - klog.Warningf("Create cluster failed: %v", err) - return false, err + counter++ + klog.Warningf("Create cluster failed: %v, try counter:%d", err, counter) + return false, nil } return true, nil }) @@ -251,11 +253,13 @@ func (testTke *TestTKE) ImportCluster(host string, port int32, caCert []byte, to } // retry + var counter int err = wait.PollImmediate(30*time.Second, 5*time.Minute, func() (bool, error) { cluster, err = testTke.TkeClient.PlatformV1().Clusters().Create(context.Background(), cluster, metav1.CreateOptions{}) if err != nil { - klog.Warningf("Create cluster failed: %v", err) - return false, err + counter++ + klog.Warningf("Create cluster failed: %v,try count:%d", err, counter) + return false, nil } return true, nil }) From 7b4760db6f5fc37b77d4b258a6a33ebf7f24fa6e Mon Sep 17 00:00:00 2001 From: Leo Ryu Date: Mon, 23 Aug 2021 15:36:33 +0800 Subject: [PATCH 19/62] fix(application): selector with targetNamespace (#1502) --- api/application/v1/conversion.go | 1 + pkg/application/registry/application/strategy.go | 10 ++++++---- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/api/application/v1/conversion.go b/api/application/v1/conversion.go index c8816a8ad..f65c95ea4 100644 --- a/api/application/v1/conversion.go +++ b/api/application/v1/conversion.go @@ -47,6 +47,7 @@ func AddFieldLabelConversionsForApp(scheme *runtime.Scheme) error { case "spec.tenantID", "spec.name", "spec.targetCluster", + "spec.targetNamespace", "spec.type", "metadata.name": return label, value, nil diff --git a/pkg/application/registry/application/strategy.go b/pkg/application/registry/application/strategy.go index b55636e09..90c3e1d06 100644 --- a/pkg/application/registry/application/strategy.go +++ b/pkg/application/registry/application/strategy.go @@ -159,6 +159,7 @@ func MatchApplication(label labels.Selector, field fields.Selector) storage.Sele "spec.name", "spec.type", "spec.targetCluster", + "spec.targetNamespace", "metadata.name", }, } @@ -168,10 +169,11 @@ func MatchApplication(label labels.Selector, field fields.Selector) storage.Sele func ToSelectableFields(app *application.App) fields.Set { objectMetaFieldsSet := genericregistry.ObjectMetaFieldsSet(&app.ObjectMeta, false) specificFieldsSet := fields.Set{ - "spec.tenantID": app.Spec.TenantID, - "spec.name": app.Spec.Name, - "spec.type": string(app.Spec.Type), - "spec.targetCluster": app.Spec.TargetCluster, + "spec.tenantID": app.Spec.TenantID, + "spec.name": app.Spec.Name, + "spec.type": string(app.Spec.Type), + "spec.targetCluster": app.Spec.TargetCluster, + "spec.targetNamespace": app.Spec.TargetNamespace, } return genericregistry.MergeFieldsSets(objectMetaFieldsSet, specificFieldsSet) } From ce1ce0b3e3748e2f72914c9f761abbc7b5dcabe4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=88=98=E7=A5=9E=E8=A5=BF=E7=BA=A2=E6=9F=BF?= <34213033+TomatoAres@users.noreply.github.com> Date: Mon, 23 Aug 2021 19:25:57 +0800 Subject: [PATCH 20/62] ci(makefile): generate asset before build (#1421) Co-authored-by: Cui Shuaijie --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 3e1169b21..b90157e47 100644 --- a/Makefile +++ b/Makefile @@ -15,7 +15,7 @@ # specific language governing permissions and limitations under the License. .PHONY: all -all: lint test build +all: asset lint test build # ============================================================================== # Build options From 1fdf4f39286d6a876344093ead38c63a52baeb75 Mon Sep 17 00:00:00 2001 From: Leo Ryu Date: Mon, 23 Aug 2021 20:02:23 +0800 Subject: [PATCH 21/62] fix(platform): update cls/mc needupdate logic (#1500) --- .../controller/cluster/cluster_controller.go | 54 ++-- .../cluster/cluster_controller_test.go | 259 ++++++++++++++++++ .../controller/machine/machine_controller.go | 50 +++- .../machine/machine_controller_test.go | 256 +++++++++++++++++ 4 files changed, 583 insertions(+), 36 deletions(-) create mode 100644 pkg/platform/controller/cluster/cluster_controller_test.go create mode 100644 pkg/platform/controller/machine/machine_controller_test.go diff --git a/pkg/platform/controller/cluster/cluster_controller.go b/pkg/platform/controller/cluster/cluster_controller.go index 1c6c7f786..511f0e7a8 100644 --- a/pkg/platform/controller/cluster/cluster_controller.go +++ b/pkg/platform/controller/cluster/cluster_controller.go @@ -148,33 +148,45 @@ func (c *Controller) enqueue(obj *platformv1.Cluster) { } func (c *Controller) needsUpdate(old *platformv1.Cluster, new *platformv1.Cluster) bool { - if !reflect.DeepEqual(old.Spec, new.Spec) { + switch { + case !reflect.DeepEqual(old.Spec, new.Spec): return true - } - - if old.Status.Phase != platformv1.ClusterTerminating && new.Status.Phase == platformv1.ClusterTerminating { - return true - } - - if !reflect.DeepEqual(old.ObjectMeta.Annotations, new.ObjectMeta.Annotations) { + case !reflect.DeepEqual(old.ObjectMeta.Labels, new.ObjectMeta.Labels): return true - } - - if !reflect.DeepEqual(old.ObjectMeta.Labels, new.ObjectMeta.Labels) { + case !reflect.DeepEqual(old.ObjectMeta.Annotations, new.ObjectMeta.Annotations): return true - } - - // Control the synchronization interval through the health detection interval - // to avoid version conflicts caused by concurrent modification - healthCondition := new.GetCondition(conditionTypeHealthCheck) - if healthCondition == nil { + case old.Status.Phase != new.Status.Phase: return true - } - if time.Since(healthCondition.LastProbeTime.Time) > c.healthCheckPeriod { + case new.Status.Phase == platformv1.ClusterInitializing: + // if ResourceVersion is equal, it's an resync envent, should return true. + if old.ResourceVersion == new.ResourceVersion { + return true + } + if len(new.Status.Conditions) == 0 { + return true + } + if new.Status.Conditions[len(new.Status.Conditions)-1].Status == platformv1.ConditionUnknown { + return true + } + // if user set last condition false block procesee + if new.Status.Conditions[len(new.Status.Conditions)-1].Status == platformv1.ConditionFalse { + return false + } + fallthrough + case !reflect.DeepEqual(old.Status.Conditions, new.Status.Conditions): return true - } + default: + healthCondition := new.GetCondition(conditionTypeHealthCheck) + if healthCondition == nil { + // when healthCondition is not set, if ResourceVersion is equal, it's an resync envent, should return true. + return old.ResourceVersion == new.ResourceVersion + } + if time.Since(healthCondition.LastProbeTime.Time) > c.healthCheckPeriod { + return true + } - return false + return false + } } // Run will set up the event handlers for types we are interested in, as well diff --git a/pkg/platform/controller/cluster/cluster_controller_test.go b/pkg/platform/controller/cluster/cluster_controller_test.go new file mode 100644 index 000000000..f164a12b5 --- /dev/null +++ b/pkg/platform/controller/cluster/cluster_controller_test.go @@ -0,0 +1,259 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ + +package cluster + +import ( + "testing" + "time" + + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + platformv1 "tkestack.io/tke/api/platform/v1" +) + +func TestController_needsUpdate(t *testing.T) { + // type fields struct { + // queue workqueue.RateLimitingInterface + // lister platformv1lister.ClusterLister + // listerSynced cache.InformerSynced + // log log.Logger + // platformClient platformversionedclient.PlatformV1Interface + // deleter deletion.ClusterDeleterInterface + // healthCheckPeriod time.Duration + // } + type args struct { + old *platformv1.Cluster + new *platformv1.Cluster + } + tests := []struct { + name string + // fields fields + args args + want bool + }{ + { + name: "change spec", + args: args{ + old: &platformv1.Cluster{ + ObjectMeta: v1.ObjectMeta{ResourceVersion: "old"}, + Spec: platformv1.ClusterSpec{DisplayName: "old"}, + }, + new: &platformv1.Cluster{ + ObjectMeta: v1.ObjectMeta{ResourceVersion: "new"}, + Spec: platformv1.ClusterSpec{DisplayName: "nes"}, + }, + }, + want: true, + }, + { + name: "Initializing to Running", + args: args{ + old: &platformv1.Cluster{ + ObjectMeta: v1.ObjectMeta{ResourceVersion: "old"}, + Status: platformv1.ClusterStatus{Phase: platformv1.ClusterInitializing}, + }, + new: &platformv1.Cluster{ + ObjectMeta: v1.ObjectMeta{ResourceVersion: "new"}, + Status: platformv1.ClusterStatus{Phase: platformv1.ClusterRunning}, + }, + }, + want: true, + }, + { + name: "Initializing to Failed", + args: args{ + old: &platformv1.Cluster{ + ObjectMeta: v1.ObjectMeta{ResourceVersion: "old"}, + Status: platformv1.ClusterStatus{Phase: platformv1.ClusterInitializing}, + }, + new: &platformv1.Cluster{ + ObjectMeta: v1.ObjectMeta{ResourceVersion: "new"}, + Status: platformv1.ClusterStatus{Phase: platformv1.ClusterFailed}, + }, + }, + want: true, + }, + { + name: "Running to Failed", + args: args{ + old: &platformv1.Cluster{ + ObjectMeta: v1.ObjectMeta{ResourceVersion: "old"}, + Status: platformv1.ClusterStatus{Phase: platformv1.ClusterRunning}, + }, + new: &platformv1.Cluster{ + ObjectMeta: v1.ObjectMeta{ResourceVersion: "new"}, + Status: platformv1.ClusterStatus{Phase: platformv1.ClusterFailed}, + }, + }, + want: true, + }, + { + name: "Running to Terminating", + args: args{ + old: &platformv1.Cluster{ + ObjectMeta: v1.ObjectMeta{ResourceVersion: "old"}, + Status: platformv1.ClusterStatus{Phase: platformv1.ClusterRunning}, + }, + new: &platformv1.Cluster{ + ObjectMeta: v1.ObjectMeta{ResourceVersion: "new"}, + Status: platformv1.ClusterStatus{Phase: platformv1.ClusterTerminating}, + }, + }, + want: true, + }, + { + name: "Failed to Terminating", + args: args{ + old: &platformv1.Cluster{ + ObjectMeta: v1.ObjectMeta{ResourceVersion: "old"}, + Status: platformv1.ClusterStatus{Phase: platformv1.ClusterFailed}, + }, + new: &platformv1.Cluster{ + ObjectMeta: v1.ObjectMeta{ResourceVersion: "new"}, + Status: platformv1.ClusterStatus{Phase: platformv1.ClusterTerminating}, + }, + }, + want: true, + }, + { + name: "Failed to Running", + args: args{ + old: &platformv1.Cluster{ + ObjectMeta: v1.ObjectMeta{ResourceVersion: "old"}, + Status: platformv1.ClusterStatus{Phase: platformv1.ClusterFailed}, + }, + new: &platformv1.Cluster{ + ObjectMeta: v1.ObjectMeta{ResourceVersion: "new"}, + Status: platformv1.ClusterStatus{Phase: platformv1.ClusterRunning}, + }, + }, + want: true, + }, + { + name: "Failed to Initializing", + args: args{ + old: &platformv1.Cluster{ + ObjectMeta: v1.ObjectMeta{ResourceVersion: "old"}, + Status: platformv1.ClusterStatus{Phase: platformv1.ClusterFailed}, + }, + new: &platformv1.Cluster{ + ObjectMeta: v1.ObjectMeta{ResourceVersion: "new"}, + Status: platformv1.ClusterStatus{Phase: platformv1.ClusterInitializing}, + }, + }, + want: true, + }, + { + name: "last conditon unkonwn to false", + args: args{ + old: &platformv1.Cluster{ + ObjectMeta: v1.ObjectMeta{ResourceVersion: "old"}, + Status: platformv1.ClusterStatus{Phase: platformv1.ClusterInitializing, + Conditions: []platformv1.ClusterCondition{{Status: platformv1.ConditionUnknown}}}, + }, + new: &platformv1.Cluster{ + ObjectMeta: v1.ObjectMeta{ResourceVersion: "new"}, + Status: platformv1.ClusterStatus{Phase: platformv1.ClusterInitializing, + Conditions: []platformv1.ClusterCondition{{Status: platformv1.ConditionFalse}}}, + }, + }, + want: false, + }, + { + name: "last conditon unkonwn to true", + args: args{ + old: &platformv1.Cluster{ + ObjectMeta: v1.ObjectMeta{ResourceVersion: "old"}, + Status: platformv1.ClusterStatus{Phase: platformv1.ClusterInitializing, + Conditions: []platformv1.ClusterCondition{{Status: platformv1.ConditionUnknown}}}, + }, + new: &platformv1.Cluster{ + ObjectMeta: v1.ObjectMeta{ResourceVersion: "new"}, + Status: platformv1.ClusterStatus{Phase: platformv1.ClusterInitializing, + Conditions: []platformv1.ClusterCondition{{Status: platformv1.ConditionTrue}}}, + }, + }, + want: true, + }, + { + name: "last conditon unkonwn to true resync", + args: args{ + old: &platformv1.Cluster{ + ObjectMeta: v1.ObjectMeta{ResourceVersion: "new"}, + Status: platformv1.ClusterStatus{Phase: platformv1.ClusterInitializing, + Conditions: []platformv1.ClusterCondition{{Status: platformv1.ConditionUnknown}}}, + }, + new: &platformv1.Cluster{ + ObjectMeta: v1.ObjectMeta{ResourceVersion: "new"}, + Status: platformv1.ClusterStatus{Phase: platformv1.ClusterInitializing, + Conditions: []platformv1.ClusterCondition{{Status: platformv1.ConditionUnknown}}}, + }, + }, + want: true, + }, + { + name: "last conditon true to unknown", + args: args{ + old: &platformv1.Cluster{ + ObjectMeta: v1.ObjectMeta{ResourceVersion: "old"}, + Status: platformv1.ClusterStatus{Phase: platformv1.ClusterInitializing, + Conditions: []platformv1.ClusterCondition{{Status: platformv1.ConditionTrue}}}, + }, + new: &platformv1.Cluster{ + ObjectMeta: v1.ObjectMeta{ResourceVersion: "new"}, + Status: platformv1.ClusterStatus{Phase: platformv1.ClusterInitializing, + Conditions: []platformv1.ClusterCondition{{Status: platformv1.ConditionUnknown}}}, + }, + }, + want: true, + }, + { + name: "last conditon false to unknown", + args: args{ + old: &platformv1.Cluster{ + ObjectMeta: v1.ObjectMeta{ResourceVersion: "old"}, + Status: platformv1.ClusterStatus{Phase: platformv1.ClusterInitializing, + Conditions: []platformv1.ClusterCondition{{Status: platformv1.ConditionFalse}}}, + }, + new: &platformv1.Cluster{ + ObjectMeta: v1.ObjectMeta{ResourceVersion: "new"}, + Status: platformv1.ClusterStatus{Phase: platformv1.ClusterInitializing, + Conditions: []platformv1.ClusterCondition{{Status: platformv1.ConditionUnknown}}}, + }, + }, + want: true, + }, + // TODO: Add test cases. + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + c := &Controller{ + // queue: tt.fields.queue, + // lister: tt.fields.lister, + // listerSynced: tt.fields.listerSynced, + // log: tt.fields.log, + // platformClient: tt.fields.platformClient, + // deleter: tt.fields.deleter, + healthCheckPeriod: time.Second, + } + if got := c.needsUpdate(tt.args.old, tt.args.new); got != tt.want { + t.Errorf("Controller.needsUpdate() = %v, want %v", got, tt.want) + } + }) + } +} diff --git a/pkg/platform/controller/machine/machine_controller.go b/pkg/platform/controller/machine/machine_controller.go index d99af8865..f3d9e0d07 100644 --- a/pkg/platform/controller/machine/machine_controller.go +++ b/pkg/platform/controller/machine/machine_controller.go @@ -116,26 +116,46 @@ func (c *Controller) updateMachine(old, obj interface{}) { c.enqueue(machine) } -func (c *Controller) needsUpdate(oldMachine *platformv1.Machine, newMachine *platformv1.Machine) bool { - if !reflect.DeepEqual(oldMachine.Spec, newMachine.Spec) { +func (c *Controller) needsUpdate(old *platformv1.Machine, new *platformv1.Machine) bool { + switch { + case !reflect.DeepEqual(old.Spec, new.Spec): return true - } - - if oldMachine.Status.Phase != platformv1.MachineTerminating && newMachine.Status.Phase == platformv1.MachineTerminating { + case !reflect.DeepEqual(old.ObjectMeta.Labels, new.ObjectMeta.Labels): return true - } - - // Control the synchronization interval through the health detection interval - // to avoid version conflicts caused by concurrent modification - healthCondition := newMachine.GetCondition(conditionTypeHealthCheck) - if healthCondition == nil { + case !reflect.DeepEqual(old.ObjectMeta.Annotations, new.ObjectMeta.Annotations): return true - } - if time.Since(healthCondition.LastProbeTime.Time) > resyncInternal { + case old.Status.Phase != new.Status.Phase: return true - } + case new.Status.Phase == platformv1.MachineInitializing: + // if ResourceVersion is equal, it's an resync envent, should return true. + if old.ResourceVersion == new.ResourceVersion { + return true + } + if len(new.Status.Conditions) == 0 { + return true + } + if new.Status.Conditions[len(new.Status.Conditions)-1].Status == platformv1.ConditionUnknown { + return true + } + // if user set last condition false block procesee + if new.Status.Conditions[len(new.Status.Conditions)-1].Status == platformv1.ConditionFalse { + return false + } + fallthrough + case !reflect.DeepEqual(old.Status.Conditions, new.Status.Conditions): + return true + default: + healthCondition := new.GetCondition(conditionTypeHealthCheck) + if healthCondition == nil { + // when healthCondition is not set, if ResourceVersion is equal, it's an resync envent, should return true. + return old.ResourceVersion == new.ResourceVersion + } + if time.Since(healthCondition.LastProbeTime.Time) > resyncInternal { + return true + } - return false + return false + } } func (c *Controller) enqueue(obj *platformv1.Machine) { diff --git a/pkg/platform/controller/machine/machine_controller_test.go b/pkg/platform/controller/machine/machine_controller_test.go new file mode 100644 index 000000000..59306c3ee --- /dev/null +++ b/pkg/platform/controller/machine/machine_controller_test.go @@ -0,0 +1,256 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ + +package machine + +import ( + "testing" + + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + platformv1 "tkestack.io/tke/api/platform/v1" +) + +func TestController_needsUpdate(t *testing.T) { + type fields struct { + // queue workqueue.RateLimitingInterface + // lister platformv1lister.MachineLister + // listerSynced cache.InformerSynced + // log log.Logger + // platformClient platformversionedclient.PlatformV1Interface + // deleter deletion.MachineDeleterInterface + } + type args struct { + old *platformv1.Machine + new *platformv1.Machine + } + tests := []struct { + name string + fields fields + args args + want bool + }{ + { + name: "change spec", + args: args{ + old: &platformv1.Machine{ + ObjectMeta: v1.ObjectMeta{ResourceVersion: "old"}, + Spec: platformv1.MachineSpec{Type: "old"}, + }, + new: &platformv1.Machine{ + ObjectMeta: v1.ObjectMeta{ResourceVersion: "new"}, + Spec: platformv1.MachineSpec{Type: "nes"}, + }, + }, + want: true, + }, + { + name: "Initializing to Running", + args: args{ + old: &platformv1.Machine{ + ObjectMeta: v1.ObjectMeta{ResourceVersion: "old"}, + Status: platformv1.MachineStatus{Phase: platformv1.MachineInitializing}, + }, + new: &platformv1.Machine{ + ObjectMeta: v1.ObjectMeta{ResourceVersion: "new"}, + Status: platformv1.MachineStatus{Phase: platformv1.MachineInitializing}, + }, + }, + want: true, + }, + { + name: "Initializing to Failed", + args: args{ + old: &platformv1.Machine{ + ObjectMeta: v1.ObjectMeta{ResourceVersion: "old"}, + Status: platformv1.MachineStatus{Phase: platformv1.MachineInitializing}, + }, + new: &platformv1.Machine{ + ObjectMeta: v1.ObjectMeta{ResourceVersion: "new"}, + Status: platformv1.MachineStatus{Phase: platformv1.MachineFailed}, + }, + }, + want: true, + }, + { + name: "Running to Failed", + args: args{ + old: &platformv1.Machine{ + ObjectMeta: v1.ObjectMeta{ResourceVersion: "old"}, + Status: platformv1.MachineStatus{Phase: platformv1.MachineRunning}, + }, + new: &platformv1.Machine{ + ObjectMeta: v1.ObjectMeta{ResourceVersion: "new"}, + Status: platformv1.MachineStatus{Phase: platformv1.MachineFailed}, + }, + }, + want: true, + }, + { + name: "Running to Terminating", + args: args{ + old: &platformv1.Machine{ + ObjectMeta: v1.ObjectMeta{ResourceVersion: "old"}, + Status: platformv1.MachineStatus{Phase: platformv1.MachineRunning}, + }, + new: &platformv1.Machine{ + ObjectMeta: v1.ObjectMeta{ResourceVersion: "new"}, + Status: platformv1.MachineStatus{Phase: platformv1.MachineTerminating}, + }, + }, + want: true, + }, + { + name: "Failed to Initializing", + args: args{ + old: &platformv1.Machine{ + ObjectMeta: v1.ObjectMeta{ResourceVersion: "old"}, + Status: platformv1.MachineStatus{Phase: platformv1.MachineFailed}, + }, + new: &platformv1.Machine{ + ObjectMeta: v1.ObjectMeta{ResourceVersion: "new"}, + Status: platformv1.MachineStatus{Phase: platformv1.MachineInitializing}, + }, + }, + want: true, + }, + { + name: "Failed to Running", + args: args{ + old: &platformv1.Machine{ + ObjectMeta: v1.ObjectMeta{ResourceVersion: "old"}, + Status: platformv1.MachineStatus{Phase: platformv1.MachineFailed}, + }, + new: &platformv1.Machine{ + ObjectMeta: v1.ObjectMeta{ResourceVersion: "new"}, + Status: platformv1.MachineStatus{Phase: platformv1.MachineRunning}, + }, + }, + want: true, + }, + { + name: "Failed to Running", + args: args{ + old: &platformv1.Machine{ + ObjectMeta: v1.ObjectMeta{ResourceVersion: "old"}, + Status: platformv1.MachineStatus{Phase: platformv1.MachineFailed}, + }, + new: &platformv1.Machine{ + ObjectMeta: v1.ObjectMeta{ResourceVersion: "new"}, + Status: platformv1.MachineStatus{Phase: platformv1.MachineRunning}, + }, + }, + want: true, + }, + { + name: "last conditon unkonwn to false", + args: args{ + old: &platformv1.Machine{ + ObjectMeta: v1.ObjectMeta{ResourceVersion: "old"}, + Status: platformv1.MachineStatus{Phase: platformv1.MachineInitializing, + Conditions: []platformv1.MachineCondition{{Status: platformv1.ConditionUnknown}}}, + }, + new: &platformv1.Machine{ + ObjectMeta: v1.ObjectMeta{ResourceVersion: "new"}, + Status: platformv1.MachineStatus{Phase: platformv1.MachineInitializing, + Conditions: []platformv1.MachineCondition{{Status: platformv1.ConditionFalse}}}, + }, + }, + want: false, + }, + { + name: "last conditon unkonwn to true", + args: args{ + old: &platformv1.Machine{ + ObjectMeta: v1.ObjectMeta{ResourceVersion: "old"}, + Status: platformv1.MachineStatus{Phase: platformv1.MachineInitializing, + Conditions: []platformv1.MachineCondition{{Status: platformv1.ConditionUnknown}}}, + }, + new: &platformv1.Machine{ + ObjectMeta: v1.ObjectMeta{ResourceVersion: "new"}, + Status: platformv1.MachineStatus{Phase: platformv1.MachineInitializing, + Conditions: []platformv1.MachineCondition{{Status: platformv1.ConditionTrue}}}, + }, + }, + want: true, + }, + { + name: "last conditon unkonwn to true resync", + args: args{ + old: &platformv1.Machine{ + ObjectMeta: v1.ObjectMeta{ResourceVersion: "new"}, + Status: platformv1.MachineStatus{Phase: platformv1.MachineInitializing, + Conditions: []platformv1.MachineCondition{{Status: platformv1.ConditionUnknown}}}, + }, + new: &platformv1.Machine{ + ObjectMeta: v1.ObjectMeta{ResourceVersion: "new"}, + Status: platformv1.MachineStatus{Phase: platformv1.MachineInitializing, + Conditions: []platformv1.MachineCondition{{Status: platformv1.ConditionUnknown}}}, + }, + }, + want: true, + }, + { + name: "last conditon true to unknown", + args: args{ + old: &platformv1.Machine{ + ObjectMeta: v1.ObjectMeta{ResourceVersion: "old"}, + Status: platformv1.MachineStatus{Phase: platformv1.MachineInitializing, + Conditions: []platformv1.MachineCondition{{Status: platformv1.ConditionTrue}}}, + }, + new: &platformv1.Machine{ + ObjectMeta: v1.ObjectMeta{ResourceVersion: "new"}, + Status: platformv1.MachineStatus{Phase: platformv1.MachineInitializing, + Conditions: []platformv1.MachineCondition{{Status: platformv1.ConditionUnknown}}}, + }, + }, + want: true, + }, + { + name: "last conditon false to unknown", + args: args{ + old: &platformv1.Machine{ + ObjectMeta: v1.ObjectMeta{ResourceVersion: "old"}, + Status: platformv1.MachineStatus{Phase: platformv1.MachineInitializing, + Conditions: []platformv1.MachineCondition{{Status: platformv1.ConditionFalse}}}, + }, + new: &platformv1.Machine{ + ObjectMeta: v1.ObjectMeta{ResourceVersion: "new"}, + Status: platformv1.MachineStatus{Phase: platformv1.MachineInitializing, + Conditions: []platformv1.MachineCondition{{Status: platformv1.ConditionUnknown}}}, + }, + }, + want: true, + }, + // TODO: Add test cases. + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + c := &Controller{ + // queue: tt.fields.queue, + // lister: tt.fields.lister, + // listerSynced: tt.fields.listerSynced, + // log: tt.fields.log, + // platformClient: tt.fields.platformClient, + // deleter: tt.fields.deleter, + } + if got := c.needsUpdate(tt.args.old, tt.args.new); got != tt.want { + t.Errorf("Controller.needsUpdate() = %v, want %v", got, tt.want) + } + }) + } +} From 94e2547db29b5464e1feb54a24b365bbd48634e0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=88=98=E7=A5=9E=E8=A5=BF=E7=BA=A2=E6=9F=BF?= <34213033+TomatoAres@users.noreply.github.com> Date: Tue, 24 Aug 2021 09:59:53 +0800 Subject: [PATCH 22/62] fix(platform): add needUpdate func in cluster/machine provider (#1503) Co-authored-by: Cui Shuaijie --- .../controller/cluster/cluster_controller.go | 10 +++++++++- .../controller/machine/machine_controller.go | 9 ++++++++- pkg/platform/provider/cluster/interface.go | 6 ++++++ pkg/platform/provider/machine/interface.go | 14 ++++++++++++++ 4 files changed, 37 insertions(+), 2 deletions(-) diff --git a/pkg/platform/controller/cluster/cluster_controller.go b/pkg/platform/controller/cluster/cluster_controller.go index 511f0e7a8..acda2cd6b 100644 --- a/pkg/platform/controller/cluster/cluster_controller.go +++ b/pkg/platform/controller/cluster/cluster_controller.go @@ -34,6 +34,7 @@ import ( "k8s.io/apimachinery/pkg/util/wait" "k8s.io/client-go/tools/cache" "k8s.io/client-go/util/workqueue" + platformversionedclient "tkestack.io/tke/api/client/clientset/versioned/typed/platform/v1" platformv1informer "tkestack.io/tke/api/client/informers/externalversions/platform/v1" platformv1lister "tkestack.io/tke/api/client/listers/platform/v1" @@ -131,7 +132,14 @@ func (c *Controller) addCluster(obj interface{}) { func (c *Controller) updateCluster(old, obj interface{}) { oldCluster := old.(*platformv1.Cluster) cluster := obj.(*platformv1.Cluster) - if !c.needsUpdate(oldCluster, cluster) { + + controllerNeedUpddateResult := c.needsUpdate(oldCluster, cluster) + var providerNeedUpddateResult bool + provider, _ := clusterprovider.GetProvider(cluster.Spec.Type) + if provider != nil { + providerNeedUpddateResult = provider.NeedUpdate(oldCluster, cluster) + } + if !(controllerNeedUpddateResult || providerNeedUpddateResult) { return } c.log.Info("Updating cluster", "clusterName", cluster.Name) diff --git a/pkg/platform/controller/machine/machine_controller.go b/pkg/platform/controller/machine/machine_controller.go index f3d9e0d07..60e0882f2 100644 --- a/pkg/platform/controller/machine/machine_controller.go +++ b/pkg/platform/controller/machine/machine_controller.go @@ -109,7 +109,14 @@ func (c *Controller) addMachine(obj interface{}) { func (c *Controller) updateMachine(old, obj interface{}) { oldMachine := old.(*platformv1.Machine) machine := obj.(*platformv1.Machine) - if !c.needsUpdate(oldMachine, machine) { + + controllerNeedUpddateResult := c.needsUpdate(oldMachine, machine) + var providerNeedUpddateResult bool + provider, _ := machineprovider.GetProvider(machine.Spec.Type) + if provider != nil { + providerNeedUpddateResult = provider.NeedUpdate(oldMachine, machine) + } + if !(controllerNeedUpddateResult || providerNeedUpddateResult) { return } c.log.Info("Updating machine", "machine", machine.Name) diff --git a/pkg/platform/provider/cluster/interface.go b/pkg/platform/provider/cluster/interface.go index b4f0ab6c4..8326348ce 100644 --- a/pkg/platform/provider/cluster/interface.go +++ b/pkg/platform/provider/cluster/interface.go @@ -65,6 +65,8 @@ type ControllerProvider interface { Setup() error // Teardown called by controller for plugin do some clean job. Teardown() error + // NeedUpdate could be implemented by user to judge whether cluster need update or not. + NeedUpdate(old, new *platformv1.Cluster) bool OnCreate(ctx context.Context, cluster *v1.Cluster) error OnUpdate(ctx context.Context, cluster *v1.Cluster) error @@ -339,6 +341,10 @@ func (p *DelegateProvider) OnFilter(ctx context.Context, cluster *platformv1.Clu return true } +func (p *DelegateProvider) NeedUpdate(old, new *platformv1.Cluster) bool { + return false +} + func (p *DelegateProvider) getNextConditionType(conditionType string, handlers []Handler) string { var ( i int diff --git a/pkg/platform/provider/machine/interface.go b/pkg/platform/provider/machine/interface.go index 8b899eef1..f6046f854 100644 --- a/pkg/platform/provider/machine/interface.go +++ b/pkg/platform/provider/machine/interface.go @@ -51,7 +51,17 @@ const ( type Provider interface { Name() string + APIProvider + ControllerProvider +} + +type APIProvider interface { Validate(machine *platform.Machine) field.ErrorList +} + +type ControllerProvider interface { + // NeedUpdate could be implemented by user to judge whether machine need update or not. + NeedUpdate(old, new *platformv1.Machine) bool PreCreate(machine *platform.Machine) error AfterCreate(machine *platform.Machine) error @@ -213,6 +223,10 @@ func (p *DelegateProvider) OnDelete(ctx context.Context, machine *platformv1.Mac return nil } +func (p *DelegateProvider) NeedUpdate(old, new *platformv1.Machine) bool { + return false +} + func (p *DelegateProvider) getNextConditionType(conditionType string) string { var ( i int From cb97532d2110165fb6e29eafe9b6a5056fb46c23 Mon Sep 17 00:00:00 2001 From: Lis Date: Tue, 24 Aug 2021 10:45:39 +0800 Subject: [PATCH 23/62] feat(platform): support containerd as runtime (#1390) (#1470) --- api/openapi/zz_generated.openapi.go | 6 + api/platform/types.go | 9 + api/platform/v1/generated.pb.go | 812 +++++++++--------- api/platform/v1/generated.proto | 3 + api/platform/v1/types.go | 9 + api/platform/v1/zz_generated.conversion.go | 2 + build/docker/tools/provider-res/Dockerfile | 9 + build/docker/tools/provider-res/Makefile | 6 +- build/docker/tools/provider-res/download.sh | 37 + build/docker/tools/tke-installer/release.sh | 2 +- cmd/setup-env/main.go | 2 + .../app/installer/images/images.go | 2 +- cmd/tke-installer/app/installer/installer.go | 2 +- .../tke-platform-controller.yaml | 10 +- .../provider/baremetal/cluster/create.go | 43 +- .../provider/baremetal/cluster/kubeadm.go | 13 +- .../provider/baremetal/cluster/provider.go | 2 +- .../provider/baremetal/cluster/update.go | 4 +- .../baremetal/conf/containerd/config.toml | 32 + .../conf/containerd/containerd.service | 26 + .../provider/baremetal/images/images.go | 10 +- .../provider/baremetal/machine/create.go | 54 +- .../provider/baremetal/machine/kubeadm.go | 15 +- .../provider/baremetal/machine/provider.go | 3 +- .../baremetal/phases/containerd/containerd.go | 100 +++ .../baremetal/phases/galaxy/template.go | 6 + .../provider/baremetal/phases/image/image.go | 44 +- .../baremetal/phases/kubeadm/kubeadm.go | 50 +- pkg/platform/provider/baremetal/res/res.go | 8 + pkg/spec/spec.go | 2 + .../tke-platform-controller.yaml | 8 +- 31 files changed, 896 insertions(+), 435 deletions(-) create mode 100644 pkg/platform/provider/baremetal/conf/containerd/config.toml create mode 100644 pkg/platform/provider/baremetal/conf/containerd/containerd.service create mode 100644 pkg/platform/provider/baremetal/phases/containerd/containerd.go diff --git a/api/openapi/zz_generated.openapi.go b/api/openapi/zz_generated.openapi.go index f8623b997..471a0c9d9 100644 --- a/api/openapi/zz_generated.openapi.go +++ b/api/openapi/zz_generated.openapi.go @@ -47021,6 +47021,12 @@ func schema_tke_api_platform_v1_ClusterFeature(ref common.ReferenceCallback) com Format: "", }, }, + "containerRuntime": { + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, "upgrade": { SchemaProps: spec.SchemaProps{ Description: "Upgrade control upgrade process.", diff --git a/api/platform/types.go b/api/platform/types.go index 9964a63d6..4426bade7 100644 --- a/api/platform/types.go +++ b/api/platform/types.go @@ -231,6 +231,13 @@ const ( GPUVirtual GPUType = "Virtual" ) +type ContainerRuntimeType = string + +const ( + Containerd ContainerRuntimeType = "containerd" + Docker ContainerRuntimeType = "docker" +) + // ClusterPhase defines the phase of cluster constructor. type ClusterPhase string @@ -388,6 +395,8 @@ type ClusterFeature struct { // +optional EnableCilium bool // +optional + ContainerRuntime ContainerRuntimeType + // +optional IPv6DualStack bool // Upgrade control upgrade process. // +optional diff --git a/api/platform/v1/generated.pb.go b/api/platform/v1/generated.pb.go index 7d7a3f6f6..04b0d3f41 100644 --- a/api/platform/v1/generated.pb.go +++ b/api/platform/v1/generated.pb.go @@ -3122,391 +3122,393 @@ func init() { } var fileDescriptor_6e12a3c1f6fbf61e = []byte{ - // 6144 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x7d, 0x5b, 0x6c, 0x24, 0xd9, - 0x59, 0xf0, 0xf6, 0xcd, 0x6e, 0x7f, 0xbe, 0x9f, 0xf1, 0xec, 0xf6, 0x7a, 0x37, 0xe3, 0x49, 0x6f, - 0x12, 0xcd, 0x66, 0x77, 0xdb, 0x3b, 0xb3, 0x9b, 0xc9, 0x6c, 0x36, 0xb7, 0xbe, 0x78, 0x77, 0x9c, - 0xb1, 0x3d, 0x9d, 0xd3, 0x33, 0xde, 0x3f, 0xf9, 0xff, 0x3f, 0xd9, 0x72, 0xf5, 0xb1, 0x5d, 0x71, - 0x75, 0x55, 0xa5, 0xea, 0xb4, 0x77, 0xbc, 0xf0, 0x10, 0x2e, 0x0f, 0x08, 0x01, 0x0a, 0x44, 0x02, - 0x29, 0x10, 0x2e, 0x09, 0x12, 0x88, 0x10, 0x29, 0x22, 0x88, 0x87, 0x28, 0x20, 0x84, 0x90, 0x58, - 0x21, 0x84, 0x22, 0x9e, 0x22, 0xa4, 0x18, 0x62, 0x02, 0x82, 0x07, 0x04, 0xaf, 0xcc, 0x13, 0x3a, - 0x97, 0x3a, 0x75, 0xaa, 0xba, 0xdb, 0xdd, 0x35, 0xeb, 0xe9, 0xf8, 0x61, 0xde, 0xba, 0xbe, 0xdb, - 0xf9, 0xce, 0xed, 0xfb, 0xbe, 0xf3, 0x9d, 0x4b, 0xc3, 0x2a, 0x3d, 0x20, 0x01, 0x35, 0xcc, 0x83, - 0x8a, 0xe5, 0xb2, 0xdf, 0xab, 0x86, 0x67, 0xad, 0x7a, 0xb6, 0x41, 0x77, 0x5d, 0xbf, 0xb3, 0x7a, - 0x78, 0x75, 0x75, 0x8f, 0x38, 0xc4, 0x37, 0x28, 0x69, 0x57, 0x3c, 0xdf, 0xa5, 0x2e, 0x5a, 0xd1, - 0x18, 0x2a, 0xf4, 0x80, 0x54, 0x0c, 0xcf, 0xaa, 0x84, 0x0c, 0x95, 0xc3, 0xab, 0xcb, 0x2f, 0xec, - 0x59, 0x74, 0xbf, 0xbb, 0x53, 0x31, 0xdd, 0xce, 0xea, 0x9e, 0xbb, 0xe7, 0xae, 0x72, 0xbe, 0x9d, - 0xee, 0x2e, 0xff, 0xe2, 0x1f, 0xfc, 0x97, 0x90, 0xb7, 0x5c, 0x3e, 0xb8, 0x11, 0xb0, 0xb2, 0x59, - 0xb9, 0xa6, 0xeb, 0x93, 0x3e, 0x65, 0x2e, 0xbf, 0x1c, 0xd1, 0x74, 0x0c, 0x73, 0xdf, 0x72, 0x88, - 0x7f, 0xb4, 0xea, 0x1d, 0xec, 0x71, 0x26, 0x9f, 0x04, 0x6e, 0xd7, 0x37, 0x49, 0x2a, 0xae, 0x60, - 0xb5, 0x43, 0xa8, 0xd1, 0xaf, 0xac, 0xd5, 0x41, 0x5c, 0x7e, 0xd7, 0xa1, 0x56, 0xa7, 0xb7, 0x98, - 0xeb, 0xc3, 0x18, 0x02, 0x73, 0x9f, 0x74, 0x8c, 0x1e, 0xbe, 0x97, 0x06, 0xf1, 0x75, 0xa9, 0x65, - 0xaf, 0x5a, 0x0e, 0x0d, 0xa8, 0xdf, 0xc3, 0x74, 0xad, 0x5f, 0x77, 0x19, 0x9e, 0x67, 0x5b, 0xa6, - 0x41, 0x2d, 0xd7, 0xe9, 0x53, 0xa3, 0xf2, 0x6f, 0x66, 0x60, 0xaa, 0xda, 0x6e, 0xbb, 0x4e, 0xcb, - 0x23, 0x26, 0x7a, 0x1e, 0x8a, 0x94, 0x38, 0x86, 0x43, 0xd7, 0x1b, 0xa5, 0xcc, 0xe5, 0xcc, 0x95, - 0xa9, 0xda, 0xc2, 0x3b, 0xc7, 0x2b, 0x8f, 0x9d, 0x1c, 0xaf, 0x14, 0xef, 0x48, 0x38, 0x56, 0x14, - 0xe8, 0x43, 0x30, 0x6d, 0xda, 0xdd, 0x80, 0x12, 0x7f, 0xcb, 0xe8, 0x90, 0x52, 0x96, 0x33, 0x5c, - 0x90, 0x0c, 0xd3, 0xf5, 0x08, 0x85, 0x75, 0x3a, 0xf4, 0x2c, 0x4c, 0x1e, 0x12, 0x3f, 0xb0, 0x5c, - 0xa7, 0x94, 0xe3, 0x2c, 0xf3, 0x92, 0x65, 0x72, 0x5b, 0x80, 0x71, 0x88, 0x2f, 0xff, 0x59, 0x06, - 0x72, 0x55, 0xcf, 0x43, 0x6f, 0x42, 0x91, 0x75, 0x49, 0xdb, 0xa0, 0x06, 0xd7, 0x6b, 0xfa, 0xda, - 0x8b, 0x15, 0xd1, 0x42, 0x15, 0xbd, 0x85, 0x2a, 0xde, 0xc1, 0x1e, 0x03, 0x04, 0x15, 0x46, 0x5d, - 0x39, 0xbc, 0x5a, 0xb9, 0xbd, 0xf3, 0x05, 0x62, 0xd2, 0x4d, 0x42, 0x8d, 0x1a, 0x92, 0xa5, 0x40, - 0x04, 0xc3, 0x4a, 0x2a, 0xda, 0x84, 0x7c, 0xe0, 0x11, 0x93, 0x57, 0x62, 0xfa, 0xda, 0x73, 0x95, - 0x7e, 0x03, 0x59, 0x6b, 0x4a, 0x26, 0xbb, 0xea, 0x79, 0xac, 0xd1, 0x6a, 0x33, 0x52, 0x70, 0x9e, - 0x7d, 0x61, 0x2e, 0xa6, 0xfc, 0x83, 0x0c, 0x2c, 0x54, 0xbb, 0x74, 0xff, 0xed, 0x37, 0xc8, 0xce, - 0xbe, 0xeb, 0x1e, 0x54, 0xdb, 0x6d, 0x1f, 0x7d, 0x1e, 0x26, 0x77, 0xba, 0x96, 0x4d, 0x2d, 0x47, - 0x56, 0xe2, 0x46, 0x65, 0xc8, 0x7c, 0xa9, 0xd4, 0x04, 0x7d, 0x52, 0x54, 0x6d, 0x9a, 0x35, 0x97, - 0x44, 0xe2, 0x50, 0x2a, 0x32, 0xa1, 0x48, 0xee, 0x51, 0xe2, 0x3b, 0x86, 0x2d, 0x2b, 0xf2, 0xca, - 0xd0, 0x12, 0xd6, 0x24, 0x43, 0x4f, 0x11, 0x33, 0xac, 0xd7, 0x43, 0x2c, 0x56, 0x82, 0xcb, 0x2d, - 0x98, 0xa9, 0xb9, 0x2e, 0x1b, 0x80, 0x86, 0xc7, 0xfa, 0xa6, 0x0e, 0x39, 0xc3, 0xf3, 0x64, 0x8d, - 0xde, 0x37, 0xb4, 0xbc, 0xaa, 0xe7, 0xd5, 0xa6, 0x65, 0x8b, 0xb1, 0xbe, 0xc5, 0x8c, 0xbb, 0xfc, - 0x24, 0x3c, 0x31, 0xa0, 0xaa, 0xe5, 0xdf, 0xc9, 0xc2, 0x74, 0xbd, 0xb5, 0x7e, 0xdb, 0x63, 0xe3, - 0xd6, 0xf5, 0xc7, 0x30, 0x16, 0x70, 0x6c, 0x2c, 0xbc, 0x38, 0xb4, 0x4a, 0x9a, 0x76, 0x83, 0x06, - 0x04, 0xfa, 0x2c, 0x4c, 0x04, 0xd4, 0xa0, 0xdd, 0x80, 0x8f, 0xf9, 0xe9, 0x6b, 0xd7, 0x52, 0x49, - 0xe5, 0x9c, 0xb5, 0x39, 0x29, 0x77, 0x42, 0x7c, 0x63, 0x29, 0xb1, 0xfc, 0x09, 0x40, 0x1a, 0xf1, - 0x6b, 0xc4, 0xa0, 0x5d, 0x3f, 0x36, 0xcd, 0x32, 0x43, 0xa6, 0xd9, 0x5f, 0x65, 0x60, 0x5e, 0x93, - 0xb0, 0x61, 0x05, 0x14, 0xfd, 0xbf, 0x9e, 0x66, 0xae, 0x8c, 0xd6, 0xcc, 0x8c, 0x9b, 0x37, 0xb2, - 0x32, 0x1d, 0x21, 0x44, 0x6b, 0xe2, 0x4f, 0x43, 0xc1, 0xa2, 0xa4, 0x13, 0x94, 0xb2, 0x97, 0x73, - 0x57, 0xa6, 0xaf, 0x3d, 0x9f, 0xa6, 0x35, 0x6a, 0xb3, 0x52, 0x70, 0x61, 0x9d, 0x89, 0xc0, 0x42, - 0x52, 0xf9, 0xf7, 0xe2, 0x95, 0x38, 0x97, 0xf6, 0xec, 0x3b, 0x39, 0x58, 0xec, 0xe9, 0xd7, 0x14, - 0x3d, 0x85, 0x9a, 0xb0, 0x14, 0x50, 0xd7, 0x37, 0xf6, 0xc8, 0x36, 0x71, 0xda, 0xae, 0x2f, 0x09, - 0xa4, 0xae, 0x4f, 0x4b, 0xbe, 0xa5, 0x56, 0x1f, 0x1a, 0xdc, 0x97, 0x13, 0x5d, 0x85, 0x82, 0xb7, - 0x6f, 0x04, 0x44, 0xea, 0xfe, 0x54, 0xd8, 0xb6, 0x4d, 0x06, 0xbc, 0x7f, 0xbc, 0x02, 0xdc, 0x3b, - 0xf0, 0x2f, 0x2c, 0x28, 0xd1, 0x07, 0x60, 0xc2, 0x27, 0x46, 0xe0, 0x3a, 0xa5, 0x3c, 0xe7, 0x51, - 0xe3, 0x12, 0x73, 0x28, 0x96, 0x58, 0x74, 0x0d, 0xc0, 0x27, 0xd4, 0x3f, 0xaa, 0xbb, 0x5d, 0x87, - 0x96, 0x0a, 0x97, 0x33, 0x57, 0x0a, 0xd1, 0xcc, 0xc3, 0x0a, 0x83, 0x35, 0x2a, 0xf4, 0xab, 0x19, - 0x78, 0xca, 0x36, 0x02, 0x8a, 0xc9, 0xba, 0x63, 0x51, 0xcb, 0xb0, 0xad, 0xb7, 0x2d, 0x67, 0xef, - 0x8e, 0xd5, 0x61, 0xc3, 0xa3, 0xe3, 0x95, 0x26, 0xf8, 0x50, 0xfc, 0xe0, 0x68, 0x43, 0x91, 0xb1, - 0xd5, 0x9e, 0x91, 0x25, 0x3e, 0xb5, 0x31, 0x58, 0x2c, 0x3e, 0xad, 0xcc, 0x72, 0x9b, 0x0f, 0xac, - 0xa6, 0xef, 0xde, 0x3b, 0xba, 0xed, 0x31, 0xeb, 0x1f, 0xa0, 0x55, 0x98, 0x72, 0x8c, 0x0e, 0x09, - 0x3c, 0xc3, 0x24, 0xb2, 0xd3, 0x16, 0x65, 0x39, 0x53, 0x5b, 0x21, 0x02, 0x47, 0x34, 0xe8, 0x32, - 0xe4, 0x9d, 0x68, 0x50, 0x29, 0x0b, 0xc1, 0x47, 0x13, 0xc7, 0x94, 0xbf, 0x92, 0x85, 0x49, 0x39, - 0xc6, 0xc6, 0x60, 0xe3, 0xb6, 0x62, 0x36, 0x6e, 0x84, 0xf9, 0x27, 0x34, 0x1b, 0x68, 0xdf, 0xb6, - 0x13, 0xf6, 0xad, 0x32, 0xb2, 0xc4, 0xd3, 0x6d, 0xdb, 0xd7, 0xb3, 0x30, 0x23, 0x29, 0xf9, 0x40, - 0x1c, 0x43, 0xd3, 0xb4, 0x62, 0x4d, 0x73, 0x75, 0xd4, 0x8a, 0xa8, 0x28, 0xaa, 0x6f, 0xfb, 0xfc, - 0xdf, 0x44, 0xfb, 0xbc, 0x94, 0x4e, 0xec, 0xe9, 0x8d, 0xf4, 0xd7, 0x19, 0x58, 0xd0, 0xc9, 0xc7, - 0x60, 0xc0, 0x71, 0xdc, 0x80, 0xbf, 0x90, 0xaa, 0x3a, 0x03, 0x2c, 0xf8, 0xaf, 0x25, 0xaa, 0xc1, - 0x4d, 0xf8, 0x65, 0xc8, 0xd3, 0x23, 0x2f, 0x9c, 0x64, 0xaa, 0x69, 0xef, 0x1c, 0x79, 0x04, 0x73, - 0x0c, 0xb3, 0x60, 0x36, 0x39, 0x24, 0xb6, 0x9c, 0x5b, 0xca, 0x82, 0x6d, 0x30, 0xa0, 0xb2, 0x60, - 0xfc, 0x0b, 0x0b, 0xca, 0x34, 0x26, 0xfb, 0x97, 0x32, 0x80, 0x7a, 0xbb, 0x22, 0x8d, 0xcd, 0x7e, - 0x26, 0xb4, 0xb0, 0x42, 0xbf, 0xd9, 0x98, 0x85, 0xed, 0xb5, 0xa9, 0xb9, 0xd3, 0x6c, 0x6a, 0xf9, - 0x57, 0x72, 0xf1, 0x36, 0x62, 0xed, 0x30, 0x86, 0x39, 0x11, 0xf6, 0x42, 0x76, 0x78, 0x2f, 0xe4, - 0x46, 0xee, 0x85, 0x57, 0x61, 0xd6, 0x36, 0x28, 0x09, 0x68, 0xe8, 0xc5, 0x84, 0x3b, 0xb9, 0x28, - 0x59, 0x67, 0x37, 0x74, 0x24, 0x8e, 0xd3, 0x32, 0x67, 0xdd, 0x26, 0x81, 0xe9, 0x5b, 0xdc, 0x22, - 0x73, 0xef, 0xa2, 0x39, 0xeb, 0x46, 0x84, 0xc2, 0x3a, 0x1d, 0xba, 0x0d, 0x17, 0x4d, 0xb7, 0xe3, - 0x19, 0xd4, 0xda, 0xb1, 0x89, 0x6c, 0x48, 0x56, 0x8b, 0xd2, 0xc4, 0xe5, 0xdc, 0x95, 0xa9, 0xda, - 0x93, 0x27, 0xc7, 0x2b, 0x17, 0xeb, 0xfd, 0x08, 0x70, 0x7f, 0xbe, 0xf2, 0xdf, 0x65, 0x60, 0x29, - 0xd9, 0x21, 0x63, 0x98, 0x7f, 0xdb, 0xf1, 0xf9, 0x97, 0xce, 0x4a, 0x31, 0x1d, 0x07, 0xcc, 0xc1, - 0x3f, 0xc8, 0xc0, 0x5c, 0x44, 0xea, 0x93, 0x80, 0xf9, 0x3a, 0x7d, 0x06, 0x3e, 0xa5, 0xf7, 0xfd, - 0xfd, 0xe3, 0x95, 0x69, 0x49, 0xa6, 0x0d, 0x85, 0xcb, 0x90, 0xdf, 0x77, 0x03, 0x9a, 0x1c, 0x2c, - 0x37, 0xdd, 0x80, 0x62, 0x8e, 0x61, 0x14, 0x9e, 0xeb, 0x53, 0x3e, 0x56, 0x0a, 0x11, 0x45, 0xd3, - 0xf5, 0x29, 0xe6, 0x18, 0x4e, 0x61, 0xd0, 0x7d, 0x39, 0x24, 0x22, 0x0a, 0x83, 0xee, 0x63, 0x8e, - 0x29, 0xbf, 0x06, 0x17, 0x42, 0x45, 0x3d, 0xcf, 0x8e, 0x79, 0x66, 0x97, 0xde, 0xf5, 0xda, 0x06, - 0x15, 0x2a, 0x17, 0x35, 0xcf, 0x1c, 0x22, 0x70, 0x44, 0x53, 0xfe, 0x6e, 0x64, 0x75, 0x58, 0xc7, - 0xbb, 0x0e, 0x71, 0xe8, 0x08, 0x56, 0xe7, 0xe7, 0x32, 0x50, 0xf4, 0x09, 0x5f, 0x10, 0x06, 0x23, - 0x2f, 0xb6, 0x92, 0xe5, 0x60, 0x29, 0xa0, 0xf6, 0x7c, 0xd8, 0xd5, 0x21, 0xe4, 0xfe, 0xf1, 0x4a, - 0x69, 0x10, 0x35, 0x56, 0x05, 0xb3, 0xd1, 0x37, 0x90, 0x8c, 0xd9, 0xa8, 0x36, 0x09, 0x2c, 0x9f, - 0xb4, 0x79, 0x3d, 0x0a, 0x91, 0x8d, 0x6a, 0x08, 0x30, 0x0e, 0xf1, 0x8c, 0xd4, 0xec, 0xfa, 0x3e, - 0x71, 0x44, 0xaf, 0x69, 0xa4, 0x75, 0x01, 0xc6, 0x21, 0x9e, 0x35, 0xb0, 0x71, 0x68, 0x58, 0xb6, - 0xb1, 0x63, 0x13, 0xd9, 0x81, 0xaa, 0x81, 0xab, 0x21, 0x02, 0x47, 0x34, 0x4c, 0x76, 0x97, 0x37, - 0x75, 0x9b, 0xf7, 0xa6, 0x26, 0x5b, 0xf4, 0x40, 0x1b, 0x87, 0xf8, 0xf2, 0x37, 0x72, 0x5a, 0x5f, - 0x38, 0x6d, 0x8b, 0x4f, 0xd9, 0xe1, 0x7d, 0xf1, 0x8a, 0x72, 0xae, 0x62, 0xc8, 0xbd, 0x37, 0xee, - 0x27, 0xef, 0x1f, 0xaf, 0xcc, 0x2b, 0x71, 0x71, 0xd7, 0x89, 0xf6, 0x98, 0x0d, 0x0a, 0x68, 0xd3, - 0x77, 0x77, 0x08, 0x8b, 0xf8, 0xa4, 0x7b, 0x4e, 0x13, 0x60, 0x6a, 0xf6, 0x4a, 0x13, 0x84, 0xe3, - 0x72, 0xd1, 0x21, 0x20, 0x06, 0xb8, 0xe3, 0x1b, 0x4e, 0xc0, 0x15, 0xe1, 0xa5, 0xe5, 0x53, 0x97, - 0xb6, 0x2c, 0x4b, 0x43, 0x1b, 0x3d, 0xd2, 0x70, 0x9f, 0x12, 0x34, 0xc7, 0x52, 0x38, 0x35, 0x58, - 0x7f, 0x16, 0x26, 0x3b, 0x24, 0x08, 0x8c, 0x3d, 0xc2, 0x63, 0x6c, 0xcd, 0xa1, 0x6d, 0x0a, 0x30, - 0x0e, 0xf1, 0xe5, 0xff, 0x29, 0xc0, 0x62, 0xd8, 0x4b, 0x3e, 0x69, 0x13, 0x87, 0xc5, 0xcc, 0x63, - 0x70, 0x42, 0xfa, 0x6a, 0x2e, 0x9b, 0x76, 0x35, 0x97, 0x1b, 0x71, 0x35, 0x57, 0x01, 0x20, 0xd4, - 0x6c, 0xd7, 0xab, 0x75, 0xe2, 0x53, 0xde, 0x3f, 0x33, 0xb5, 0x39, 0xa6, 0xd2, 0xda, 0x9d, 0x7a, - 0x43, 0x40, 0xb1, 0x46, 0x81, 0x9e, 0x83, 0x29, 0xf1, 0x75, 0x8b, 0x1c, 0xf1, 0x26, 0x9e, 0xa9, - 0xcd, 0xb2, 0xa9, 0x20, 0xc8, 0x6f, 0x91, 0x23, 0x1c, 0xe1, 0x51, 0x1d, 0x16, 0xd9, 0x47, 0xb5, - 0xb9, 0x5e, 0xb7, 0x2d, 0xe2, 0x50, 0x5e, 0xc6, 0x04, 0x67, 0xba, 0x78, 0x72, 0xbc, 0xb2, 0xc8, - 0x98, 0x62, 0x48, 0xdc, 0x4b, 0x8f, 0x3e, 0x09, 0x0b, 0x31, 0x20, 0x2b, 0x78, 0x92, 0xcb, 0x58, - 0x3a, 0x39, 0x5e, 0x59, 0x88, 0xc9, 0x60, 0xe5, 0xf7, 0x50, 0xa3, 0x32, 0x4c, 0x98, 0x06, 0x2f, - 0xbb, 0xc8, 0xf9, 0x80, 0x8d, 0x07, 0x59, 0x37, 0x89, 0x41, 0x2b, 0x50, 0x30, 0x0d, 0x26, 0x7a, - 0x8a, 0x93, 0x4c, 0x31, 0x4f, 0x21, 0xea, 0x23, 0xe0, 0xac, 0xa1, 0xcc, 0xa8, 0x12, 0x10, 0x35, - 0x94, 0xa6, 0xbd, 0x46, 0xc1, 0x1a, 0xca, 0x54, 0xfa, 0x4e, 0x47, 0x0d, 0x15, 0x29, 0x1a, 0xe1, - 0x59, 0xe9, 0xd4, 0x3d, 0x20, 0x4e, 0x69, 0x86, 0x77, 0x1b, 0x2f, 0xfd, 0x0e, 0x03, 0x60, 0x01, - 0x47, 0x1f, 0x81, 0xb9, 0x9d, 0x30, 0x0b, 0xc5, 0x11, 0xa5, 0x59, 0x4e, 0x89, 0x4e, 0x8e, 0x57, - 0xe6, 0x6a, 0x31, 0x0c, 0x4e, 0x50, 0x32, 0x5e, 0x93, 0xf8, 0xd4, 0xda, 0xb5, 0x4c, 0x83, 0x12, - 0xa6, 0xce, 0x5c, 0xc4, 0x5b, 0x8f, 0x61, 0x70, 0x82, 0xb2, 0xfc, 0xf7, 0x19, 0xb8, 0xd8, 0x33, - 0xf6, 0xc7, 0xe0, 0xef, 0xdf, 0x88, 0xfb, 0xfb, 0x6b, 0x23, 0xbb, 0x1a, 0xa5, 0xe4, 0x00, 0x87, - 0xff, 0xdf, 0x45, 0xe5, 0xf0, 0xc3, 0xcc, 0xd1, 0xd3, 0x90, 0xb7, 0xbc, 0xc3, 0x40, 0x7a, 0xcf, - 0x22, 0x33, 0xb6, 0xeb, 0xcd, 0xed, 0x16, 0xe6, 0x50, 0x74, 0x05, 0x8a, 0x5e, 0x77, 0xc7, 0xb6, - 0xcc, 0x8d, 0x1a, 0x9f, 0x85, 0x45, 0x91, 0x29, 0x6c, 0x4a, 0x18, 0x56, 0x58, 0x36, 0x42, 0x2c, - 0x47, 0x64, 0x0d, 0x37, 0x6a, 0x7c, 0x02, 0x16, 0xc5, 0x08, 0x59, 0x57, 0x50, 0xac, 0x51, 0xa0, - 0x17, 0x61, 0x72, 0xcf, 0xeb, 0xf2, 0x68, 0x4c, 0xb8, 0xfd, 0xc7, 0x99, 0xf9, 0x79, 0xbd, 0x79, - 0x57, 0x86, 0x1a, 0xe1, 0x4f, 0x1c, 0x92, 0xa1, 0x26, 0x2c, 0x11, 0x87, 0x39, 0x99, 0x4d, 0x83, - 0xaf, 0x25, 0xcd, 0x7d, 0xd2, 0xee, 0xda, 0x84, 0xcf, 0xc3, 0x62, 0x94, 0x0e, 0x59, 0xeb, 0x43, - 0x83, 0xfb, 0x72, 0xa2, 0x57, 0x21, 0xbb, 0x6f, 0xc8, 0x2c, 0xc3, 0x33, 0x43, 0x1b, 0xf9, 0x66, - 0xb5, 0x36, 0x71, 0x72, 0xbc, 0x92, 0xbd, 0x59, 0xc5, 0xd9, 0x7d, 0x83, 0x0d, 0xac, 0xe0, 0xc0, - 0xf2, 0x94, 0xaf, 0x09, 0x4a, 0x93, 0x3c, 0xaa, 0xe4, 0x03, 0xab, 0x15, 0xc3, 0xe0, 0x04, 0x25, - 0xfa, 0x14, 0x14, 0x76, 0x2d, 0x9b, 0x04, 0xa5, 0x22, 0xef, 0xe0, 0xf7, 0x0f, 0x2d, 0xfb, 0x35, - 0xcb, 0xd6, 0x82, 0x38, 0xf6, 0x15, 0x60, 0x21, 0x02, 0x1d, 0x40, 0x61, 0xdf, 0x75, 0x0f, 0x82, - 0xd2, 0x14, 0x97, 0xf5, 0x91, 0x51, 0x07, 0x8b, 0x1c, 0x00, 0x95, 0x9b, 0x8c, 0x79, 0xcd, 0xa1, - 0xfe, 0x51, 0xed, 0xc9, 0xb0, 0x00, 0x0e, 0xfb, 0xd9, 0x7f, 0x5a, 0x29, 0xb2, 0x1f, 0xbc, 0x17, - 0x44, 0x19, 0x68, 0x17, 0xa6, 0xcd, 0xc0, 0x0a, 0x53, 0x5a, 0xdc, 0x10, 0x8c, 0xb4, 0xbc, 0xed, - 0xc9, 0x58, 0xd6, 0xe6, 0xb9, 0x61, 0x8e, 0xe0, 0x58, 0x17, 0x8c, 0x02, 0x58, 0x30, 0x12, 0xb9, - 0x61, 0x6e, 0x46, 0x46, 0x09, 0x7e, 0x7b, 0x92, 0xdb, 0xdc, 0x52, 0x26, 0xa1, 0xb8, 0xa7, 0x00, - 0xb4, 0x09, 0x17, 0xe4, 0x30, 0x21, 0xd4, 0xb7, 0xcc, 0xa0, 0x45, 0xfc, 0x43, 0xe2, 0x73, 0xab, - 0x54, 0x54, 0xa1, 0xf0, 0x85, 0xb5, 0x5e, 0x12, 0xdc, 0x8f, 0x8f, 0xad, 0x78, 0x2c, 0xef, 0xf0, - 0x7a, 0xa3, 0x6b, 0xd8, 0x2d, 0xa6, 0x2f, 0x37, 0x5a, 0xc5, 0x28, 0x82, 0x58, 0x6f, 0x6a, 0x48, - 0x1c, 0xa7, 0x45, 0x37, 0x60, 0x46, 0xc8, 0xac, 0x5b, 0xb6, 0xd5, 0xed, 0x70, 0xa3, 0x55, 0xac, - 0x2d, 0x49, 0xde, 0x99, 0x35, 0x0d, 0x87, 0x63, 0x94, 0xa8, 0xc5, 0x22, 0xb0, 0x3d, 0xdf, 0x68, - 0x93, 0xd2, 0xe3, 0xbc, 0xc5, 0xae, 0x0c, 0x6d, 0xb1, 0xbb, 0x82, 0x5e, 0x8f, 0xd5, 0x38, 0x00, - 0x87, 0x92, 0x96, 0x6f, 0x00, 0x44, 0xe3, 0x04, 0x2d, 0x40, 0xee, 0x80, 0x1c, 0x89, 0x18, 0x0d, - 0xb3, 0x9f, 0x68, 0x09, 0x0a, 0x87, 0x86, 0xdd, 0x95, 0x6b, 0x46, 0x2c, 0x3e, 0x3e, 0x92, 0xbd, - 0x91, 0x29, 0xff, 0x6e, 0x0e, 0x9e, 0x92, 0x23, 0xee, 0x75, 0xdf, 0xed, 0x7a, 0xd5, 0xe6, 0x3a, - 0x96, 0xfb, 0x74, 0xcc, 0x34, 0xa9, 0x5c, 0x59, 0x66, 0x50, 0xae, 0x8c, 0x35, 0x45, 0x60, 0x39, - 0x7b, 0x5d, 0xdb, 0xd0, 0x53, 0xb5, 0xaa, 0x29, 0x5a, 0x1a, 0x0e, 0xc7, 0x28, 0xd1, 0x35, 0x00, - 0x95, 0x94, 0x6b, 0x4b, 0x9b, 0xa4, 0xa2, 0x0e, 0x95, 0xb9, 0x6b, 0x63, 0x8d, 0x8a, 0x2d, 0xe0, - 0xf7, 0x98, 0x9e, 0xd2, 0x2a, 0xa9, 0x39, 0xc7, 0x95, 0xc7, 0x02, 0xa7, 0x27, 0x04, 0x0a, 0x43, - 0x12, 0x02, 0x97, 0x21, 0x7f, 0x60, 0x39, 0x6d, 0x19, 0x67, 0xa9, 0xfa, 0xdd, 0xb2, 0x9c, 0x36, - 0xe6, 0x18, 0xe6, 0xfe, 0x0e, 0x89, 0xbf, 0x13, 0xda, 0x0f, 0xee, 0xfe, 0xb6, 0x19, 0x00, 0x0b, - 0x38, 0x33, 0xad, 0xc1, 0xbe, 0xeb, 0x53, 0xae, 0x31, 0x37, 0x19, 0x53, 0xc2, 0xb4, 0xb6, 0x14, - 0x14, 0x6b, 0x14, 0xdc, 0x59, 0x1b, 0x94, 0xec, 0xb9, 0xbe, 0x45, 0x84, 0x59, 0x90, 0xf4, 0x75, - 0x05, 0xc5, 0x1a, 0x45, 0xf9, 0x4f, 0xb2, 0xf0, 0xf4, 0x29, 0x5d, 0x14, 0x8c, 0x21, 0xda, 0xbb, - 0x01, 0x33, 0xbc, 0x65, 0xe3, 0x29, 0x6e, 0xd5, 0xc7, 0xaf, 0x6b, 0x38, 0x1c, 0xa3, 0x44, 0x87, - 0x30, 0x63, 0x78, 0x56, 0xa8, 0x6f, 0x50, 0xca, 0x71, 0x2b, 0xf8, 0xd1, 0x51, 0xad, 0x60, 0xbf, - 0x0a, 0x47, 0xe5, 0x6a, 0x88, 0x00, 0xc7, 0xca, 0x29, 0xff, 0x38, 0x03, 0x97, 0x4f, 0x6b, 0xb4, - 0x9e, 0x30, 0x21, 0x77, 0xe6, 0x61, 0xc2, 0x4e, 0x3c, 0x4c, 0xf8, 0xd8, 0xbb, 0xa9, 0x73, 0x30, - 0x20, 0x62, 0xf8, 0x6e, 0x06, 0xc2, 0xf0, 0x79, 0x0c, 0x81, 0xcf, 0x66, 0xbc, 0x46, 0x57, 0x46, - 0xad, 0xd1, 0x00, 0xe5, 0xff, 0x23, 0xa7, 0xc2, 0x9d, 0x4d, 0xa1, 0x19, 0x5a, 0x86, 0xac, 0xe5, - 0x49, 0x63, 0x03, 0x92, 0x29, 0xbb, 0xde, 0xc4, 0x59, 0xcb, 0x53, 0x89, 0x8a, 0xec, 0xc0, 0x44, - 0xc5, 0xf3, 0x50, 0xec, 0x06, 0x2c, 0x82, 0x51, 0x6b, 0x0c, 0x55, 0x9b, 0xbb, 0x12, 0x8e, 0x15, - 0x05, 0x0f, 0x9e, 0x8c, 0x20, 0x78, 0xcb, 0xf5, 0xdb, 0x72, 0x6d, 0x21, 0x82, 0x27, 0x09, 0xc3, - 0x0a, 0xcb, 0x66, 0xac, 0xe7, 0x5b, 0x87, 0x32, 0x40, 0x2d, 0x44, 0xe1, 0x75, 0x53, 0x41, 0xb1, - 0x46, 0xc1, 0xe9, 0x8d, 0x20, 0x68, 0xee, 0xfb, 0x46, 0x40, 0xe4, 0x9a, 0x42, 0xd0, 0x2b, 0x28, - 0xd6, 0x28, 0x90, 0x09, 0x13, 0xb6, 0xb1, 0x43, 0x6c, 0x61, 0x63, 0xa6, 0xaf, 0xbd, 0x3a, 0x6a, - 0xc3, 0xca, 0x66, 0xab, 0x6c, 0x70, 0x6e, 0x11, 0x25, 0xa8, 0x45, 0xa5, 0x00, 0x62, 0x29, 0x1a, - 0x55, 0x61, 0x82, 0x1a, 0x96, 0x43, 0xc3, 0xa8, 0xe6, 0x49, 0x6d, 0x60, 0x54, 0x4c, 0xd7, 0x27, - 0x7c, 0x59, 0xcb, 0x28, 0x22, 0x11, 0xfc, 0x33, 0xc0, 0x92, 0x71, 0xf9, 0x15, 0x98, 0xd6, 0x4a, - 0x4a, 0xe5, 0x67, 0x7e, 0x98, 0x85, 0x79, 0xa9, 0x74, 0xd3, 0x77, 0x3d, 0xe2, 0xd3, 0x23, 0xb4, - 0x01, 0x4b, 0x1d, 0xe3, 0x5e, 0xb8, 0xf7, 0x40, 0xfc, 0x43, 0xcb, 0x24, 0x5b, 0xdd, 0x8e, 0x4c, - 0x90, 0x94, 0x58, 0xb4, 0xb8, 0xd9, 0x07, 0x8f, 0xfb, 0x72, 0xa1, 0x0f, 0xc3, 0x6c, 0xc7, 0xb8, - 0xb7, 0xe5, 0xb6, 0x49, 0xd3, 0x6d, 0x33, 0x31, 0x62, 0x9c, 0x2c, 0x32, 0x5f, 0xbe, 0xa9, 0x23, - 0x70, 0x9c, 0x0e, 0x7d, 0x29, 0x03, 0xb3, 0x2e, 0xf3, 0x07, 0xae, 0xdd, 0xc6, 0x06, 0xb5, 0x5c, - 0x69, 0xa4, 0xea, 0xa3, 0xf6, 0x42, 0x58, 0xa1, 0xca, 0x6d, 0x5d, 0x8a, 0xe8, 0x0d, 0x15, 0x4e, - 0xc4, 0x70, 0x38, 0x5e, 0xe0, 0xf2, 0x27, 0x01, 0xf5, 0xf2, 0xa6, 0x6a, 0xdf, 0x7f, 0x2f, 0xa8, - 0xf6, 0x0d, 0xed, 0x06, 0xfa, 0x69, 0x28, 0x9a, 0x86, 0x67, 0x98, 0x16, 0x65, 0x42, 0x58, 0x95, - 0x3e, 0x3e, 0x6a, 0x95, 0x42, 0x19, 0x95, 0xba, 0x14, 0x20, 0x6a, 0x73, 0x39, 0x9c, 0x4e, 0x21, - 0xf8, 0xfe, 0xf1, 0xca, 0x4c, 0x48, 0xcb, 0x0c, 0x06, 0x56, 0x25, 0xa2, 0x5f, 0xc8, 0xc0, 0xb4, - 0x61, 0xdb, 0xae, 0x69, 0x50, 0x9e, 0x9e, 0x12, 0x36, 0xa3, 0x9a, 0x5a, 0x83, 0x6a, 0x24, 0x43, - 0x28, 0x11, 0x6e, 0x22, 0x4e, 0x6b, 0x98, 0x1e, 0x3d, 0xf4, 0xa2, 0x59, 0x0f, 0x4f, 0xc9, 0x6f, - 0x1e, 0x68, 0x30, 0x45, 0x3e, 0xf1, 0xa0, 0x8a, 0x90, 0xb6, 0x50, 0xe3, 0xbd, 0x2a, 0xd1, 0x16, - 0xc2, 0x7b, 0x94, 0x88, 0x0a, 0x5d, 0x3e, 0x80, 0xd9, 0x58, 0x53, 0xf6, 0xe9, 0xdc, 0x86, 0xde, - 0xb9, 0x43, 0x0c, 0x77, 0x25, 0x3c, 0x4c, 0x55, 0xf9, 0x74, 0xd7, 0x70, 0xa8, 0x45, 0x8f, 0xb4, - 0xc1, 0xb0, 0xec, 0xc0, 0x42, 0xb2, 0xd5, 0x1e, 0x6a, 0x79, 0x36, 0xcc, 0xc5, 0x1b, 0xe7, 0x61, - 0x96, 0x56, 0xfe, 0xd6, 0x45, 0xe5, 0xf3, 0xf8, 0xae, 0xd4, 0x27, 0x00, 0x76, 0x2d, 0xc7, 0xb0, - 0xad, 0xb7, 0x89, 0x1f, 0xf0, 0x81, 0x3e, 0x55, 0x5b, 0x61, 0xd6, 0xf6, 0x35, 0x05, 0xbd, 0x7f, - 0xbc, 0x32, 0xab, 0xbe, 0x78, 0x24, 0xaa, 0xb1, 0xa4, 0xcf, 0x65, 0xb5, 0xad, 0xc0, 0xb3, 0x8d, - 0xa3, 0x7e, 0xb9, 0xac, 0x46, 0x84, 0xc2, 0x3a, 0x9d, 0xca, 0x9c, 0xe6, 0x07, 0x66, 0x4e, 0x53, - 0x44, 0xad, 0x0d, 0x98, 0x76, 0x08, 0x7d, 0xcb, 0xf5, 0x0f, 0xe4, 0x7e, 0x09, 0x23, 0x2f, 0x87, - 0x3a, 0x6c, 0x45, 0xa8, 0xfb, 0xf1, 0x4f, 0xac, 0xb3, 0xb1, 0x15, 0x90, 0xfc, 0x6c, 0x10, 0x66, - 0x45, 0x79, 0xe6, 0x4a, 0xdb, 0xf3, 0xd9, 0xd2, 0x91, 0x38, 0x4e, 0xab, 0xa5, 0xf4, 0xea, 0xeb, - 0x0d, 0xcc, 0x93, 0x57, 0xbd, 0x29, 0x3d, 0x86, 0xc2, 0x3a, 0x1d, 0xba, 0x0a, 0xd3, 0x81, 0xb0, - 0xd9, 0x9c, 0xed, 0x82, 0xa8, 0x28, 0x63, 0x69, 0x45, 0x60, 0xac, 0xd3, 0xa0, 0x55, 0x98, 0x6a, - 0x3b, 0x41, 0xc3, 0xed, 0x18, 0x96, 0xc3, 0x33, 0x60, 0xda, 0xfe, 0x7e, 0x63, 0xab, 0x25, 0x10, - 0x38, 0xa2, 0x41, 0x18, 0x1e, 0x17, 0x79, 0x8f, 0xaa, 0xcd, 0xf3, 0x19, 0xd4, 0x3a, 0x24, 0x22, - 0x38, 0x07, 0x3e, 0x38, 0x96, 0x4f, 0x8e, 0x57, 0x1e, 0x6f, 0xf6, 0xa5, 0xc0, 0x03, 0x38, 0x91, - 0x0b, 0xc5, 0x5d, 0xb1, 0x34, 0x0e, 0xe4, 0x4a, 0x77, 0x35, 0xe5, 0x4a, 0x5e, 0xf5, 0x4f, 0x51, - 0x02, 0xd8, 0xa8, 0x4c, 0xa4, 0x7b, 0xb0, 0x2a, 0x04, 0xbd, 0xc5, 0x62, 0x0e, 0xee, 0x57, 0xd8, - 0x2a, 0x61, 0x66, 0xd4, 0xe3, 0x4f, 0x71, 0x8f, 0x54, 0x7b, 0x7f, 0x18, 0xd6, 0x37, 0x95, 0x2c, - 0x9e, 0x81, 0x8f, 0x93, 0x61, 0xad, 0x28, 0xf4, 0x79, 0x98, 0x32, 0xc4, 0x36, 0x12, 0x09, 0x4a, - 0xb3, 0xdc, 0x56, 0xae, 0xa6, 0x8c, 0x47, 0xa2, 0xf9, 0x23, 0x01, 0x01, 0x8e, 0x64, 0xa2, 0x9f, - 0xcf, 0xc0, 0x7c, 0xdb, 0x35, 0x0f, 0x88, 0xbf, 0x76, 0x8f, 0xfa, 0x46, 0xd5, 0xdf, 0x0b, 0x4a, - 0x73, 0xe9, 0x9c, 0x03, 0x9b, 0xf7, 0x95, 0x46, 0x5c, 0x86, 0xb0, 0xca, 0x4f, 0xc8, 0x92, 0xe7, - 0x13, 0x58, 0x9c, 0x2c, 0x92, 0xf9, 0xa7, 0x85, 0x83, 0xee, 0x0e, 0xb1, 0x09, 0x8d, 0xf4, 0x98, - 0xe7, 0x7a, 0xd4, 0x52, 0xe9, 0x71, 0x2b, 0x21, 0x44, 0x28, 0x52, 0x92, 0x8a, 0x2c, 0x24, 0xd1, - 0xb8, 0xa7, 0x54, 0xf4, 0xe5, 0x0c, 0x20, 0xc3, 0xb3, 0x44, 0x62, 0x22, 0x52, 0x66, 0x81, 0x2b, - 0xd3, 0x48, 0xa5, 0x4c, 0xb5, 0x47, 0x8c, 0x50, 0x47, 0x6d, 0x55, 0x54, 0x9b, 0xeb, 0x09, 0x02, - 0xdc, 0xa7, 0x6c, 0xf4, 0xed, 0x0c, 0x2c, 0x9b, 0xae, 0x43, 0x7d, 0xd7, 0xb6, 0x59, 0xbf, 0x3a, - 0xc6, 0x9e, 0xae, 0xda, 0x22, 0x57, 0x6d, 0x23, 0x95, 0x6a, 0xf5, 0x81, 0xe2, 0x84, 0x8a, 0xe1, - 0xfc, 0x58, 0x1e, 0x4c, 0x88, 0x4f, 0xd1, 0x89, 0xb7, 0x62, 0x20, 0x73, 0x87, 0x9a, 0xaa, 0xe8, - 0x01, 0x5a, 0xb1, 0xd5, 0x23, 0x26, 0xd1, 0x8a, 0xbd, 0x04, 0xb8, 0x4f, 0xd9, 0xe8, 0x10, 0x96, - 0xcc, 0x64, 0xee, 0x17, 0x93, 0xdd, 0xd2, 0x92, 0xcc, 0xfc, 0xf4, 0x89, 0xc0, 0x37, 0x5c, 0xd3, - 0xb0, 0xc5, 0x22, 0x1c, 0x93, 0x5d, 0xe2, 0x13, 0xc7, 0x24, 0x22, 0x16, 0xae, 0xf7, 0x91, 0x84, - 0xfb, 0xca, 0x47, 0x75, 0xc8, 0x13, 0x6a, 0xb6, 0x4b, 0x17, 0x79, 0x39, 0xc3, 0xf3, 0x97, 0x6b, - 0xd4, 0x6c, 0x8b, 0xe4, 0x32, 0xfb, 0x85, 0x39, 0x33, 0xfa, 0x14, 0xa0, 0x7d, 0x37, 0xa0, 0x6c, - 0xad, 0x54, 0x0d, 0x58, 0xbc, 0xcc, 0xd7, 0x55, 0x4f, 0xf0, 0x34, 0x8d, 0x6a, 0x88, 0x9b, 0x3d, - 0x14, 0xb8, 0x0f, 0x17, 0xa2, 0xca, 0x61, 0xf1, 0x3e, 0x29, 0xa5, 0x5b, 0x11, 0xf3, 0x3e, 0xd9, - 0x8a, 0xf8, 0x45, 0x67, 0x5c, 0x48, 0xf8, 0x3b, 0xde, 0x0b, 0x7a, 0x31, 0xc8, 0x87, 0xf9, 0xc0, - 0x34, 0x6c, 0xcb, 0xd9, 0x0b, 0xed, 0x50, 0xe9, 0xc9, 0x07, 0x33, 0x68, 0xca, 0xac, 0xb4, 0xe2, - 0xf2, 0x70, 0xb2, 0x00, 0xf4, 0x05, 0x98, 0xdd, 0xd1, 0x8e, 0xe4, 0x06, 0xa5, 0xe5, 0x11, 0x0f, - 0xe5, 0xe8, 0x07, 0x79, 0x23, 0x1f, 0xac, 0x43, 0x03, 0x1c, 0x17, 0xbd, 0x5c, 0x83, 0xa5, 0x7e, - 0x46, 0x30, 0xcd, 0xc2, 0x61, 0xb9, 0x0e, 0x17, 0xfb, 0x1a, 0xb0, 0x54, 0x42, 0xd6, 0xe0, 0x89, - 0x01, 0x86, 0x27, 0x95, 0x98, 0x4d, 0x58, 0x19, 0x62, 0x24, 0xd2, 0x6a, 0x35, 0x60, 0x22, 0xa7, - 0x12, 0xf3, 0x71, 0x58, 0x48, 0x8e, 0xbd, 0x54, 0x4b, 0xb3, 0x6f, 0x00, 0xcc, 0xc6, 0x0e, 0xd8, - 0xa1, 0x32, 0x4c, 0xd8, 0xac, 0xdf, 0xda, 0x72, 0x5b, 0x87, 0xef, 0xf9, 0x6d, 0x70, 0x08, 0x96, - 0x18, 0x3d, 0x1a, 0xcc, 0x0e, 0x89, 0x06, 0x5f, 0x8a, 0x1f, 0x1b, 0x7d, 0x4f, 0xf2, 0xd8, 0x68, - 0x78, 0x68, 0x2f, 0x76, 0xc8, 0x89, 0x00, 0x98, 0xd1, 0xde, 0x48, 0x3e, 0xdd, 0xc9, 0x15, 0xb5, - 0x57, 0x12, 0xe5, 0x0d, 0xb5, 0xed, 0x14, 0x4d, 0xb0, 0xbe, 0x95, 0x5d, 0x38, 0x7d, 0x2b, 0x5b, - 0xdb, 0x1d, 0x9f, 0x38, 0x75, 0x77, 0xfc, 0x4d, 0x3d, 0x40, 0x99, 0x4c, 0x37, 0x9f, 0xe5, 0x01, - 0x19, 0xed, 0x94, 0x44, 0x28, 0x49, 0x8f, 0x50, 0xbe, 0x08, 0xc5, 0x70, 0x05, 0xc2, 0x03, 0xce, - 0x14, 0x91, 0x57, 0xb8, 0xfe, 0x53, 0xab, 0xd4, 0x62, 0x08, 0xd1, 0xe2, 0xae, 0x10, 0x84, 0x55, - 0x31, 0xa2, 0x3b, 0xe4, 0xa1, 0x11, 0x11, 0xa7, 0xa6, 0xea, 0x0e, 0xc9, 0xa9, 0x77, 0x47, 0x28, - 0x0c, 0x6b, 0x82, 0x59, 0xd4, 0xae, 0x87, 0xdf, 0xd3, 0xf1, 0xa8, 0x7d, 0x60, 0x08, 0xde, 0x80, - 0x05, 0xc7, 0x6d, 0xf3, 0xdf, 0x9b, 0x46, 0x70, 0xd0, 0xb2, 0xde, 0x26, 0x3c, 0x24, 0x2d, 0x44, - 0x61, 0xce, 0x56, 0x02, 0x8f, 0x7b, 0x38, 0xd0, 0x33, 0x50, 0x68, 0x3b, 0xc1, 0x7a, 0x53, 0x6e, - 0x0f, 0xab, 0xa4, 0x60, 0x63, 0xab, 0xb5, 0xde, 0xc4, 0x02, 0xc7, 0x16, 0x08, 0x3e, 0xd9, 0xb3, - 0x02, 0xea, 0x1f, 0xad, 0x37, 0x45, 0x60, 0x28, 0x17, 0x08, 0x38, 0x02, 0x63, 0x9d, 0x86, 0x1f, - 0xc4, 0x26, 0x6c, 0xcc, 0x19, 0xfe, 0x91, 0x56, 0x85, 0xd2, 0x7c, 0xe2, 0x20, 0x76, 0x1f, 0x1a, - 0xdc, 0x97, 0x33, 0xb9, 0xb8, 0x59, 0x18, 0x71, 0x71, 0xa3, 0x2b, 0xa2, 0x11, 0x95, 0x16, 0x07, - 0x28, 0xa2, 0x0b, 0xea, 0xcb, 0xc9, 0x24, 0x26, 0x9b, 0x71, 0xbd, 0x79, 0xf8, 0x72, 0x09, 0xf1, - 0xc6, 0x57, 0x12, 0xb7, 0xfa, 0xd0, 0xe0, 0xbe, 0x9c, 0x03, 0x24, 0x5e, 0xe7, 0x2b, 0xb1, 0xd3, - 0x25, 0x5e, 0xef, 0x2b, 0xf1, 0x3a, 0x6a, 0x00, 0xb0, 0x88, 0x56, 0x1c, 0x65, 0xe7, 0xa1, 0xcd, - 0x54, 0xed, 0x7d, 0xe1, 0x38, 0xbc, 0xa5, 0x30, 0x6c, 0xb5, 0x13, 0x7d, 0xf1, 0xd5, 0xa8, 0xc6, - 0x57, 0xfe, 0x56, 0x0e, 0xa6, 0xea, 0xae, 0xb3, 0x6b, 0xed, 0x6d, 0x1a, 0xe3, 0xb8, 0x64, 0xb4, - 0x0d, 0x79, 0x2e, 0x5d, 0xa4, 0xa5, 0x5e, 0x1e, 0x3e, 0xd5, 0x42, 0xdd, 0x2a, 0x0d, 0x83, 0x1a, - 0x22, 0x02, 0x51, 0xab, 0x78, 0x06, 0xc2, 0x5c, 0x1e, 0x72, 0x00, 0x76, 0x2c, 0xc7, 0xf0, 0x8f, - 0x1a, 0x62, 0x57, 0x61, 0xc4, 0x4d, 0x5f, 0x25, 0xbd, 0xa6, 0x98, 0x45, 0x19, 0xaa, 0x16, 0x11, - 0x02, 0x6b, 0x25, 0x2c, 0x7f, 0x18, 0xa6, 0x14, 0x71, 0x2a, 0xb7, 0xf6, 0x31, 0x98, 0x4f, 0x94, - 0x35, 0x8c, 0x7d, 0x46, 0xf7, 0x6a, 0x7f, 0x91, 0x81, 0x59, 0xa5, 0xf5, 0x18, 0xf6, 0x1e, 0x6e, - 0xc7, 0xf7, 0x1e, 0x3e, 0x38, 0x7a, 0x93, 0x0e, 0xd8, 0x7d, 0xe0, 0x67, 0xfc, 0x7d, 0xd7, 0xb9, - 0xd9, 0xac, 0x9e, 0xc7, 0x33, 0xfe, 0x42, 0xb3, 0xb3, 0x3c, 0xe3, 0x2f, 0x25, 0x9e, 0x7e, 0x7c, - 0x9d, 0x6f, 0x28, 0x09, 0xca, 0x73, 0xb9, 0xa1, 0x24, 0x54, 0x1b, 0xd0, 0xa5, 0xfb, 0x70, 0x41, - 0x12, 0x3c, 0xec, 0x0b, 0x22, 0x5f, 0x8b, 0x9a, 0xe9, 0x5c, 0x5e, 0x6e, 0xfa, 0x61, 0x16, 0x66, - 0x63, 0x1d, 0x9e, 0xe6, 0x90, 0xfc, 0xd5, 0xf8, 0x21, 0xf9, 0x74, 0xd7, 0x90, 0x72, 0x29, 0xae, - 0x21, 0xe5, 0xcf, 0xe4, 0x1a, 0x52, 0xe1, 0x27, 0x70, 0x0d, 0xe9, 0x8f, 0x33, 0xc0, 0x97, 0xca, - 0xe8, 0x16, 0x14, 0x6c, 0xb6, 0x62, 0x97, 0x93, 0x63, 0xb8, 0x59, 0xe2, 0xeb, 0x7b, 0xbe, 0xde, - 0xe6, 0x27, 0x09, 0xf8, 0x27, 0x16, 0x32, 0xd0, 0x1b, 0x3d, 0x77, 0x46, 0x5f, 0x18, 0xf9, 0xce, - 0x28, 0x17, 0x39, 0xe8, 0x9e, 0xe8, 0xff, 0x81, 0xd2, 0xa0, 0xbb, 0xa5, 0xef, 0x6e, 0xcb, 0xb5, - 0xfc, 0xbd, 0x0c, 0xcc, 0xe8, 0x2a, 0xf0, 0x33, 0x98, 0x4e, 0xdb, 0x73, 0xf9, 0x4e, 0xa3, 0x48, - 0xc6, 0x8b, 0x33, 0x98, 0x21, 0x10, 0x47, 0x78, 0x36, 0x6c, 0x4c, 0xe3, 0x35, 0xcb, 0x0e, 0x87, - 0x9a, 0x1a, 0x36, 0xf5, 0x2a, 0x83, 0x62, 0x89, 0x65, 0xd3, 0xcb, 0x24, 0x3e, 0xe5, 0x94, 0x89, - 0x8d, 0xdd, 0xba, 0x84, 0x63, 0x45, 0xc1, 0x86, 0xfa, 0x01, 0x39, 0xe2, 0xc4, 0xf9, 0xf8, 0x50, - 0xbf, 0x25, 0xc0, 0x38, 0xc4, 0x97, 0x1b, 0x90, 0xe7, 0x2c, 0xef, 0x81, 0x5c, 0xe0, 0x9b, 0xb2, - 0x15, 0xd4, 0x95, 0xd8, 0x96, 0x6f, 0x62, 0x06, 0x67, 0xe8, 0xb6, 0x3a, 0x44, 0xaf, 0xd0, 0x8d, - 0x80, 0x62, 0x06, 0x2f, 0xff, 0x51, 0x06, 0xb2, 0x37, 0xab, 0xa8, 0x0e, 0x39, 0x7a, 0x40, 0xe4, - 0x48, 0xf8, 0xc0, 0xd0, 0x9e, 0xbb, 0x73, 0x6b, 0xed, 0x66, 0x55, 0x1e, 0xa7, 0x64, 0x3f, 0x31, - 0xe3, 0x46, 0x9f, 0x07, 0xa0, 0xfb, 0x96, 0xdf, 0x6e, 0x1a, 0x3e, 0x3d, 0x1a, 0x79, 0x14, 0xdc, - 0x51, 0x2c, 0x37, 0xab, 0xb5, 0x85, 0x93, 0xe3, 0x95, 0x19, 0x1d, 0x82, 0x35, 0x91, 0xe5, 0x5f, - 0xcc, 0x42, 0xfe, 0x26, 0xb1, 0x3b, 0x63, 0x70, 0x7a, 0xb7, 0x62, 0x4e, 0xef, 0xd9, 0xe1, 0x47, - 0xf8, 0x88, 0xdd, 0x19, 0xe8, 0xf1, 0x5a, 0x09, 0x8f, 0xf7, 0xdc, 0x68, 0xe2, 0x4e, 0x77, 0x77, - 0x7f, 0x9a, 0x81, 0x22, 0x23, 0x1b, 0x83, 0xaf, 0xfb, 0x54, 0xdc, 0xd7, 0xbd, 0x7f, 0x24, 0xf5, - 0x07, 0x38, 0xba, 0x97, 0x61, 0x81, 0x61, 0x63, 0x5e, 0x2e, 0xbc, 0xa5, 0x91, 0x19, 0x78, 0x4b, - 0xe3, 0xab, 0xb2, 0xb2, 0xe7, 0xd2, 0x63, 0xfd, 0x63, 0x16, 0x20, 0xea, 0xb0, 0x47, 0xee, 0xea, - 0x4c, 0xdd, 0x15, 0x9b, 0xf3, 0xeb, 0xcd, 0xea, 0xe6, 0x39, 0x9c, 0xf3, 0x4c, 0xad, 0x33, 0x9c, - 0xf3, 0x5c, 0xdc, 0xf0, 0x39, 0xcf, 0xc8, 0xce, 0xe3, 0x9c, 0x67, 0x7a, 0x0d, 0x9e, 0xf3, 0x0c, - 0xfb, 0x00, 0x73, 0x3e, 0x6c, 0xe2, 0x73, 0x39, 0xe7, 0xa3, 0x0e, 0x7b, 0x34, 0xe7, 0xcf, 0x7c, - 0xce, 0x6f, 0xd4, 0xea, 0xaf, 0x9d, 0xc3, 0x39, 0xcf, 0xd4, 0x3a, 0xc3, 0x39, 0xcf, 0xc5, 0x0d, - 0x9f, 0xf3, 0x8c, 0xec, 0x3c, 0xce, 0x79, 0xa6, 0xd7, 0x80, 0x39, 0xff, 0xcb, 0x19, 0x58, 0x60, - 0xe8, 0x87, 0xbc, 0x9c, 0x65, 0x73, 0xc3, 0x30, 0xa9, 0xd5, 0x3b, 0x37, 0xaa, 0x1c, 0x8a, 0x25, - 0x96, 0x5b, 0x93, 0xb0, 0xf3, 0xce, 0xa5, 0x35, 0x89, 0x86, 0xc2, 0x23, 0x6b, 0x72, 0xa6, 0xd6, - 0xe4, 0x1f, 0xb2, 0x30, 0xa5, 0x96, 0xae, 0xfc, 0x36, 0xab, 0x41, 0x8d, 0x86, 0xe5, 0x27, 0xdb, - 0xb6, 0x21, 0xc0, 0x38, 0xc4, 0xa3, 0x2f, 0xc0, 0x14, 0x51, 0x7b, 0xf1, 0x62, 0x4a, 0xbc, 0x32, - 0xfa, 0x22, 0xb9, 0x92, 0xd8, 0x80, 0x57, 0x03, 0x3d, 0xda, 0x77, 0x8f, 0xc4, 0xf3, 0x3b, 0x3f, - 0x7c, 0x0f, 0x92, 0x2d, 0x0a, 0x5b, 0xd5, 0x2d, 0x71, 0xdc, 0x3c, 0xbc, 0xf3, 0x13, 0xc3, 0xe0, - 0x04, 0x25, 0x7a, 0x19, 0x66, 0x3c, 0xa2, 0x71, 0xe6, 0x39, 0x27, 0x5f, 0x4a, 0x35, 0x35, 0x38, - 0x8e, 0x51, 0x2d, 0x7f, 0x14, 0xe6, 0x1e, 0x7c, 0x67, 0x91, 0x3f, 0xa8, 0xb1, 0xe1, 0xee, 0xd5, - 0x5d, 0xdb, 0x26, 0xe6, 0x78, 0xde, 0x53, 0x4a, 0xfb, 0xa0, 0x86, 0xae, 0xde, 0x19, 0x3e, 0xa8, - 0x11, 0x13, 0x3b, 0xfc, 0x41, 0x0d, 0x9d, 0xfc, 0x3c, 0x3e, 0xa8, 0xa1, 0xeb, 0x37, 0xc0, 0x94, - 0x77, 0xa0, 0xa4, 0x53, 0x3d, 0xec, 0x04, 0xe5, 0xd7, 0x13, 0xad, 0x76, 0x2e, 0x2d, 0xf6, 0x49, - 0x16, 0x50, 0xef, 0x48, 0x78, 0x64, 0xb9, 0xcf, 0xd4, 0x72, 0x7f, 0x25, 0x0b, 0x93, 0xe1, 0xf5, - 0x8a, 0xf3, 0xb7, 0xcf, 0x21, 0x35, 0x3b, 0xc3, 0x7d, 0x8e, 0x50, 0xe2, 0xe9, 0x56, 0x25, 0x80, - 0x39, 0x49, 0x18, 0x3e, 0xad, 0x71, 0x3d, 0xf6, 0xb4, 0x41, 0x39, 0xf1, 0xb4, 0x06, 0x8a, 0x53, - 0xc7, 0x8f, 0xed, 0xca, 0x93, 0x03, 0xc9, 0x83, 0x1a, 0x92, 0x16, 0x87, 0x78, 0xfe, 0xa4, 0x82, - 0x94, 0xf3, 0xe8, 0x49, 0x85, 0x73, 0xfb, 0xa4, 0xc2, 0x77, 0x33, 0x30, 0x2d, 0x7b, 0xe9, 0x3c, - 0x6e, 0x81, 0x85, 0x47, 0xd2, 0xfa, 0xbb, 0x99, 0x6f, 0x16, 0x94, 0xf2, 0x3f, 0xa1, 0xc3, 0xf1, - 0x0f, 0xf2, 0xd0, 0xc3, 0xf0, 0xc3, 0xf1, 0x62, 0x97, 0xa2, 0x70, 0xea, 0x2e, 0xc5, 0xc4, 0x48, - 0x17, 0xc3, 0x26, 0x53, 0x5d, 0x0c, 0x2b, 0xa6, 0xb8, 0x18, 0x36, 0x95, 0xf2, 0x62, 0x18, 0x0c, - 0xbd, 0x18, 0xf6, 0xa6, 0xba, 0x18, 0x36, 0xcd, 0x47, 0xc7, 0x8d, 0x34, 0xf6, 0x34, 0xe5, 0xad, - 0xb0, 0x99, 0x9f, 0xc0, 0xad, 0xb0, 0xff, 0xca, 0xc1, 0x6c, 0xcc, 0x5e, 0x8f, 0x74, 0x34, 0xee, - 0xa5, 0xb8, 0xd3, 0xef, 0x3d, 0xef, 0x26, 0x45, 0x9e, 0x72, 0xde, 0x2d, 0x37, 0xe2, 0x01, 0xab, - 0xa4, 0xb5, 0x4e, 0x73, 0xde, 0x2d, 0x3f, 0xf2, 0x79, 0xb7, 0xc2, 0xe8, 0xe7, 0xdd, 0x26, 0x46, - 0x3c, 0xef, 0x16, 0x77, 0x57, 0x43, 0xce, 0xbb, 0x59, 0x30, 0x2d, 0xcd, 0xd8, 0xba, 0xb3, 0xeb, - 0xf2, 0x19, 0x32, 0xca, 0xb3, 0x16, 0x61, 0xcf, 0x1d, 0x05, 0x94, 0x74, 0x18, 0x67, 0x34, 0xd3, - 0x37, 0x23, 0x71, 0x58, 0x97, 0x5d, 0xfe, 0xb7, 0x3c, 0x2c, 0xf6, 0xf0, 0xb1, 0x00, 0x38, 0x24, - 0x6a, 0x24, 0x03, 0xe0, 0x50, 0x54, 0x03, 0x47, 0x34, 0x2c, 0x38, 0x0b, 0x38, 0xfb, 0xdd, 0xbb, - 0xca, 0x2e, 0xa9, 0xae, 0x69, 0x29, 0x0c, 0xd6, 0xa8, 0x58, 0x7b, 0xef, 0xb8, 0x2e, 0xb3, 0x63, - 0x89, 0xc0, 0xaf, 0xc6, 0xa1, 0x58, 0x62, 0xd1, 0xab, 0x30, 0x7b, 0x40, 0x7c, 0x87, 0xd8, 0x03, - 0x9e, 0x42, 0xbb, 0xa5, 0x23, 0x71, 0x9c, 0x96, 0xf5, 0xbf, 0x1b, 0xac, 0x77, 0xfa, 0x9c, 0x77, - 0xbc, 0xdd, 0xe2, 0x60, 0x1c, 0xe2, 0xd1, 0x67, 0xe0, 0x09, 0xd3, 0x75, 0xd8, 0x24, 0x22, 0x3e, - 0x16, 0x4f, 0x50, 0x87, 0x25, 0x0a, 0x17, 0xb5, 0x22, 0x59, 0x9f, 0xa8, 0xf7, 0x27, 0xc3, 0x83, - 0xf8, 0xd1, 0xc7, 0x61, 0x4e, 0x5e, 0x32, 0x08, 0x25, 0x0a, 0xab, 0xf7, 0xb8, 0x94, 0x38, 0x77, - 0x2b, 0x86, 0xc5, 0x09, 0x6a, 0xd4, 0x10, 0x57, 0x23, 0xf8, 0x22, 0x25, 0x94, 0x20, 0x6e, 0xf8, - 0xc4, 0xae, 0x35, 0xe8, 0x78, 0xdc, 0xc3, 0x81, 0xaa, 0x30, 0xef, 0xf2, 0x17, 0x23, 0x2c, 0x67, - 0x4f, 0xf4, 0x89, 0xbc, 0xbe, 0xa3, 0x4e, 0x53, 0xdf, 0x8e, 0xa3, 0x71, 0x92, 0x1e, 0xdd, 0x80, - 0x19, 0xc3, 0x37, 0xf7, 0x2d, 0x4a, 0x4c, 0xda, 0xf5, 0x85, 0xc9, 0xd4, 0x2e, 0x9e, 0x57, 0x35, - 0x1c, 0x8e, 0x51, 0x96, 0x09, 0x2c, 0x34, 0xb7, 0xeb, 0xf8, 0x61, 0xaf, 0xb3, 0xbe, 0x95, 0x81, - 0xc5, 0x26, 0xab, 0x6f, 0x40, 0x89, 0x43, 0x6b, 0x86, 0x79, 0xb0, 0xe6, 0xb4, 0xd1, 0x26, 0xe4, - 0x4c, 0x3b, 0x90, 0xd1, 0xc2, 0xf0, 0x89, 0x24, 0x9f, 0x88, 0x95, 0xdc, 0xf5, 0x8d, 0x56, 0x6d, - 0xf2, 0xe4, 0x78, 0x25, 0x57, 0xdf, 0x68, 0x61, 0x26, 0x07, 0xad, 0x43, 0x96, 0x04, 0x23, 0x2f, - 0xd9, 0xe3, 0xd2, 0xd6, 0x5a, 0xe2, 0x59, 0x94, 0xb5, 0x16, 0xce, 0x92, 0xa0, 0xfc, 0xcd, 0x2c, - 0xcc, 0x47, 0xfa, 0xae, 0x1d, 0x12, 0x87, 0x8e, 0xe7, 0xb0, 0x9d, 0xb6, 0x2a, 0x18, 0x7e, 0xd8, - 0x2e, 0xa1, 0xe1, 0xc0, 0xd5, 0xc1, 0xe7, 0x12, 0xab, 0x83, 0xeb, 0xa9, 0x25, 0x9f, 0xbe, 0x4a, - 0xf8, 0xdb, 0x0c, 0x5c, 0x48, 0x70, 0x8c, 0x21, 0x24, 0xbc, 0x1b, 0x0f, 0x09, 0x5f, 0x4c, 0x5b, - 0xa9, 0x01, 0xa1, 0xe1, 0xd7, 0xb3, 0x3d, 0x95, 0x19, 0x5f, 0x56, 0xe0, 0xa7, 0x60, 0xd1, 0x4b, - 0x4e, 0x93, 0x91, 0x9f, 0xdf, 0xee, 0x99, 0x60, 0xea, 0x29, 0x9c, 0xde, 0xb9, 0x87, 0x7b, 0xcb, - 0xd1, 0x13, 0x0a, 0xf9, 0x21, 0x29, 0x89, 0x7f, 0xcd, 0xc2, 0xc5, 0xbe, 0x63, 0xe4, 0x51, 0x56, - 0xe2, 0x4c, 0xb3, 0x12, 0xbf, 0x95, 0x05, 0x68, 0xfa, 0x6e, 0x87, 0xd0, 0x7d, 0xd2, 0x1d, 0xc7, - 0x13, 0x26, 0x9f, 0x8e, 0x99, 0xa0, 0xe1, 0x01, 0x54, 0xa4, 0xdc, 0x40, 0xeb, 0xf3, 0x99, 0x84, - 0xf5, 0xb9, 0x9a, 0x46, 0xe8, 0xe9, 0x86, 0xe7, 0x2f, 0x33, 0x30, 0x17, 0x11, 0x8f, 0xc1, 0xe6, - 0x34, 0xe3, 0x36, 0xe7, 0xb9, 0x14, 0x55, 0x19, 0x98, 0xf0, 0x5c, 0x8a, 0x68, 0x30, 0xe9, 0xb8, - 0x94, 0x47, 0xa3, 0xe8, 0x39, 0x98, 0x7a, 0xcb, 0xb7, 0xc4, 0x87, 0x7e, 0x40, 0xec, 0x8d, 0x10, - 0x88, 0x23, 0x3c, 0x5b, 0x8a, 0xf9, 0xc4, 0x68, 0x73, 0xda, 0x2c, 0xa7, 0x9d, 0x11, 0x77, 0x2a, - 0x04, 0x0c, 0x2b, 0x6c, 0xf9, 0xb7, 0x27, 0xf4, 0x16, 0x3b, 0x8f, 0xe9, 0x4e, 0x14, 0x00, 0x04, - 0xdd, 0x9d, 0x28, 0xaa, 0x1c, 0xed, 0x19, 0x82, 0x78, 0xa5, 0x2a, 0x2d, 0x25, 0x21, 0x71, 0x3e, - 0x3c, 0x42, 0x60, 0xad, 0x18, 0xe4, 0xc3, 0xac, 0xaf, 0x1a, 0x9f, 0x04, 0x81, 0x9c, 0xed, 0x1f, - 0x4a, 0x51, 0x6e, 0xd4, 0x79, 0x51, 0x10, 0x8c, 0x75, 0x99, 0x38, 0x5e, 0x04, 0xbf, 0x58, 0xee, - 0x52, 0x6b, 0xf7, 0x48, 0x9e, 0x33, 0x94, 0xf1, 0x6c, 0x74, 0xb1, 0x5c, 0x47, 0xe2, 0x38, 0x2d, - 0xda, 0x85, 0x29, 0x5f, 0x3d, 0x17, 0x34, 0x39, 0xa2, 0xb2, 0xea, 0x46, 0x0d, 0xf9, 0x62, 0xd7, - 0xf2, 0x49, 0x87, 0x38, 0x54, 0x5b, 0xf4, 0x44, 0x8f, 0x04, 0x45, 0xa2, 0x59, 0x7f, 0xfb, 0x5d, - 0xe7, 0xb6, 0x23, 0x1e, 0x9d, 0xe3, 0xe1, 0x6d, 0x31, 0xea, 0x6f, 0x1c, 0xa1, 0xb0, 0x4e, 0x87, - 0x36, 0xe1, 0x82, 0x61, 0x13, 0x9f, 0x62, 0xe2, 0x11, 0x83, 0xf2, 0xd7, 0xf3, 0x0e, 0x0d, 0x5b, - 0x06, 0xb6, 0xea, 0x15, 0xb2, 0x6a, 0x2f, 0x09, 0xee, 0xc7, 0xc7, 0x86, 0xcf, 0x5b, 0x16, 0xdd, - 0xdf, 0x6a, 0x36, 0x78, 0x6c, 0x5b, 0x8c, 0x86, 0xcf, 0x1b, 0x02, 0x8c, 0x43, 0xfc, 0xf2, 0xc7, - 0x60, 0x3e, 0xd1, 0xf9, 0xa9, 0xd6, 0xda, 0xbf, 0x9e, 0x87, 0x85, 0xa4, 0xfd, 0x79, 0xe4, 0xd4, - 0xce, 0xd2, 0xa9, 0xa1, 0x6e, 0x6c, 0x82, 0x4f, 0x8c, 0x78, 0xa7, 0x3d, 0xd9, 0x29, 0x69, 0xa7, - 0xf8, 0xbb, 0x1d, 0x18, 0x7f, 0x9e, 0x81, 0x62, 0x78, 0xb7, 0x6a, 0x0c, 0x8e, 0xf8, 0x76, 0xcc, - 0x11, 0xbf, 0x30, 0xc2, 0xd4, 0x16, 0xaa, 0x0d, 0xfc, 0x7f, 0x9f, 0xef, 0x65, 0x60, 0x26, 0x24, - 0x1a, 0x83, 0xa7, 0xdc, 0x8a, 0x7b, 0xca, 0x67, 0x47, 0xae, 0xc0, 0x00, 0x3f, 0xf9, 0xb5, 0x6c, - 0xa4, 0xfe, 0x83, 0xb9, 0x2d, 0xfd, 0x39, 0x92, 0xec, 0x88, 0xcf, 0x91, 0x3c, 0x60, 0xa2, 0xf6, - 0x3d, 0x90, 0xeb, 0xfa, 0xb6, 0x8c, 0xa2, 0xd5, 0x41, 0xe8, 0xbb, 0x78, 0x03, 0x33, 0x38, 0x73, - 0xd7, 0xdd, 0x40, 0x8a, 0x14, 0xe9, 0x8f, 0x99, 0x30, 0xc7, 0xba, 0xa5, 0x72, 0xac, 0x5b, 0xc9, - 0x1c, 0xeb, 0x44, 0x44, 0xd9, 0x9b, 0x63, 0x2d, 0xff, 0x67, 0x0e, 0x96, 0xfa, 0x99, 0x77, 0x74, - 0x04, 0x13, 0xb6, 0xd5, 0xb1, 0xe4, 0x31, 0xf3, 0x51, 0x66, 0x5a, 0x3f, 0x31, 0x95, 0x0d, 0x2e, - 0x43, 0xcc, 0xb4, 0x4b, 0x2a, 0x4b, 0xca, 0x81, 0x3d, 0x0f, 0xfa, 0xc8, 0x02, 0xd1, 0xcf, 0xf0, - 0x07, 0xc7, 0xbf, 0xd8, 0x25, 0x01, 0x0d, 0xc7, 0x41, 0xfd, 0xc1, 0x4a, 0xc7, 0x52, 0x4a, 0xe2, - 0x7d, 0xa5, 0x10, 0xdc, 0xfb, 0xbe, 0x52, 0x58, 0xec, 0xb2, 0x05, 0xd3, 0x9a, 0xea, 0x0f, 0xf5, - 0x7d, 0x9f, 0x03, 0x98, 0x8d, 0xe9, 0xf9, 0x50, 0x9f, 0xf7, 0xb1, 0x61, 0xb1, 0x27, 0x1f, 0xc2, - 0xe6, 0x84, 0xed, 0xee, 0xb5, 0x48, 0x9f, 0x39, 0xb1, 0x21, 0xe1, 0x58, 0x51, 0x30, 0xaf, 0x46, - 0x5d, 0xcf, 0x32, 0x55, 0x6a, 0x50, 0x79, 0xb5, 0x3b, 0x02, 0x8c, 0x43, 0x7c, 0xf9, 0xdb, 0x59, - 0x58, 0x48, 0x26, 0x4c, 0xde, 0xe5, 0x2b, 0x74, 0x1f, 0x80, 0x09, 0xfe, 0x4f, 0x72, 0x24, 0xe9, - 0xf5, 0x5a, 0x1c, 0x8a, 0x25, 0x16, 0xad, 0xc2, 0x94, 0xe5, 0xb4, 0xc9, 0x3d, 0x3e, 0x5b, 0xf2, - 0xf1, 0x6c, 0xd4, 0x7a, 0x88, 0xc0, 0x11, 0x0d, 0x2b, 0x9a, 0xcd, 0x9f, 0x70, 0x66, 0x85, 0x45, - 0xb3, 0xd9, 0x85, 0x39, 0x86, 0x35, 0x53, 0x62, 0x56, 0xa9, 0x66, 0xea, 0xb3, 0x7b, 0xc1, 0x22, - 0x20, 0xc2, 0x8f, 0xc1, 0x34, 0x8c, 0x23, 0x11, 0x6b, 0x15, 0xb4, 0x08, 0x28, 0x42, 0x61, 0x9d, - 0xae, 0xdc, 0x00, 0x71, 0x5f, 0x81, 0x19, 0x83, 0x43, 0xd5, 0x4e, 0xca, 0x18, 0x6c, 0xaf, 0x37, - 0x31, 0x83, 0xa3, 0xa7, 0x21, 0x7f, 0xe8, 0x5b, 0x6d, 0xd9, 0x52, 0xfc, 0x75, 0x89, 0x6d, 0xbc, - 0xde, 0xc0, 0x1c, 0x5a, 0xfe, 0xc3, 0x2c, 0xcc, 0xdd, 0x31, 0x3c, 0x2f, 0xba, 0xf0, 0x3f, 0x06, - 0xdf, 0x73, 0x37, 0xe6, 0x7b, 0x86, 0x1f, 0x53, 0x89, 0x2b, 0x38, 0x70, 0x21, 0xf8, 0xff, 0x13, - 0x0b, 0xc1, 0x0f, 0xa5, 0x15, 0x7c, 0xfa, 0x62, 0xf0, 0x9d, 0x0c, 0xa0, 0x38, 0xc3, 0x18, 0xdc, - 0xdc, 0x9d, 0xb8, 0x9b, 0x5b, 0x4d, 0x59, 0xa5, 0x01, 0xce, 0xee, 0x37, 0x32, 0xb0, 0x1c, 0x27, - 0x3c, 0x2f, 0x47, 0x1b, 0x7f, 0xbf, 0xa7, 0x91, 0xcf, 0xe5, 0x91, 0x99, 0x1f, 0x67, 0x61, 0xa9, - 0xdf, 0xe0, 0x79, 0x14, 0xc9, 0x9f, 0x69, 0x7a, 0x0a, 0x43, 0xec, 0x02, 0xd5, 0x30, 0x53, 0xf7, - 0x0c, 0x14, 0x0e, 0x35, 0xaf, 0xa0, 0xc6, 0xfe, 0x36, 0x77, 0x0b, 0x02, 0x57, 0xfe, 0x6a, 0x06, - 0xc2, 0x97, 0x9b, 0xd1, 0x2a, 0xe4, 0x3b, 0x6e, 0xbb, 0xe7, 0x7f, 0x5c, 0x36, 0xdd, 0x36, 0x7f, - 0xb2, 0x4d, 0x92, 0xb1, 0x4f, 0xcc, 0x09, 0xd1, 0xe7, 0xa0, 0x18, 0x50, 0xdf, 0xa0, 0x64, 0xef, - 0x68, 0xe4, 0xff, 0x42, 0x94, 0x52, 0x5a, 0x92, 0x2f, 0x1a, 0xb9, 0x21, 0x04, 0x2b, 0x99, 0xe5, - 0xbf, 0xc9, 0xc0, 0x7c, 0x82, 0x1e, 0xbd, 0x09, 0xd0, 0x31, 0xee, 0xdd, 0x75, 0x7c, 0x62, 0xb4, - 0x8f, 0x86, 0x5a, 0xe4, 0x2e, 0xb5, 0xec, 0x8a, 0xf8, 0x37, 0xd4, 0xca, 0xba, 0x43, 0x6f, 0xfb, - 0x2d, 0xea, 0x5b, 0xce, 0x9e, 0xd8, 0xdf, 0xde, 0x54, 0x72, 0xb0, 0x26, 0x13, 0x61, 0x78, 0xbc, - 0xed, 0x1b, 0x96, 0xb3, 0xe5, 0xb6, 0x49, 0x8d, 0xec, 0xba, 0x3e, 0x91, 0x3a, 0xc8, 0xd7, 0xec, - 0xf9, 0x4b, 0x6d, 0x8d, 0xbe, 0x14, 0x78, 0x00, 0x27, 0xdf, 0xe1, 0xd8, 0x76, 0xed, 0x6e, 0x87, - 0x34, 0x88, 0xe9, 0x8e, 0xeb, 0x7f, 0x2a, 0xd3, 0xee, 0x70, 0x24, 0x34, 0x3c, 0xc3, 0x1d, 0x8e, - 0xa4, 0xe4, 0xe1, 0x3b, 0x1c, 0x09, 0x8e, 0xf3, 0xb8, 0xc3, 0x91, 0x50, 0x71, 0xd0, 0xdf, 0x4e, - 0x66, 0x7b, 0x2a, 0x73, 0x2e, 0x13, 0x81, 0x57, 0x61, 0xfa, 0x90, 0xab, 0x79, 0xe7, 0xc8, 0x23, - 0xe1, 0x51, 0x63, 0xfe, 0xc6, 0xc9, 0x76, 0x04, 0xc6, 0x3a, 0x0d, 0x7a, 0x1d, 0x16, 0xdf, 0x72, - 0xfd, 0x03, 0xdb, 0x35, 0xda, 0xd5, 0x76, 0xc7, 0x0a, 0xd4, 0x33, 0x91, 0xc5, 0x68, 0x2f, 0xe4, - 0x8d, 0x24, 0x01, 0xee, 0xe5, 0x29, 0x7f, 0x27, 0x0f, 0x17, 0xfb, 0x0e, 0x91, 0x74, 0x1e, 0x24, - 0x56, 0x81, 0xec, 0x83, 0x56, 0x20, 0x97, 0xbe, 0x02, 0x03, 0xff, 0x76, 0x33, 0xff, 0xee, 0xff, - 0x76, 0xb3, 0xf0, 0x00, 0xfe, 0x70, 0x22, 0x85, 0x3f, 0x9c, 0x3c, 0x13, 0x7f, 0x58, 0x1c, 0xbf, - 0x3f, 0xac, 0x5d, 0x79, 0xe7, 0x47, 0x97, 0x1e, 0xfb, 0xfe, 0x8f, 0x2e, 0x3d, 0xf6, 0x83, 0x1f, - 0x5d, 0x7a, 0xec, 0x4b, 0x27, 0x97, 0x32, 0xef, 0x9c, 0x5c, 0xca, 0x7c, 0xff, 0xe4, 0x52, 0xe6, - 0x07, 0x27, 0x97, 0x32, 0xff, 0x7c, 0x72, 0x29, 0xf3, 0xe5, 0x7f, 0xb9, 0xf4, 0xd8, 0x67, 0xb3, - 0x87, 0x57, 0xff, 0x37, 0x00, 0x00, 0xff, 0xff, 0x2d, 0x0a, 0x87, 0x40, 0xa8, 0x7c, 0x00, 0x00, + // 6162 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x7d, 0x5b, 0x6c, 0x24, 0xc7, + 0x75, 0xa8, 0xe6, 0x45, 0x0e, 0x0f, 0xdf, 0xb5, 0x5c, 0x69, 0x44, 0xc9, 0xcb, 0xf5, 0xc8, 0x36, + 0x56, 0x96, 0x34, 0xd4, 0xae, 0xe4, 0xf5, 0xca, 0xf2, 0x6b, 0x1e, 0x94, 0x96, 0x5e, 0x92, 0x3b, + 0xae, 0xd9, 0xa5, 0xae, 0x7d, 0xef, 0xb5, 0xd5, 0xec, 0x29, 0x92, 0x6d, 0xf6, 0x74, 0xb7, 0xbb, + 0x6b, 0xa8, 0xa5, 0x92, 0x0f, 0xe7, 0xf1, 0x11, 0x04, 0x49, 0xe0, 0xc4, 0x40, 0x02, 0x38, 0x71, + 0x1e, 0x76, 0x80, 0x04, 0x71, 0x0c, 0x18, 0x71, 0xe0, 0x0f, 0xc3, 0x09, 0x82, 0x20, 0x40, 0x84, + 0x20, 0x08, 0x8c, 0x7c, 0x19, 0x01, 0xcc, 0xc4, 0x8c, 0x13, 0x24, 0x1f, 0x41, 0xbe, 0xb3, 0x5f, + 0x41, 0x3d, 0xba, 0xba, 0xba, 0x67, 0x86, 0x33, 0xbd, 0xe2, 0x8e, 0xf9, 0xb1, 0x7f, 0xd3, 0xe7, + 0x55, 0xa7, 0x5e, 0xe7, 0x9c, 0x3a, 0xf5, 0x18, 0x58, 0xa5, 0x07, 0x24, 0xa0, 0x86, 0x79, 0x50, + 0xb1, 0x5c, 0xf6, 0x7b, 0xd5, 0xf0, 0xac, 0x55, 0xcf, 0x36, 0xe8, 0xae, 0xeb, 0x77, 0x56, 0x0f, + 0xaf, 0xae, 0xee, 0x11, 0x87, 0xf8, 0x06, 0x25, 0xed, 0x8a, 0xe7, 0xbb, 0xd4, 0x45, 0x2b, 0x1a, + 0x43, 0x85, 0x1e, 0x90, 0x8a, 0xe1, 0x59, 0x95, 0x90, 0xa1, 0x72, 0x78, 0x75, 0xf9, 0x85, 0x3d, + 0x8b, 0xee, 0x77, 0x77, 0x2a, 0xa6, 0xdb, 0x59, 0xdd, 0x73, 0xf7, 0xdc, 0x55, 0xce, 0xb7, 0xd3, + 0xdd, 0xe5, 0x5f, 0xfc, 0x83, 0xff, 0x12, 0xf2, 0x96, 0xcb, 0x07, 0x37, 0x02, 0x56, 0x36, 0x2b, + 0xd7, 0x74, 0x7d, 0xd2, 0xa7, 0xcc, 0xe5, 0x97, 0x23, 0x9a, 0x8e, 0x61, 0xee, 0x5b, 0x0e, 0xf1, + 0x8f, 0x56, 0xbd, 0x83, 0x3d, 0xce, 0xe4, 0x93, 0xc0, 0xed, 0xfa, 0x26, 0x49, 0xc5, 0x15, 0xac, + 0x76, 0x08, 0x35, 0xfa, 0x95, 0xb5, 0x3a, 0x88, 0xcb, 0xef, 0x3a, 0xd4, 0xea, 0xf4, 0x16, 0x73, + 0x7d, 0x18, 0x43, 0x60, 0xee, 0x93, 0x8e, 0xd1, 0xc3, 0xf7, 0xd2, 0x20, 0xbe, 0x2e, 0xb5, 0xec, + 0x55, 0xcb, 0xa1, 0x01, 0xf5, 0x7b, 0x98, 0xae, 0xf5, 0xeb, 0x2e, 0xc3, 0xf3, 0x6c, 0xcb, 0x34, + 0xa8, 0xe5, 0x3a, 0x7d, 0x6a, 0x54, 0xfe, 0xed, 0x0c, 0x4c, 0x55, 0xdb, 0x6d, 0xd7, 0x69, 0x79, + 0xc4, 0x44, 0xcf, 0x43, 0x91, 0x12, 0xc7, 0x70, 0xe8, 0x7a, 0xa3, 0x94, 0xb9, 0x9c, 0xb9, 0x32, + 0x55, 0x5b, 0x78, 0xe7, 0x78, 0xe5, 0xb1, 0x93, 0xe3, 0x95, 0xe2, 0x1d, 0x09, 0xc7, 0x8a, 0x02, + 0x7d, 0x08, 0xa6, 0x4d, 0xbb, 0x1b, 0x50, 0xe2, 0x6f, 0x19, 0x1d, 0x52, 0xca, 0x72, 0x86, 0x0b, + 0x92, 0x61, 0xba, 0x1e, 0xa1, 0xb0, 0x4e, 0x87, 0x9e, 0x85, 0xc9, 0x43, 0xe2, 0x07, 0x96, 0xeb, + 0x94, 0x72, 0x9c, 0x65, 0x5e, 0xb2, 0x4c, 0x6e, 0x0b, 0x30, 0x0e, 0xf1, 0xe5, 0xef, 0x66, 0x20, + 0x57, 0xf5, 0x3c, 0xf4, 0x26, 0x14, 0x59, 0x97, 0xb4, 0x0d, 0x6a, 0x70, 0xbd, 0xa6, 0xaf, 0xbd, + 0x58, 0x11, 0x2d, 0x54, 0xd1, 0x5b, 0xa8, 0xe2, 0x1d, 0xec, 0x31, 0x40, 0x50, 0x61, 0xd4, 0x95, + 0xc3, 0xab, 0x95, 0xdb, 0x3b, 0x5f, 0x20, 0x26, 0xdd, 0x24, 0xd4, 0xa8, 0x21, 0x59, 0x0a, 0x44, + 0x30, 0xac, 0xa4, 0xa2, 0x4d, 0xc8, 0x07, 0x1e, 0x31, 0x79, 0x25, 0xa6, 0xaf, 0x3d, 0x57, 0xe9, + 0x37, 0x90, 0xb5, 0xa6, 0x64, 0xb2, 0xab, 0x9e, 0xc7, 0x1a, 0xad, 0x36, 0x23, 0x05, 0xe7, 0xd9, + 0x17, 0xe6, 0x62, 0xca, 0x3f, 0xcc, 0xc0, 0x42, 0xb5, 0x4b, 0xf7, 0xdf, 0x7e, 0x83, 0xec, 0xec, + 0xbb, 0xee, 0x41, 0xb5, 0xdd, 0xf6, 0xd1, 0xe7, 0x61, 0x72, 0xa7, 0x6b, 0xd9, 0xd4, 0x72, 0x64, + 0x25, 0x6e, 0x54, 0x86, 0xcc, 0x97, 0x4a, 0x4d, 0xd0, 0x27, 0x45, 0xd5, 0xa6, 0x59, 0x73, 0x49, + 0x24, 0x0e, 0xa5, 0x22, 0x13, 0x8a, 0xe4, 0x1e, 0x25, 0xbe, 0x63, 0xd8, 0xb2, 0x22, 0xaf, 0x0c, + 0x2d, 0x61, 0x4d, 0x32, 0xf4, 0x14, 0x31, 0xc3, 0x7a, 0x3d, 0xc4, 0x62, 0x25, 0xb8, 0xdc, 0x82, + 0x99, 0x9a, 0xeb, 0xb2, 0x01, 0x68, 0x78, 0xac, 0x6f, 0xea, 0x90, 0x33, 0x3c, 0x4f, 0xd6, 0xe8, + 0x7d, 0x43, 0xcb, 0xab, 0x7a, 0x5e, 0x6d, 0x5a, 0xb6, 0x18, 0xeb, 0x5b, 0xcc, 0xb8, 0xcb, 0x4f, + 0xc2, 0x13, 0x03, 0xaa, 0x5a, 0xfe, 0xbd, 0x2c, 0x4c, 0xd7, 0x5b, 0xeb, 0xb7, 0x3d, 0x36, 0x6e, + 0x5d, 0x7f, 0x0c, 0x63, 0x01, 0xc7, 0xc6, 0xc2, 0x8b, 0x43, 0xab, 0xa4, 0x69, 0x37, 0x68, 0x40, + 0xa0, 0xcf, 0xc2, 0x44, 0x40, 0x0d, 0xda, 0x0d, 0xf8, 0x98, 0x9f, 0xbe, 0x76, 0x2d, 0x95, 0x54, + 0xce, 0x59, 0x9b, 0x93, 0x72, 0x27, 0xc4, 0x37, 0x96, 0x12, 0xcb, 0x9f, 0x00, 0xa4, 0x11, 0xbf, + 0x46, 0x0c, 0xda, 0xf5, 0x63, 0xd3, 0x2c, 0x33, 0x64, 0x9a, 0xfd, 0x75, 0x06, 0xe6, 0x35, 0x09, + 0x1b, 0x56, 0x40, 0xd1, 0xff, 0xeb, 0x69, 0xe6, 0xca, 0x68, 0xcd, 0xcc, 0xb8, 0x79, 0x23, 0x2b, + 0xd3, 0x11, 0x42, 0xb4, 0x26, 0xfe, 0x34, 0x14, 0x2c, 0x4a, 0x3a, 0x41, 0x29, 0x7b, 0x39, 0x77, + 0x65, 0xfa, 0xda, 0xf3, 0x69, 0x5a, 0xa3, 0x36, 0x2b, 0x05, 0x17, 0xd6, 0x99, 0x08, 0x2c, 0x24, + 0x95, 0xff, 0x20, 0x5e, 0x89, 0x73, 0x69, 0xcf, 0xbe, 0x93, 0x83, 0xc5, 0x9e, 0x7e, 0x4d, 0xd1, + 0x53, 0xa8, 0x09, 0x4b, 0x01, 0x75, 0x7d, 0x63, 0x8f, 0x6c, 0x13, 0xa7, 0xed, 0xfa, 0x92, 0x40, + 0xea, 0xfa, 0xb4, 0xe4, 0x5b, 0x6a, 0xf5, 0xa1, 0xc1, 0x7d, 0x39, 0xd1, 0x55, 0x28, 0x78, 0xfb, + 0x46, 0x40, 0xa4, 0xee, 0x4f, 0x85, 0x6d, 0xdb, 0x64, 0xc0, 0xfb, 0xc7, 0x2b, 0xc0, 0xbd, 0x03, + 0xff, 0xc2, 0x82, 0x12, 0x7d, 0x00, 0x26, 0x7c, 0x62, 0x04, 0xae, 0x53, 0xca, 0x73, 0x1e, 0x35, + 0x2e, 0x31, 0x87, 0x62, 0x89, 0x45, 0xd7, 0x00, 0x7c, 0x42, 0xfd, 0xa3, 0xba, 0xdb, 0x75, 0x68, + 0xa9, 0x70, 0x39, 0x73, 0xa5, 0x10, 0xcd, 0x3c, 0xac, 0x30, 0x58, 0xa3, 0x42, 0xbf, 0x9e, 0x81, + 0xa7, 0x6c, 0x23, 0xa0, 0x98, 0xac, 0x3b, 0x16, 0xb5, 0x0c, 0xdb, 0x7a, 0xdb, 0x72, 0xf6, 0xee, + 0x58, 0x1d, 0x36, 0x3c, 0x3a, 0x5e, 0x69, 0x82, 0x0f, 0xc5, 0x0f, 0x8e, 0x36, 0x14, 0x19, 0x5b, + 0xed, 0x19, 0x59, 0xe2, 0x53, 0x1b, 0x83, 0xc5, 0xe2, 0xd3, 0xca, 0x2c, 0xb7, 0xf9, 0xc0, 0x6a, + 0xfa, 0xee, 0xbd, 0xa3, 0xdb, 0x1e, 0xb3, 0xfe, 0x01, 0x5a, 0x85, 0x29, 0xc7, 0xe8, 0x90, 0xc0, + 0x33, 0x4c, 0x22, 0x3b, 0x6d, 0x51, 0x96, 0x33, 0xb5, 0x15, 0x22, 0x70, 0x44, 0x83, 0x2e, 0x43, + 0xde, 0x89, 0x06, 0x95, 0xb2, 0x10, 0x7c, 0x34, 0x71, 0x4c, 0xf9, 0x2b, 0x59, 0x98, 0x94, 0x63, + 0x6c, 0x0c, 0x36, 0x6e, 0x2b, 0x66, 0xe3, 0x46, 0x98, 0x7f, 0x42, 0xb3, 0x81, 0xf6, 0x6d, 0x3b, + 0x61, 0xdf, 0x2a, 0x23, 0x4b, 0x3c, 0xdd, 0xb6, 0x7d, 0x3d, 0x0b, 0x33, 0x92, 0x92, 0x0f, 0xc4, + 0x31, 0x34, 0x4d, 0x2b, 0xd6, 0x34, 0x57, 0x47, 0xad, 0x88, 0x8a, 0xa2, 0xfa, 0xb6, 0xcf, 0xff, + 0x4d, 0xb4, 0xcf, 0x4b, 0xe9, 0xc4, 0x9e, 0xde, 0x48, 0x7f, 0x93, 0x81, 0x05, 0x9d, 0x7c, 0x0c, + 0x06, 0x1c, 0xc7, 0x0d, 0xf8, 0x0b, 0xa9, 0xaa, 0x33, 0xc0, 0x82, 0xff, 0x46, 0xa2, 0x1a, 0xdc, + 0x84, 0x5f, 0x86, 0x3c, 0x3d, 0xf2, 0xc2, 0x49, 0xa6, 0x9a, 0xf6, 0xce, 0x91, 0x47, 0x30, 0xc7, + 0x30, 0x0b, 0x66, 0x93, 0x43, 0x62, 0xcb, 0xb9, 0xa5, 0x2c, 0xd8, 0x06, 0x03, 0x2a, 0x0b, 0xc6, + 0xbf, 0xb0, 0xa0, 0x4c, 0x63, 0xb2, 0x7f, 0x25, 0x03, 0xa8, 0xb7, 0x2b, 0xd2, 0xd8, 0xec, 0x67, + 0x42, 0x0b, 0x2b, 0xf4, 0x9b, 0x8d, 0x59, 0xd8, 0x5e, 0x9b, 0x9a, 0x3b, 0xcd, 0xa6, 0x96, 0x7f, + 0x2d, 0x17, 0x6f, 0x23, 0xd6, 0x0e, 0x63, 0x98, 0x13, 0x61, 0x2f, 0x64, 0x87, 0xf7, 0x42, 0x6e, + 0xe4, 0x5e, 0x78, 0x15, 0x66, 0x6d, 0x83, 0x92, 0x80, 0x86, 0x5e, 0x4c, 0xb8, 0x93, 0x8b, 0x92, + 0x75, 0x76, 0x43, 0x47, 0xe2, 0x38, 0x2d, 0x73, 0xd6, 0x6d, 0x12, 0x98, 0xbe, 0xc5, 0x2d, 0x32, + 0xf7, 0x2e, 0x9a, 0xb3, 0x6e, 0x44, 0x28, 0xac, 0xd3, 0xa1, 0xdb, 0x70, 0xd1, 0x74, 0x3b, 0x9e, + 0x41, 0xad, 0x1d, 0x9b, 0xc8, 0x86, 0x64, 0xb5, 0x28, 0x4d, 0x5c, 0xce, 0x5d, 0x99, 0xaa, 0x3d, + 0x79, 0x72, 0xbc, 0x72, 0xb1, 0xde, 0x8f, 0x00, 0xf7, 0xe7, 0x2b, 0xff, 0x7d, 0x06, 0x96, 0x92, + 0x1d, 0x32, 0x86, 0xf9, 0xb7, 0x1d, 0x9f, 0x7f, 0xe9, 0xac, 0x14, 0xd3, 0x71, 0xc0, 0x1c, 0xfc, + 0xa3, 0x0c, 0xcc, 0x45, 0xa4, 0x3e, 0x09, 0x98, 0xaf, 0xd3, 0x67, 0xe0, 0x53, 0x7a, 0xdf, 0xdf, + 0x3f, 0x5e, 0x99, 0x96, 0x64, 0xda, 0x50, 0xb8, 0x0c, 0xf9, 0x7d, 0x37, 0xa0, 0xc9, 0xc1, 0x72, + 0xd3, 0x0d, 0x28, 0xe6, 0x18, 0x46, 0xe1, 0xb9, 0x3e, 0xe5, 0x63, 0xa5, 0x10, 0x51, 0x34, 0x5d, + 0x9f, 0x62, 0x8e, 0xe1, 0x14, 0x06, 0xdd, 0x97, 0x43, 0x22, 0xa2, 0x30, 0xe8, 0x3e, 0xe6, 0x98, + 0xf2, 0x6b, 0x70, 0x21, 0x54, 0xd4, 0xf3, 0xec, 0x98, 0x67, 0x76, 0xe9, 0x5d, 0xaf, 0x6d, 0x50, + 0xa1, 0x72, 0x51, 0xf3, 0xcc, 0x21, 0x02, 0x47, 0x34, 0xe5, 0xef, 0x45, 0x56, 0x87, 0x75, 0xbc, + 0xeb, 0x10, 0x87, 0x8e, 0x60, 0x75, 0x7e, 0x21, 0x03, 0x45, 0x9f, 0xf0, 0x05, 0x61, 0x30, 0xf2, + 0x62, 0x2b, 0x59, 0x0e, 0x96, 0x02, 0x6a, 0xcf, 0x87, 0x5d, 0x1d, 0x42, 0xee, 0x1f, 0xaf, 0x94, + 0x06, 0x51, 0x63, 0x55, 0x30, 0x1b, 0x7d, 0x03, 0xc9, 0x98, 0x8d, 0x6a, 0x93, 0xc0, 0xf2, 0x49, + 0x9b, 0xd7, 0xa3, 0x10, 0xd9, 0xa8, 0x86, 0x00, 0xe3, 0x10, 0xcf, 0x48, 0xcd, 0xae, 0xef, 0x13, + 0x47, 0xf4, 0x9a, 0x46, 0x5a, 0x17, 0x60, 0x1c, 0xe2, 0x59, 0x03, 0x1b, 0x87, 0x86, 0x65, 0x1b, + 0x3b, 0x36, 0x91, 0x1d, 0xa8, 0x1a, 0xb8, 0x1a, 0x22, 0x70, 0x44, 0xc3, 0x64, 0x77, 0x79, 0x53, + 0xb7, 0x79, 0x6f, 0x6a, 0xb2, 0x45, 0x0f, 0xb4, 0x71, 0x88, 0x2f, 0x7f, 0x23, 0xa7, 0xf5, 0x85, + 0xd3, 0xb6, 0xf8, 0x94, 0x1d, 0xde, 0x17, 0xaf, 0x28, 0xe7, 0x2a, 0x86, 0xdc, 0x7b, 0xe3, 0x7e, + 0xf2, 0xfe, 0xf1, 0xca, 0xbc, 0x12, 0x17, 0x77, 0x9d, 0x68, 0x8f, 0xd9, 0xa0, 0x80, 0x36, 0x7d, + 0x77, 0x87, 0xb0, 0x88, 0x4f, 0xba, 0xe7, 0x34, 0x01, 0xa6, 0x66, 0xaf, 0x34, 0x41, 0x38, 0x2e, + 0x17, 0x1d, 0x02, 0x62, 0x80, 0x3b, 0xbe, 0xe1, 0x04, 0x5c, 0x11, 0x5e, 0x5a, 0x3e, 0x75, 0x69, + 0xcb, 0xb2, 0x34, 0xb4, 0xd1, 0x23, 0x0d, 0xf7, 0x29, 0x41, 0x73, 0x2c, 0x85, 0x53, 0x83, 0xf5, + 0x67, 0x61, 0xb2, 0x43, 0x82, 0xc0, 0xd8, 0x23, 0x3c, 0xc6, 0xd6, 0x1c, 0xda, 0xa6, 0x00, 0xe3, + 0x10, 0x5f, 0xfe, 0x9f, 0x02, 0x2c, 0x86, 0xbd, 0xe4, 0x93, 0x36, 0x71, 0x58, 0xcc, 0x3c, 0x06, + 0x27, 0xa4, 0xaf, 0xe6, 0xb2, 0x69, 0x57, 0x73, 0xb9, 0x11, 0x57, 0x73, 0x15, 0x00, 0x42, 0xcd, + 0x76, 0xbd, 0x5a, 0x27, 0x3e, 0xe5, 0xfd, 0x33, 0x53, 0x9b, 0x63, 0x2a, 0xad, 0xdd, 0xa9, 0x37, + 0x04, 0x14, 0x6b, 0x14, 0xe8, 0x39, 0x98, 0x12, 0x5f, 0xb7, 0xc8, 0x11, 0x6f, 0xe2, 0x99, 0xda, + 0x2c, 0x9b, 0x0a, 0x82, 0xfc, 0x16, 0x39, 0xc2, 0x11, 0x1e, 0xd5, 0x61, 0x91, 0x7d, 0x54, 0x9b, + 0xeb, 0x75, 0xdb, 0x22, 0x0e, 0xe5, 0x65, 0x4c, 0x70, 0xa6, 0x8b, 0x27, 0xc7, 0x2b, 0x8b, 0x8c, + 0x29, 0x86, 0xc4, 0xbd, 0xf4, 0xe8, 0x93, 0xb0, 0x10, 0x03, 0xb2, 0x82, 0x27, 0xb9, 0x8c, 0xa5, + 0x93, 0xe3, 0x95, 0x85, 0x98, 0x0c, 0x56, 0x7e, 0x0f, 0x35, 0x2a, 0xc3, 0x84, 0x69, 0xf0, 0xb2, + 0x8b, 0x9c, 0x0f, 0xd8, 0x78, 0x90, 0x75, 0x93, 0x18, 0xb4, 0x02, 0x05, 0xd3, 0x60, 0xa2, 0xa7, + 0x38, 0xc9, 0x14, 0xf3, 0x14, 0xa2, 0x3e, 0x02, 0xce, 0x1a, 0xca, 0x8c, 0x2a, 0x01, 0x51, 0x43, + 0x69, 0xda, 0x6b, 0x14, 0xac, 0xa1, 0x4c, 0xa5, 0xef, 0x74, 0xd4, 0x50, 0x91, 0xa2, 0x11, 0x9e, + 0x95, 0x4e, 0xdd, 0x03, 0xe2, 0x94, 0x66, 0x78, 0xb7, 0xf1, 0xd2, 0xef, 0x30, 0x00, 0x16, 0x70, + 0xf4, 0x11, 0x98, 0xdb, 0x09, 0xb3, 0x50, 0x1c, 0x51, 0x9a, 0xe5, 0x94, 0xe8, 0xe4, 0x78, 0x65, + 0xae, 0x16, 0xc3, 0xe0, 0x04, 0x25, 0xe3, 0x35, 0x89, 0x4f, 0xad, 0x5d, 0xcb, 0x34, 0x28, 0x61, + 0xea, 0xcc, 0x45, 0xbc, 0xf5, 0x18, 0x06, 0x27, 0x28, 0xcb, 0xff, 0x90, 0x81, 0x8b, 0x3d, 0x63, + 0x7f, 0x0c, 0xfe, 0xfe, 0x8d, 0xb8, 0xbf, 0xbf, 0x36, 0xb2, 0xab, 0x51, 0x4a, 0x0e, 0x70, 0xf8, + 0xdf, 0x9d, 0x52, 0x0e, 0x3f, 0xcc, 0x1c, 0x3d, 0x0d, 0x79, 0xcb, 0x3b, 0x0c, 0xa4, 0xf7, 0x2c, + 0x32, 0x63, 0xbb, 0xde, 0xdc, 0x6e, 0x61, 0x0e, 0x45, 0x57, 0xa0, 0xe8, 0x75, 0x77, 0x6c, 0xcb, + 0xdc, 0xa8, 0xf1, 0x59, 0x58, 0x14, 0x99, 0xc2, 0xa6, 0x84, 0x61, 0x85, 0x65, 0x23, 0xc4, 0x72, + 0x44, 0xd6, 0x70, 0xa3, 0xc6, 0x27, 0x60, 0x51, 0x8c, 0x90, 0x75, 0x05, 0xc5, 0x1a, 0x05, 0x7a, + 0x11, 0x26, 0xf7, 0xbc, 0x2e, 0x8f, 0xc6, 0x84, 0xdb, 0x7f, 0x9c, 0x99, 0x9f, 0xd7, 0x9b, 0x77, + 0x65, 0xa8, 0x11, 0xfe, 0xc4, 0x21, 0x19, 0x6a, 0xc2, 0x12, 0x71, 0x98, 0x93, 0xd9, 0x34, 0xf8, + 0x5a, 0xd2, 0xdc, 0x27, 0xed, 0xae, 0x4d, 0xf8, 0x3c, 0x2c, 0x46, 0xe9, 0x90, 0xb5, 0x3e, 0x34, + 0xb8, 0x2f, 0x27, 0x7a, 0x15, 0xb2, 0xfb, 0x86, 0xcc, 0x32, 0x3c, 0x33, 0xb4, 0x91, 0x6f, 0x56, + 0x6b, 0x13, 0x27, 0xc7, 0x2b, 0xd9, 0x9b, 0x55, 0x9c, 0xdd, 0x37, 0xd8, 0xc0, 0x0a, 0x0e, 0x2c, + 0x4f, 0xf9, 0x9a, 0xa0, 0x34, 0xc9, 0xa3, 0x4a, 0x3e, 0xb0, 0x5a, 0x31, 0x0c, 0x4e, 0x50, 0xa2, + 0x4f, 0x41, 0x61, 0xd7, 0xb2, 0x49, 0x50, 0x2a, 0xf2, 0x0e, 0x7e, 0xff, 0xd0, 0xb2, 0x5f, 0xb3, + 0x6c, 0x2d, 0x88, 0x63, 0x5f, 0x01, 0x16, 0x22, 0xd0, 0x01, 0x14, 0xf6, 0x5d, 0xf7, 0x20, 0x28, + 0x4d, 0x71, 0x59, 0x1f, 0x19, 0x75, 0xb0, 0xc8, 0x01, 0x50, 0xb9, 0xc9, 0x98, 0xd7, 0x1c, 0xea, + 0x1f, 0xd5, 0x9e, 0x0c, 0x0b, 0xe0, 0xb0, 0x9f, 0xff, 0xe7, 0x95, 0x22, 0xfb, 0xc1, 0x7b, 0x41, + 0x94, 0x81, 0x76, 0x61, 0xda, 0x0c, 0xac, 0x30, 0xa5, 0xc5, 0x0d, 0xc1, 0x48, 0xcb, 0xdb, 0x9e, + 0x8c, 0x65, 0x6d, 0x9e, 0x1b, 0xe6, 0x08, 0x8e, 0x75, 0xc1, 0x28, 0x80, 0x05, 0x23, 0x91, 0x1b, + 0xe6, 0x66, 0x64, 0x94, 0xe0, 0xb7, 0x27, 0xb9, 0xcd, 0x2d, 0x65, 0x12, 0x8a, 0x7b, 0x0a, 0x40, + 0x9b, 0x70, 0x41, 0x0e, 0x13, 0x42, 0x7d, 0xcb, 0x0c, 0x5a, 0xc4, 0x3f, 0x24, 0x3e, 0xb7, 0x4a, + 0x45, 0x15, 0x0a, 0x5f, 0x58, 0xeb, 0x25, 0xc1, 0xfd, 0xf8, 0xd8, 0x8a, 0xc7, 0xf2, 0x0e, 0xaf, + 0x37, 0xba, 0x86, 0xdd, 0x62, 0xfa, 0x72, 0xa3, 0x55, 0x8c, 0x22, 0x88, 0xf5, 0xa6, 0x86, 0xc4, + 0x71, 0x5a, 0x74, 0x03, 0x66, 0x84, 0xcc, 0xba, 0x65, 0x5b, 0xdd, 0x0e, 0x37, 0x5a, 0xc5, 0xda, + 0x92, 0xe4, 0x9d, 0x59, 0xd3, 0x70, 0x38, 0x46, 0x89, 0x1a, 0xb0, 0x60, 0xba, 0x0e, 0x35, 0x98, + 0x01, 0xc2, 0x62, 0xe3, 0xa9, 0x34, 0xcf, 0x67, 0x58, 0x49, 0x72, 0x2f, 0xd4, 0x13, 0x78, 0xdc, + 0xc3, 0x81, 0x5a, 0x2c, 0x8e, 0xdb, 0xf3, 0x8d, 0x36, 0x29, 0x3d, 0xce, 0xdb, 0xfd, 0xca, 0xd0, + 0x76, 0xbf, 0x2b, 0xe8, 0xf5, 0x88, 0x8f, 0x03, 0x70, 0x28, 0x69, 0xf9, 0x06, 0x40, 0x34, 0xda, + 0xd0, 0x02, 0xe4, 0x0e, 0xc8, 0x91, 0x88, 0xf4, 0x30, 0xfb, 0x89, 0x96, 0xa0, 0x70, 0x68, 0xd8, + 0x5d, 0xb9, 0xf2, 0xc4, 0xe2, 0xe3, 0x23, 0xd9, 0x1b, 0x99, 0xf2, 0xef, 0xe7, 0xe0, 0x29, 0x39, + 0x6e, 0x5f, 0xf7, 0xdd, 0xae, 0x57, 0x6d, 0xae, 0x63, 0xb9, 0xdb, 0xc7, 0x0c, 0x9c, 0xca, 0xb8, + 0x65, 0x06, 0x65, 0xdc, 0x58, 0x83, 0x06, 0x96, 0xb3, 0xd7, 0xb5, 0x0d, 0x3d, 0xe1, 0xab, 0x1a, + 0xb4, 0xa5, 0xe1, 0x70, 0x8c, 0x12, 0x5d, 0x03, 0x50, 0xa9, 0xbd, 0xb6, 0xb4, 0x6c, 0x2a, 0x76, + 0x51, 0xf9, 0xbf, 0x36, 0xd6, 0xa8, 0xd0, 0x33, 0x50, 0xd8, 0x63, 0x7a, 0x4a, 0xdb, 0xa6, 0x66, + 0x2e, 0x57, 0x1e, 0x0b, 0x9c, 0x9e, 0x56, 0x28, 0x0c, 0x49, 0x2b, 0x5c, 0x86, 0xfc, 0x81, 0xe5, + 0xb4, 0x65, 0xb4, 0xa6, 0xea, 0x77, 0xcb, 0x72, 0xda, 0x98, 0x63, 0x98, 0x13, 0x3d, 0x24, 0xfe, + 0x4e, 0x68, 0x85, 0xb8, 0x13, 0xdd, 0x66, 0x00, 0x2c, 0xe0, 0xcc, 0x40, 0x07, 0xfb, 0xae, 0x4f, + 0xb9, 0xc6, 0xdc, 0xf0, 0x4c, 0x09, 0x03, 0xdd, 0x52, 0x50, 0xac, 0x51, 0x70, 0x97, 0x6f, 0x50, + 0xb2, 0xe7, 0xfa, 0x16, 0x11, 0xc6, 0x45, 0xd2, 0xd7, 0x15, 0x14, 0x6b, 0x14, 0xe5, 0x3f, 0xcb, + 0xc2, 0xd3, 0xa7, 0x74, 0x51, 0x30, 0x86, 0x98, 0xf1, 0x06, 0xcc, 0xf0, 0x96, 0x8d, 0x27, 0xca, + 0x55, 0x1f, 0xbf, 0xae, 0xe1, 0x70, 0x8c, 0x12, 0x1d, 0xc2, 0x8c, 0xe1, 0x59, 0xa1, 0xbe, 0x41, + 0x29, 0xc7, 0x6d, 0xe9, 0x47, 0x47, 0xb5, 0xa5, 0xfd, 0x2a, 0x1c, 0x95, 0xab, 0x21, 0x02, 0x1c, + 0x2b, 0xa7, 0xfc, 0x93, 0x0c, 0x5c, 0x3e, 0xad, 0xd1, 0x7a, 0x82, 0x8d, 0xdc, 0x99, 0x07, 0x1b, + 0x3b, 0xf1, 0x60, 0xe3, 0x63, 0xef, 0xa6, 0xce, 0xc1, 0x80, 0xb8, 0xe3, 0x7b, 0x19, 0x08, 0x83, + 0xf0, 0x31, 0x84, 0x4f, 0x9b, 0xf1, 0x1a, 0x5d, 0x19, 0xb5, 0x46, 0x03, 0x94, 0xff, 0xcf, 0x9c, + 0x0a, 0x9a, 0x36, 0x85, 0x66, 0x68, 0x19, 0xb2, 0x96, 0x27, 0x8d, 0x0d, 0x48, 0xa6, 0xec, 0x7a, + 0x13, 0x67, 0x2d, 0x4f, 0xa5, 0x3b, 0xb2, 0x03, 0xd3, 0x1d, 0xcf, 0x43, 0xb1, 0x1b, 0xb0, 0x38, + 0x48, 0xad, 0x54, 0x54, 0x6d, 0xee, 0x4a, 0x38, 0x56, 0x14, 0x3c, 0x04, 0x33, 0x82, 0xe0, 0x2d, + 0xd7, 0x6f, 0xcb, 0x15, 0x8a, 0x08, 0xc1, 0x24, 0x0c, 0x2b, 0x2c, 0x9b, 0xb1, 0x9e, 0x6f, 0x1d, + 0xca, 0x30, 0xb7, 0x10, 0x05, 0xe9, 0x4d, 0x05, 0xc5, 0x1a, 0x05, 0xa7, 0x37, 0x82, 0xa0, 0xb9, + 0xef, 0x1b, 0x01, 0x91, 0x2b, 0x13, 0x41, 0xaf, 0xa0, 0x58, 0xa3, 0x40, 0x26, 0x4c, 0xd8, 0xc6, + 0x0e, 0xb1, 0x85, 0x8d, 0x99, 0xbe, 0xf6, 0xea, 0xa8, 0x0d, 0x2b, 0x9b, 0xad, 0xb2, 0xc1, 0xb9, + 0x45, 0xac, 0xa1, 0x96, 0xa6, 0x02, 0x88, 0xa5, 0x68, 0x54, 0x85, 0x09, 0xe6, 0x89, 0x68, 0x18, + 0x1b, 0x3d, 0xa9, 0x0d, 0x8c, 0x8a, 0xe9, 0xfa, 0x84, 0x2f, 0x8e, 0x19, 0x45, 0x24, 0x82, 0x7f, + 0x06, 0x58, 0x32, 0x2e, 0xbf, 0x02, 0xd3, 0x5a, 0x49, 0xa9, 0xfc, 0xcc, 0x8f, 0xb2, 0x30, 0x2f, + 0x95, 0x6e, 0xfa, 0xae, 0x47, 0x7c, 0x7a, 0x84, 0x36, 0x60, 0xa9, 0x63, 0xdc, 0x0b, 0x77, 0x30, + 0x88, 0x7f, 0x68, 0x99, 0x64, 0xab, 0xdb, 0x91, 0x69, 0x96, 0x12, 0x8b, 0x39, 0x37, 0xfb, 0xe0, + 0x71, 0x5f, 0x2e, 0xf4, 0x61, 0x98, 0xed, 0x18, 0xf7, 0xb6, 0xdc, 0x36, 0x69, 0xba, 0x6d, 0x26, + 0x46, 0x8c, 0x93, 0x45, 0x16, 0x11, 0x6c, 0xea, 0x08, 0x1c, 0xa7, 0x43, 0x5f, 0xca, 0xc0, 0xac, + 0xcb, 0xfc, 0x81, 0x6b, 0xb7, 0xb1, 0x41, 0x2d, 0x57, 0x1a, 0xa9, 0xfa, 0xa8, 0xbd, 0x10, 0x56, + 0xa8, 0x72, 0x5b, 0x97, 0x22, 0x7a, 0x43, 0x05, 0x25, 0x31, 0x1c, 0x8e, 0x17, 0xb8, 0xfc, 0x49, + 0x40, 0xbd, 0xbc, 0xa9, 0xda, 0xf7, 0x3f, 0x0a, 0xaa, 0x7d, 0x43, 0xbb, 0x81, 0x7e, 0x16, 0x8a, + 0xa6, 0xe1, 0x19, 0xa6, 0x45, 0x99, 0x10, 0x56, 0xa5, 0x8f, 0x8f, 0x5a, 0xa5, 0x50, 0x46, 0xa5, + 0x2e, 0x05, 0x88, 0xda, 0x5c, 0x0e, 0xa7, 0x53, 0x08, 0xbe, 0x7f, 0xbc, 0x32, 0x13, 0xd2, 0x32, + 0x83, 0x81, 0x55, 0x89, 0xe8, 0x97, 0x32, 0x30, 0x6d, 0xd8, 0xb6, 0x6b, 0x1a, 0x94, 0x27, 0xb9, + 0x84, 0xcd, 0xa8, 0xa6, 0xd6, 0xa0, 0x1a, 0xc9, 0x10, 0x4a, 0x84, 0x5b, 0x91, 0xd3, 0x1a, 0xa6, + 0x47, 0x0f, 0xbd, 0x68, 0xd6, 0xc3, 0x53, 0xf2, 0x9b, 0x07, 0x1a, 0x4c, 0x91, 0x4f, 0x3c, 0xa8, + 0x22, 0xa4, 0x2d, 0xd4, 0x78, 0xaf, 0x4a, 0xd7, 0x85, 0xf0, 0x1e, 0x25, 0xa2, 0x42, 0x97, 0x0f, + 0x60, 0x36, 0xd6, 0x94, 0x7d, 0x3a, 0xb7, 0xa1, 0x77, 0xee, 0x10, 0xc3, 0x5d, 0x09, 0x8f, 0x64, + 0x55, 0x3e, 0xdd, 0x35, 0x1c, 0x6a, 0xd1, 0x23, 0x6d, 0x30, 0x2c, 0x3b, 0xb0, 0x90, 0x6c, 0xb5, + 0x87, 0x5a, 0x9e, 0x0d, 0x73, 0xf1, 0xc6, 0x79, 0x98, 0xa5, 0x95, 0xbf, 0x75, 0x51, 0xf9, 0x3c, + 0xbe, 0xb7, 0xf5, 0x09, 0x80, 0x5d, 0xcb, 0x31, 0x6c, 0xeb, 0x6d, 0xe2, 0x07, 0x7c, 0xa0, 0x4f, + 0xd5, 0x56, 0x98, 0xb5, 0x7d, 0x4d, 0x41, 0xef, 0x1f, 0xaf, 0xcc, 0xaa, 0x2f, 0x1e, 0x89, 0x6a, + 0x2c, 0xe9, 0x33, 0x62, 0x6d, 0x2b, 0xf0, 0x6c, 0xe3, 0xa8, 0x5f, 0x46, 0xac, 0x11, 0xa1, 0xb0, + 0x4e, 0xa7, 0xf2, 0xaf, 0xf9, 0x81, 0xf9, 0xd7, 0x14, 0x51, 0x6b, 0x03, 0xa6, 0x1d, 0x42, 0xdf, + 0x72, 0xfd, 0x03, 0xb9, 0xeb, 0xc2, 0xc8, 0xcb, 0xa1, 0x0e, 0x5b, 0x11, 0xea, 0x7e, 0xfc, 0x13, + 0xeb, 0x6c, 0x6c, 0x1d, 0x25, 0x3f, 0x1b, 0x84, 0x59, 0x51, 0x9e, 0xff, 0xd2, 0x76, 0x8e, 0xb6, + 0x74, 0x24, 0x8e, 0xd3, 0x6a, 0x89, 0xc1, 0xfa, 0x7a, 0x03, 0xf3, 0x14, 0x58, 0x6f, 0x62, 0x90, + 0xa1, 0xb0, 0x4e, 0x87, 0xae, 0xc2, 0x74, 0x20, 0x6c, 0x36, 0x67, 0xbb, 0x20, 0x2a, 0xca, 0x58, + 0x5a, 0x11, 0x18, 0xeb, 0x34, 0x68, 0x15, 0xa6, 0xda, 0x4e, 0xd0, 0x70, 0x3b, 0x86, 0xe5, 0xf0, + 0x3c, 0x9a, 0x76, 0x4a, 0xa0, 0xb1, 0xd5, 0x12, 0x08, 0x1c, 0xd1, 0x20, 0x0c, 0x8f, 0x8b, 0xec, + 0x49, 0xd5, 0xe6, 0x59, 0x11, 0x6a, 0x1d, 0x12, 0x11, 0x9c, 0x03, 0x1f, 0x1c, 0xcb, 0x27, 0xc7, + 0x2b, 0x8f, 0x37, 0xfb, 0x52, 0xe0, 0x01, 0x9c, 0xc8, 0x85, 0xe2, 0xae, 0x58, 0x60, 0x07, 0x72, + 0xbd, 0xbc, 0x9a, 0x32, 0x1f, 0xa0, 0xfa, 0xa7, 0x28, 0x01, 0x6c, 0x54, 0x26, 0x92, 0x46, 0x58, + 0x15, 0x82, 0xde, 0x62, 0x31, 0x07, 0xf7, 0x2b, 0x6c, 0x95, 0x30, 0x33, 0xea, 0x21, 0xaa, 0xb8, + 0x47, 0xaa, 0xbd, 0x3f, 0x0c, 0xeb, 0x9b, 0x4a, 0x16, 0xcf, 0xe3, 0xc7, 0xc9, 0xb0, 0x56, 0x14, + 0xfa, 0x3c, 0x4c, 0x19, 0x62, 0x33, 0x8a, 0x04, 0xa5, 0x59, 0x6e, 0x2b, 0x57, 0x53, 0xc6, 0x23, + 0xd1, 0xfc, 0x91, 0x80, 0x00, 0x47, 0x32, 0xd1, 0x2f, 0x66, 0x60, 0xbe, 0xed, 0x9a, 0x07, 0xc4, + 0x5f, 0xbb, 0x47, 0x7d, 0xa3, 0xea, 0xef, 0x05, 0xa5, 0xb9, 0x74, 0xce, 0x81, 0xcd, 0xfb, 0x4a, + 0x23, 0x2e, 0x43, 0x58, 0xe5, 0x27, 0x64, 0xc9, 0xf3, 0x09, 0x2c, 0x4e, 0x16, 0xc9, 0xfc, 0xd3, + 0xc2, 0x41, 0x77, 0x87, 0xd8, 0x84, 0x46, 0x7a, 0xcc, 0x73, 0x3d, 0x6a, 0xa9, 0xf4, 0xb8, 0x95, + 0x10, 0x22, 0x14, 0x51, 0x39, 0x81, 0x24, 0x1a, 0xf7, 0x94, 0x8a, 0xbe, 0x9c, 0x01, 0x64, 0x78, + 0x96, 0x48, 0x6f, 0x44, 0xca, 0x2c, 0x70, 0x65, 0x1a, 0xa9, 0x94, 0xa9, 0xf6, 0x88, 0x11, 0xea, + 0xa8, 0x0d, 0x8f, 0x6a, 0x73, 0x3d, 0x41, 0x80, 0xfb, 0x94, 0x8d, 0xbe, 0x9d, 0x81, 0x65, 0xd3, + 0x75, 0xa8, 0xef, 0xda, 0x36, 0xeb, 0x57, 0xc7, 0xd8, 0xd3, 0x55, 0x5b, 0xe4, 0xaa, 0x6d, 0xa4, + 0x52, 0xad, 0x3e, 0x50, 0x9c, 0x50, 0x31, 0x9c, 0x1f, 0xcb, 0x83, 0x09, 0xf1, 0x29, 0x3a, 0xf1, + 0x56, 0x0c, 0x64, 0x06, 0x52, 0x53, 0x15, 0x3d, 0x40, 0x2b, 0xb6, 0x7a, 0xc4, 0x24, 0x5a, 0xb1, + 0x97, 0x00, 0xf7, 0x29, 0x1b, 0x1d, 0xc2, 0x92, 0x99, 0xcc, 0x20, 0x63, 0xb2, 0x5b, 0x5a, 0x92, + 0x99, 0x9f, 0x3e, 0x11, 0xf8, 0x86, 0x6b, 0x1a, 0xb6, 0x58, 0x84, 0x63, 0xb2, 0x4b, 0x7c, 0xe2, + 0x98, 0x44, 0xc4, 0xc2, 0xf5, 0x3e, 0x92, 0x70, 0x5f, 0xf9, 0xa8, 0x0e, 0x79, 0x42, 0xcd, 0x76, + 0xe9, 0x22, 0x2f, 0x67, 0x78, 0x16, 0x74, 0x8d, 0x9a, 0x6d, 0x91, 0xa2, 0x66, 0xbf, 0x30, 0x67, + 0x46, 0x9f, 0x02, 0xb4, 0xef, 0x06, 0x94, 0xad, 0x95, 0xaa, 0x01, 0x8b, 0x97, 0xf9, 0xba, 0xea, + 0x09, 0x9e, 0xa6, 0x51, 0x0d, 0x71, 0xb3, 0x87, 0x02, 0xf7, 0xe1, 0x42, 0x54, 0x39, 0x2c, 0xde, + 0x27, 0xa5, 0x74, 0x2b, 0x62, 0xde, 0x27, 0x5b, 0x11, 0xbf, 0xe8, 0x8c, 0x0b, 0x09, 0x7f, 0xc7, + 0x7b, 0x41, 0x2f, 0x06, 0xf9, 0x30, 0x1f, 0x98, 0x86, 0x6d, 0x39, 0x7b, 0xa1, 0x1d, 0x2a, 0x3d, + 0xf9, 0x60, 0x06, 0x4d, 0x99, 0x95, 0x56, 0x5c, 0x1e, 0x4e, 0x16, 0x80, 0xbe, 0x00, 0xb3, 0x3b, + 0xda, 0xc1, 0xde, 0xa0, 0xb4, 0x3c, 0xe2, 0xd1, 0x1e, 0xfd, 0x38, 0x70, 0xe4, 0x83, 0x75, 0x68, + 0x80, 0xe3, 0xa2, 0x97, 0x6b, 0xb0, 0xd4, 0xcf, 0x08, 0xa6, 0x59, 0x38, 0x2c, 0xd7, 0xe1, 0x62, + 0x5f, 0x03, 0x96, 0x4a, 0xc8, 0x1a, 0x3c, 0x31, 0xc0, 0xf0, 0xa4, 0x12, 0xb3, 0x09, 0x2b, 0x43, + 0x8c, 0x44, 0x5a, 0xad, 0x06, 0x4c, 0xe4, 0x54, 0x62, 0x3e, 0x0e, 0x0b, 0xc9, 0xb1, 0x97, 0x6a, + 0x69, 0xf6, 0x0d, 0x80, 0xd9, 0xd8, 0x31, 0x3d, 0x54, 0x86, 0x09, 0x9b, 0xf5, 0x5b, 0x5b, 0x6e, + 0x0e, 0xf1, 0x9d, 0xc3, 0x0d, 0x0e, 0xc1, 0x12, 0xa3, 0x47, 0x83, 0xd9, 0x21, 0xd1, 0xe0, 0x4b, + 0xf1, 0xc3, 0xa7, 0xef, 0x49, 0x1e, 0x3e, 0x0d, 0x8f, 0xfe, 0xc5, 0x8e, 0x4a, 0x11, 0x00, 0x33, + 0xda, 0x61, 0xc9, 0xa7, 0x3b, 0xff, 0xa2, 0x76, 0x5c, 0xa2, 0xbc, 0xa1, 0xb6, 0x29, 0xa3, 0x09, + 0xd6, 0x37, 0xc4, 0x0b, 0xa7, 0x6f, 0x88, 0x6b, 0x7b, 0xec, 0x13, 0xa7, 0xee, 0xb1, 0xbf, 0xa9, + 0x07, 0x28, 0x93, 0xe9, 0xe6, 0xb3, 0x3c, 0x66, 0xa3, 0x9d, 0xb5, 0x08, 0x25, 0xe9, 0x11, 0xca, + 0x17, 0xa1, 0x18, 0xae, 0x40, 0x78, 0xc0, 0x99, 0x22, 0xf2, 0x0a, 0xd7, 0x7f, 0x6a, 0x95, 0x5a, + 0x0c, 0x21, 0x5a, 0xdc, 0x15, 0x82, 0xb0, 0x2a, 0x46, 0x74, 0x87, 0x3c, 0x7a, 0x22, 0xe2, 0xd4, + 0x54, 0xdd, 0x21, 0x39, 0xf5, 0xee, 0x08, 0x85, 0x61, 0x4d, 0x30, 0x8b, 0xda, 0xf5, 0xf0, 0x7b, + 0x3a, 0x1e, 0xb5, 0x0f, 0x0c, 0xc1, 0x1b, 0xb0, 0xe0, 0xb8, 0x6d, 0xfe, 0x7b, 0xd3, 0x08, 0x0e, + 0x5a, 0xd6, 0xdb, 0x84, 0x87, 0xa4, 0x85, 0x28, 0xcc, 0xd9, 0x4a, 0xe0, 0x71, 0x0f, 0x07, 0x7a, + 0x06, 0x0a, 0x6d, 0x27, 0x58, 0x6f, 0xca, 0x4d, 0x66, 0x95, 0x14, 0x6c, 0x6c, 0xb5, 0xd6, 0x9b, + 0x58, 0xe0, 0xd8, 0x02, 0xc1, 0x27, 0x7b, 0x56, 0x40, 0xfd, 0xa3, 0xf5, 0xa6, 0x08, 0x0c, 0xe5, + 0x02, 0x01, 0x47, 0x60, 0xac, 0xd3, 0xf0, 0xe3, 0xdc, 0x84, 0x8d, 0x39, 0xc3, 0x3f, 0xd2, 0xaa, + 0x20, 0x37, 0x67, 0xa2, 0xe3, 0xdc, 0x7d, 0x68, 0x70, 0x5f, 0xce, 0xe4, 0xe2, 0x66, 0x61, 0xc4, + 0xc5, 0x8d, 0xae, 0x88, 0x46, 0x54, 0x5a, 0x1c, 0xa0, 0x88, 0x2e, 0xa8, 0x2f, 0x27, 0x93, 0x98, + 0x6c, 0xc6, 0xf5, 0xe6, 0xe1, 0xcb, 0x25, 0xc4, 0x1b, 0x5f, 0x49, 0xdc, 0xea, 0x43, 0x83, 0xfb, + 0x72, 0x0e, 0x90, 0x78, 0x9d, 0xaf, 0xc4, 0x4e, 0x97, 0x78, 0xbd, 0xaf, 0xc4, 0xeb, 0xa8, 0x01, + 0xc0, 0x22, 0x5a, 0x71, 0x20, 0x9e, 0x87, 0x36, 0x53, 0xb5, 0xf7, 0x85, 0xe3, 0xf0, 0x96, 0xc2, + 0xb0, 0xd5, 0x4e, 0xf4, 0xc5, 0x57, 0xa3, 0x1a, 0x5f, 0xf9, 0x5b, 0x39, 0x98, 0xaa, 0xbb, 0xce, + 0xae, 0xb5, 0xb7, 0x69, 0x8c, 0xe3, 0xaa, 0xd2, 0x36, 0xe4, 0xb9, 0x74, 0x91, 0x96, 0x7a, 0x79, + 0xf8, 0x54, 0x0b, 0x75, 0xab, 0x34, 0x0c, 0x6a, 0x88, 0x08, 0x44, 0xad, 0xe2, 0x19, 0x08, 0x73, + 0x79, 0xc8, 0x01, 0xd8, 0xb1, 0x1c, 0xc3, 0x3f, 0x6a, 0x88, 0x5d, 0x85, 0x11, 0xb7, 0x8e, 0x95, + 0xf4, 0x9a, 0x62, 0x16, 0x65, 0xa8, 0x5a, 0x44, 0x08, 0xac, 0x95, 0xb0, 0xfc, 0x61, 0x98, 0x52, + 0xc4, 0xa9, 0xdc, 0xda, 0xc7, 0x60, 0x3e, 0x51, 0xd6, 0x30, 0xf6, 0x19, 0xdd, 0xab, 0xfd, 0x65, + 0x06, 0x66, 0x95, 0xd6, 0x63, 0xd8, 0x7b, 0xb8, 0x1d, 0xdf, 0x7b, 0xf8, 0xe0, 0xe8, 0x4d, 0x3a, + 0x60, 0xf7, 0x81, 0xdf, 0x14, 0xf0, 0x5d, 0xe7, 0x66, 0xb3, 0x7a, 0x1e, 0x6f, 0x0a, 0x08, 0xcd, + 0xce, 0xf2, 0xa6, 0x80, 0x94, 0x78, 0xfa, 0x21, 0x78, 0xbe, 0xa1, 0x24, 0x28, 0xcf, 0xe5, 0x86, + 0x92, 0x50, 0x6d, 0x40, 0x97, 0xee, 0xc3, 0x05, 0x49, 0xf0, 0xb0, 0xaf, 0x99, 0x7c, 0x2d, 0x6a, + 0xa6, 0x73, 0x79, 0x45, 0xea, 0x47, 0x59, 0x98, 0x8d, 0x75, 0x78, 0x9a, 0xa3, 0xf6, 0x57, 0xe3, + 0x47, 0xed, 0xd3, 0x5d, 0x66, 0xca, 0xa5, 0xb8, 0xcc, 0x94, 0x3f, 0x93, 0xcb, 0x4c, 0x85, 0x9f, + 0xc2, 0x65, 0xa6, 0x3f, 0xcd, 0x00, 0x5f, 0x2a, 0xa3, 0x5b, 0x50, 0xb0, 0xd9, 0x8a, 0x5d, 0x4e, + 0x8e, 0xe1, 0x66, 0x89, 0xaf, 0xef, 0xf9, 0x7a, 0x9b, 0x9f, 0x24, 0xe0, 0x9f, 0x58, 0xc8, 0x40, + 0x6f, 0xf4, 0xdc, 0x3c, 0x7d, 0x61, 0xe4, 0x9b, 0xa7, 0x5c, 0xe4, 0xa0, 0xdb, 0xa6, 0xff, 0x07, + 0x4a, 0x83, 0x6e, 0xa8, 0xbe, 0xbb, 0x2d, 0xd7, 0xf2, 0xf7, 0x33, 0x30, 0xa3, 0xab, 0xc0, 0x4f, + 0x72, 0x3a, 0x6d, 0xcf, 0xe5, 0x3b, 0x8d, 0x22, 0x19, 0x2f, 0x4e, 0x72, 0x86, 0x40, 0x1c, 0xe1, + 0xd9, 0xb0, 0x31, 0x8d, 0xd7, 0x2c, 0x3b, 0x1c, 0x6a, 0x6a, 0xd8, 0xd4, 0xab, 0x0c, 0x8a, 0x25, + 0x96, 0x4d, 0x2f, 0x93, 0xf8, 0x94, 0x53, 0x26, 0x36, 0x76, 0xeb, 0x12, 0x8e, 0x15, 0x05, 0x1b, + 0xea, 0x07, 0xe4, 0x88, 0x13, 0xe7, 0xe3, 0x43, 0xfd, 0x96, 0x00, 0xe3, 0x10, 0x5f, 0x6e, 0x40, + 0x9e, 0xb3, 0xbc, 0x07, 0x72, 0x81, 0x6f, 0xca, 0x56, 0x50, 0x17, 0x6b, 0x5b, 0xbe, 0x89, 0x19, + 0x9c, 0xa1, 0xdb, 0xea, 0x28, 0xbe, 0x42, 0x37, 0x02, 0x8a, 0x19, 0xbc, 0xfc, 0x27, 0x19, 0xc8, + 0xde, 0xac, 0xa2, 0x3a, 0xe4, 0xe8, 0x01, 0x91, 0x23, 0xe1, 0x03, 0x43, 0x7b, 0xee, 0xce, 0xad, + 0xb5, 0x9b, 0x55, 0x79, 0x28, 0x93, 0xfd, 0xc4, 0x8c, 0x1b, 0x7d, 0x1e, 0x80, 0xee, 0x5b, 0x7e, + 0xbb, 0x69, 0xf8, 0xf4, 0x68, 0xe4, 0x51, 0x70, 0x47, 0xb1, 0xdc, 0xac, 0xd6, 0x16, 0x4e, 0x8e, + 0x57, 0x66, 0x74, 0x08, 0xd6, 0x44, 0x96, 0x7f, 0x39, 0x0b, 0xf9, 0x9b, 0xc4, 0xee, 0x8c, 0xc1, + 0xe9, 0xdd, 0x8a, 0x39, 0xbd, 0x67, 0x87, 0x1f, 0x04, 0x24, 0x76, 0x67, 0xa0, 0xc7, 0x6b, 0x25, + 0x3c, 0xde, 0x73, 0xa3, 0x89, 0x3b, 0xdd, 0xdd, 0xfd, 0x79, 0x06, 0x8a, 0x8c, 0x6c, 0x0c, 0xbe, + 0xee, 0x53, 0x71, 0x5f, 0xf7, 0xfe, 0x91, 0xd4, 0x1f, 0xe0, 0xe8, 0x5e, 0x86, 0x05, 0x86, 0x8d, + 0x79, 0xb9, 0xf0, 0xae, 0x47, 0x66, 0xe0, 0x5d, 0x8f, 0xaf, 0xca, 0xca, 0x9e, 0x4b, 0x8f, 0xf5, + 0x4f, 0x59, 0x80, 0xa8, 0xc3, 0x1e, 0xb9, 0xab, 0x33, 0x75, 0x57, 0x6c, 0xce, 0xaf, 0x37, 0xab, + 0x9b, 0xe7, 0x70, 0xce, 0x33, 0xb5, 0xce, 0x70, 0xce, 0x73, 0x71, 0xc3, 0xe7, 0x3c, 0x23, 0x3b, + 0x8f, 0x73, 0x9e, 0xe9, 0x35, 0x78, 0xce, 0x33, 0xec, 0x03, 0xcc, 0xf9, 0xb0, 0x89, 0xcf, 0xe5, + 0x9c, 0x8f, 0x3a, 0xec, 0xd1, 0x9c, 0x3f, 0xf3, 0x39, 0xbf, 0x51, 0xab, 0xbf, 0x76, 0x0e, 0xe7, + 0x3c, 0x53, 0xeb, 0x0c, 0xe7, 0x3c, 0x17, 0x37, 0x7c, 0xce, 0x33, 0xb2, 0xf3, 0x38, 0xe7, 0x99, + 0x5e, 0x03, 0xe6, 0xfc, 0xaf, 0x66, 0x60, 0x81, 0xa1, 0x1f, 0xf2, 0x72, 0x96, 0xcd, 0x0d, 0xc3, + 0xa4, 0x56, 0xef, 0xdc, 0xa8, 0x72, 0x28, 0x96, 0x58, 0x6e, 0x4d, 0xc2, 0xce, 0x3b, 0x97, 0xd6, + 0x24, 0x1a, 0x0a, 0x8f, 0xac, 0xc9, 0x99, 0x5a, 0x93, 0x7f, 0xcc, 0xc2, 0x94, 0x5a, 0xba, 0xf2, + 0x3b, 0xb1, 0x06, 0x35, 0x1a, 0x96, 0x9f, 0x6c, 0xdb, 0x86, 0x00, 0xe3, 0x10, 0x8f, 0xbe, 0x00, + 0x53, 0x44, 0xed, 0xc5, 0x8b, 0x29, 0xf1, 0xca, 0xe8, 0x8b, 0xe4, 0x4a, 0x62, 0x03, 0x5e, 0x0d, + 0xf4, 0x68, 0xdf, 0x3d, 0x12, 0xcf, 0x6f, 0x0e, 0xf1, 0x3d, 0x48, 0xb6, 0x28, 0x6c, 0x55, 0xb7, + 0xc4, 0x71, 0xf3, 0xf0, 0xe6, 0x50, 0x0c, 0x83, 0x13, 0x94, 0xe8, 0x65, 0x98, 0xf1, 0x88, 0xc6, + 0x99, 0xe7, 0x9c, 0x7c, 0x29, 0xd5, 0xd4, 0xe0, 0x38, 0x46, 0xb5, 0xfc, 0x51, 0x98, 0x7b, 0xf0, + 0x9d, 0x45, 0xfe, 0x2c, 0xc7, 0x86, 0xbb, 0x57, 0x77, 0x6d, 0x9b, 0x98, 0xe3, 0x79, 0x95, 0x29, + 0xed, 0xb3, 0x1c, 0xba, 0x7a, 0x67, 0xf8, 0x2c, 0x47, 0x4c, 0xec, 0xf0, 0x67, 0x39, 0x74, 0xf2, + 0xf3, 0xf8, 0x2c, 0x87, 0xae, 0xdf, 0x00, 0x53, 0xde, 0x81, 0x92, 0x4e, 0xf5, 0xb0, 0x13, 0x94, + 0x5f, 0x4f, 0xb4, 0xda, 0xb9, 0xb4, 0xd8, 0x27, 0x59, 0x40, 0xbd, 0x23, 0xe1, 0x91, 0xe5, 0x3e, + 0x53, 0xcb, 0xfd, 0x95, 0x2c, 0x4c, 0x86, 0xd7, 0x2b, 0xce, 0xdf, 0x3e, 0x87, 0xd4, 0xec, 0x0c, + 0xf7, 0x39, 0x42, 0x89, 0xa7, 0x5b, 0x95, 0x00, 0xe6, 0x24, 0x61, 0xf8, 0x40, 0xc7, 0xf5, 0xd8, + 0x03, 0x09, 0xe5, 0xc4, 0x03, 0x1d, 0x28, 0x4e, 0x1d, 0x3f, 0xb6, 0x2b, 0x4f, 0x0e, 0x24, 0x0f, + 0x6a, 0x48, 0x5a, 0x1c, 0xe2, 0xf9, 0xc3, 0x0c, 0x52, 0xce, 0xa3, 0x87, 0x19, 0xce, 0xed, 0xc3, + 0x0c, 0xdf, 0xcb, 0xc0, 0xb4, 0xec, 0xa5, 0xf3, 0xb8, 0x05, 0x16, 0x1e, 0x49, 0xeb, 0xef, 0x66, + 0xbe, 0x59, 0x50, 0xca, 0xff, 0x94, 0x0e, 0xc7, 0x3f, 0xc8, 0x73, 0x11, 0xc3, 0x0f, 0xc7, 0x8b, + 0x5d, 0x8a, 0xc2, 0xa9, 0xbb, 0x14, 0x13, 0x23, 0x5d, 0x0c, 0x9b, 0x4c, 0x75, 0x31, 0xac, 0x98, + 0xe2, 0x62, 0xd8, 0x54, 0xca, 0x8b, 0x61, 0x30, 0xf4, 0x62, 0xd8, 0x9b, 0xea, 0x62, 0xd8, 0x34, + 0x1f, 0x1d, 0x37, 0xd2, 0xd8, 0xd3, 0x94, 0xb7, 0xc2, 0x66, 0x7e, 0x0a, 0xb7, 0xc2, 0xfe, 0x3b, + 0x07, 0xb3, 0x31, 0x7b, 0x3d, 0xd2, 0xd1, 0xb8, 0x97, 0xe2, 0x4e, 0xbf, 0xf7, 0xbc, 0x9b, 0x14, + 0x79, 0xca, 0x79, 0xb7, 0xdc, 0x88, 0x07, 0xac, 0x92, 0xd6, 0x3a, 0xcd, 0x79, 0xb7, 0xfc, 0xc8, + 0xe7, 0xdd, 0x0a, 0xa3, 0x9f, 0x77, 0x9b, 0x18, 0xf1, 0xbc, 0x5b, 0xdc, 0x5d, 0x0d, 0x39, 0xef, + 0x66, 0xc1, 0xb4, 0x34, 0x63, 0xeb, 0xce, 0xae, 0xcb, 0x67, 0xc8, 0x28, 0x8f, 0x63, 0x84, 0x3d, + 0x77, 0x14, 0x50, 0xd2, 0x61, 0x9c, 0xd1, 0x4c, 0xdf, 0x8c, 0xc4, 0x61, 0x5d, 0x76, 0xf9, 0xdf, + 0xf3, 0xb0, 0xd8, 0xc3, 0xc7, 0x02, 0xe0, 0x90, 0xa8, 0x91, 0x0c, 0x80, 0x43, 0x51, 0x0d, 0x1c, + 0xd1, 0xb0, 0xe0, 0x2c, 0xe0, 0xec, 0x77, 0xef, 0x2a, 0xbb, 0xa4, 0xba, 0xa6, 0xa5, 0x30, 0x58, + 0xa3, 0x62, 0xed, 0xbd, 0xe3, 0xba, 0xcc, 0x8e, 0x25, 0x02, 0xbf, 0x1a, 0x87, 0x62, 0x89, 0x45, + 0xaf, 0xc2, 0xec, 0x01, 0xf1, 0x1d, 0x62, 0x0f, 0x78, 0x50, 0xed, 0x96, 0x8e, 0xc4, 0x71, 0x5a, + 0xd6, 0xff, 0x6e, 0xb0, 0xde, 0xe9, 0x73, 0xde, 0xf1, 0x76, 0x8b, 0x83, 0x71, 0x88, 0x47, 0x9f, + 0x81, 0x27, 0x92, 0xaf, 0x03, 0x84, 0x25, 0x0a, 0x17, 0xb5, 0x22, 0x59, 0x9f, 0xa8, 0xf7, 0x27, + 0xc3, 0x83, 0xf8, 0xd1, 0xc7, 0x61, 0x4e, 0x5e, 0x32, 0x08, 0x25, 0x0a, 0xab, 0xf7, 0xb8, 0x94, + 0x38, 0x77, 0x2b, 0x86, 0xc5, 0x09, 0x6a, 0xd4, 0x10, 0x57, 0x23, 0xf8, 0x22, 0x25, 0x94, 0x50, + 0x8c, 0x3f, 0x75, 0x70, 0x2b, 0x81, 0xc7, 0x3d, 0x1c, 0xa8, 0x0a, 0xf3, 0x2e, 0x7f, 0x77, 0xc2, + 0x72, 0xf6, 0x44, 0x9f, 0xc8, 0xeb, 0x3b, 0xea, 0x34, 0xf5, 0xed, 0x38, 0x1a, 0x27, 0xe9, 0xd1, + 0x0d, 0x98, 0x31, 0x7c, 0x73, 0xdf, 0xa2, 0xc4, 0xa4, 0x5d, 0x5f, 0x98, 0x4c, 0xed, 0xe2, 0x79, + 0x55, 0xc3, 0xe1, 0x18, 0x65, 0x99, 0xc0, 0x42, 0x73, 0xbb, 0x8e, 0x1f, 0xf6, 0x3a, 0xeb, 0x5b, + 0x19, 0x58, 0x6c, 0xb2, 0xfa, 0x06, 0x94, 0x38, 0xb4, 0x66, 0x98, 0x07, 0x6b, 0x4e, 0x1b, 0x6d, + 0x42, 0xce, 0xb4, 0x03, 0x19, 0x2d, 0x0c, 0x9f, 0x48, 0xf2, 0xa1, 0x59, 0xc9, 0x5d, 0xdf, 0x68, + 0xd5, 0x26, 0x4f, 0x8e, 0x57, 0x72, 0xf5, 0x8d, 0x16, 0x66, 0x72, 0xd0, 0x3a, 0x64, 0x49, 0x30, + 0xf2, 0x92, 0x3d, 0x2e, 0x6d, 0xad, 0x25, 0x1e, 0x57, 0x59, 0x6b, 0xe1, 0x2c, 0x09, 0xca, 0xdf, + 0xcc, 0xc2, 0x7c, 0xa4, 0xef, 0xda, 0x21, 0x71, 0xe8, 0x78, 0x0e, 0xdb, 0x69, 0xab, 0x82, 0xe1, + 0x87, 0xed, 0x12, 0x1a, 0x0e, 0x5c, 0x1d, 0x7c, 0x2e, 0xb1, 0x3a, 0xb8, 0x9e, 0x5a, 0xf2, 0xe9, + 0xab, 0x84, 0xbf, 0xcb, 0xc0, 0x85, 0x04, 0xc7, 0x18, 0x42, 0xc2, 0xbb, 0xf1, 0x90, 0xf0, 0xc5, + 0xb4, 0x95, 0x1a, 0x10, 0x1a, 0x7e, 0x3d, 0xdb, 0x53, 0x99, 0xf1, 0x65, 0x05, 0x7e, 0x06, 0x16, + 0xbd, 0xe4, 0x34, 0x19, 0xf9, 0x11, 0xef, 0x9e, 0x09, 0xa6, 0x1e, 0xd4, 0xe9, 0x9d, 0x7b, 0xb8, + 0xb7, 0x1c, 0x3d, 0xa1, 0x90, 0x1f, 0x92, 0x92, 0xf8, 0xb7, 0x2c, 0x5c, 0xec, 0x3b, 0x46, 0x1e, + 0x65, 0x25, 0xce, 0x34, 0x2b, 0xf1, 0x3b, 0x59, 0x80, 0xa6, 0xef, 0x76, 0x08, 0xdd, 0x27, 0xdd, + 0x71, 0x3c, 0x61, 0xf2, 0xe9, 0x98, 0x09, 0x1a, 0x1e, 0x40, 0x45, 0xca, 0x0d, 0xb4, 0x3e, 0x9f, + 0x49, 0x58, 0x9f, 0xab, 0x69, 0x84, 0x9e, 0x6e, 0x78, 0xfe, 0x2a, 0x03, 0x73, 0x11, 0xf1, 0x18, + 0x6c, 0x4e, 0x33, 0x6e, 0x73, 0x9e, 0x4b, 0x51, 0x95, 0x81, 0x09, 0xcf, 0xa5, 0x88, 0x06, 0x93, + 0x8e, 0x4b, 0x79, 0x34, 0x8a, 0x9e, 0x83, 0xa9, 0xb7, 0x7c, 0x4b, 0x7c, 0xe8, 0x07, 0xc4, 0xde, + 0x08, 0x81, 0x38, 0xc2, 0xb3, 0xa5, 0x98, 0x4f, 0x8c, 0x36, 0xa7, 0xcd, 0x72, 0xda, 0x19, 0x71, + 0xa7, 0x42, 0xc0, 0xb0, 0xc2, 0x96, 0x7f, 0x77, 0x42, 0x6f, 0xb1, 0xf3, 0x98, 0xee, 0x44, 0x01, + 0x40, 0xd0, 0xdd, 0x89, 0xa2, 0xca, 0xd1, 0x9e, 0x21, 0x88, 0x57, 0xaa, 0xd2, 0x52, 0x12, 0x12, + 0xe7, 0xc3, 0x23, 0x04, 0xd6, 0x8a, 0x41, 0x3e, 0xcc, 0xfa, 0xaa, 0xf1, 0x49, 0x10, 0xc8, 0xd9, + 0xfe, 0xa1, 0x14, 0xe5, 0x46, 0x9d, 0x17, 0x05, 0xc1, 0x58, 0x97, 0x89, 0xe3, 0x45, 0xf0, 0x8b, + 0xe5, 0x2e, 0xb5, 0x76, 0x8f, 0xe4, 0x39, 0x43, 0x19, 0xcf, 0x46, 0x17, 0xcb, 0x75, 0x24, 0x8e, + 0xd3, 0xa2, 0x5d, 0x98, 0xf2, 0xd5, 0x73, 0x41, 0x93, 0x23, 0x2a, 0xab, 0x6e, 0xd4, 0x90, 0x2f, + 0x76, 0x2d, 0x9f, 0x74, 0x88, 0x43, 0xb5, 0x45, 0x4f, 0xf4, 0x48, 0x50, 0x24, 0x9a, 0xf5, 0xb7, + 0xdf, 0x75, 0x6e, 0x3b, 0xe2, 0xe9, 0x3a, 0x1e, 0xde, 0x16, 0xa3, 0xfe, 0xc6, 0x11, 0x0a, 0xeb, + 0x74, 0x68, 0x13, 0x2e, 0x18, 0x36, 0xf1, 0x29, 0x26, 0x1e, 0x31, 0x28, 0x7f, 0x83, 0xef, 0xd0, + 0xb0, 0x65, 0x60, 0xab, 0xde, 0x32, 0xab, 0xf6, 0x92, 0xe0, 0x7e, 0x7c, 0x6c, 0xf8, 0xbc, 0x65, + 0xd1, 0xfd, 0xad, 0x66, 0x83, 0xc7, 0xb6, 0xc5, 0x68, 0xf8, 0xbc, 0x21, 0xc0, 0x38, 0xc4, 0x2f, + 0x7f, 0x0c, 0xe6, 0x13, 0x9d, 0x9f, 0x6a, 0xad, 0xfd, 0x9b, 0x79, 0x58, 0x48, 0xda, 0x9f, 0x47, + 0x4e, 0xed, 0x2c, 0x9d, 0x1a, 0xea, 0xc6, 0x26, 0xf8, 0xc4, 0x88, 0x77, 0xda, 0x93, 0x9d, 0x92, + 0x76, 0x8a, 0xbf, 0xdb, 0x81, 0xf1, 0x17, 0x19, 0x28, 0x86, 0x77, 0xab, 0xc6, 0xe0, 0x88, 0x6f, + 0xc7, 0x1c, 0xf1, 0x0b, 0x23, 0x4c, 0x6d, 0xa1, 0xda, 0xc0, 0x7f, 0x09, 0xfa, 0x7e, 0x06, 0x66, + 0x42, 0xa2, 0x31, 0x78, 0xca, 0xad, 0xb8, 0xa7, 0x7c, 0x76, 0xe4, 0x0a, 0x0c, 0xf0, 0x93, 0x5f, + 0xcb, 0x46, 0xea, 0x3f, 0x98, 0xdb, 0xd2, 0x9f, 0x23, 0xc9, 0x8e, 0xf8, 0x1c, 0xc9, 0x03, 0x26, + 0x6a, 0xdf, 0x03, 0xb9, 0xae, 0x6f, 0xcb, 0x28, 0x5a, 0x1d, 0x84, 0xbe, 0x8b, 0x37, 0x30, 0x83, + 0x33, 0x77, 0xdd, 0x0d, 0xa4, 0x48, 0x91, 0xfe, 0x98, 0x09, 0x73, 0xac, 0x5b, 0x2a, 0xc7, 0xba, + 0x95, 0xcc, 0xb1, 0x4e, 0x44, 0x94, 0xbd, 0x39, 0xd6, 0xf2, 0x7f, 0xe5, 0x60, 0xa9, 0x9f, 0x79, + 0x47, 0x47, 0x30, 0x61, 0x5b, 0x1d, 0x4b, 0x1e, 0x33, 0x1f, 0x65, 0xa6, 0xf5, 0x13, 0x53, 0xd9, + 0xe0, 0x32, 0xc4, 0x4c, 0xbb, 0xa4, 0xb2, 0xa4, 0x1c, 0xd8, 0xf3, 0xa0, 0x8f, 0x2c, 0x10, 0xfd, + 0x1c, 0x7f, 0xb6, 0xfc, 0x8b, 0x5d, 0x12, 0xd0, 0x70, 0x1c, 0xd4, 0x1f, 0xac, 0x74, 0x2c, 0xa5, + 0x24, 0xde, 0x57, 0x0a, 0xc1, 0xbd, 0xef, 0x2b, 0x85, 0xc5, 0x2e, 0x5b, 0x30, 0xad, 0xa9, 0xfe, + 0x50, 0xdf, 0xf7, 0x39, 0x80, 0xd9, 0x98, 0x9e, 0x0f, 0xf5, 0x79, 0x1f, 0x1b, 0x16, 0x7b, 0xf2, + 0x21, 0x6c, 0x4e, 0xd8, 0xee, 0x5e, 0x8b, 0xf4, 0x99, 0x13, 0x1b, 0x12, 0x8e, 0x15, 0x05, 0xf3, + 0x6a, 0xd4, 0xf5, 0x2c, 0x53, 0xa5, 0x06, 0x95, 0x57, 0xbb, 0x23, 0xc0, 0x38, 0xc4, 0x97, 0xbf, + 0x9d, 0x85, 0x85, 0x64, 0xc2, 0xe4, 0x5d, 0xbe, 0x42, 0xf7, 0x01, 0x98, 0xe0, 0xff, 0x47, 0x47, + 0x92, 0x5e, 0xaf, 0xc5, 0xa1, 0x58, 0x62, 0xd1, 0x2a, 0x4c, 0x59, 0x4e, 0x9b, 0xdc, 0xe3, 0xb3, + 0x25, 0x1f, 0xcf, 0x46, 0xad, 0x87, 0x08, 0x1c, 0xd1, 0xb0, 0xa2, 0xd9, 0xfc, 0x09, 0x67, 0x56, + 0x58, 0x34, 0x9b, 0x5d, 0x98, 0x63, 0x58, 0x33, 0x25, 0x66, 0x95, 0x6a, 0xa6, 0x3e, 0xbb, 0x17, + 0x2c, 0x02, 0x22, 0xfc, 0x18, 0x4c, 0xc3, 0x38, 0x12, 0xb1, 0x56, 0x41, 0x8b, 0x80, 0x22, 0x14, + 0xd6, 0xe9, 0xca, 0x0d, 0x10, 0xf7, 0x15, 0x98, 0x31, 0x38, 0x54, 0xed, 0xa4, 0x8c, 0xc1, 0xf6, + 0x7a, 0x13, 0x33, 0x38, 0x7a, 0x1a, 0xf2, 0x87, 0xbe, 0xd5, 0x96, 0x2d, 0xc5, 0x5f, 0x97, 0xd8, + 0xc6, 0xeb, 0x0d, 0xcc, 0xa1, 0xe5, 0x3f, 0xce, 0xc2, 0xdc, 0x1d, 0xc3, 0xf3, 0xa2, 0x0b, 0xff, + 0x63, 0xf0, 0x3d, 0x77, 0x63, 0xbe, 0x67, 0xf8, 0x31, 0x95, 0xb8, 0x82, 0x03, 0x17, 0x82, 0xff, + 0x3f, 0xb1, 0x10, 0xfc, 0x50, 0x5a, 0xc1, 0xa7, 0x2f, 0x06, 0xdf, 0xc9, 0x00, 0x8a, 0x33, 0x8c, + 0xc1, 0xcd, 0xdd, 0x89, 0xbb, 0xb9, 0xd5, 0x94, 0x55, 0x1a, 0xe0, 0xec, 0x7e, 0x2b, 0x03, 0xcb, + 0x71, 0xc2, 0xf3, 0x72, 0xb4, 0xf1, 0x0f, 0x7b, 0x1a, 0xf9, 0x5c, 0x1e, 0x99, 0xf9, 0x49, 0x16, + 0x96, 0xfa, 0x0d, 0x9e, 0x47, 0x91, 0xfc, 0x99, 0xa6, 0xa7, 0x30, 0xc4, 0x2e, 0x50, 0x0d, 0x33, + 0x75, 0xcf, 0x40, 0xe1, 0x50, 0xf3, 0x0a, 0x6a, 0xec, 0x6f, 0x73, 0xb7, 0x20, 0x70, 0xe5, 0xaf, + 0x66, 0x20, 0x7c, 0xb9, 0x19, 0xad, 0x42, 0xbe, 0xe3, 0xb6, 0x7b, 0xfe, 0x0d, 0x66, 0xd3, 0x6d, + 0xf3, 0x27, 0xdb, 0x24, 0x19, 0xfb, 0xc4, 0x9c, 0x10, 0x7d, 0x0e, 0x8a, 0x01, 0xf5, 0x0d, 0x4a, + 0xf6, 0x8e, 0x46, 0xfe, 0x47, 0x45, 0x29, 0xa5, 0x25, 0xf9, 0xa2, 0x91, 0x1b, 0x42, 0xb0, 0x92, + 0x59, 0xfe, 0xdb, 0x0c, 0xcc, 0x27, 0xe8, 0xd1, 0x9b, 0x00, 0x1d, 0xe3, 0xde, 0x5d, 0xc7, 0x27, + 0x46, 0xfb, 0x68, 0xa8, 0x45, 0xee, 0x52, 0xcb, 0xae, 0x88, 0xff, 0x54, 0xad, 0xac, 0x3b, 0xf4, + 0xb6, 0xdf, 0xa2, 0xbe, 0xe5, 0xec, 0x89, 0xfd, 0xed, 0x4d, 0x25, 0x07, 0x6b, 0x32, 0x11, 0x86, + 0xc7, 0xdb, 0xbe, 0x61, 0x39, 0x5b, 0x6e, 0x9b, 0xd4, 0xc8, 0xae, 0xeb, 0x13, 0xa9, 0x83, 0x7c, + 0x13, 0x9f, 0xbf, 0xd4, 0xd6, 0xe8, 0x4b, 0x81, 0x07, 0x70, 0xf2, 0x1d, 0x8e, 0x6d, 0xd7, 0xee, + 0x76, 0x48, 0x83, 0x98, 0xee, 0xb8, 0xfe, 0xed, 0x32, 0xed, 0x0e, 0x47, 0x42, 0xc3, 0x33, 0xdc, + 0xe1, 0x48, 0x4a, 0x1e, 0xbe, 0xc3, 0x91, 0xe0, 0x38, 0x8f, 0x3b, 0x1c, 0x09, 0x15, 0x07, 0xfd, + 0x79, 0x65, 0xb6, 0xa7, 0x32, 0xe7, 0x32, 0x11, 0x78, 0x15, 0xa6, 0x0f, 0xb9, 0x9a, 0x77, 0x8e, + 0x3c, 0x12, 0x1e, 0x35, 0xe6, 0x6f, 0x9c, 0x6c, 0x47, 0x60, 0xac, 0xd3, 0xa0, 0xd7, 0x61, 0xf1, + 0x2d, 0xd7, 0x3f, 0xb0, 0x5d, 0xa3, 0x5d, 0x6d, 0x77, 0xac, 0x40, 0x3d, 0x13, 0x59, 0x8c, 0xf6, + 0x42, 0xde, 0x48, 0x12, 0xe0, 0x5e, 0x9e, 0xf2, 0x77, 0xf2, 0x70, 0xb1, 0xef, 0x10, 0x49, 0xe7, + 0x41, 0x62, 0x15, 0xc8, 0x3e, 0x68, 0x05, 0x72, 0xe9, 0x2b, 0x30, 0xf0, 0xcf, 0x3b, 0xf3, 0xef, + 0xfe, 0xcf, 0x3b, 0x0b, 0x0f, 0xe0, 0x0f, 0x27, 0x52, 0xf8, 0xc3, 0xc9, 0x33, 0xf1, 0x87, 0xc5, + 0xf1, 0xfb, 0xc3, 0xda, 0x95, 0x77, 0x7e, 0x7c, 0xe9, 0xb1, 0x1f, 0xfc, 0xf8, 0xd2, 0x63, 0x3f, + 0xfc, 0xf1, 0xa5, 0xc7, 0xbe, 0x74, 0x72, 0x29, 0xf3, 0xce, 0xc9, 0xa5, 0xcc, 0x0f, 0x4e, 0x2e, + 0x65, 0x7e, 0x78, 0x72, 0x29, 0xf3, 0x2f, 0x27, 0x97, 0x32, 0x5f, 0xfe, 0xd7, 0x4b, 0x8f, 0x7d, + 0x36, 0x7b, 0x78, 0xf5, 0x7f, 0x03, 0x00, 0x00, 0xff, 0xff, 0x98, 0xe4, 0x24, 0x4c, 0xee, 0x7c, + 0x00, 0x00, } func (m *AddonSpec) Marshal() (dAtA []byte, err error) { @@ -4693,6 +4695,11 @@ func (m *ClusterFeature) MarshalToSizedBuffer(dAtA []byte) (int, error) { dAtA[i] = 0x1 i-- dAtA[i] = 0xb2 + i -= len(m.ContainerRuntime) + copy(dAtA[i:], m.ContainerRuntime) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.ContainerRuntime))) + i-- + dAtA[i] = 0x7a i-- if m.EnableCilium { dAtA[i] = 1 @@ -9842,6 +9849,8 @@ func (m *ClusterFeature) Size() (n int) { n += 2 n += 2 n += 2 + l = len(m.ContainerRuntime) + n += 1 + l + sovGenerated(uint64(l)) l = m.Upgrade.Size() n += 2 + l + sovGenerated(uint64(l)) return n @@ -11850,6 +11859,7 @@ func (this *ClusterFeature) String() string { `EnableMetricsServer:` + fmt.Sprintf("%v", this.EnableMetricsServer) + `,`, `IPv6DualStack:` + fmt.Sprintf("%v", this.IPv6DualStack) + `,`, `EnableCilium:` + fmt.Sprintf("%v", this.EnableCilium) + `,`, + `ContainerRuntime:` + fmt.Sprintf("%v", this.ContainerRuntime) + `,`, `Upgrade:` + strings.Replace(strings.Replace(this.Upgrade.String(), "Upgrade", "Upgrade", 1), `&`, ``, 1) + `,`, `}`, }, "") @@ -17562,6 +17572,38 @@ func (m *ClusterFeature) Unmarshal(dAtA []byte) error { } } m.EnableCilium = bool(v != 0) + case 15: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ContainerRuntime", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ContainerRuntime = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex case 22: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field Upgrade", wireType) diff --git a/api/platform/v1/generated.proto b/api/platform/v1/generated.proto index 3a28c5cf8..f5e3fdb61 100644 --- a/api/platform/v1/generated.proto +++ b/api/platform/v1/generated.proto @@ -393,6 +393,9 @@ message ClusterFeature { // +optional optional bool enableCilium = 14; + // +optional + optional string containerRuntime = 15; + // Upgrade control upgrade process. // +optional optional Upgrade upgrade = 22; diff --git a/api/platform/v1/types.go b/api/platform/v1/types.go index 7e800bb22..43b758f48 100644 --- a/api/platform/v1/types.go +++ b/api/platform/v1/types.go @@ -237,6 +237,13 @@ const ( GPUVirtual GPUType = "Virtual" ) +type ContainerRuntimeType = string + +const ( + Containerd ContainerRuntimeType = "containerd" + Docker ContainerRuntimeType = "docker" +) + // ClusterPhase defines the phase of cluster constructor. type ClusterPhase string @@ -395,6 +402,8 @@ type ClusterFeature struct { IPv6DualStack bool `json:"ipv6DualStack,omitempty" protobuf:"bytes,13,opt,name=ipv6DualStack"` // +optional EnableCilium bool `json:"enableCilium,omitempty" protobuf:"bytes,14,opt,name=enableCilium"` + // +optional + ContainerRuntime ContainerRuntimeType `json:"containerRuntime,omitempty" protobuf:"bytes,15,opt,name=containerRuntime"` // Upgrade control upgrade process. // +optional Upgrade Upgrade `json:"upgrade,omitempty" protobuf:"bytes,22,opt,name=upgrade"` diff --git a/api/platform/v1/zz_generated.conversion.go b/api/platform/v1/zz_generated.conversion.go index 1416269cc..9b900ea67 100644 --- a/api/platform/v1/zz_generated.conversion.go +++ b/api/platform/v1/zz_generated.conversion.go @@ -1731,6 +1731,7 @@ func autoConvert_v1_ClusterFeature_To_platform_ClusterFeature(in *ClusterFeature out.EnableMetricsServer = in.EnableMetricsServer out.IPv6DualStack = in.IPv6DualStack out.EnableCilium = in.EnableCilium + out.ContainerRuntime = in.ContainerRuntime if err := Convert_v1_Upgrade_To_platform_Upgrade(&in.Upgrade, &out.Upgrade, s); err != nil { return err } @@ -1756,6 +1757,7 @@ func autoConvert_platform_ClusterFeature_To_v1_ClusterFeature(in *platform.Clust out.AuthzWebhookAddr = (*AuthzWebhookAddr)(unsafe.Pointer(in.AuthzWebhookAddr)) out.EnableMetricsServer = in.EnableMetricsServer out.EnableCilium = in.EnableCilium + out.ContainerRuntime = in.ContainerRuntime out.IPv6DualStack = in.IPv6DualStack if err := Convert_platform_Upgrade_To_v1_Upgrade(&in.Upgrade, &out.Upgrade, s); err != nil { return err diff --git a/build/docker/tools/provider-res/Dockerfile b/build/docker/tools/provider-res/Dockerfile index ddeb0595e..8ba0755ee 100644 --- a/build/docker/tools/provider-res/Dockerfile +++ b/build/docker/tools/provider-res/Dockerfile @@ -26,9 +26,15 @@ COPY linux-arm64/cni-*.tar.gz res/linux-arm64/ COPY linux-amd64/conntrack-tools-*.tar.gz res/linux-amd64/ COPY linux-arm64/conntrack-tools-*.tar.gz res/linux-arm64/ +COPY linux-amd64/nerdctl-*.tar.gz res/linux-amd64/ +COPY linux-arm64/nerdctl-*.tar.gz res/linux-arm64/ + COPY linux-amd64/docker-*.tar.gz res/linux-amd64/ COPY linux-arm64/docker-*.tar.gz res/linux-arm64/ +COPY linux-amd64/containerd-*.tar.gz res/linux-amd64/ +COPY linux-arm64/containerd-*.tar.gz res/linux-arm64/ + COPY linux-amd64/kubernetes-*.tar.gz res/linux-amd64/ COPY linux-arm64/kubernetes-*.tar.gz res/linux-arm64/ @@ -36,4 +42,7 @@ COPY linux-amd64/NVIDIA-*.tar.gz res/linux-amd64/ COPY linux-amd64/nvidia-container-*.tar.gz res/linux-amd64/ +COPY containerd conf/containerd +COPY kubeadm conf/kubeadm + ENTRYPOINT ["sh"] diff --git a/build/docker/tools/provider-res/Makefile b/build/docker/tools/provider-res/Makefile index e42b1e10d..9c4bca43b 100644 --- a/build/docker/tools/provider-res/Makefile +++ b/build/docker/tools/provider-res/Makefile @@ -15,7 +15,7 @@ # specific language governing permissions and limitations under the License. IMAGE = provider-res -VERSION = v1.20.4-1 +VERSION = v1.20.4-2 REGISTRY_PREFIX ?= tkestack COMMON_SELF_DIR := $(dir $(lastword $(MAKEFILE_LIST))) @@ -34,6 +34,8 @@ include $(ROOT_DIR)/build/lib/docker-buildx.mk .PHONY: per.build per.build: download @cp "$(ROOT_DIR)/build/docker/tools/$(IMAGE)/Dockerfile" "$(WORK_DIR)/Dockerfile" + @cp -r "$(ROOT_DIR)/pkg/platform/provider/baremetal/conf/containerd" "$(WORK_DIR)/containerd" + @cp -r "$(ROOT_DIR)/pkg/platform/provider/baremetal/conf/kubeadm" "$(WORK_DIR)/kubeadm" .PHONY: download download: @@ -64,7 +66,7 @@ manifest.multiarch: per.build #@rm -rf "$(WORK_DIR)" @echo "===========> Pushing manifest $(REGISTRY_PREFIX)/$(IMAGE):$(VERSION) and then remove the local manifest list" REGISTRY_PREFIX=$(REGISTRY_PREFIX) PLATFROMS="$(PLATFORMS)" IMAGE=$(IMAGE) VERSION=$(VERSION) \ - DOCKER_CLI_EXPERIMENTAL=enabled $(ROOT_DIR)/build/lib/create-manifest.sh + DOCKER_CLI_EXPERIMENTAL=enabled $(ROOT_DIR)/build/lib/create-manifest.sh ## help: Show this help info. .PHONY: help diff --git a/build/docker/tools/provider-res/download.sh b/build/docker/tools/provider-res/download.sh index 34d2f24c1..cec33ca76 100755 --- a/build/docker/tools/provider-res/download.sh +++ b/build/docker/tools/provider-res/download.sh @@ -56,6 +56,41 @@ function download::docker() { done } +function download::containerd() { + if [ "${arch}" == "amd64" ]; then + containerd_arch=amd64 + for version in ${CONTAINERD_VERSIONS}; do + wget -c "https://github.com/containerd/containerd/releases/download/v${version}/cri-containerd-cni-${version}-linux-${containerd_arch}.tar.gz" \ + -O "containerd-${platform}-${version}.tar.gz" + done + elif [ "${arch}" == "arm64" ]; then + containerd_arch=arm64 + for version in ${CONTAINERD_VERSIONS}; do + wget -c "https://tke-release-1251707795.cos.ap-guangzhou.myqcloud.com/cri-containerd-cni-${version}-linux-${containerd_arch}.tar.gz" \ + -O "containerd-${platform}-${version}.tar.gz" + done + else + echo "[ERROR] Fail to get containerd ${arch} on ${platform} platform." + exit 255 + fi +} + +function download::nerdctl() { + if [ "${arch}" == "amd64" ]; then + nerdctl_arch=x86_64 + elif [ "${arch}" == "arm64" ]; then + nerdctl_arch=arm64 + else + echo "[ERROR] Fail to get nerdctl ${arch} on ${platform} platform." + exit 255 + fi + + for version in ${NERDCTL_VERSIONS}; do + wget -c "https://github.com/containerd/nerdctl/releases/download/v${version}/nerdctl-${version}-linux-${arch}.tar.gz" \ + -O "nerdctl-${platform}-${version}.tar.gz" + done +} + function download::kubernetes() { for version in ${K8S_VERSIONS}; do if [[ "${version}" =~ "tke" ]]; then @@ -115,6 +150,8 @@ for os in ${OSS}; do download::cni_plugins download::docker + download::containerd + download::nerdctl download::kubernetes download::nvidia_driver download::nvidia_container_runtime diff --git a/build/docker/tools/tke-installer/release.sh b/build/docker/tools/tke-installer/release.sh index 40db55ad7..5196b8dbe 100755 --- a/build/docker/tools/tke-installer/release.sh +++ b/build/docker/tools/tke-installer/release.sh @@ -23,7 +23,7 @@ set -o pipefail REGISTRY_PREFIX=${REGISTRY_PREFIX:-tkestack} BUILDER=${BUILDER:-default} VERSION=${VERSION:-$(git describe --dirty --always --tags | sed 's/-/./g')} -PROVIDER_RES_VERSION=v1.20.4-1 +PROVIDER_RES_VERSION=v1.20.4-2 K8S_VERSION=${PROVIDER_RES_VERSION%-*} DOCKER_VERSION=19.03.14 OSS=(linux) diff --git a/cmd/setup-env/main.go b/cmd/setup-env/main.go index 10e15c482..62b9738f2 100644 --- a/cmd/setup-env/main.go +++ b/cmd/setup-env/main.go @@ -33,6 +33,8 @@ func main() { env = append(env, fmt.Sprintf("OSS=%s", strings.Join(spec.OSs, " "))) env = append(env, fmt.Sprintf("K8S_VERSIONS=%s", strings.Join(spec.K8sVersionsWithV, " "))) env = append(env, fmt.Sprintf("DOCKER_VERSIONS=%s", strings.Join(spec.DockerVersions, " "))) + env = append(env, fmt.Sprintf("CONTAINERD_VERSIONS=%s", strings.Join(spec.ContainerdVersions, " "))) + env = append(env, fmt.Sprintf("NERDCTL_VERSIONS=%s", strings.Join(spec.NerdctlVersions, " "))) env = append(env, fmt.Sprintf("CNI_PLUGINS_VERSIONS=%s", strings.Join(spec.CNIPluginsVersions, " "))) env = append(env, fmt.Sprintf("NVIDIA_DRIVER_VERSIONS=%s", strings.Join(spec.NvidiaDriverVersions, " "))) env = append(env, fmt.Sprintf("NVIDIA_CONTAINER_RUNTIME_VERSIONS=%s", strings.Join(spec.NvidiaContainerRuntimeVersions, " "))) diff --git a/cmd/tke-installer/app/installer/images/images.go b/cmd/tke-installer/app/installer/images/images.go index e7014f712..7fad582f5 100644 --- a/cmd/tke-installer/app/installer/images/images.go +++ b/cmd/tke-installer/app/installer/images/images.go @@ -76,7 +76,7 @@ var components = Components{ InfluxDB: containerregistry.Image{Name: "influxdb", Tag: "1.7.9"}, Thanos: containerregistry.Image{Name: "thanos", Tag: "v0.15.0"}, - ProviderRes: containerregistry.Image{Name: "provider-res", Tag: "v1.20.4-1"}, + ProviderRes: containerregistry.Image{Name: "provider-res", Tag: "v1.20.4-2"}, TKEAuthAPI: containerregistry.Image{Name: "tke-auth-api", Tag: Version}, TKEAuthController: containerregistry.Image{Name: "tke-auth-controller", Tag: Version}, diff --git a/cmd/tke-installer/app/installer/installer.go b/cmd/tke-installer/app/installer/installer.go index c2902ef97..0fdbe8d5f 100644 --- a/cmd/tke-installer/app/installer/installer.go +++ b/cmd/tke-installer/app/installer/installer.go @@ -1578,7 +1578,7 @@ func (t *TKE) prepareImages(ctx context.Context) error { if err != nil { return err } - cmdString := fmt.Sprintf("docker pull %s", images.Get().TKEGateway.FullName()) + cmdString := fmt.Sprintf("nerdctl --insecure-registry --namespace k8s.io pull %s", images.Get().TKEGateway.FullName()) _, err = machineSSH.CombinedOutput(cmdString) if err != nil { return errors.Wrap(err, machine.IP) diff --git a/cmd/tke-installer/app/installer/manifests/tke-platform-controller/tke-platform-controller.yaml b/cmd/tke-installer/app/installer/manifests/tke-platform-controller/tke-platform-controller.yaml index 44e01bf8b..bbec0b9f1 100644 --- a/cmd/tke-installer/app/installer/manifests/tke-platform-controller/tke-platform-controller.yaml +++ b/cmd/tke-installer/app/installer/manifests/tke-platform-controller/tke-platform-controller.yaml @@ -30,12 +30,14 @@ spec: - command: - sh - -c - - cp -r /data/res /app/provider/baremetal/ + - cp -r /data/res /app/provider/baremetal/ && cp -r /data/conf/* /app/provider/baremetal/conf/ image: {{ .ProviderResImage }} name: provider-res volumeMounts: - mountPath: /app/provider/baremetal name: provider-volume + - mountPath: /app/provider/baremetal/conf/containerd + name: containerd-volume containers: - name: tke-platform-controller image: {{ .Image }} @@ -48,6 +50,8 @@ spec: mountPath: /app/conf - name: provider-volume mountPath: /app/provider/baremetal + - name: containerd-volume + mountPath: /app/provider/baremetal/conf/containerd/ - name: provider-config-volume mountPath: /app/provider/baremetal/conf/ - name: docker-volume @@ -91,6 +95,8 @@ spec: name: tke-platform-controller - name: provider-volume emptyDir: {} + - name: containerd-volume + emptyDir: {} - name: provider-config-volume configMap: name: provider-config @@ -187,4 +193,4 @@ data: - context: cluster: tke user: admin-cert - name: tke \ No newline at end of file + name: tke diff --git a/pkg/platform/provider/baremetal/cluster/create.go b/pkg/platform/provider/baremetal/cluster/create.go index 4bafaecde..df9b81e16 100644 --- a/pkg/platform/provider/baremetal/cluster/create.go +++ b/pkg/platform/provider/baremetal/cluster/create.go @@ -48,6 +48,7 @@ import ( "tkestack.io/tke/pkg/platform/provider/baremetal/images" "tkestack.io/tke/pkg/platform/provider/baremetal/phases/addons/cniplugins" "tkestack.io/tke/pkg/platform/provider/baremetal/phases/authzwebhook" + "tkestack.io/tke/pkg/platform/provider/baremetal/phases/containerd" csioperatorimage "tkestack.io/tke/pkg/platform/provider/baremetal/phases/csioperator/images" "tkestack.io/tke/pkg/platform/provider/baremetal/phases/docker" "tkestack.io/tke/pkg/platform/provider/baremetal/phases/galaxy" @@ -502,6 +503,38 @@ func (p *Provider) EnsureNvidiaContainerRuntime(ctx context.Context, c *v1.Clust return nil } +func (p *Provider) EnsureContainerRuntime(ctx context.Context, c *v1.Cluster) error { + if c.Cluster.Spec.Features.ContainerRuntime == platformv1.Docker { + return p.EnsureDocker(ctx, c) + } + return p.EnsureContainerd(ctx, c) +} + +func (p *Provider) EnsureContainerd(ctx context.Context, c *v1.Cluster) error { + insecureRegistries := []string{p.config.Registry.Domain} + if p.config.Registry.NeedSetHosts() && c.Spec.TenantID != "" { + insecureRegistries = append(insecureRegistries, c.Spec.TenantID+"."+p.config.Registry.Domain) + } + option := &containerd.Option{ + InsecureRegistries: insecureRegistries, + SandboxImage: images.Get().Pause.FullName(), + } + for _, machine := range c.Spec.Machines { + machineSSH, err := machine.SSH() + if err != nil { + return err + } + + option.IsGPU = gpu.IsEnable(machine.Labels) + err = containerd.Install(machineSSH, option) + if err != nil { + return errors.Wrap(err, machine.IP) + } + } + + return nil +} + func (p *Provider) EnsureDocker(ctx context.Context, c *v1.Cluster) error { machines := map[bool][]platformv1.ClusterMachine{ true: c.Spec.ScalingMachines, @@ -537,13 +570,13 @@ func (p *Provider) EnsureKubernetesImages(ctx context.Context, c *v1.Cluster) er machines := map[bool][]platformv1.ClusterMachine{ true: c.Spec.ScalingMachines, false: c.Spec.Machines}[len(c.Spec.ScalingMachines) > 0] - option := &image.Option{Version: c.Spec.Version, RegistryDomain: p.config.Registry.Domain} + option := &image.Option{Version: c.Spec.Version, RegistryDomain: p.config.Registry.Domain, KubeImages: images.KubecomponetNames} for _, machine := range machines { machineSSH, err := machine.SSH() if err != nil { return err } - err = image.PullKubernetesImages(machineSSH, option) + err = image.PullKubernetesImages(c, machineSSH, option) if err != nil { return errors.Wrap(err, machine.IP) } @@ -581,7 +614,11 @@ func (p *Provider) EnsureKubeadm(ctx context.Context, c *v1.Cluster) error { return err } - err = kubeadm.Install(machineSSH, c.Spec.Version) + option := &kubeadm.Option{ + RuntimeType: c.Spec.Features.ContainerRuntime, + Version: c.Spec.Version, + } + err = kubeadm.Install(machineSSH, option) if err != nil { return errors.Wrap(err, machine.IP) } diff --git a/pkg/platform/provider/baremetal/cluster/kubeadm.go b/pkg/platform/provider/baremetal/cluster/kubeadm.go index 95e61695e..13aafd019 100644 --- a/pkg/platform/provider/baremetal/cluster/kubeadm.go +++ b/pkg/platform/provider/baremetal/cluster/kubeadm.go @@ -75,6 +75,12 @@ func (p *Provider) getKubeadmJoinConfig(c *v1.Cluster, machineIP string) *kubead } } nodeRegistration.KubeletExtraArgs = kubeletExtraArgs + // Specify cri runtime type + if c.Cluster.Spec.Features.ContainerRuntime == "docker" { + nodeRegistration.CRISocket = "/var/run/dockershim.sock" + } else { + nodeRegistration.CRISocket = "/var/run/containerd/containerd.sock" + } return &kubeadmv1beta2.JoinConfiguration{ NodeRegistration: nodeRegistration, @@ -121,7 +127,12 @@ func (p *Provider) getInitConfiguration(c *v1.Cluster) *kubeadmv1beta2.InitConfi } } nodeRegistration.KubeletExtraArgs = kubeletExtraArgs - + // Specify cri runtime type + if c.Cluster.Spec.Features.ContainerRuntime == "docker" { + nodeRegistration.CRISocket = "/var/run/dockershim.sock" + } else { + nodeRegistration.CRISocket = "/var/run/containerd/containerd.sock" + } return &kubeadmv1beta2.InitConfiguration{ BootstrapTokens: []kubeadmv1beta2.BootstrapToken{ { diff --git a/pkg/platform/provider/baremetal/cluster/provider.go b/pkg/platform/provider/baremetal/cluster/provider.go index 4aff8e42e..2b97fe3bf 100644 --- a/pkg/platform/provider/baremetal/cluster/provider.go +++ b/pkg/platform/provider/baremetal/cluster/provider.go @@ -86,7 +86,7 @@ func NewProvider() (*Provider, error) { // install packages p.EnsureNvidiaDriver, p.EnsureNvidiaContainerRuntime, - p.EnsureDocker, + p.EnsureContainerRuntime, p.EnsureKubernetesImages, p.EnsureKubelet, p.EnsureCNIPlugins, diff --git a/pkg/platform/provider/baremetal/cluster/update.go b/pkg/platform/provider/baremetal/cluster/update.go index 2105a17ce..4fbc3f03b 100644 --- a/pkg/platform/provider/baremetal/cluster/update.go +++ b/pkg/platform/provider/baremetal/cluster/update.go @@ -74,7 +74,7 @@ func (p *Provider) EnsureRenewCerts(ctx context.Context, c *v1.Cluster) error { } logger.Info("RenewCerts doing") - err = kubeadm.RenewCerts(s) + err = kubeadm.RenewCerts(c, s) if err != nil { return errors.Wrap(err, machine.IP) } @@ -124,7 +124,7 @@ func (p *Provider) EnsureAPIServerCert(ctx context.Context, c *v1.Cluster) error if err != nil { return errors.Wrap(err, machine.IP) } - err = kubeadm.RestartContainerByFilter(s, kubeadm.DockerFilterForControlPlane("kube-apiserver")) + err = kubeadm.RestartContainerByLabel(c, s, kubeadm.ContainerLabelOfControlPlane(c, "kube-apiserver")) if err != nil { return err } diff --git a/pkg/platform/provider/baremetal/conf/containerd/config.toml b/pkg/platform/provider/baremetal/conf/containerd/config.toml new file mode 100644 index 000000000..f99353fae --- /dev/null +++ b/pkg/platform/provider/baremetal/conf/containerd/config.toml @@ -0,0 +1,32 @@ +version = 2 +root = "/var/lib/containerd" +state = "/run/containerd" + +[grpc] + address = "/run/containerd/containerd.sock" + gid = 0 + max_recv_message_size = 16777216 + max_send_message_size = 16777216 + uid = 0 + +[plugins] + [plugins."io.containerd.grpc.v1.cri"] + sandbox_image = "{{.SandboxImage}}" + [plugins."io.containerd.grpc.v1.cri".cni] + bin_dir = "/opt/cni/bin" + conf_dir = "/etc/cni/net.d" + [plugins."io.containerd.grpc.v1.cri".containerd] + {{ if .IsGPU}} + default_runtime_name=nvidia + [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.nvidia] + [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.nvidia.options] + Runtime="/usr/bin/nvidia-container-runtime" + {{else}} + default_runtime_name="runc" + {{end}} + [plugins."io.containerd.grpc.v1.cri".registry] + [plugins."io.containerd.grpc.v1.cri".registry.configs] + {{range .InsecureRegistries}} + [plugins."io.containerd.grpc.v1.cri".registry.configs."{{.}}".tls] + insecure_skip_verify=true + {{end}} diff --git a/pkg/platform/provider/baremetal/conf/containerd/containerd.service b/pkg/platform/provider/baremetal/conf/containerd/containerd.service new file mode 100644 index 000000000..41366de97 --- /dev/null +++ b/pkg/platform/provider/baremetal/conf/containerd/containerd.service @@ -0,0 +1,26 @@ +[Unit] +Description=containerd container runtime +Documentation=https://containerd.io +After=network.target local-fs.target + +[Service] +ExecStartPre=-/sbin/modprobe overlay +ExecStart=/usr/local/bin/containerd + +Type=notify +Delegate=yes +KillMode=process +Restart=always +RestartSec=5 +# Having non-zero Limit*s causes performance problems due to accounting overhead +# in the kernel. We recommend using cgroups to do container-local accounting. +LimitNPROC=infinity +LimitCORE=infinity +LimitNOFILE=infinity +# Comment TasksMax if your systemd version does not supports it. +# Only systemd 226 and above support this version. +TasksMax=infinity +OOMScoreAdjust=-999 + +[Install] +WantedBy=multi-user.target diff --git a/pkg/platform/provider/baremetal/images/images.go b/pkg/platform/provider/baremetal/images/images.go index c59f009ed..f383b28ff 100644 --- a/pkg/platform/provider/baremetal/images/images.go +++ b/pkg/platform/provider/baremetal/images/images.go @@ -55,7 +55,9 @@ func (c Components) Get(name string) *containerregistry.Image { return nil } -var kubecomponetNames = []string{"kube-apiserver", "kube-controller-manager", "kube-scheduler", "kube-proxy"} +var KubecomponetNames = append(KubeNodeImages, "kube-apiserver", "kube-controller-manager", "kube-scheduler", "kube-proxy") +var KubeNodeImages = []string{"kube-proxy"} + var components = Components{ ETCD: containerregistry.Image{Name: "etcd", Tag: "v3.4.7"}, CoreDNS: containerregistry.Image{Name: "coredns", Tag: "1.7.0"}, @@ -81,7 +83,7 @@ func List() []string { var items []string for _, version := range spec.K8sVersionsWithV { - for _, name := range kubecomponetNames { + for _, name := range KubecomponetNames { items = append(items, containerregistry.Image{Name: name, Tag: version}.BaseName()) } } @@ -100,9 +102,9 @@ func Get() Components { return components } -func ListKubernetesImageFullNamesWithVerion(version string) []string { +func ListKubernetesImageFullNamesWithVersion(version string, images []string) []string { var items []string - for _, name := range kubecomponetNames { + for _, name := range images { items = append(items, containerregistry.Image{Name: name, Tag: "v" + version}.FullName()) } diff --git a/pkg/platform/provider/baremetal/machine/create.go b/pkg/platform/provider/baremetal/machine/create.go index f529b3b88..926536c66 100644 --- a/pkg/platform/provider/baremetal/machine/create.go +++ b/pkg/platform/provider/baremetal/machine/create.go @@ -26,6 +26,7 @@ import ( "path" "strings" "time" + "tkestack.io/tke/pkg/platform/provider/baremetal/phases/image" "github.com/imdario/mergo" corev1 "k8s.io/api/core/v1" @@ -33,7 +34,9 @@ import ( "k8s.io/apimachinery/pkg/util/wait" platformv1 "tkestack.io/tke/api/platform/v1" "tkestack.io/tke/pkg/platform/provider/baremetal/constants" + "tkestack.io/tke/pkg/platform/provider/baremetal/images" "tkestack.io/tke/pkg/platform/provider/baremetal/phases/addons/cniplugins" + "tkestack.io/tke/pkg/platform/provider/baremetal/phases/containerd" "tkestack.io/tke/pkg/platform/provider/baremetal/phases/docker" "tkestack.io/tke/pkg/platform/provider/baremetal/phases/gpu" "tkestack.io/tke/pkg/platform/provider/baremetal/phases/kubeadm" @@ -311,6 +314,51 @@ func (p *Provider) EnsureNvidiaContainerRuntime(ctx context.Context, machine *pl return gpu.InstallNvidiaContainerRuntime(machineSSH, &gpu.NvidiaContainerRuntimeOption{}) } +func (p *Provider) EnsureContainerRuntime(ctx context.Context, machine *platformv1.Machine, cluster *typesv1.Cluster) error { + if cluster.Cluster.Spec.Features.ContainerRuntime == platformv1.Docker { + return p.EnsureDocker(ctx, machine, cluster) + } + return p.EnsureContainerd(ctx, machine, cluster) +} + +func (p *Provider) EnsureKubernetesImages(ctx context.Context, machine *platformv1.Machine, c *typesv1.Cluster) error { + machineSSH, err := machine.Spec.SSH() + if err != nil { + return err + } + option := &image.Option{Version: c.Spec.Version, RegistryDomain: p.config.Registry.Domain, KubeImages: images.KubeNodeImages} + err = image.PullKubernetesImages(c, machineSSH, option) + if err != nil { + return err + } + + return nil +} + +func (p *Provider) EnsureContainerd(ctx context.Context, machine *platformv1.Machine, cluster *typesv1.Cluster) error { + machineSSH, err := machine.Spec.SSH() + if err != nil { + return err + } + + insecureRegistries := []string{p.config.Registry.Domain} + if p.config.Registry.NeedSetHosts() && machine.Spec.TenantID != "" { + insecureRegistries = append(insecureRegistries, machine.Spec.TenantID+"."+p.config.Registry.Domain) + } + + option := &containerd.Option{ + InsecureRegistries: insecureRegistries, + IsGPU: gpu.IsEnable(machine.Spec.Labels), + SandboxImage: images.Get().Pause.FullName(), + } + err = containerd.Install(machineSSH, option) + if err != nil { + return err + } + + return nil +} + func (p *Provider) EnsureDocker(ctx context.Context, machine *platformv1.Machine, cluster *typesv1.Cluster) error { machineSSH, err := machine.Spec.SSH() if err != nil { @@ -386,7 +434,11 @@ func (p *Provider) EnsureKubeadm(ctx context.Context, machine *platformv1.Machin return err } - err = kubeadm.Install(machineSSH, cluster.Spec.Version) + option := &kubeadm.Option{ + RuntimeType: cluster.Spec.Features.ContainerRuntime, + Version: cluster.Spec.Version, + } + err = kubeadm.Install(machineSSH, option) if err != nil { return err } diff --git a/pkg/platform/provider/baremetal/machine/kubeadm.go b/pkg/platform/provider/baremetal/machine/kubeadm.go index 3d3c62fc5..6a7d0b973 100644 --- a/pkg/platform/provider/baremetal/machine/kubeadm.go +++ b/pkg/platform/provider/baremetal/machine/kubeadm.go @@ -24,6 +24,7 @@ import ( "github.com/imdario/mergo" utilruntime "k8s.io/apimachinery/pkg/util/runtime" utilsnet "k8s.io/utils/net" + platformv1 "tkestack.io/tke/api/platform/v1" kubeadmv1beta2 "tkestack.io/tke/pkg/platform/provider/baremetal/apis/kubeadm/v1beta2" "tkestack.io/tke/pkg/platform/provider/baremetal/images" v1 "tkestack.io/tke/pkg/platform/types/v1" @@ -62,6 +63,12 @@ func (p *Provider) getKubeadmJoinConfig(c *v1.Cluster, machineIP string) *kubead } } nodeRegistration.KubeletExtraArgs = kubeletExtraArgs + // Specify cri runtime type + if c.Cluster.Spec.Features.ContainerRuntime == "docker" { + nodeRegistration.CRISocket = "/var/run/dockershim.sock" + } else { + nodeRegistration.CRISocket = "/var/run/containerd/containerd.sock" + } return &kubeadmv1beta2.JoinConfiguration{ NodeRegistration: nodeRegistration, @@ -77,9 +84,13 @@ func (p *Provider) getKubeadmJoinConfig(c *v1.Cluster, machineIP string) *kubead } func (p *Provider) getKubeletExtraArgs(c *v1.Cluster) map[string]string { - args := map[string]string{ - "pod-infra-container-image": images.Get().Pause.FullName(), + args := map[string]string{} + if c.Cluster.Spec.Features.ContainerRuntime == platformv1.Docker { + args = map[string]string{ + "pod-infra-container-image": images.Get().Pause.FullName(), + } } + // for containerd runtimes, no need to set pod-infra-container-image utilruntime.Must(mergo.Merge(&args, c.Spec.KubeletExtraArgs)) utilruntime.Must(mergo.Merge(&args, p.config.Kubelet.ExtraArgs)) diff --git a/pkg/platform/provider/baremetal/machine/provider.go b/pkg/platform/provider/baremetal/machine/provider.go index 330042b63..7668e37e6 100644 --- a/pkg/platform/provider/baremetal/machine/provider.go +++ b/pkg/platform/provider/baremetal/machine/provider.go @@ -74,7 +74,8 @@ func NewProvider() (*Provider, error) { p.EnsureNvidiaDriver, p.EnsureNvidiaContainerRuntime, - p.EnsureDocker, + p.EnsureContainerRuntime, + p.EnsureKubernetesImages, p.EnsureKubelet, p.EnsureCNIPlugins, p.EnsureConntrackTools, diff --git a/pkg/platform/provider/baremetal/phases/containerd/containerd.go b/pkg/platform/provider/baremetal/phases/containerd/containerd.go new file mode 100644 index 000000000..d2be676f1 --- /dev/null +++ b/pkg/platform/provider/baremetal/phases/containerd/containerd.go @@ -0,0 +1,100 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ + +package containerd + +import ( + "bytes" + "fmt" + "path" + + "tkestack.io/tke/pkg/util/template" + + "github.com/pkg/errors" + "tkestack.io/tke/pkg/platform/provider/baremetal/constants" + "tkestack.io/tke/pkg/platform/provider/baremetal/res" + "tkestack.io/tke/pkg/util/ssh" + "tkestack.io/tke/pkg/util/supervisor" +) + +type Option struct { + InsecureRegistries []string + IsGPU bool + Root string + SandboxImage string +} + +const ( + containerdConfigFile = "/etc/containerd/config.toml" +) + +func Install(s ssh.Interface, option *Option) error { + dstFile, err := res.Containerd.CopyToNodeWithDefault(s) + if err != nil { + return err + } + + cmd := "tar xvaf %s -C %s" + _, stderr, exit, err := s.Execf(cmd, dstFile, "/") + if err != nil { + return fmt.Errorf("exec %q failed:exit %d:stderr %s:error %s", cmd, exit, stderr, err) + } + + dstFile, err = res.Nerdctl.CopyToNodeWithDefault(s) + if err != nil { + return err + } + + cmd = "tar xvaf %s -C /usr/local/bin/ " + _, stderr, exit, err = s.Execf(cmd, dstFile) + if err != nil { + return fmt.Errorf("exec %q failed:exit %d:stderr %s:error %s", cmd, exit, stderr, err) + } + + data, err := template.ParseFile(path.Join(constants.ConfDir, "containerd/config.toml"), option) + if err != nil { + return err + } + err = s.WriteFile(bytes.NewReader(data), containerdConfigFile) + if err != nil { + return errors.Wrapf(err, "write %s error", containerdConfigFile) + } + + data, err = template.ParseFile(path.Join(constants.ConfDir, "containerd/containerd.service"), option) + if err != nil { + return err + } + ss := &supervisor.SystemdSupervisor{Name: "containerd", SSH: s} + err = ss.Deploy(bytes.NewReader(data)) + if err != nil { + return err + } + + err = ss.Start() + if err != nil { + return err + } + + cmd = "rm -rf /etc/cni/net.d/10-containerd-net.conflist" + _, stderr, exit, err = s.Execf(cmd) + if err != nil { + return fmt.Errorf("exec %q failed:exit %d:stderr %s:error %s", cmd, exit, stderr, err) + } + + return nil +} diff --git a/pkg/platform/provider/baremetal/phases/galaxy/template.go b/pkg/platform/provider/baremetal/phases/galaxy/template.go index 7f89ecb9b..e7e52dad0 100644 --- a/pkg/platform/provider/baremetal/phases/galaxy/template.go +++ b/pkg/platform/provider/baremetal/phases/galaxy/template.go @@ -61,6 +61,9 @@ spec: volumeMounts: - name: galaxy-run mountPath: /var/run/galaxy/ + - name: containerd-run + mountPropagation: Bidirectional + mountPath: /var/run/netns/ - name: flannel-run mountPath: /run/flannel - name: galaxy-log @@ -88,6 +91,9 @@ spec: - name: flannel-run hostPath: path: /run/flannel + - name: containerd-run + hostPath: + path: /var/run/netns - name: cni-bin-dir hostPath: path: /opt/cni/bin diff --git a/pkg/platform/provider/baremetal/phases/image/image.go b/pkg/platform/provider/baremetal/phases/image/image.go index 9fa671626..f9d211a08 100644 --- a/pkg/platform/provider/baremetal/phases/image/image.go +++ b/pkg/platform/provider/baremetal/phases/image/image.go @@ -21,37 +21,55 @@ package image import ( "fmt" "strings" - + platformv1 "tkestack.io/tke/api/platform/v1" "tkestack.io/tke/pkg/platform/provider/baremetal/images" + v1 "tkestack.io/tke/pkg/platform/types/v1" "tkestack.io/tke/pkg/util/ssh" ) type Option struct { Version string RegistryDomain string + KubeImages []string } -func PullKubernetesImages(s ssh.Interface, option *Option) error { - images := images.ListKubernetesImageFullNamesWithVerion(option.Version) +func PullKubernetesImages(c *v1.Cluster, s ssh.Interface, option *Option) error { + images := images.ListKubernetesImageFullNamesWithVersion(option.Version, option.KubeImages) if len(images) == 0 { return fmt.Errorf("images is empty") } for _, image := range images { - cmd := fmt.Sprintf("docker pull %s", image) - _, err := s.CombinedOutput(cmd) - if err != nil { - if strings.Contains(err.Error(), "502 Bad Gateway") { - cmd = " docker info | grep Proxy" - output, _ := s.CombinedOutput(cmd) - return fmt.Errorf(`pull image fail: %s. maybe set no_proxy for registry(%s,*.%s) in docker dameon. + cmd := "" + if c.Cluster.Spec.Features.ContainerRuntime == platformv1.Docker { + cmd = fmt.Sprintf("docker pull %s", image) + _, err := s.CombinedOutput(cmd) + if err != nil { + if strings.Contains(err.Error(), "502 Bad Gateway") { + cmd = " docker info | grep Proxy" + output, _ := s.CombinedOutput(cmd) + return fmt.Errorf(`pull image fail: %s. maybe set no_proxy for registry(%s,*.%s) in docker dameon. docker info:%s. see: https://docs.docker.com/config/daemon/systemd/#httphttps-proxy`, - err, option.RegistryDomain, option.RegistryDomain, output) + err, option.RegistryDomain, option.RegistryDomain, output) + } + + return err } + } else { + cmd = fmt.Sprintf("nerdctl --insecure-registry --namespace k8s.io pull %s", image) + _, err := s.CombinedOutput(cmd) + if err != nil { + if strings.Contains(err.Error(), "502 Bad Gateway") { + cmd = "cat /etc/systemd/system/containerd.service | grep PROXY" + output, _ := s.CombinedOutput(cmd) + return fmt.Errorf(`pull image fail: %s. maybe set no_proxy for registry(%s,*.%s) in containerd dameon. + containerd info:%s. see: https://github.com/containerd/containerd/issues/1990`, + err, option.RegistryDomain, option.RegistryDomain, output) + } - return err + return err + } } } - return nil } diff --git a/pkg/platform/provider/baremetal/phases/kubeadm/kubeadm.go b/pkg/platform/provider/baremetal/phases/kubeadm/kubeadm.go index 7b8d2dd32..29ba45916 100644 --- a/pkg/platform/provider/baremetal/phases/kubeadm/kubeadm.go +++ b/pkg/platform/provider/baremetal/phases/kubeadm/kubeadm.go @@ -51,6 +51,11 @@ import ( "tkestack.io/tke/pkg/util/template" ) +type Option struct { + RuntimeType platformv1.ContainerRuntimeType + Version string +} + const ( kubeadmKubeletConf = "/usr/lib/systemd/system/kubelet.service.d/10-kubeadm.conf" @@ -72,8 +77,8 @@ var ( unMigrataleComponents = []string{"tke-platform-api", "tke-platform-controller", "tke-registry-api", "tke-registry-controller", "influxdb"} ) -func Install(s ssh.Interface, version string) error { - dstFile, err := res.KubernetesNode.CopyToNode(s, version) +func Install(s ssh.Interface, option *Option) error { + dstFile, err := res.KubernetesNode.CopyToNode(s, option.Version) if err != nil { return err } @@ -84,7 +89,7 @@ func Install(s ssh.Interface, version string) error { return fmt.Errorf("exec %q failed:exit %d:stderr %s:error %s", cmd, exit, stderr, err) } - data, err := template.ParseFile(path.Join(constants.ConfDir, "kubeadm/10-kubeadm.conf"), nil) + data, err := template.ParseFile(path.Join(constants.ConfDir, "kubeadm/10-kubeadm.conf"), option) if err != nil { return err } @@ -177,7 +182,7 @@ func Reset(s ssh.Interface, phase string) error { return nil } -func RenewCerts(s ssh.Interface) error { +func RenewCerts(c *v1.Cluster, s ssh.Interface) error { err := fixKubeadmBug1753(s) if err != nil { return fmt.Errorf("fixKubeadmBug1753(https://github.com/kubernetes/kubeadm/issues/1753) error: %w", err) @@ -189,7 +194,7 @@ func RenewCerts(s ssh.Interface) error { return err } - err = RestartControlPlane(s) + err = RestartControlPlane(c, s) if err != nil { return err } @@ -248,10 +253,10 @@ func fixKubeadmBug88811(client kubernetes.Interface) error { return nil } -func RestartControlPlane(s ssh.Interface) error { +func RestartControlPlane(c *v1.Cluster, s ssh.Interface) error { targets := []string{"kube-apiserver", "kube-controller-manager", "kube-scheduler"} for _, one := range targets { - err := RestartContainerByFilter(s, DockerFilterForControlPlane(one)) + err := RestartContainerByLabel(c, s, ContainerLabelOfControlPlane(c, one)) if err != nil { return err } @@ -260,19 +265,32 @@ func RestartControlPlane(s ssh.Interface) error { return nil } -func DockerFilterForControlPlane(name string) string { - return fmt.Sprintf("label=io.kubernetes.container.name=%s", name) +func ContainerLabelOfControlPlane(c *v1.Cluster, name string) string { + if c.Cluster.Spec.Features.ContainerRuntime == platformv1.Docker { + return fmt.Sprintf("label=io.kubernetes.container.name=%s", name) + } + return fmt.Sprintf("io.kubernetes.container.name=%s", name) } -func RestartContainerByFilter(s ssh.Interface, filter string) error { - cmd := fmt.Sprintf("docker rm -f $(docker ps -q -f '%s')", filter) +func RestartContainerByLabel(c *v1.Cluster, s ssh.Interface, label string) error { + cmd := "" + if c.Cluster.Spec.Features.ContainerRuntime == platformv1.Docker { + cmd = fmt.Sprintf("docker rm -f $(docker ps -q -f '%s')", label) + } else { + cmd = fmt.Sprintf("crictl rm -f $(crictl ps -q --label '%s')", label) + } _, err := s.CombinedOutput(cmd) if err != nil { return err } err = wait.PollImmediate(5*time.Second, 5*time.Minute, func() (bool, error) { - cmd = fmt.Sprintf("docker ps -q -f '%s'", filter) + cmd := "" + if c.Cluster.Spec.Features.ContainerRuntime == platformv1.Docker { + cmd = fmt.Sprintf("docker ps -q -f '%s'", label) + } else { + cmd = fmt.Sprintf("crictl ps -q --label '%s'", label) + } output, err := s.CombinedOutput(cmd) if err != nil { return false, nil @@ -283,7 +301,7 @@ func RestartContainerByFilter(s ssh.Interface, filter string) error { return true, nil }) if err != nil { - return fmt.Errorf("restart container(%s) error: %w", filter, err) + return fmt.Errorf("restart container(%s) error: %w", label, err) } return nil @@ -341,7 +359,11 @@ func UpgradeNode(s ssh.Interface, client kubernetes.Interface, platformClient pl // ignore patch version for patch version kubeadm may not exist in platform-controller if !sameMinor { logger.Infof("Start install kubeadm to %s", option.MachineIP) - err = Install(s, option.Version) + kubeAdmOption := &Option{ + RuntimeType: cluster.Spec.Features.ContainerRuntime, + Version: option.Version, + } + err = Install(s, kubeAdmOption) if err != nil { return upgraded, err } diff --git a/pkg/platform/provider/baremetal/res/res.go b/pkg/platform/provider/baremetal/res/res.go index 2f7b6911a..f34dfae29 100644 --- a/pkg/platform/provider/baremetal/res/res.go +++ b/pkg/platform/provider/baremetal/res/res.go @@ -35,6 +35,14 @@ var ( Name: "docker", Versions: spec.DockerVersions, } + Containerd = Package{ + Name: "containerd", + Versions: spec.ContainerdVersions, + } + Nerdctl = Package{ + Name: "nerdctl", + Versions: spec.NerdctlVersions, + } CNIPlugins = Package{ Name: "cni-plugins", Versions: spec.CNIPluginsVersions, diff --git a/pkg/spec/spec.go b/pkg/spec/spec.go index b0dbfcfe4..7d4c9f237 100644 --- a/pkg/spec/spec.go +++ b/pkg/spec/spec.go @@ -37,6 +37,8 @@ var ( }).([]string) DockerVersions = []string{"19.03.14"} + ContainerdVersions = []string{"1.5.4"} + NerdctlVersions = []string{"0.11.0"} CNIPluginsVersions = []string{"v0.8.6"} ConntrackToolsVersions = []string{"1.4.4"} NvidiaDriverVersions = []string{"440.31"} diff --git a/test/e2e/manifests/tke-platform-controller/tke-platform-controller.yaml b/test/e2e/manifests/tke-platform-controller/tke-platform-controller.yaml index c68041948..fc52fac19 100644 --- a/test/e2e/manifests/tke-platform-controller/tke-platform-controller.yaml +++ b/test/e2e/manifests/tke-platform-controller/tke-platform-controller.yaml @@ -10,12 +10,14 @@ spec: - command: - sh - -c - - cp -r /data/res /app/provider/baremetal/ + - cp -r /data/res /app/provider/baremetal/ && cp -r /data/conf/* /app/provider/baremetal/conf/ image: {{ .ProviderResImage }} name: provider-res volumeMounts: - mountPath: /app/provider/baremetal name: provider-volume + - mountPath: /app/provider/baremetal/conf/containerd + name: containerd-volume containers: - name: tke-platform-controller image: {{ .Image }} @@ -28,6 +30,8 @@ spec: mountPath: /app/conf - name: provider-volume mountPath: /app/provider/baremetal + - name: containerd-volume + mountPath: /app/provider/baremetal/conf/containerd/ - name: provider-config-volume mountPath: /app/provider/baremetal/conf/ - name: docker-volume @@ -54,6 +58,8 @@ spec: name: tke-platform-controller - name: provider-volume emptyDir: {} + - name: containerd-volume + emptyDir: {} - name: provider-config-volume configMap: name: provider-config From 76f632037a62bd20f83bb6fde3bf979c865e55e2 Mon Sep 17 00:00:00 2001 From: jo-hnny Date: Tue, 24 Aug 2021 14:14:33 +0800 Subject: [PATCH 24/62] feat(console): support get app from target namespace (#1507) * feat: support get app from target namespace * fix: type error --- web/console/helpers/urlUtil.ts | 81 +++++++------------ web/console/package-lock.json | 6 ++ web/console/package.json | 1 + web/console/src/modules/application/WebAPI.ts | 65 ++++++++------- web/console/src/modules/registry/WebAPI.ts | 2 +- 5 files changed, 72 insertions(+), 83 deletions(-) diff --git a/web/console/helpers/urlUtil.ts b/web/console/helpers/urlUtil.ts index 6ef25b4bd..9b710de27 100644 --- a/web/console/helpers/urlUtil.ts +++ b/web/console/helpers/urlUtil.ts @@ -1,16 +1,17 @@ import { remove, isEmpty } from '../src/modules/common/utils'; import { ResourceInfo } from '../src/modules/common'; import { resourceConfig } from '../config'; +import { isObject } from 'lodash'; -export function parseQueryString(str: string = '') { - let result = {}; +export function parseQueryString(str = '') { + const result = {}; str .replace(/^\?*/, '') .split('&') .forEach(item => { - let keyVal = item.split('='); + const keyVal = item.split('='); if (keyVal.length > 0) { - let key = decodeURIComponent(keyVal[0]); + const key = decodeURIComponent(keyVal[0]); result[key] = keyVal[1] ? decodeURIComponent(keyVal[1]) : ''; } }); @@ -18,8 +19,8 @@ export function parseQueryString(str: string = '') { } export function buildQueryString(obj: any = {}) { - let keys = remove(Object.keys(obj), value => value === ''); - let queryStr = keys.map(key => `${encodeURIComponent(key)}=${encodeURIComponent(obj[key])}`).join('&'); + const keys = remove(Object.keys(obj), value => value === ''); + const queryStr = keys.map(key => `${encodeURIComponent(key)}=${encodeURIComponent(obj[key])}`).join('&'); if (queryStr) { return '?' + queryStr; @@ -46,46 +47,25 @@ export const reduceK8sQueryString = ({ k8sQueryObj = {}, restfulPath = '' }: { - k8sQueryObj: any; + k8sQueryObj: Record>; restfulPath?: string; }) => { - let operator = '?'; - let queryString = ''; - if (!isEmpty(k8sQueryObj)) { - let queryKeys = Object.keys(k8sQueryObj); - queryKeys.forEach((queryKey, index) => { - if (index !== 0) { - queryString += '&'; - } - - // 这里去判断每种资源的query,eg:fieldSelector、limit等 - let specificQuery = k8sQueryObj[queryKey]; - - if (typeof specificQuery === 'object') { - // 这里是对于 query的字段里面,还有多种过滤条件,比如fieldSelector支持 involvedObject.name=*,involvedObject.kind=* - let specificKeys = Object.keys(specificQuery), - specificString = ''; - specificKeys.forEach((speKey, index) => { - if (index !== 0) { - specificString += ','; - } - specificString += speKey + '=' + specificQuery[speKey]; - }); - if (specificString) { - queryString += queryKey + '=' + specificString; - } - } else { - queryString += queryKey + '=' + k8sQueryObj[queryKey]; - } - }); - } - - /** 如果原本的url里面已经有 ? 了,则我们这里的query的内容,必须是拼接在后面,而不能直接加多一个 ? */ - if (restfulPath.includes('?')) { - operator = '&'; - } - - return queryString ? `${operator}${queryString}` : ''; + const queryString = Object.entries(k8sQueryObj) + .map(([key, value]) => { + // 也许value是object,即labelSelector 或者 fieldSelector + value = isObject(value) + ? Object.entries(value) + .map(([key, value]) => `${key}${value && '='}${value}`) + .join(',') + : value; + + return `${key}=${encodeURIComponent(`${value}`)}`; + }) + .join('&'); + + const preFix = restfulPath.includes('?') ? '&' : '?'; + + return queryString ? `${preFix}${queryString}` : ''; }; interface K8sRestfulPathOptions { @@ -114,7 +94,6 @@ interface K8sRestfulPathOptions { logAgentName?: string; meshId?: string; - } /** @@ -134,12 +113,12 @@ export const reduceK8sRestfulPath = (options: K8sRestfulPathOptions) => { extraResource = '', clusterId = '', meshId = '', - logAgentName = '', + logAgentName = '' } = options; namespace = namespace.replace(new RegExp(`^${clusterId}-`), ''); - let url: string = ''; - let isAddon = resourceInfo.requestType && resourceInfo.requestType.addon ? resourceInfo.requestType.addon : false; + let url = ''; + const isAddon = resourceInfo.requestType && resourceInfo.requestType.addon ? resourceInfo.requestType.addon : false; /** * addon 和 非 addon的资源,请求的url 不太一样 @@ -153,12 +132,12 @@ export const reduceK8sRestfulPath = (options: K8sRestfulPathOptions) => { */ if (isAddon) { // 兼容新旧日志组件 - let baseInfo: ResourceInfo = resourceConfig()[logAgentName ? 'logagent' : 'cluster']; - let baseValue = logAgentName || clusterId; + const baseInfo: ResourceInfo = resourceConfig()[logAgentName ? 'logagent' : 'cluster']; + const baseValue = logAgentName || clusterId; url = `/${baseInfo.basicEntry}/${baseInfo.group}/${baseInfo.version}/${baseInfo.requestType['list']}/${baseValue}/${resourceInfo.requestType['list']}`; if (extraResource || resourceInfo['namespaces'] || specificName) { - let queryArr: string[] = []; + const queryArr: string[] = []; resourceInfo.namespaces && namespace && queryArr.push(`namespace=${namespace}`); specificName && queryArr.push(`name=${specificName}`); extraResource && queryArr.push(`action=${extraResource}`); diff --git a/web/console/package-lock.json b/web/console/package-lock.json index 4415fffca..310b7fdb4 100644 --- a/web/console/package-lock.json +++ b/web/console/package-lock.json @@ -1322,6 +1322,12 @@ "integrity": "sha1-7ihweulOEdK4J7y+UnC86n8+ce4=", "dev": true }, + "@types/lodash": { + "version": "4.14.172", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.172.tgz", + "integrity": "sha512-/BHF5HAx3em7/KkzVKm3LrsD6HZAXuXO1AJZQ3cRRBZj4oHZDviWPYu0aEplAqDFNHZPW6d3G7KN+ONcCCC7pw==", + "dev": true + }, "@types/marked": { "version": "0.6.5", "resolved": "https://registry.npmjs.org/@types/marked/-/marked-0.6.5.tgz", diff --git a/web/console/package.json b/web/console/package.json index c2acc1fb9..34dfacfeb 100644 --- a/web/console/package.json +++ b/web/console/package.json @@ -77,6 +77,7 @@ "@babel/preset-env": "^7.0.0", "@babel/preset-react": "^7.0.0", "@types/jquery": "^3.5.5", + "@types/lodash": "^4.14.172", "@types/marked": "^0.6.3", "@types/node": "^11.11.1", "@types/react": "^16.9.56", diff --git a/web/console/src/modules/application/WebAPI.ts b/web/console/src/modules/application/WebAPI.ts index 05cba5fa0..1f4188576 100644 --- a/web/console/src/modules/application/WebAPI.ts +++ b/web/console/src/modules/application/WebAPI.ts @@ -46,8 +46,8 @@ import { export async function fetchClusterList(query: QueryState) { const resourceInfo: ResourceInfo = resourceConfig()['cluster']; const url = reduceK8sRestfulPath({ resourceInfo }); - let rr: RequestResult = await GET({ url }); - let objs: Cluster[] = !rr.error && rr.data.items ? rr.data.items : []; + const rr: RequestResult = await GET({ url }); + const objs: Cluster[] = !rr.error && rr.data.items ? rr.data.items : []; const result: RecordSet = { recordCount: objs.length, records: objs @@ -63,8 +63,8 @@ export async function fetchNamespaceList(query: QueryState) { const { keyword, filter } = query; const resourceInfo: ResourceInfo = resourceConfig()['ns']; const url = reduceK8sRestfulPath({ resourceInfo }); - let rr: RequestResult = await GET({ url, clusterId: filter.cluster }); - let objs: Namespace[] = !rr.error && rr.data.items ? rr.data.items : []; + const rr: RequestResult = await GET({ url, clusterId: filter.cluster }); + const objs: Namespace[] = !rr.error && rr.data.items ? rr.data.items : []; const result: RecordSet = { recordCount: objs.length, records: objs @@ -80,8 +80,8 @@ export async function fetchProjectNamespaceList(query: QueryState = { recordCount: objs.length, records: objs @@ -96,12 +96,18 @@ export async function fetchProjectNamespaceList(query: QueryState) { const { keyword, filter } = query; - const queryObj = {}; + const queryObj = { + fieldSelector: { + 'spec.targetNamespace': filter.namespace, + 'spec.targetCluster': filter.cluster + } + }; const resourceInfo: ResourceInfo = resourceConfig()['app']; - const url = reduceK8sRestfulPath({ resourceInfo, namespace: filter.namespace, isSpecialNamespace: true }); + const url = reduceK8sRestfulPath({ resourceInfo: { ...resourceInfo, namespaces: undefined } }); const queryString = reduceK8sQueryString({ k8sQueryObj: queryObj }); - let rr: RequestResult = await GET({ url: url + queryString, clusterId: filter.cluster, keyword }); - let objs: App[] = !rr.error && rr.data.items ? rr.data.items : []; + + const rr: RequestResult = await GET({ url: url + queryString, clusterId: filter.cluster, keyword }); + const objs: App[] = !rr.error && rr.data.items ? rr.data.items : []; const result: RecordSet = { recordCount: objs.length, records: objs @@ -121,7 +127,7 @@ export async function fetchApp(filter: AppDetailFilter) { specificName: filter.name, isSpecialNamespace: true }); - let rr: RequestResult = await GET({ url, clusterId: filter.cluster }); + const rr: RequestResult = await GET({ url, clusterId: filter.cluster }); return rr.data; } @@ -137,7 +143,7 @@ export async function updateApp([appInfo]) { specificName: appInfo.metadata.name, isSpecialNamespace: true }); - let rr: RequestResult = await PUT({ url, bodyData: appInfo }); + const rr: RequestResult = await PUT({ url, bodyData: appInfo }); return operationResult(rr.data, rr.error); } @@ -152,7 +158,7 @@ export async function addApp([appInfo]) { namespace: appInfo.metadata.namespace, isSpecialNamespace: true }); - let rr: RequestResult = await POST({ url, bodyData: appInfo }); + const rr: RequestResult = await POST({ url, bodyData: appInfo }); return operationResult(rr.data, rr.error); } @@ -161,14 +167,14 @@ export async function addApp([appInfo]) { * @param group */ export async function deleteApp([app]: App[]) { - let resourceInfo: ResourceInfo = resourceConfig()['app']; + const resourceInfo: ResourceInfo = resourceConfig()['app']; const url = reduceK8sRestfulPath({ resourceInfo, namespace: app.metadata.namespace, specificName: app.metadata.name, isSpecialNamespace: true }); - let rr: RequestResult = await DELETE({ url }); + const rr: RequestResult = await DELETE({ url }); return operationResult(rr.data, rr.error); } @@ -185,7 +191,7 @@ export async function fetchAppResource(filter: AppResourceFilter) { extraResource: 'resources', isSpecialNamespace: true }); - let rr: RequestResult = await GET({ url, clusterId: filter.cluster }); + const rr: RequestResult = await GET({ url, clusterId: filter.cluster }); return rr.data; } @@ -202,7 +208,7 @@ export async function fetchAppHistory(filter: AppHistoryFilter) { extraResource: 'histories', isSpecialNamespace: true }); - let rr: RequestResult = await GET({ url, clusterId: filter.cluster }); + const rr: RequestResult = await GET({ url, clusterId: filter.cluster }); return rr.data; } @@ -211,7 +217,7 @@ export async function fetchAppHistory(filter: AppHistoryFilter) { * @param group */ export async function rollbackApp([app]: History[]) { - let resourceInfo: ResourceInfo = resourceConfig()['app']; + const resourceInfo: ResourceInfo = resourceConfig()['app']; const namespace = (app.involvedObject && app.involvedObject.metadata && app.involvedObject.metadata.namespace) || ''; const name = (app.involvedObject && app.involvedObject.metadata && app.involvedObject.metadata.name) || ''; const cluster = (app.involvedObject && app.involvedObject.spec && app.involvedObject.spec.targetCluster) || ''; @@ -227,7 +233,7 @@ export async function rollbackApp([app]: History[]) { isSpecialNamespace: true }); const queryString = reduceK8sQueryString({ k8sQueryObj: queryObj }); - let rr: RequestResult = await POST({ url: url + queryString, bodyData: {}, clusterId: cluster }); + const rr: RequestResult = await POST({ url: url + queryString, bodyData: {}, clusterId: cluster }); return operationResult(rr.data, rr.error); } @@ -250,18 +256,15 @@ export async function fetchChartList(query: QueryState) { } : {}; const resourceInfo: ResourceInfo = resourceConfig()['chart']; - let opts = { resourceInfo: resourceInfo }; - if (filter.namespace) { - opts['namespace'] = filter.namespace; - opts['isSpecialNamespace'] = true; - } + const opts = { resourceInfo: { ...resourceInfo, namespaces: undefined } }; + const url = reduceK8sRestfulPath(opts); const queryString = reduceK8sQueryString({ k8sQueryObj: queryObj }); - let rr: RequestResult = await GET({ + const rr: RequestResult = await GET({ url: url + queryString, keyword }); - let objs: Chart[] = !rr.error && rr.data.items ? rr.data.items : []; + const objs: Chart[] = !rr.error && rr.data.items ? rr.data.items : []; const result: RecordSet = { recordCount: objs.length, records: objs @@ -288,7 +291,7 @@ export async function fetchChartInfo(filter: ChartInfoFilter) { isSpecialNamespace: true }); const queryString = reduceK8sQueryString({ k8sQueryObj: queryObj }); - let rr: RequestResult = await GET({ + const rr: RequestResult = await GET({ url: url + '/' + filter.chartVersion + queryString }); return rr.data; @@ -304,8 +307,8 @@ export async function fetchChartGroupList(query: QueryState) { const resourceInfo: ResourceInfo = resourceConfig()['chartgroup']; const url = reduceK8sRestfulPath({ resourceInfo }); const queryString = reduceK8sQueryString({ k8sQueryObj: queryObj }); - let rr: RequestResult = await GET({ url: url + queryString, keyword }); - let objs: ChartGroup[] = !rr.error && rr.data.items ? rr.data.items : []; + const rr: RequestResult = await GET({ url: url + queryString, keyword }); + const objs: ChartGroup[] = !rr.error && rr.data.items ? rr.data.items : []; const result: RecordSet = { recordCount: objs.length, records: objs @@ -377,11 +380,11 @@ export async function fetchPortalProjectList(query: QueryState) { }; const resourceInfo: ResourceInfo = resourceConfig()['portal']; const url = reduceK8sRestfulPath({ resourceInfo }); - let rr: RequestResult = await GET({ url }); + const rr: RequestResult = await GET({ url }); if (rr.error) { return empty; } - let items = Object.keys(rr.data.projects).map(key => { + const items = Object.keys(rr.data.projects).map(key => { return { id: key, metadata: { diff --git a/web/console/src/modules/registry/WebAPI.ts b/web/console/src/modules/registry/WebAPI.ts index fb9b4f1b7..8087c27e6 100644 --- a/web/console/src/modules/registry/WebAPI.ts +++ b/web/console/src/modules/registry/WebAPI.ts @@ -709,7 +709,7 @@ export async function fetchChartList(query: QueryState) { } : {}; const resourceInfo: ResourceInfo = resourceConfig()['chart']; - const opts = { resourceInfo: resourceInfo }; + const opts = { resourceInfo: { ...resourceInfo, namespaces: undefined } }; // if (filter.namespace) { // opts['namespace'] = filter.namespace; // opts['isSpecialNamespace'] = true; From ec17f9e100b43c3709f9570b9a5d1debd1e92f07 Mon Sep 17 00:00:00 2001 From: Leo Ryu Date: Wed, 25 Aug 2021 19:43:48 +0800 Subject: [PATCH 25/62] revert: rbac related code (#1512) * Revert "feat(auth,platform,installer): support rbac (#1254)" This reverts commit ab387453407f802eb12cdafe465714f9a65b20b5. * Revert "feat(platform): allow cross-tenant access to clusters (#1145)" This reverts commit d656744b5ffc3b9b40f2f7a05f0fa0054763637f. * Revert "fix(auth,platform): add authorization of rbac in inspectors (#1089)" This reverts commit 644dec56dc57970d425b6deef94e3b638657ff2d. --- charts/tke-auth-api/templates/configmap.yaml | 3 +- cmd/tke-auth-api/app/config/config.go | 11 +- cmd/tke-auth-api/app/server.go | 1 - cmd/tke-business-api/app/config/config.go | 7 +- .../manifests/tke-auth-api/tke-auth-api.yaml | 20 +- cmd/tke-platform-api/app/config/config.go | 7 +- docs/design-proposals/Auth RBAC.md | 134 ----------- go.mod | 21 -- go.sum | 227 +++++++----------- .../authorization/aggregation/aggregation.go | 16 +- pkg/auth/filter/filter.go | 12 +- pkg/auth/filter/inspector.go | 117 +-------- .../signals.go => registry/util/client.go} | 32 ++- pkg/registry/util/coredns.go | 3 +- pkg/util/apiclient/client.go | 14 -- 15 files changed, 124 insertions(+), 501 deletions(-) delete mode 100644 docs/design-proposals/Auth RBAC.md rename pkg/{apiserver/util/signals.go => registry/util/client.go} (54%) diff --git a/charts/tke-auth-api/templates/configmap.yaml b/charts/tke-auth-api/templates/configmap.yaml index 924415a70..198071834 100644 --- a/charts/tke-auth-api/templates/configmap.yaml +++ b/charts/tke-auth-api/templates/configmap.yaml @@ -6,8 +6,7 @@ metadata: {{- include "tke-auth-api.labels" . | nindent 4 }} data: abac-policy.json: | - {"apiVersion":"abac.authorization.kubernetes.io/v1beta1","kind":"Policy","spec":{"user":"system:kube-*|system:serviceaccount:kube-system:*","namespace":"*", "resource":"*","apiGroup":"*tkestack.io", "group": "*", "nonResourcePath":"*"}} - {"apiVersion":"abac.authorization.kubernetes.io/v1beta1","kind":"Policy","spec":{"user":"^system:serviceaccount:tke:default$","namespace":"*", "resource":"*","apiGroup":"*", "group": "*", "nonResourcePath":"*"}} + {"apiVersion":"abac.authorization.kubernetes.io/v1beta1","kind":"Policy","spec":{"user":"system:*","namespace":"*", "resource":"*","apiGroup":"*", "group": "*", "nonResourcePath":"*"}} tke-auth-api.toml: | [secure_serving] tls_cert_file = "/app/certs/tke-auth-api/tls.crt" diff --git a/cmd/tke-auth-api/app/config/config.go b/cmd/tke-auth-api/app/config/config.go index 5006c6c92..ea1813d83 100644 --- a/cmd/tke-auth-api/app/config/config.go +++ b/cmd/tke-auth-api/app/config/config.go @@ -47,7 +47,6 @@ import ( "k8s.io/apiserver/pkg/authorization/authorizer" genericapiserver "k8s.io/apiserver/pkg/server" serverstorage "k8s.io/apiserver/pkg/server/storage" - k8sinformers "k8s.io/client-go/informers" authapi "tkestack.io/tke/api/auth" authinternalclient "tkestack.io/tke/api/client/clientset/internalversion/typed/auth/internalversion" @@ -71,7 +70,6 @@ import ( "tkestack.io/tke/pkg/auth/authorization/aggregation" dexutil "tkestack.io/tke/pkg/auth/util/dex" casbinlogger "tkestack.io/tke/pkg/auth/util/logger" - "tkestack.io/tke/pkg/util/apiclient" "tkestack.io/tke/pkg/util/log" "tkestack.io/tke/pkg/util/log/dex" ) @@ -87,7 +85,6 @@ type Config struct { OIDCExternalAddress string GenericAPIServerConfig *genericapiserver.Config VersionedSharedInformerFactory versionedinformers.SharedInformerFactory - K8sSharedInformerFactory k8sinformers.SharedInformerFactory StorageFactory *serverstorage.DefaultStorageFactory DexConfig *dexserver.Config @@ -148,11 +145,6 @@ func CreateConfigFromOptions(serverName string, opts *options.Options) (*Config, } versionedInformers := versionedinformers.NewSharedInformerFactory(clientgoExternalClient, 10*time.Minute) - k8sClient, err := apiclient.BuildKubeClient() - if err != nil { - return nil, fmt.Errorf("failed to create real external clientset: %v", err) - } - k8sInformers := k8sinformers.NewSharedInformerFactory(k8sClient, 1*time.Minute) enforcer, err := setupCasbinEnforcer(opts.Authorization) if err != nil { return nil, err @@ -169,7 +161,7 @@ func CreateConfigFromOptions(serverName string, opts *options.Options) (*Config, return nil, err } - aggregateAuthz, err := aggregation.NewAuthorizer(authClient, opts.Authorization, opts.Auth, enforcer, opts.Authentication.PrivilegedUsername, k8sInformers) + aggregateAuthz, err := aggregation.NewAuthorizer(authClient, opts.Authorization, opts.Auth, enforcer, opts.Authentication.PrivilegedUsername) if err != nil { return nil, err } @@ -208,7 +200,6 @@ func CreateConfigFromOptions(serverName string, opts *options.Options) (*Config, GenericAPIServerConfig: genericAPIServerConfig, StorageFactory: storageFactory, VersionedSharedInformerFactory: versionedInformers, - K8sSharedInformerFactory: k8sInformers, DexConfig: dexConfig, DexStorage: dexConfig.Storage, CasbinEnforcer: enforcer, diff --git a/cmd/tke-auth-api/app/server.go b/cmd/tke-auth-api/app/server.go index 931da5d08..64b6cb3d7 100644 --- a/cmd/tke-auth-api/app/server.go +++ b/cmd/tke-auth-api/app/server.go @@ -41,7 +41,6 @@ func CreateServerChain(cfg *config.Config) (*genericapiserver.GenericAPIServer, apiServer.GenericAPIServer.AddPostStartHookOrDie("start-auth-api-server-informers", func(context genericapiserver.PostStartHookContext) error { cfg.VersionedSharedInformerFactory.Start(context.StopCh) - cfg.K8sSharedInformerFactory.Start(context.StopCh) return nil }) diff --git a/cmd/tke-business-api/app/config/config.go b/cmd/tke-business-api/app/config/config.go index 991d7a378..ddc8a57e3 100644 --- a/cmd/tke-business-api/app/config/config.go +++ b/cmd/tke-business-api/app/config/config.go @@ -44,7 +44,6 @@ import ( "tkestack.io/tke/pkg/auth/filter" "tkestack.io/tke/pkg/business/apiserver" controllerconfig "tkestack.io/tke/pkg/controller/config" - "tkestack.io/tke/pkg/util/log" ) const ( @@ -132,11 +131,7 @@ func CreateConfigFromOptions(serverName string, opts *options.Options) (*Config, if err != nil { return nil, err } - clusterInspector, err := filter.NewClusterInspector(platformClient.PlatformV1(), opts.Authentication.PrivilegedUsername) - if err != nil { - log.Errorf("create clusterInspector failed: %+v", err) - return nil, err - } + clusterInspector := filter.NewClusterInspector(platformClient.PlatformV1(), opts.Authentication.PrivilegedUsername) genericAPIServerConfig.BuildHandlerChainFunc = handler.BuildHandlerChain(nil, nil, []filter.Inspector{clusterInspector}) cfg := &Config{ diff --git a/cmd/tke-installer/app/installer/manifests/tke-auth-api/tke-auth-api.yaml b/cmd/tke-installer/app/installer/manifests/tke-auth-api/tke-auth-api.yaml index 06a287f3c..fb2cccc00 100644 --- a/cmd/tke-installer/app/installer/manifests/tke-auth-api/tke-auth-api.yaml +++ b/cmd/tke-installer/app/installer/manifests/tke-auth-api/tke-auth-api.yaml @@ -1,21 +1,4 @@ --- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRoleBinding -metadata: - annotations: - rbac.authorization.kubernetes.io/autoupdate: "true" - labels: - kubernetes.io/bootstrapping: rbac-defaults - name: tke-bind -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: ClusterRole - name: cluster-admin -subjects: - - kind: ServiceAccount - name: default - namespace: tke ---- kind: Service apiVersion: v1 metadata: @@ -113,8 +96,7 @@ metadata: namespace: tke data: abac-policy.json: | - {"apiVersion":"abac.authorization.kubernetes.io/v1beta1","kind":"Policy","spec":{"user":"system:kube-*|system:serviceaccount:kube-system:*","namespace":"*", "resource":"*","apiGroup":"*tkestack.io", "group": "*", "nonResourcePath":"*"}} - {"apiVersion":"abac.authorization.kubernetes.io/v1beta1","kind":"Policy","spec":{"user":"^system:serviceaccount:tke:default$","namespace":"*", "resource":"*","apiGroup":"*", "group": "*", "nonResourcePath":"*"}} + {"apiVersion":"abac.authorization.kubernetes.io/v1beta1","kind":"Policy","spec":{"user":"system:*","namespace":"*", "resource":"*","apiGroup":"*", "group": "*", "nonResourcePath":"*"}} tke-auth-api.toml: | [secure_serving] tls_cert_file = "/app/certs/server.crt" diff --git a/cmd/tke-platform-api/app/config/config.go b/cmd/tke-platform-api/app/config/config.go index 7f6c013ad..3171724c7 100644 --- a/cmd/tke-platform-api/app/config/config.go +++ b/cmd/tke-platform-api/app/config/config.go @@ -41,7 +41,6 @@ import ( "tkestack.io/tke/pkg/apiserver/util" "tkestack.io/tke/pkg/auth/filter" "tkestack.io/tke/pkg/platform/apiserver" - "tkestack.io/tke/pkg/util/log" ) const ( @@ -105,11 +104,7 @@ func CreateConfigFromOptions(serverName string, opts *options.Options) (*Config, if err != nil { return nil, fmt.Errorf("failed to create real external clientset: %v", err) } - clusterInspector, err := filter.NewClusterInspector(clientgoExternalClient.PlatformV1(), opts.Authentication.PrivilegedUsername) - if err != nil { - log.Errorf("create clusterInspector failed: %+v", err) - return nil, err - } + clusterInspector := filter.NewClusterInspector(clientgoExternalClient.PlatformV1(), opts.Authentication.PrivilegedUsername) genericAPIServerConfig.BuildHandlerChainFunc = handler.BuildHandlerChain(nil, nil, []filter.Inspector{clusterInspector}) versionedInformers := versionedinformers.NewSharedInformerFactory(clientgoExternalClient, 10*time.Minute) diff --git a/docs/design-proposals/Auth RBAC.md b/docs/design-proposals/Auth RBAC.md deleted file mode 100644 index a47545838..000000000 --- a/docs/design-proposals/Auth RBAC.md +++ /dev/null @@ -1,134 +0,0 @@ -# Auth RBAC - - -**Author**: -jason ([@wangao1236](https://github.com/wangao1236)) -mingyu ([@metang326](https://github.com/metang326)) - - -## Abstract - -目前tke不支持k8s原生的rbac鉴权模式,无法通过创建ClusterRoleBinding、ClusterRole设置clusters、clustercredentials等资源的访问权限。 - - -## Motivation - -- 支持k8s原生的rbac鉴权 - -## Main proposal - -增加一种鉴权方式,如果rbac鉴权通过则允许访问相应资源。 - -## Solution -1. 创建ClusterRoleBindings,将tke命名空间下的ServiceAccount(name:default)与ClusterRole(name:cluster-admin)进行绑定,使default能获得访问所有资源的权限。 -2. 增加k8sinformers,对Roles、RoleBindings、ClusterRoles、ClusterRoleBindings进行watch。 -3. 增加rbacAuthorizer,根据rbac进行鉴权,如有相应权限则Allowed为true -4. 由于ServiceAccount本身没有租户信息,会因为tenantID为空导致访问某些资源时会提示invalid tenantID,未进行鉴权就返回了。目前解决方法是对ServiceAccount命名时用后缀标记租户,例如-tenant-default,在代码中会对形如"system:serviceaccount:xx:xxx-tenant-xxx"的username进行解析。 - -## Test -### step 0 -在tmy这个命名空间下创建一个名为rbac-tenant-default的sa用于测试,其基本信息如下: -``` -# kubectl get sa -ntmy rbac -oyaml -apiVersion: v1 -kind: ServiceAccount -metadata: - name: rbac-tenant-default - namespace: tmy -secrets: -- name: rbac-token-5ljnn -``` -获取其对应的secret后生成一个kubeconfig文件,用于后续的测试。 -``` -kubectl get secret -ntmy rbac-token-5ljnn -oyaml -echo -n "xxx" | base64 -d -cp ~/.kube/config test.config -vim test.config -``` -test.config内容如下,其中token是上面执行echo -n "xxx" | base64 -d的结果。 -``` -apiVersion: v1 -clusters: -- cluster: - insecure-skip-tls-verify: true - server: https://127.0.0.1:6443 - name: default-cluster -contexts: -- context: - cluster: default-cluster - user: default-user - name: default-context -current-context: default-context -kind: Config -preferences: {} -users: -- name: default-user - user: - token: xxxx -``` -创建clusterrole和clusterrolebinding,允许rbac对clusters进行get、list。 -``` -# kubectl get clusterrole cls-role -o yaml -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRole -metadata: - name: cls-role -rules: -- apiGroups: - - '*' - resources: - - clusters - verbs: - - get - - list -# kubectl get clusterrolebinding cls-bind -o yaml -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRoleBinding -metadata: - name: cls-bind -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: ClusterRole - name: cls-role -subjects: -- kind: ServiceAccount - name: rbac-tenant-default - namespace: tmy -``` - -# step 1 -使用rbac的kubeconfig文件执行kubectl命令,clusters资源被授权因此可以访问;clustercredentials资源未被授权,因此不能访问。 -``` -# kubectl get clusters --kubeconfig=test.config -NAME CREATED AT -cls-mmxx4mkr 2021-04-22T03:29:24Z -global 2021-02-23T06:49:58Z -# kubectl get clustercredentials --kubeconfig=test.config -Error from server (Forbidden): clustercredentials.platform.tkestack.io is forbidden: User "system:serviceaccount:tmy:rbac-tenant-default" cannot list resource "clustercredentials" in API group "platform.tkestack.io" at the cluster scope: permission for list on clustercredentials not verify -``` - -# step 2 -通过kubectl edit clusterrole cls-role增加对clustercredentials的访问权限,修改后如下: -``` -# kubectl get clusterrole cls-role -o yaml -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRole -metadata: - name: cls-role -rules: -- apiGroups: - - '*' - resources: - - clusters - - clustercredentials - verbs: - - get - - list -``` -增加权限后,可访问clustercredentials资源。 -``` -# kubectl get clustercredentials --kubeconfig=test.config -NAME CREATED AT -cc-global 2021-02-23T06:49:58Z -cc-xsvfnrng 2021-04-22T03:29:24Z -``` diff --git a/go.mod b/go.mod index 19370b72d..d539dd27d 100644 --- a/go.mod +++ b/go.mod @@ -8,27 +8,7 @@ replace ( github.com/deislabs/oras => github.com/deislabs/oras v0.8.0 go.etcd.io/etcd => go.etcd.io/etcd v0.5.0-alpha.5.0.20200819165624-17cef6e3e9d5 google.golang.org/grpc => google.golang.org/grpc v1.26.0 - k8s.io/api => k8s.io/api v0.19.7 - k8s.io/apiextensions-apiserver => k8s.io/apiextensions-apiserver v0.19.7 - k8s.io/apimachinery => k8s.io/apimachinery v0.19.7 - k8s.io/apiserver => k8s.io/apiserver v0.19.7 - k8s.io/cli-runtime => k8s.io/cli-runtime v0.19.7 k8s.io/client-go => k8s.io/client-go v0.19.7 - k8s.io/cloud-provider => k8s.io/cloud-provider v0.19.7 - k8s.io/cluster-bootstrap => k8s.io/cluster-bootstrap v0.19.7 - k8s.io/code-generator => k8s.io/code-generator v0.19.7 - k8s.io/component-base => k8s.io/component-base v0.19.7 - k8s.io/cri-api => k8s.io/cri-api v0.19.7 - k8s.io/csi-translation-lib => k8s.io/csi-translation-lib v0.19.7 - k8s.io/kube-aggregator => k8s.io/kube-aggregator v0.19.7 - k8s.io/kube-controller-manager => k8s.io/kube-controller-manager v0.19.7 - k8s.io/kube-proxy => k8s.io/kube-proxy v0.19.7 - k8s.io/kube-scheduler => k8s.io/kube-scheduler v0.19.7 - k8s.io/kubectl => k8s.io/kubectl v0.19.7 - k8s.io/kubelet => k8s.io/kubelet v0.19.7 - k8s.io/legacy-cloud-providers => k8s.io/legacy-cloud-providers v0.19.7 - k8s.io/metrics => k8s.io/metrics v0.19.7 - k8s.io/sample-apiserver => k8s.io/sample-apiserver v0.19.7 ) require ( @@ -120,7 +100,6 @@ require ( k8s.io/kube-aggregator v0.19.7 k8s.io/kube-openapi v0.0.0-20200805222855-6aeccd4b50c6 k8s.io/kubectl v0.19.7 - k8s.io/kubernetes v1.19.7 k8s.io/metrics v0.19.7 k8s.io/utils v0.0.0-20200729134348-d5654de09c73 rsc.io/letsencrypt v0.0.3 // indirect diff --git a/go.sum b/go.sum index 2aa5fa12a..f52063f12 100644 --- a/go.sum +++ b/go.sum @@ -1,5 +1,3 @@ -bitbucket.org/bertimus9/systemstat v0.0.0-20180207000608-0eeff89b0690/go.mod h1:Ulb78X89vxKYgdL24HMTiXYHlyHEvruOj1ZPlqeNEZM= -cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU= @@ -27,7 +25,6 @@ github.com/Azure/azure-sdk-for-go v16.2.1+incompatible/go.mod h1:9XXNKU+eRnpl9mo github.com/Azure/azure-sdk-for-go v23.2.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= github.com/Azure/azure-sdk-for-go v32.4.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= github.com/Azure/azure-sdk-for-go v36.1.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= -github.com/Azure/azure-sdk-for-go v43.0.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= github.com/Azure/azure-storage-blob-go v0.8.0/go.mod h1:lPI3aLPpuLTeUwh1sViKXFxwl2B6teiRqI0deQUvsw0= github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78 h1:w+iIsaOQNcT7OZ575w+acHgRric5iCyQh+xv+KJ4HB8= github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78/go.mod h1:LmzpDX56iTiv29bbRTIsUNlaFfuhWRQBWjQdVyAevI8= @@ -64,8 +61,6 @@ github.com/DATA-DOG/go-sqlmock v1.4.1/go.mod h1:f/Ixk793poVmq4qj/V1dPUg2JEAKC73Q github.com/DATA-DOG/go-sqlmock v1.5.0 h1:Shsta01QNfFxHCfpW6YH2STWB0MudeXXEWMr20OEh60= github.com/DATA-DOG/go-sqlmock v1.5.0/go.mod h1:f/Ixk793poVmq4qj/V1dPUg2JEAKC73Q5eFN3EC/SaM= github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= -github.com/GoogleCloudPlatform/k8s-cloud-provider v0.0.0-20200415212048-7901bc822317/go.mod h1:DF8FZRxMHMGv/vP2lQP6h+dYzzjpuRn24VeRiYn3qjQ= -github.com/JeffAshton/win_pdh v0.0.0-20161109143554-76bb4ee9f0ab/go.mod h1:3VYc5hodBMJ5+l/7J4xAyMeuM2PNuepvHlGs8yilUCA= github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible h1:1G1pk05UrOh0NlF1oeaaix1x8XzrfjIDK47TY0Zehcw= github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0= github.com/MakeNowJust/heredoc v0.0.0-20170808103936-bb23615498cd h1:sjQovDkwrZp8u+gxLtPgKGjk5hCxuy2hrRejBTA9xFU= @@ -88,9 +83,8 @@ github.com/Microsoft/go-winio v0.4.14/go.mod h1:qXqCSQ3Xa7+6tgxaGTIe4Kpcdsi+P8jB github.com/Microsoft/go-winio v0.4.15-0.20190919025122-fc70bd9a86b5 h1:ygIc8M6trr62pF5DucadTWGdEB4mEyvzi0e2nbcmcyA= github.com/Microsoft/go-winio v0.4.15-0.20190919025122-fc70bd9a86b5/go.mod h1:tTuCMEN+UleMWgg9dVx4Hu52b1bJo+59jBh3ajtinzw= github.com/Microsoft/hcsshim v0.8.6/go.mod h1:Op3hHsoHPAvb6lceZHDtd9OkTew38wNoXnJs8iY7rUg= +github.com/Microsoft/hcsshim v0.8.7 h1:ptnOoufxGSzauVTsdE+wMYnCWA301PdoN4xg5oRdZpg= github.com/Microsoft/hcsshim v0.8.7/go.mod h1:OHd7sQqRFrYd3RmSgbgji+ctCwkbq2wbEYNSzOYtcBQ= -github.com/Microsoft/hcsshim v0.8.10-0.20200715222032-5eafd1556990 h1:1xpVY4dSUSbW3PcSGxZJhI8Z+CJiqbd933kM7HIinTc= -github.com/Microsoft/hcsshim v0.8.10-0.20200715222032-5eafd1556990/go.mod h1:ay/0dTb7NsG8QMDfsRfLHgZo/6xAJShLe1+ePPflihk= github.com/NYTimes/gziphandler v0.0.0-20170623195520-56545f4a5d46/go.mod h1:3wb06e3pkSAbeQ52E9H9iFoQsEEwGN64994WTCIhntQ= github.com/NYTimes/gziphandler v1.1.1 h1:ZUDjpQae29j0ryrS0u/B8HZfJBtBQHjqw2rQ2cqUQ3I= github.com/NYTimes/gziphandler v1.1.1/go.mod h1:n/CVRwUEOgIxrgPvAQhUUr9oeUtvrhMomdKFjzJNB0c= @@ -112,7 +106,6 @@ github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMx github.com/VividCortex/gohistogram v1.0.0/go.mod h1:Pf5mBqqDxYaXu3hDrrU+w6nw50o/4+TcAqDqk/vUH7g= github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5/go.mod h1:SkGFH1ia65gfNATL8TAiHDNxPzPdmEL5uirI2Uyuz6c= github.com/agnivade/levenshtein v1.0.1/go.mod h1:CURSv5d9Uaml+FovSIICkLbAUZ9S4RqaHDIsdSBg7lM= -github.com/ajstarks/svgo v0.0.0-20180226025133-644b8db467af/go.mod h1:K08gAheRH3/J6wwsYMMT4xOr94bZjxIelGM0+d/wbFw= github.com/akamai/AkamaiOPEN-edgegrid-golang v0.9.0/go.mod h1:zpDJeKyp9ScW4NNrbdr+Eyxvry3ilGPewKoXw3XGN1k= github.com/alangpierce/go-forceexport v0.0.0-20160317203124-8f1d6941cd75/go.mod h1:uAXEEpARkRhCZfEvy/y0Jcc888f9tHCc1W7/UeEtreE= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= @@ -146,14 +139,11 @@ github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a/go.mod h1:l github.com/asaskevich/govalidator v0.0.0-20200108200545-475eaeb16496/go.mod h1:oGkLhpf+kjZl6xBf758TQhh5XrAeiJv/7FRz/2spLIg= github.com/asaskevich/govalidator v0.0.0-20200428143746-21a406dcc535 h1:4daAzAu0S6Vi7/lbWECcX0j45yZReDZ56BQsrVBOEEY= github.com/asaskevich/govalidator v0.0.0-20200428143746-21a406dcc535/go.mod h1:oGkLhpf+kjZl6xBf758TQhh5XrAeiJv/7FRz/2spLIg= -github.com/auth0/go-jwt-middleware v0.0.0-20170425171159-5493cabe49f7/go.mod h1:LWMyo4iOLWXHGdBki7NIht1kHru/0wM179h+d3g8ATM= github.com/aws/aws-lambda-go v1.13.3/go.mod h1:4UKl9IzQMoD+QF79YdCuzCwp8VbmG4VAQwij/eHl5CU= -github.com/aws/aws-sdk-go v1.6.10/go.mod h1:ZRmQr0FajVIyZ4ZzBYKG5P3ZqPz9IHG41ZoMu1ADI3k= github.com/aws/aws-sdk-go v1.15.11/go.mod h1:mFuSZ37Z9YOHbQEwBWztmVzqXrEkub65tZoCYDt7FT0= github.com/aws/aws-sdk-go v1.23.0/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= github.com/aws/aws-sdk-go v1.25.48/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= github.com/aws/aws-sdk-go v1.27.0/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= -github.com/aws/aws-sdk-go v1.28.2/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= github.com/aws/aws-sdk-go v1.29.32 h1:o4I8Qc+h9ht8NXvTHeXZH3EmtSUZ/PC0bg9Wawr+aTA= github.com/aws/aws-sdk-go v1.29.32/go.mod h1:1KvfttTE3SPKMpo8g2c6jL3ZKfXtFvKscTgahTma5Xg= github.com/aws/aws-sdk-go-v2 v0.18.0/go.mod h1:JWVYvqSMppoMJC0x5wdwiImzgXTI9FuZwxzkQq9wy+g= @@ -169,7 +159,6 @@ github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+Ce github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= -github.com/bifurcation/mint v0.0.0-20180715133206-93c51c6ce115/go.mod h1:zVt7zX3K/aDCk9Tj+VM7YymsX66ERvzCJzw8rFCX2JU= github.com/bitly/go-simplejson v0.5.0 h1:6IH+V8/tVMab511d5bn4M7EwGXZf9Hj6i2xSwkNEM+Y= github.com/bitly/go-simplejson v0.5.0/go.mod h1:cXHtHw4XUPsvGaxgjIAn8PhEWG9NfngEKAMDJEczWVA= github.com/bketelsen/crypt v0.0.3-0.20200106085610-5cbc8cc4026c/go.mod h1:MKsuJmJgSg28kpZDP6UIiPt0e0Oz0kqKNGyRaWEPv84= @@ -179,7 +168,6 @@ github.com/blang/semver v3.5.1+incompatible h1:cQNTCjp13qL8KC3Nbxr/y2Bqb63oX6wdn github.com/blang/semver v3.5.1+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk= 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/boltdb/bolt v1.3.1/go.mod h1:clJnj/oiGkjum5o1McbSZDSLxVThjynRyGBgiAx27Ps= github.com/bradfitz/gomemcache v0.0.0-20190913173617-a41fca850d0b/go.mod h1:H0wQNHz2YrLsuXOZozoeDmnHXkNCRmMW0gwFWDfEZDA= github.com/brancz/gojsontoyaml v0.0.0-20191212081931-bf2969bbd742/go.mod h1:IyUJYN1gvWjtLF5ZuygmxbnsAyP3aJS6cHzIuZY50B0= github.com/brancz/kube-rbac-proxy v0.5.0/go.mod h1:cL2VjiIFGS90Cjh5ZZ8+It6tMcBt8rwvuw2J6Mamnl0= @@ -191,7 +179,6 @@ github.com/bugsnag/osext v0.0.0-20130617224835-0dd3f918b21b h1:otBG+dV+YK+Soembj github.com/bugsnag/osext v0.0.0-20130617224835-0dd3f918b21b/go.mod h1:obH5gd0BsqsP2LwDJ9aOkm/6J86V6lyAXCoQWGw3K50= github.com/bugsnag/panicwrap v0.0.0-20151223152923-e2c28503fcd0 h1:nvj0OLI3YqYXer/kZD8Ri1aaunCxIEsOst1BVJswV0o= github.com/bugsnag/panicwrap v0.0.0-20151223152923-e2c28503fcd0/go.mod h1:D/8v3kj0zr8ZAKg1AQ6crr+5VwKN5eIywRkfhyM/+dE= -github.com/caddyserver/caddy v1.0.3/go.mod h1:G+ouvOY32gENkJC+jhgl62TyhvqEsFaDiZ4uw0RzP1E= github.com/caddyserver/caddy v1.0.5 h1:5B1Hs0UF2x2tggr2X9jL2qOZtDXbIWQb9YLbmlxHSuM= github.com/caddyserver/caddy v1.0.5/go.mod h1:AnFHB+/MrgRC+mJAvuAgQ38ePzw+wKeW0wzENpdQQKY= github.com/campoy/embedmd v1.0.0/go.mod h1:oxyr9RCiSXg0M3VJ3ks0UGfp98BpSSGr0kpiX3MzVl8= @@ -199,7 +186,6 @@ github.com/casbin/casbin/v2 v2.1.2/go.mod h1:YcPU1XXisHhLzuxH9coDNf2FbKpjGlbCg3n github.com/casbin/casbin/v2 v2.2.1 h1:ijrSMfBfbQlDc4LnMTGtGYWmhKuuR6RLSQRj8vHrMzc= github.com/casbin/casbin/v2 v2.2.1/go.mod h1:YcPU1XXisHhLzuxH9coDNf2FbKpjGlbCg3n9yuLkIJQ= github.com/cenkalti/backoff v0.0.0-20181003080854-62661b46c409/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= -github.com/cenkalti/backoff v2.1.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4= github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= github.com/cenkalti/backoff/v3 v3.0.0/go.mod h1:cIeZDE3IrqwwJl6VUwCN6trj1oXrTS4rc0ij+ULvLYs= @@ -217,33 +203,22 @@ github.com/chartmuseum/auth v0.4.1 h1:vVQ5QKQpvT+UhgnnkNPopwB8QPko247FPfoTEiBYla github.com/chartmuseum/auth v0.4.1/go.mod h1:ETTinG7GaqKsWGvU0G6OBZrc+fq76uCBMOzSGkBxwVY= github.com/chartmuseum/helm-push v0.9.0 h1:hnInRU/RzPIO5HZkOpBCpUFxxEu8dT3k1R9VAVBR+g4= github.com/chartmuseum/helm-push v0.9.0/go.mod h1:zu/IQlPG84gTLsKDmGF0wnK5WiPer1y4dZNc6ooYXNA= -github.com/checkpoint-restore/go-criu/v4 v4.0.2/go.mod h1:xUQBLp4RLc5zJtWY++yjOoMoB5lihDt7fai+75m+rGw= -github.com/cheekybits/genny v0.0.0-20170328200008-9127e812e1e9/go.mod h1:+tQajlRqAUrPI7DOSpB0XAqZYtQakVtB7wXkRAgjxjQ= github.com/cheekybits/genny v1.0.0/go.mod h1:+tQajlRqAUrPI7DOSpB0XAqZYtQakVtB7wXkRAgjxjQ= github.com/choujimmy/storage v0.5.1-0.20210412121305-660c0e91489b h1:CtmmTUQ5q0FO4pLjkkLY1mbkFnMDyQDU0r0CIhun8BM= github.com/choujimmy/storage v0.5.1-0.20210412121305-660c0e91489b/go.mod h1:UtDnuHQVC5s03bSaHJHoszGc/jdxYTFaSkx8ZZ4X5og= github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= -github.com/cilium/ebpf v0.0.0-20200110133405-4032b1d8aae3/go.mod h1:MA5e5Lr8slmEg9bt0VpxxWqJlO4iwu3FBdHUzV7wQVg= -github.com/cilium/ebpf v0.0.0-20200507155900-a9f01edf17e3/go.mod h1:XT+cAw5wfvsodedcijoh1l9cf7v1x9FlFB/3VmF/O8s= -github.com/cilium/ebpf v0.0.0-20200601085316-9f1617e5c574/go.mod h1:XT+cAw5wfvsodedcijoh1l9cf7v1x9FlFB/3VmF/O8s= -github.com/cilium/ebpf v0.0.0-20200702112145-1c8d4c9ef775/go.mod h1:7cR51M8ViRLIdUjrmSXlK9pkrsDlLHbO8jiB8X8JnOc= github.com/circonus-labs/circonus-gometrics v2.3.1+incompatible/go.mod h1:nmEj6Dob7S7YxXgwXpfOuvO54S+tGdZdw9fuRZt25Ag= github.com/circonus-labs/circonusllhist v0.1.3/go.mod h1:kMXHVDlOchFAehlya5ePtbp5jckzBHf4XRpQvBOLI+I= github.com/clbanning/x2j v0.0.0-20191024224557-825249438eec/go.mod h1:jMjuTZXRI4dUb/I5gc9Hdhagfvm9+RyrPryS/auMzxE= github.com/cloudflare/cloudflare-go v0.10.2/go.mod h1:qhVI5MKwBGhdNU89ZRz2plgYutcJ5PCekLxXn56w6SY= -github.com/clusterhq/flocker-go v0.0.0-20160920122132-2b8b7259d313/go.mod h1:P1wt9Z3DP8O6W3rvwCt0REIlshg1InHImaLW0t3ObY0= github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa h1:OaNxuTZr7kxeODyLWsRMC+OD03aFUH+mW6r2d+MWa5Y= github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8= github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI= -github.com/codegangsta/negroni v1.0.0/go.mod h1:v0y3T5G7Y1UlFfyxFn/QLRU4a2EuNau2iZY63YTKWo0= -github.com/container-storage-interface/spec v1.2.0/go.mod h1:6URME8mwIBbpVyZV93Ce5St17xBiQJQY67NDsuohiy4= +github.com/containerd/cgroups v0.0.0-20190919134610-bf292b21730f h1:tSNMc+rJDfmYntojat8lljbt1mgKNpTxUZJsSzJ9Y1s= github.com/containerd/cgroups v0.0.0-20190919134610-bf292b21730f/go.mod h1:OApqhQ4XNSNC13gXIwDjhOQxjWa/NxkwZXJ1EvqT0ko= -github.com/containerd/cgroups v0.0.0-20200531161412-0dbf7f05ba59 h1:qWj4qVYZ95vLWwqyNJCQg7rDsG5wPdze0UaPolH7DUk= -github.com/containerd/cgroups v0.0.0-20200531161412-0dbf7f05ba59/go.mod h1:pA0z1pT8KYB3TCXK/ocprsh7MAkoW8bZVzPdih9snmM= github.com/containerd/console v0.0.0-20180822173158-c12b1e7919c1/go.mod h1:Tj/on1eG8kiEhd0+fhSDzsPAFESxzBBvdyEgyryXffw= -github.com/containerd/console v1.0.0/go.mod h1:8Pf4gM6VEbTNRIT26AyyU7hxdQU3MvAvxVI0sc00XBE= github.com/containerd/containerd v1.4.3 h1:ijQT13JedHSHrQGWFcGEwzcNKrAGIiZ+jSD5QQG07SY= github.com/containerd/containerd v1.4.3/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= github.com/containerd/continuity v0.0.0-20190426062206-aaeac12a7ffc/go.mod h1:GL3xCUCBDV3CZiTSEKksMWbLE66hEyuu9qyDOOqM47Y= @@ -252,14 +227,12 @@ github.com/containerd/continuity v0.0.0-20190827140505-75bee3e2ccb6/go.mod h1:GL github.com/containerd/fifo v0.0.0-20190226154929-a9fb20d87448/go.mod h1:ODA38xgv3Kuk8dQz2ZQXpnv/UZZUHUCL7pnLehbXgQI= github.com/containerd/go-runc v0.0.0-20180907222934-5a6d9f37cfa3/go.mod h1:IV7qH3hrUgRmyYrtgEeGWJfWbgcHL9CSRruz2Vqcph0= github.com/containerd/ttrpc v0.0.0-20190828154514-0e0f228740de/go.mod h1:PvCDdDGpgqzQIzDW1TphrGLssLDZp2GuS+X5DkEJB8o= -github.com/containerd/ttrpc v1.0.0/go.mod h1:PvCDdDGpgqzQIzDW1TphrGLssLDZp2GuS+X5DkEJB8o= github.com/containerd/typeurl v0.0.0-20180627222232-a93fcdb778cd/go.mod h1:Cm3kwCdlkCfMSHURc+r6fwoGH6/F1hH3S4sg0rLFWPc= -github.com/containerd/typeurl v1.0.0/go.mod h1:Cm3kwCdlkCfMSHURc+r6fwoGH6/F1hH3S4sg0rLFWPc= -github.com/containernetworking/cni v0.8.0/go.mod h1:LGwApLUm2FpoOfxTDEeq8T9ipbpZ61X79hmU3w8FmsY= -github.com/coredns/corefile-migration v1.0.10/go.mod h1:RMy/mXdeDlYwzt0vdMEJvT2hGJ2I86/eO0UdXmH9XNI= +github.com/coreos/bbolt v1.3.1-coreos.6/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk= github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk= github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= github.com/coreos/etcd v3.3.13+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= +github.com/coreos/etcd v3.3.15+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk= github.com/coreos/go-oidc v2.1.0+incompatible/go.mod h1:CgnwVTmzoESiwO9qyAFEMiHoZ1nMCKZlZ9V6mm3/LKc= github.com/coreos/go-oidc v2.2.1+incompatible h1:mh48q/BqXqgjVHpy2ZY7WnWAbenxRjsz9N1i1YxjHAk= @@ -271,9 +244,8 @@ github.com/coreos/go-systemd v0.0.0-20180511133405-39ca1b05acc7/go.mod h1:F5haX7 github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= github.com/coreos/go-systemd v0.0.0-20190719114852-fd7a80b32e1f h1:JOrtw2xFKzlg+cbHpyrpLDmnN1HqhBfnX7WDiW7eG2c= github.com/coreos/go-systemd v0.0.0-20190719114852-fd7a80b32e1f/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= -github.com/coreos/go-systemd/v22 v22.0.0/go.mod h1:xO0FLkIi5MaZafQlIrOotqXZ90ih+1atmu1JpKERPPk= -github.com/coreos/go-systemd/v22 v22.1.0/go.mod h1:xO0FLkIi5MaZafQlIrOotqXZ90ih+1atmu1JpKERPPk= github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= +github.com/coreos/pkg v0.0.0-20180108230652-97fdf19511ea/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f h1:lBNOc5arjvs8E5mO2tbpBpLoyyu8B6e44T7hJy6potg= github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= github.com/coreos/prometheus-operator v0.38.1-0.20200506070354-4231c1d4b313 h1:xdfS8GSfsbtwjZxJRAxhZD8cvK6BA+C+py522U/awSk= @@ -315,11 +287,11 @@ github.com/docker/distribution v2.7.1-0.20190205005809-0d3efadf0154+incompatible github.com/docker/distribution v2.7.1+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= github.com/docker/distribution v2.7.2-0.20200708230840-70e0022e42fd+incompatible h1:CapxIe8ZVnS8n7c/rSdMeCfccBch6N08ecuyn/FqiVY= github.com/docker/distribution v2.7.2-0.20200708230840-70e0022e42fd+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= +github.com/docker/docker v0.7.3-0.20190327010347-be7ac8be2ae0/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= github.com/docker/docker v0.7.3-0.20190506211059-b20a14b54661/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= github.com/docker/docker v0.7.3-0.20190826074503-38ab9da00309/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= +github.com/docker/docker v1.4.2-0.20200203170920-46ec8731fbce h1:KXS1Jg+ddGcWA8e1N7cupxaHHZhit5rB9tfDU+mfjyY= github.com/docker/docker v1.4.2-0.20200203170920-46ec8731fbce/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= -github.com/docker/docker v1.4.2-0.20200309214505-aa6a9891b09c h1:zviRyz1SWO8+WVJbi9/jlJCkrsZ54r/lTRbgtcaQhLs= -github.com/docker/docker v1.4.2-0.20200309214505-aa6a9891b09c/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= github.com/docker/docker-credential-helpers v0.6.3 h1:zI2p9+1NQYdnG6sMU26EX4aVGlqbInSQxQXLvzJ4RPQ= github.com/docker/docker-credential-helpers v0.6.3/go.mod h1:WRaJzqw3CTB9bk10avuGsjVBZsD05qeibJ1/TYlvc0Y= github.com/docker/go-connections v0.4.0 h1:El9xVISelRB7BuFusrZozjnkIM5YnzCViNKohAFqRJQ= @@ -347,6 +319,7 @@ github.com/elastic/go-sysinfo v1.0.1/go.mod h1:O/D5m1VpYLwGjCYzEt63g3Z1uO3jXfwyz github.com/elastic/go-sysinfo v1.1.1/go.mod h1:i1ZYdU10oLNfRzq4vq62BEwD2fH8KaWh6eh0ikPT9F0= github.com/elastic/go-windows v1.0.0/go.mod h1:TsU0Nrp7/y3+VwE82FoZF8gC/XFg/Elz6CcloAxnPgU= github.com/elastic/go-windows v1.0.1/go.mod h1:FoVvqWSun28vaDQPbj2Elfc0JahhPB7WQEGa3c814Ss= +github.com/elazarl/goproxy v0.0.0-20170405201442-c4fc26588b6e/go.mod h1:/Zj4wYkgs4iZTTu3o/KG3Itv/qCCa8VVMlb3i9OVuzc= github.com/elazarl/goproxy v0.0.0-20180725130230-947c36da3153 h1:yUdfgN0XgIJw7foRItutHYUIhlcKzcSf5vDpdhQAKTc= github.com/elazarl/goproxy v0.0.0-20180725130230-947c36da3153/go.mod h1:/Zj4wYkgs4iZTTu3o/KG3Itv/qCCa8VVMlb3i9OVuzc= github.com/emicklei/go-restful v0.0.0-20170410110728-ff4f55a20633/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs= @@ -355,8 +328,8 @@ github.com/emicklei/go-restful v2.11.1+incompatible h1:CjKsv3uWcCMvySPQYKxO8XX3f github.com/emicklei/go-restful v2.11.1+incompatible/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= -github.com/euank/go-kmsg-parser v2.0.0+incompatible/go.mod h1:MhmAMZ8V4CYH4ybgdRwPr2TU5ThnS43puaKEMpja1uw= github.com/evanphx/json-patch v0.0.0-20200808040245-162e5629780b/go.mod h1:NAJj0yf/KaRKURN6nyi7A9IZydMivZEm9oQLWNjfKDc= +github.com/evanphx/json-patch v4.2.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= github.com/evanphx/json-patch v4.5.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= github.com/evanphx/json-patch v4.9.0+incompatible h1:kLcOMZeuLAJvL2BPWLMIj5oaZQobrkAqrL+WFZwQses= github.com/evanphx/json-patch v4.9.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= @@ -372,7 +345,6 @@ github.com/fatih/structtag v1.1.0/go.mod h1:mBJUNpUnHmRKrKlQQlmCrh5PuhftFbNv8Ys4 github.com/felixge/httpsnoop v1.0.1 h1:lvB5Jl89CsZtGIWuTcDM1E/vkVs49/Ml7JJe07l8SPQ= github.com/felixge/httpsnoop v1.0.1/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= -github.com/fogleman/gg v1.2.1-0.20190220221249-0403632d5b90/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k= github.com/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g= github.com/franela/goblin v0.0.0-20200105215937-c9ffbefa60db/go.mod h1:7dvUGVsVBjqR7JHJk0brhHOZYGmfBYOrK0ZhYMEtBr4= github.com/franela/goreq v0.0.0-20171204163338-bcd34c9993f8/go.mod h1:ZhphrRTfi2rbfLwlschooIH4+wKKDR4Pdxhh+TRoA20= @@ -393,15 +365,12 @@ github.com/gin-gonic/gin v1.5.0 h1:fi+bqFAx/oLK54somfCtEZs9HeH1LHVoEPUgARpTqyc= github.com/gin-gonic/gin v1.5.0/go.mod h1:Nd6IXA8m5kNZdNEHMBd93KT+mdY3+bewLgRvmCsR2Do= github.com/globalsign/mgo v0.0.0-20180905125535-1ca0a4f7cbcb/go.mod h1:xkRDCp4j0OGD1HRkm4kmhM+pmpv3AKq5SU7GMg4oO/Q= github.com/globalsign/mgo v0.0.0-20181015135952-eeefdecb41b8/go.mod h1:xkRDCp4j0OGD1HRkm4kmhM+pmpv3AKq5SU7GMg4oO/Q= -github.com/go-acme/lego v2.5.0+incompatible/go.mod h1:yzMNe9CasVUhkquNvti5nAtPmG94USbYxYrZfTkIn0M= github.com/go-acme/lego/v3 v3.1.0/go.mod h1:074uqt+JS6plx+c9Xaiz6+L+GBb+7itGtzfcDM2AhEE= github.com/go-acme/lego/v3 v3.2.0/go.mod h1:074uqt+JS6plx+c9Xaiz6+L+GBb+7itGtzfcDM2AhEE= -github.com/go-bindata/go-bindata v3.1.1+incompatible/go.mod h1:xK8Dsgwmeed+BBsSy2XTopBn/8uK2HWuGSnA11C3Joo= github.com/go-cmd/cmd v1.0.5/go.mod h1:y8q8qlK5wQibcw63djSl/ntiHUHXHGdCkPk0j4QeW4s= github.com/go-errors/errors v1.0.1/go.mod h1:f4zRHt4oKfwPJE5k8C9vpYG+aDHdBFUsgrm6/TyX73Q= github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= -github.com/go-ini/ini v1.9.0/go.mod h1:ByCAeIL28uOIIG0E3PJtZPDL8WnHpFKFOtgjp+3Ies8= github.com/go-ini/ini v1.25.4/go.mod h1:ByCAeIL28uOIIG0E3PJtZPDL8WnHpFKFOtgjp+3Ies8= github.com/go-ini/ini v1.44.0/go.mod h1:ByCAeIL28uOIIG0E3PJtZPDL8WnHpFKFOtgjp+3Ies8= github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= @@ -478,7 +447,6 @@ github.com/go-openapi/validate v0.17.2/go.mod h1:Uh4HdOzKt19xGIGm1qHf/ofbX1YQ4Y+ github.com/go-openapi/validate v0.18.0/go.mod h1:Uh4HdOzKt19xGIGm1qHf/ofbX1YQ4Y+MYsct2VUrAJ4= github.com/go-openapi/validate v0.19.2/go.mod h1:1tRCw7m3jtI8eNWEEliiAqUIcBztB2KDnRCRMUi7GTA= github.com/go-openapi/validate v0.19.5/go.mod h1:8DJv2CVJQ6kGNpFW6eV9N3JviE1C85nY1c2z52x1Gk4= -github.com/go-ozzo/ozzo-validation v3.5.0+incompatible/go.mod h1:gsEKFIVnabGBt6mXmxK0MoFy+cZoTJY6mu5Ll3LVLBU= github.com/go-playground/locales v0.12.1 h1:2FITxuFt/xuCNP1Acdhv62OzaCiviiE4kotfhkmOqEc= github.com/go-playground/locales v0.12.1/go.mod h1:IUMDtCfWo/w/mtMfIE/IG2K+Ey3ygWanZIBtBW0W2TM= github.com/go-playground/universal-translator v0.16.0 h1:X++omBR/4cE2MNg91AoC3rmGrCjJ8eAeUP/K/EKx4DM= @@ -505,7 +473,6 @@ github.com/gobuffalo/packr/v2 v2.7.1/go.mod h1:qYEvAazPaVxy7Y7KR0W8qYEE+RymX74kE github.com/gobwas/glob v0.2.3 h1:A4xDbljILXROh+kObIiy5kIaPYD8e96x1tgBhUI5J+Y= github.com/gobwas/glob v0.2.3/go.mod h1:d3Ez4x06l9bZtSvzIay5+Yzi0fmZzPgnTbPcKjJAkT8= github.com/godbus/dbus v0.0.0-20190422162347-ade71ed3457e/go.mod h1:bBOAhwG1umN6/6ZUMtDFBMQR8jRg9O75tm9K00oMsK4= -github.com/godbus/dbus/v5 v5.0.3/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= github.com/godror/godror v0.13.3/go.mod h1:2ouUT4kdhUBk7TAkHWD4SN0CdI0pgEQbo8FVHhbSKWg= github.com/gofrs/flock v0.7.1/go.mod h1:F1TvTiK9OcQqauNUHlbJvyl9Qa1QvF/gOUDKA14jxHU= github.com/gofrs/flock v0.8.0/go.mod h1:F1TvTiK9OcQqauNUHlbJvyl9Qa1QvF/gOUDKA14jxHU= @@ -514,13 +481,13 @@ github.com/gofrs/uuid v3.2.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRx github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= github.com/gogo/protobuf v1.2.0/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4= +github.com/gogo/protobuf v1.2.2-0.20190723190241-65acae22fc9d/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= github.com/gogo/protobuf v1.2.2-0.20190730201129-28a6bbf47e48/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= github.com/gogo/protobuf v1.3.0/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= github.com/gogo/protobuf v1.3.1 h1:DqDEcV5aeaTmdFBePNpYsp3FlcVH/2ISVVM9Qf8PSls= github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= github.com/goji/httpauth v0.0.0-20160601135302-2da839ab0f4d/go.mod h1:nnjvkQ9ptGaCkuDUx6wNykzzlUixGxvkme+H/lnzb+A= github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe/go.mod h1:8vg3r2VgvsThLBIFL93Qb5yWzgyZWhEmBwUJWevAkK0= -github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b h1:VKtxabqXZkF25pY9ekfRL6a582T4P37/31XEstQ5p58= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= @@ -559,7 +526,6 @@ github.com/gomodule/redigo v2.0.0+incompatible/go.mod h1:B4C85qUVwatsJoIUNIfCRsp github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.0.0 h1:0udJVsspx3VBr5FwtLhQQtuAsVc79tTq0ocGIPAU6qo= github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= -github.com/google/cadvisor v0.37.3/go.mod h1:BalYQhwl2UV8lpB3oFssiaW8Uj6sqfFDxw5nEs9sBgU= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= @@ -586,11 +552,12 @@ github.com/googleapis/gax-go v2.0.2+incompatible/go.mod h1:SFVmujtThgffbyetf+mdk github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= github.com/googleapis/gax-go/v2 v2.0.5 h1:sjZBwGj9Jlw33ImPtvFviGYvseOtDM7hkSKB7+Tv3SM= github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= +github.com/googleapis/gnostic v0.0.0-20170426233943-68f4ded48ba9/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY= github.com/googleapis/gnostic v0.0.0-20170729233727-0c5108395e2d/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY= +github.com/googleapis/gnostic v0.1.0/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY= github.com/googleapis/gnostic v0.3.1/go.mod h1:on+2t9HRStVgn95RSsFWFz+6Q0Snyqv1awfrALZdbtU= github.com/googleapis/gnostic v0.4.1 h1:DLJCy1n/vrD4HPjOvYcT8aYQXpPIzoRZONaYwyycI+I= github.com/googleapis/gnostic v0.4.1/go.mod h1:LRhVm6pbyptWbWbuZ38d1eyptfvIytN3ir6b65WBswg= -github.com/gophercloud/gophercloud v0.1.0/go.mod h1:vxM41WHh5uqHVBMZHzuwNOHh8XEoIEcSTewFxm1c5g8= github.com/gophercloud/gophercloud v0.3.0/go.mod h1:vxM41WHh5uqHVBMZHzuwNOHh8XEoIEcSTewFxm1c5g8= github.com/gophercloud/gophercloud v0.6.0/go.mod h1:GICNByuaEBibcjmjvI7QvYJSZEbGkcYwAR7EZK2WMqM= github.com/gophercloud/gophercloud v0.9.0 h1:eJHQQFguQRv2FatH2d2VXH2ueTe2XzjgjwFjFS7SGcs= @@ -614,12 +581,14 @@ github.com/gosuri/uitable v0.0.4 h1:IG2xLKRvErL3uhY6e1BylFzG+aJiwQviDDTfOKeKTpY= github.com/gosuri/uitable v0.0.4/go.mod h1:tKR86bXuXPZazfOTG1FIzvjIdXzd0mo4Vtn16vt0PJo= github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7 h1:pdN6V1QBWetyv/0+wjACpqVH+eVULgEjkurDLq3goeM= github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= +github.com/grpc-ecosystem/go-grpc-middleware v0.0.0-20190222133341-cfaf5686ec79/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= github.com/grpc-ecosystem/go-grpc-middleware v1.0.1-0.20190118093823-f849b5445de4/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= github.com/grpc-ecosystem/go-grpc-middleware v1.1.0 h1:THDBEeQ9xZ8JEaCLyLQqXMMdRqNr0QAUJTIkQAUtFjg= github.com/grpc-ecosystem/go-grpc-middleware v1.1.0/go.mod h1:f5nM7jw/oeRSadq3xCzHAvxcr8HZnzsqU6ILg/0NiiE= github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0 h1:Ovs26xHkKqVztRpIrF/92BcuyuQ/YW4NSIpoGtfXNho= github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= +github.com/grpc-ecosystem/grpc-gateway v1.3.0/go.mod h1:RSKVYQBd5MCa4OVpNdGskqpgL2+G+NZTnrVHpWWfpdw= github.com/grpc-ecosystem/grpc-gateway v1.8.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= github.com/grpc-ecosystem/grpc-gateway v1.9.4/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= @@ -654,7 +623,6 @@ github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/b github.com/hashicorp/go-version v1.1.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= github.com/hashicorp/go-version v1.2.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= github.com/hashicorp/go.net v0.0.1/go.mod h1:hjKkEWcCURg++eb33jQU7oqQcI9XDCnUzHA0oac0k90= -github.com/hashicorp/golang-lru v0.0.0-20180201235237-0fb14efe8c47/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= 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 h1:YPkqC67at8FYaadspW/6uE0COsBxS2656RLEr8Bppgk= @@ -668,8 +636,6 @@ github.com/hashicorp/memberlist v0.1.4/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2p github.com/hashicorp/memberlist v0.1.5/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2pPBoIllUwCN7I= github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc= github.com/hashicorp/serf v0.8.5/go.mod h1:UpNcs7fFbpKIyZaUuSW6EPiH+eZC7OuyFD+wc1oal+k= -github.com/heketi/heketi v9.0.1-0.20190917153846-c2e2a4ab7ab9+incompatible/go.mod h1:bB9ly3RchcQqsQ9CpyaQwvva7RS5ytVoSoholZQON6o= -github.com/heketi/tests v0.0.0-20151005000721-f3775cbcefd6/go.mod h1:xGMAM8JLi7UkZt1i4FQeQy0R2T8GLUwQhOP5M1gBhy4= github.com/howeyc/fsnotify v0.9.0 h1:0gtV5JmOKH4A8SsFxG2BczSeXWWPvcMT0euZt5gDAxY= github.com/howeyc/fsnotify v0.9.0/go.mod h1:41HzSPxBGeFRQKEEwgh49TRw/nKBsYZ2cF1OzPjSJsA= github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI= @@ -690,7 +656,6 @@ github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANyt github.com/influxdata/influxdb v1.7.7/go.mod h1:qZna6X/4elxqT3yI9iZYdZrWWdeFOOprn86kgg4+IzY= github.com/influxdata/influxdb1-client v0.0.0-20191209144304-8bf82d3c094d h1:/WZQPMZNsjZ7IlCpsLGdQBINg5bxKQ1K1sh6awxLtkA= github.com/influxdata/influxdb1-client v0.0.0-20191209144304-8bf82d3c094d/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo= -github.com/ishidawataru/sctp v0.0.0-20190723014705-7c296d48a2b5/go.mod h1:DM4VvS+hD/kDi1U1QsX2fnZowwBhqD0Dk3bRPKF/Oc8= github.com/jessevdk/go-flags v0.0.0-20180331124232-1c38ed7ad0cc/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= github.com/jimstudt/http-authentication v0.0.0-20140401203705-3eca13d6893a/go.mod h1:wK6yTYYcgjHE1Z1QtXACPDjcFJyBskHEdagmnq3vsP8= @@ -724,8 +689,6 @@ github.com/jtolds/gls v4.20.0+incompatible h1:xdiiI2gbIgH/gLH7ADydsJ1uDOEzR8yvV7 github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM= -github.com/jung-kurt/gofpdf v1.0.3-0.20190309125859-24315acbbda5/go.mod h1:7Id9E/uU8ce6rXgefFLlgrJj/GYY22cpxn+r32jIOes= -github.com/karrick/godirwalk v1.7.5/go.mod h1:2c9FRhkDxdIbgkOnCEvnSWs71Bhugbl46shStcFDJ34= github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= @@ -763,7 +726,6 @@ github.com/lib/pq v1.3.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= github.com/lib/pq v1.7.0/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= github.com/lib/pq v1.8.0 h1:9xohqzkUwzR4Ga4ivdTcawVS89YSDVxXMa3xJX3cGzg= github.com/lib/pq v1.8.0/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= -github.com/libopenstorage/openstorage v1.0.0/go.mod h1:Sp1sIObHjat1BeXhfMqLZ14wnOzEhNx2YQedreMcUyc= github.com/liggitt/tabwriter v0.0.0-20181228230101-89fcab3d43de h1:9TO3cAIGXtEhnIaL+V+BEER86oLrvS+kWobKpbJuye0= github.com/liggitt/tabwriter v0.0.0-20181228230101-89fcab3d43de/go.mod h1:zAbeS9B/r2mtpb6U+EI2rYA5OAXxsYw6wTamcNW+zcE= github.com/lightstep/lightstep-tracer-common/golang/gogo v0.0.0-20190605223551-bc2310a04743/go.mod h1:qklhhLq1aX+mtWk9cPHPzaBjWImj5ULL6C7HFJtXQMM= @@ -773,12 +735,7 @@ github.com/linode/linodego v0.10.0/go.mod h1:cziNP7pbvE3mXIPneHj0oRY8L1WtGEIKlZ8 github.com/liquidweb/liquidweb-go v1.6.0/go.mod h1:UDcVnAMDkZxpw4Y7NOHkqoeiGacVLEIG/i5J9cyixzQ= github.com/lithammer/dedent v1.1.0/go.mod h1:jrXYCQtgg0nJiN+StA2KgR7w6CiQNv9Fd/Z9BP0jIOc= github.com/lovoo/gcloud-opentracing v0.3.0/go.mod h1:ZFqk2y38kMDDikZPAK7ynTTGuyt17nSPdS3K5e+ZTBY= -github.com/lpabon/godbc v0.1.1/go.mod h1:Jo9QV0cf3U6jZABgiJ2skINAXb9j8m51r07g4KI92ZA= -github.com/lucas-clemente/aes12 v0.0.0-20171027163421-cd47fb39b79f/go.mod h1:JpH9J1c9oX6otFSgdUHwUBUizmKlrMjxWnIAjff4m04= -github.com/lucas-clemente/quic-clients v0.1.0/go.mod h1:y5xVIEoObKqULIKivu+gD/LU90pL73bTdtQjPBvtCBk= -github.com/lucas-clemente/quic-go v0.10.2/go.mod h1:hvaRS9IHjFLMq76puFJeWNfmn+H70QZ/CXoxqw9bzao= github.com/lucas-clemente/quic-go v0.13.1/go.mod h1:Vn3/Fb0/77b02SGhQk36KzOUmXgVpFfizUfW5WMaqyU= -github.com/lucas-clemente/quic-go-certificates v0.0.0-20160823095156-d2f86524cced/go.mod h1:NCcRLrOTZbzhZvixZLlERbJtDtYsmMw8Jc4vS8Z0g58= github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/magiconair/properties v1.8.1 h1:ZC2Vc7/ZFkGmsVC9KvOjumD+G5lXy2RtTKyzRKO2BQ4= github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= @@ -792,7 +749,6 @@ github.com/mailru/easyjson v0.7.0/go.mod h1:KAzv3t3aY1NaHWoQz1+4F1ccyAH66Jk7yos7 github.com/marstr/guid v1.1.0/go.mod h1:74gB1z2wpxxInTG6yaqA7KrtM0NZ+RbrcqDvYHefzho= github.com/marten-seemann/chacha20 v0.2.0/go.mod h1:HSdjFau7GzYRj+ahFNwsO3ouVJr1HFkWoEwNDb4TMtE= github.com/marten-seemann/qpack v0.1.0/go.mod h1:LFt1NU/Ptjip0C2CPkhimBz5CGE3WGDAUWqna+CNTrI= -github.com/marten-seemann/qtls v0.2.3/go.mod h1:xzjG7avBwGGbdZ8dTGxlBnLArsVKLvwmjgmPuiQEcYk= github.com/marten-seemann/qtls v0.4.1/go.mod h1:pxVXcHHw1pNIt8Qo0pwSYQEoZ8yYOOPXTCZLQQunvRc= github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= github.com/mattn/go-colorable v0.1.2 h1:/bC9yWikZXAL9uJdulbSfyVNIR3n3trXl+v8+1sx8mU= @@ -821,17 +777,12 @@ github.com/mattn/go-tty v0.0.0-20180219170247-931426f7535a/go.mod h1:XPvLUNfbS4f 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/mholt/certmagic v0.6.2-0.20190624175158-6a42ef9fe8c2/go.mod h1:g4cOPxcjV0oFq3qwpjSA30LReKD8AoIfwAY9VvG35NY= github.com/mholt/certmagic v0.8.3/go.mod h1:91uJzK5K8IWtYQqTi5R2tsxV1pCde+wdGfaRaOZi6aQ= github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= -github.com/miekg/dns v1.1.3/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= -github.com/miekg/dns v1.1.4/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= github.com/miekg/dns v1.1.15/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= github.com/miekg/dns v1.1.22/go.mod h1:bPDLeHnStXmXAq1m/Ch/hvfNHr14JKNPMBo3VZKjuso= -github.com/mindprince/gonvml v0.0.0-20190828220739-9ebdce4bb989/go.mod h1:2eu9pRWp8mo84xCg6KswZ+USQHjwgRhNp06sozOdsTY= github.com/minio/minio-go/v6 v6.0.49/go.mod h1:qD0lajrGW49lKZLtXKtCB4X/qkMf0a5tBvN2PaZg7Gg= github.com/minio/sha256-simd v0.1.1/go.mod h1:B5e1o+1/KgNmWrSQK08Y6Z1Vb5pwIktudl0J58iy0KM= -github.com/mistifyio/go-zfs v2.1.2-0.20190413222219-f784269be439+incompatible/go.mod h1:8AuVvqP/mXw1px98n46wfvcGfQ4ci2FwoAjKYxuo3Z4= github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc= github.com/mitchellh/copystructure v1.0.0 h1:Laisrj+bAB6b/yJwB5Bt3ITZhGJdqmxquMKeZ+mmkFQ= github.com/mitchellh/copystructure v1.0.0/go.mod h1:SNtv71yrdKgLRyLFxmLdkAbkKEFWgYaq1OVrnRcwhnw= @@ -851,8 +802,6 @@ github.com/mitchellh/osext v0.0.0-20151018003038-5e2d6d41470f h1:2+myh5ml7lgEU/5 github.com/mitchellh/osext v0.0.0-20151018003038-5e2d6d41470f/go.mod h1:OkQIRizQZAeMln+1tSwduZz7+Af5oFlKirV/MSYes2A= github.com/mitchellh/reflectwalk v1.0.0 h1:9D+8oIskB4VJBN5SFlmc27fSlIBZaov1Wpk/IfikLNY= github.com/mitchellh/reflectwalk v1.0.0/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= -github.com/moby/ipvs v1.0.1/go.mod h1:2pngiyseZbIKXNv7hsKj3O9UEz30c53MT9005gt2hxQ= -github.com/moby/sys/mountinfo v0.1.3/go.mod h1:w2t2Avltqx8vE7gX5l+QiBKxODu2TX0+Syr3h52Tw4o= github.com/moby/term v0.0.0-20200312100748-672ec06f55cd h1:aY7OQNf2XqY/JQ6qREWamhI/81os/agb2BAGpcx5yWI= github.com/moby/term v0.0.0-20200312100748-672ec06f55cd/go.mod h1:DdlQx2hp0Ss5/fLikoLlEeIYiATotOjgB//nb973jeo= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= @@ -862,7 +811,6 @@ github.com/modern-go/reflect2 v0.0.0-20180320133207-05fbef0ca5da/go.mod h1:bx2lN github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/modern-go/reflect2 v1.0.1 h1:9f412s+6RmYXLWZSEzVVgPGK7C2PphHj5RJrvfx9AWI= github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= -github.com/mohae/deepcopy v0.0.0-20170603005431-491d3605edfb/go.mod h1:TaXosZuwdSHYgviHp1DAtfrULt5eUgsSMsZf+YrPgl8= github.com/morikuni/aec v0.0.0-20170113033406-39771216ff4c/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7PXmsc= github.com/morikuni/aec v1.0.0 h1:nP9CBfwrvYnBRgY6qfDQkygYDmYwOilePFkwzv4dU8A= github.com/morikuni/aec v1.0.0/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7PXmsc= @@ -871,12 +819,9 @@ github.com/moul/http2curl v1.0.0/go.mod h1:8UbvGypXm98wA/IqH45anm5Y2Z6ep6O31QGOA github.com/mozillazg/go-cos v0.13.0/go.mod h1:Zp6DvvXn0RUOXGJ2chmWt2bLEqRAnJnS3DnAZsJsoaE= github.com/mozillazg/go-httpheader v0.2.1 h1:geV7TrjbL8KXSyvghnFm+NyTux/hxwueTSrwhe88TQQ= github.com/mozillazg/go-httpheader v0.2.1/go.mod h1:jJ8xECTlalr6ValeXYdOF8fFUISeBAdw6E61aqQma60= -github.com/mrunalp/fileutils v0.0.0-20171103030105-7d4729fb3618/go.mod h1:x8F1gnqOkIEiO4rqoeEEEqQbo7HjGMTvyoq3gej4iT0= -github.com/mrunalp/fileutils v0.0.0-20200520151820-abd8a0e76976/go.mod h1:x8F1gnqOkIEiO4rqoeEEEqQbo7HjGMTvyoq3gej4iT0= github.com/munnerz/goautoneg v0.0.0-20120707110453-a547fc61f48d/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= -github.com/mvdan/xurls v1.1.0/go.mod h1:tQlNn3BED8bE/15hnSL2HLkDeLWpNPAwtw7wkEq44oU= github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f h1:KUppIJq7/+SVif2QVs3tOP0zanoHgBEVAwHxUSIzRqU= github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= @@ -909,6 +854,7 @@ github.com/onsi/ginkgo v1.4.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+W github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.8.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/ginkgo v1.10.1/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.10.3/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.11.0 h1:JAKSXpt1YjtLA7YpPiqO9ss6sNXEsPfSGdwN0UHqzrw= github.com/onsi/ginkgo v1.11.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= @@ -930,16 +876,10 @@ github.com/opencontainers/image-spec v1.0.0/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zM github.com/opencontainers/image-spec v1.0.1 h1:JMemWkRwHx4Zj+fVxWoMCFm/8sYGGrUVojFA6h/TRcI= github.com/opencontainers/image-spec v1.0.1/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0= github.com/opencontainers/runc v0.0.0-20190115041553-12f6a991201f/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U= +github.com/opencontainers/runc v0.1.1 h1:GlxAyO6x8rfZYN9Tt0Kti5a/cP41iuiO2yYT0IJGY8Y= github.com/opencontainers/runc v0.1.1/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U= -github.com/opencontainers/runc v1.0.0-rc90.0.20200616040943-82d2fa4eb069/go.mod h1:3Sm6Dt7OT8z88EbdQqqcRN2oCT54jbi72tT/HqgflT8= -github.com/opencontainers/runc v1.0.0-rc91.0.20200707015106-819fcc687efb h1:LcPVE5u4oaqw8ffPbJew0lUxZC7faM5t52PgU4px1xY= -github.com/opencontainers/runc v1.0.0-rc91.0.20200707015106-819fcc687efb/go.mod h1:ZuXhqlr4EiRYgDrBDNfSbE4+n9JX4+V107NwAmF7sZA= github.com/opencontainers/runtime-spec v0.1.2-0.20190507144316-5b71a03e2700/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= -github.com/opencontainers/runtime-spec v1.0.2/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= -github.com/opencontainers/runtime-spec v1.0.3-0.20200520003142-237cc4f519e2/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= github.com/opencontainers/runtime-tools v0.0.0-20181011054405-1d69bd0f9c39/go.mod h1:r3f7wjNzSs2extwzU3Y+6pKfobzPh+kKFJ3ofN+3nfs= -github.com/opencontainers/selinux v1.5.1/go.mod h1:yTcKuYAh6R95iDpefGLQaPaRwJFwyzAJufJyiTt7s0g= -github.com/opencontainers/selinux v1.5.2/go.mod h1:yTcKuYAh6R95iDpefGLQaPaRwJFwyzAJufJyiTt7s0g= github.com/openshift/prom-label-proxy v0.1.1-0.20191016113035-b8153a7f39f1/go.mod h1:p5MuxzsYP1JPsNGwtjtcgRHHlGziCJJfztff91nNixw= github.com/opentracing-contrib/go-observer v0.0.0-20170622124052-a52f23424492/go.mod h1:Ngi6UdF0k5OKD5t5wlmGhe/EDKPoUM3BXZSSfIuJbis= github.com/opentracing-contrib/go-stdlib v0.0.0-20190519235532-cf7a6c988dc9/go.mod h1:PLldrQSroqzH70Xl+1DQcGnefIbqsKR7UDaiux3zV+w= @@ -1035,11 +975,9 @@ github.com/prometheus/prometheus v0.0.0-20180315085919-58e2a31db8de/go.mod h1:oA github.com/prometheus/prometheus v1.8.2-0.20200110114423-1e64d757f711/go.mod h1:7U90zPoLkWjEIQcy/rweQla82OCTUzxVHE51G3OhJbI= github.com/prometheus/prometheus v2.3.2+incompatible/go.mod h1:oAIUtOny2rjMX0OWN5vPR5/q/twIROJvdqnQKDdil/s= github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= -github.com/quobyte/api v0.1.2/go.mod h1:jL7lIHrmqQ7yh05OJ+eEEdHr0u/kmT1Ff9iHd+4H6VI= github.com/rainycape/memcache v0.0.0-20150622160815-1031fa0ce2f2/go.mod h1:7tZKcyumwBO6qip7RNQ5r77yrssm9bfCowcLEBcU5IA= github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= github.com/remyoudompheng/bigfft v0.0.0-20170806203942-52369c62f446/go.mod h1:uYEyJGbgTkfkS4+E/PavXkNJcbFIpEtjt2B0KDQ5+9M= -github.com/robfig/cron v1.1.0/go.mod h1:JGuDeoQd7Z6yL4zQhZ3OPEVHB7fL6Ka6skscFHfmt2k= github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= github.com/rogpeppe/go-internal v1.1.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= @@ -1051,7 +989,6 @@ github.com/rs/cors v1.6.0 h1:G9tHG9lebljV9mfp9SNPDL36nCDxmo3zTlAf1YgvzmI= github.com/rs/cors v1.6.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= github.com/rubenv/sql-migrate v0.0.0-20200616145509-8d140a17f351 h1:HXr/qUllAWv9riaI4zh2eXWKmCSDqVS/XH1MRHLKRwk= github.com/rubenv/sql-migrate v0.0.0-20200616145509-8d140a17f351/go.mod h1:DCgfY80j8GYL7MLEfvcpSFvjD0L5yZq/aZUJmhZklyg= -github.com/rubiojr/go-vhd v0.0.0-20200706105327-02e210299021/go.mod h1:DM5xW0nvfNNm2uytzsvhI3OnX8uzaRAg8UX/CnDqbto= github.com/russellhaering/goxmldsig v0.0.0-20180430223755-7acd5e4a6ef7 h1:J4AOUcOh/t1XbQcJfkEqhzgvMJ2tDxdCVvmHxW5QXao= github.com/russellhaering/goxmldsig v0.0.0-20180430223755-7acd5e4a6ef7/go.mod h1:Oz4y6ImuOQZxynhbSXk7btjEfNBtGlj2dcaOvXl2FSM= github.com/russross/blackfriday v0.0.0-20170610170232-067529f716f4/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= @@ -1068,7 +1005,6 @@ github.com/satori/go.uuid v0.0.0-20160603004225-b111a074d5ef/go.mod h1:dA0hQrYB0 github.com/satori/go.uuid v1.2.0 h1:0uYX9dsZ2yD7q2RtLRtPSdGDWzjeM3TbMJP9utgA0ww= github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0= github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= -github.com/seccomp/libseccomp-golang v0.9.1/go.mod h1:GbW5+tmTXfcxTToHLXlScSlAvWlF4P2Ca7zGrPiEpWo= github.com/segmentio/ksuid v1.0.3 h1:FoResxvleQwYiPAVKe1tMUlEirodZqlqglIuFsdDntY= github.com/segmentio/ksuid v1.0.3/go.mod h1:/XUiZBD3kVx5SmUOl55voK5yeAbBNNIed+2O73XgrPE= github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= @@ -1090,6 +1026,7 @@ github.com/smartystreets/assertions v1.0.1/go.mod h1:kHHU4qYBaI3q23Pp3VPrmWhuIUr github.com/smartystreets/goconvey v0.0.0-20190330032615-68dc04aab96a/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= github.com/smartystreets/goconvey v1.6.4 h1:fv0U8FUIMPNf1L9lnHLvLhgicrIVChEkdzIKYqbNC9s= github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= +github.com/soheilhy/cmux v0.1.3/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= github.com/soheilhy/cmux v0.1.4 h1:0HKaf1o97UwFjHH9o5XsHUOF+tqmdA7KEzXLpiyaw0E= github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= github.com/sony/gobreaker v0.4.1/go.mod h1:ZKptC7FHNvhBz7dN2LGjPVBz2sZJmc0/PkyDJOjmxWY= @@ -1106,9 +1043,8 @@ github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tL github.com/spf13/cobra v1.0.0/go.mod h1:/6GTrnGXV9HjY+aR4k0oJ5tcvakLuG6EuKReYlHNrgE= github.com/spf13/cobra v1.1.0 h1:aq3wCKjTPmzcNWLVGnsFVN4rflK7Uzn10F8/aw8MhdQ= github.com/spf13/cobra v1.1.0/go.mod h1:yk5b0mALVusDL5fMM6Rd1wgnoO5jUPhwsQ6LQAJTidQ= +github.com/spf13/jwalterweatherman v1.0.0 h1:XHEdyB+EcvlqZamSM4ZOMGlc93t6AcsBEu9Gc1vn7yk= github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= -github.com/spf13/jwalterweatherman v1.1.0 h1:ue6voC5bR5F8YxI5S67j9i582FU4Qvo2bmqnqMYADFk= -github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo= github.com/spf13/pflag v0.0.0-20170130214245-9ff6c6923cff/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= @@ -1119,7 +1055,6 @@ github.com/spf13/viper v1.4.0/go.mod h1:PTJ7Z/lr49W6bUbkmS1V3by4uWynFiR9p7+dSq/y github.com/spf13/viper v1.6.2/go.mod h1:t3iDnF5Jlj76alVNuyFBk5oUMCvsrkbvZK0WQdfDi5k= github.com/spf13/viper v1.7.0 h1:xVKxvI7ouOI5I+U9s2eeiUfMaWBVoXA3AWskkrqK0VM= github.com/spf13/viper v1.7.0/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg= -github.com/storageos/go-api v0.0.0-20180912212459-343b3eff91fc/go.mod h1:ZrLn+e0ZuF3Y65PNF6dIwbJPZqfmtCXxFm9ckv0agOY= github.com/streadway/amqp v0.0.0-20190404075320-75d898a42a94/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= github.com/streadway/amqp v0.0.0-20190827072141-edfb9018d271/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= github.com/streadway/handy v0.0.0-20190108123426-d5acb3125c2a/go.mod h1:qNTQ5P5JnDBl6z3cMAg/SywNDC5ABu5ApDIw6lUbRmI= @@ -1137,7 +1072,6 @@ github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/ github.com/subosito/gotenv v1.2.0 h1:Slr1R9HxAlEKefgq5jn9U+DnETlIUa6HfgEzj0g5d7s= github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw= github.com/syndtr/gocapability v0.0.0-20170704070218-db04d3cc01c8/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww= -github.com/syndtr/gocapability v0.0.0-20180916011248-d98352740cb2/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww= github.com/tencentcloud/tencentcloud-sdk-go v3.0.107+incompatible h1:uUGvqiepdES1dmkFrJ9zI1ZKTue7VG5ACLlAmizIdqw= github.com/tencentcloud/tencentcloud-sdk-go v3.0.107+incompatible/go.mod h1:0PfYow01SHPMhKY31xa+EFz2RStxIqj6JFAJS+IkCi4= github.com/tencentyun/cos-go-sdk-v5 v0.0.0-20200311031902-5eb2ce1f587d h1:IJpbA8uYTzlF3O4KpEbWg1sIVhQXbQFWCnrLyMZOaRA= @@ -1145,7 +1079,6 @@ github.com/tencentyun/cos-go-sdk-v5 v0.0.0-20200311031902-5eb2ce1f587d/go.mod h1 github.com/testcontainers/testcontainers-go v0.0.9 h1:mwvFz+FkuQMqQ9oLkG4cVzPsZTRmrCo2NcaerJNaptA= github.com/testcontainers/testcontainers-go v0.0.9/go.mod h1:0Qe9qqjNZgxHzzdHPWwmQ2D49FFO7920hLdJ4yUJXJI= github.com/thanos-io/thanos v0.11.0/go.mod h1:N/Yes7J68KqvmY+xM6J5CJqEvWIvKSR5sqGtmuD6wDc= -github.com/thecodeteam/goscaleio v0.1.0/go.mod h1:68sdkZAsK8bvEwBlbQnlLS+xU+hvLYM/iQ8KXej1AwM= github.com/thoas/go-funk v0.4.0 h1:KBaa5NL7NMtsFlQaD8nQMbDt1wuM+OOaNQyYNYQFhVo= github.com/thoas/go-funk v0.4.0/go.mod h1:mlR+dHGb+4YgXkf13rkQTuzrneeHANxOm6+ZnEV9HsA= github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk= @@ -1167,13 +1100,7 @@ github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLY github.com/urfave/cli v0.0.0-20171014202726-7bc6a0acffa5/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= -github.com/urfave/cli v1.22.2/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= -github.com/urfave/negroni v1.0.0/go.mod h1:Meg73S6kFm/4PpbYdq35yYWoCZ9mS/YSx+lKnmiohz4= github.com/vektah/gqlparser v1.1.2/go.mod h1:1ycwN7Ij5njmMkPPAOaRFY4rET2Enx7IkVv3vaXspKw= -github.com/vishvananda/netlink v1.1.0/go.mod h1:cTgwzPIzzgDAYoQrMm0EdrjRUBkTqKYppBueQtXaqoE= -github.com/vishvananda/netns v0.0.0-20191106174202-0a2b9b5464df/go.mod h1:JP3t17pCcGlemwknint6hfoeCVQrEMVwxRLRjXpq+BU= -github.com/vishvananda/netns v0.0.0-20200520041808-52d707b772fe/go.mod h1:DD4vA1DwXk04H54A1oHXtwZmA0grkVMdPxx/VGLCah0= -github.com/vmware/govmomi v0.20.3/go.mod h1:URlwyTFZX72RmxtxuaFL2Uj3fD1JTvZdx59bHWk6aFU= github.com/vultr/govultr v0.1.4/go.mod h1:9H008Uxr/C4vFNGLqKx232C206GL0PBHzOP0809bGNA= github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f h1:J9EGpcZtP0E/raorCMxlFGSTBrsSlaDGf3jU/qvAE2c= github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= @@ -1183,6 +1110,7 @@ github.com/xeipuuv/gojsonschema v0.0.0-20180618132009-1d523034197f/go.mod h1:5yf github.com/xeipuuv/gojsonschema v1.1.0/go.mod h1:5yf86TLmAcydyeJq5YvxkGPE2fm/u4myDekKRoLuqhs= github.com/xeipuuv/gojsonschema v1.2.0 h1:LhYJRs+L4fBtjZUfuSZIKGeVu0QRy8e5Xi7D17UxZ74= github.com/xeipuuv/gojsonschema v1.2.0/go.mod h1:anYRn/JVcOK2ZgGU+IjEV4nwlhoK5sQluxsYJ78Id3Y= +github.com/xiang90/probing v0.0.0-20160813154853-07dd2e8dfe18/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2 h1:eY9dn8+vbi4tKz5Qo6v2eYzo7kUS51QINcR5jNpbZS8= github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= github.com/xlab/handysort v0.0.0-20150421192137-fb3537ed64a1 h1:j2hhcujLRHAg872RWAV5yaUrEjHEObwDv3aImCaNLek= @@ -1221,17 +1149,20 @@ go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= go.opencensus.io v0.22.2 h1:75k/FF0Q2YM8QYo07VPddOLBslDt1MZOdEslOHvmzAs= go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +go.uber.org/atomic v0.0.0-20181018215023-8dc6146f7569/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.5.0 h1:OI5t8sDa1Or+q8AeE+yKeB/SDYioSHAgcVljj9JIETY= go.uber.org/atomic v1.5.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= go.uber.org/automaxprocs v1.2.0/go.mod h1:YfO3fm683kQpzETxlTGZhGIVmXAhaw3gxeBADbpZtnU= +go.uber.org/multierr v0.0.0-20180122172545-ddea229ff1df/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= go.uber.org/multierr v1.3.0 h1:sFPn2GLc3poCkfrpIXGhBD2X0CMIo4Q/zSULXrj/+uc= go.uber.org/multierr v1.3.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4= go.uber.org/ratelimit v0.0.0-20180316092928-c15da0234277/go.mod h1:2X8KaoNd1J0lZV+PxJk/5+DGbO/tpwLR1m++a7FnB/Y= go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee h1:0mgffUl7nfd+FpvXMVz4IDEaUSmT1ysygQC7qYo7sG4= go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA= +go.uber.org/zap v0.0.0-20180814183419-67bc79d13d15/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= go.uber.org/zap v1.13.0 h1:nR6NoDBgAf67s68NhaXbsojM+2gxp3S1hWkHDl27pVU= go.uber.org/zap v1.13.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM= @@ -1239,9 +1170,7 @@ golang.org/x/crypto v0.0.0-20180621125126-a49355c7e3f8/go.mod h1:6SG95UA2DQfeDnf golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20190123085648-057139ce5d2b/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190211182817-74369b46fc67/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20190228161510-8dd112bcdc25/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190320223903-b7391e95e576/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190325154230-a5d413f7728c/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= @@ -1253,6 +1182,7 @@ golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8U golang.org/x/crypto v0.0.0-20190617133340-57b3e21c3d56/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190621222207-cc06ce4a13d4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190829043050-9756ffdc2472/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190911031432-227b76d455e7/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190923035154-9ee001bba392/go.mod h1:/lpIB1dKB+9EgE3H3cr1v9wB50oz8l4C4h62xy7jSTY= @@ -1261,11 +1191,10 @@ golang.org/x/crypto v0.0.0-20191112222119-e1110fd1c708/go.mod h1:LzIPMQfyMNhhGPh golang.org/x/crypto v0.0.0-20191202143827-86a70503ff7e/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20191206172530-e9b2fee46413/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200128174031-69ecbb4d6d5d/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20200220183623-bac4c82f6975/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200414173820-0848c9571904/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9 h1:psW17arqaxU48Z5kZ0CQnkZWQJsqcURM6tKiBApRjXI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -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= golang.org/x/exp v0.0.0-20190125153040-c74c464bbbf2/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= @@ -1274,7 +1203,6 @@ golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxT golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek= golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY= golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= -golang.org/x/image v0.0.0-20180708004352-c73c2afc3b81/go.mod h1:ux5Hcp/YLpHSI86hEcLt0YII63i6oz57MZXIpbrjZUs= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= @@ -1310,7 +1238,6 @@ golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73r golang.org/x/net v0.0.0-20190228165749-92fc7df08ae7/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190320064053-1272bf9dcd53/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190328230028-74de082e2cca/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= @@ -1321,6 +1248,7 @@ golang.org/x/net v0.0.0-20190619014844-b5b0513f8c1b/go.mod h1:z5CRVTTTmAJ677TzLL golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190812203447-cdfb69ac37fc/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190923162816-aa69164e4478/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= @@ -1331,10 +1259,10 @@ golang.org/x/net v0.0.0-20191027093000-83d349e8ac1a/go.mod h1:z5CRVTTTmAJ677TzLL golang.org/x/net v0.0.0-20191112182307-2180aed22343/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20191126235420-ef20fe5d7933/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20201110031124-69a78807bb2b h1:uwuIcX0g4Yl1NC5XAz37xsr2lTtcqevgzYNVt49waME= golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= @@ -1362,12 +1290,10 @@ golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5h golang.org/x/sys v0.0.0-20181122145206-62eef0e2fa9b/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181205085412-a5c9d58dba9a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181228144115-9a3f9b0469bb/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190124100055-b90733256f2e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190204203706-41f3e6584952/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190209173611-3b5209105503/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190228124157-a34e9553db1e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190310054646-10058d7d4faa/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190321052220-f7bb7a8bee54/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -1381,7 +1307,6 @@ golang.org/x/sys v0.0.0-20190514135907-3a4b5fb9f71f/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20190515120540-06a5c4944438/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190602015325-4c4f7f33c9ed/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190606203320-7fc4e5ec1444/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190616124812-15dcb6c0061f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190712062909-fae7ac547cb7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -1400,23 +1325,17 @@ golang.org/x/sys v0.0.0-20191025021431-6c3a3bfe00ae/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191112214154-59a1497f0cea/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191113165036-4c7a9d0fe056/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191115151921-52ab43148777/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191128015809-6d18c012aee9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191220142924-d4481acd189f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200120151820-655fe14d7479/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200124204421-9fbb57f87de9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200217220822-9197077df867/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200327173247-9dae0f8f5775/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200622214017-ed371f2e16b4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201112073958-5cba982894dd h1:5CtCZbICpIOFdgO940moixOPjc0178IU44m4EjOO5IY= golang.org/x/sys v0.0.0-20201112073958-5cba982894dd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -1436,7 +1355,6 @@ golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxb golang.org/x/time v0.0.0-20200416051211-89c76fbcd5d1 h1:NusfzzA6yGQ+ua51ck7E3omNUX/JuqbFSaRGqU8CcLI= golang.org/x/time v0.0.0-20200416051211-89c76fbcd5d1/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20180525024113-a5b4c53f6e8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180810170437-e96c4e24768d/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20181011042414-1f849cf54d09/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= @@ -1464,6 +1382,7 @@ golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtn golang.org/x/tools v0.0.0-20190907020128-2ca718005c18/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20190918214516-5a1a30219888/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20190920225731-5eefd052ad72/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191004055002-72853e10c5a3/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= @@ -1485,12 +1404,9 @@ golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IV golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= gomodules.xyz/jsonpatch/v2 v2.0.1 h1:xyiBuvkD2g5n7cYzx6u2sxQvsAy4QJsZFCzGVdzOXZ0= gomodules.xyz/jsonpatch/v2 v2.0.1/go.mod h1:IhYNNY4jnS53ZnfE4PAmpKtDpTCj1JFXc+3mwe7XcUU= -gonum.org/v1/gonum v0.0.0-20180816165407-929014505bf4/go.mod h1:Y+Yx5eoAFn32cQvJDxZx5Dpnq+c3wtXuadVZAcxbbBo= gonum.org/v1/gonum v0.0.0-20190331200053-3d26580ed485/go.mod h1:2ltnJ7xHfj0zHS40VVPYEAAMTa3ZGguvHGBSJeRWqE0= -gonum.org/v1/gonum v0.6.2/go.mod h1:9mxDZsDKxgMAuccQkewq682L+0eCu4dCN2yonUJTCLU= gonum.org/v1/netlib v0.0.0-20190313105609-8cb42192e0e0/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw= gonum.org/v1/netlib v0.0.0-20190331212654-76723241ea4e/go.mod h1:kS+toOQn6AQKjmKJ7gzohV1XkqsFehRA2FbsbkopSuQ= -gonum.org/v1/plot v0.0.0-20190515093506-e2840ee46a6b/go.mod h1:Wt8AAjI+ypCyYX3nZBvf6cAIx93T+c/OS2HFAYskSZc= google.golang.org/api v0.0.0-20160322025152-9bf6e6e569ff/go.mod h1:4mhQ8q/RsB7i+udVvVy5NUi08OU8ZlA0gRVgrF7VFY0= google.golang.org/api v0.3.1/go.mod h1:6wY9I6uQWHQ8EM57III9mq/AjF+i8G65rmVagqKMtkk= google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= @@ -1499,10 +1415,8 @@ google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEn google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= +google.golang.org/api v0.15.0 h1:yzlyyDW/J0w8yNFJIhiAJy4kq74S+1DOLdawELNxFMA= google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= -google.golang.org/api v0.15.1-0.20200106000736-b8fc810ca6b5/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= -google.golang.org/api v0.15.1 h1:5mMS6mYvK5LVB8+ujVBC33Y8gltBo/kT6HBm6kU80G4= -google.golang.org/api v0.15.1/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.2.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= @@ -1526,7 +1440,6 @@ google.golang.org/genproto v0.0.0-20190927181202-20e1ac93f88c/go.mod h1:IbNlFCBr google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= google.golang.org/genproto v0.0.0-20191115194625-c23dd37a84c9/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20200115191322-ca5a22157cba/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= google.golang.org/genproto v0.0.0-20200224152610-e50cd9704f63/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013 h1:+kGHl1aib/qcwaRi1CbqBZ1rk19r85MNUf8HaBghugY= google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= @@ -1555,7 +1468,6 @@ gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/fsnotify.v1 v1.4.7 h1:xOHLXZwVvI9hhs+cLKq5+I5onOuwQLhQwiu63xxlHs4= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= gopkg.in/fsnotify/fsnotify.v1 v1.4.7/go.mod h1:Fyux9zXlo4rWoMSIzpn9fDAYjalPqJ/K1qJ27s+7ltE= -gopkg.in/gcfg.v1 v1.2.0/go.mod h1:yesOnuUOFQAhST5vPY4nbZsb/huCgGGXlipJsBn0b3o= gopkg.in/gcfg.v1 v1.2.3/go.mod h1:yesOnuUOFQAhST5vPY4nbZsb/huCgGGXlipJsBn0b3o= gopkg.in/go-playground/assert.v1 v1.2.1 h1:xoYuJVE7KT85PYWrN730RguIQO0ePzVRfFMXadIrXTM= gopkg.in/go-playground/assert.v1 v1.2.1/go.mod h1:9RXL0bg/zibRAgZUYszZSwO/z8Y/a8bDuhia5mkpMnE= @@ -1564,6 +1476,7 @@ gopkg.in/go-playground/validator.v9 v9.29.1/go.mod h1:+c9/zcJMFNgbLvly1L1V+PpxWd gopkg.in/gorp.v1 v1.7.2 h1:j3DWlAyGVv8whO7AcIWznQ2Yj7yJkn34B8s63GViAAw= gopkg.in/gorp.v1 v1.7.2/go.mod h1:Wo3h+DBQZIxATwftsglhdD/62zRFPhGhTiu5jUJmCaw= gopkg.in/h2non/gock.v1 v1.0.15/go.mod h1:sX4zAkdYX1TRGJ2JY156cFspQn4yRWn6p9EMdODlynE= +gopkg.in/inf.v0 v0.9.0/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc= gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= gopkg.in/ini.v1 v1.42.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= @@ -1584,7 +1497,6 @@ gopkg.in/square/go-jose.v2 v2.4.1 h1:H0TmLt7/KmzlrDOpa1F+zr0Tk90PbJYBfsVUmRLrf9Y gopkg.in/square/go-jose.v2 v2.4.1/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= -gopkg.in/warnings.v0 v0.1.1/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI= gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI= gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74= gopkg.in/yaml.v2 v2.0.0/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74= @@ -1625,34 +1537,76 @@ istio.io/client-go v0.0.0-20200715214203-1ab538406cd1 h1:byikTIZ2uaLd16Y4e7MLXA8 istio.io/client-go v0.0.0-20200715214203-1ab538406cd1/go.mod h1:0QlyS/x4wqkZWIbE8NdXFsvUoH2zkVHXB3Zrh50FCVs= istio.io/gogo-genproto v0.0.0-20190930162913-45029607206a h1:w7zILua2dnYo9CxImhpNW4NE/8ZxEoc/wfBfHrhUhrE= istio.io/gogo-genproto v0.0.0-20190930162913-45029607206a/go.mod h1:OzpAts7jljZceG4Vqi5/zXy/pOg1b209T3jb7Nv5wIs= +k8s.io/api v0.0.0-20190813020757-36bff7324fb7/go.mod h1:3Iy+myeAORNCLgjd/Xu9ebwN7Vh59Bw0vh9jhoX+V58= +k8s.io/api v0.0.0-20190918155943-95b840bb6a1f/go.mod h1:uWuOHnjmNrtQomJrvEBg0c0HRNyQ+8KTEERVsK0PW48= +k8s.io/api v0.0.0-20191115095533-47f6de673b26/go.mod h1:iA/8arsvelvo4IDqIhX4IbjTEKBGgvsf2OraTuRtLFU= +k8s.io/api v0.0.0-20191122220107-b5267f2975e0/go.mod h1:vYpRfxYkMrmPPSesoHEkGNHxNKTk96REAwqm/inQbs0= +k8s.io/api v0.17.2/go.mod h1:BS9fjjLc4CMuqfSO8vgbHPKMt5+SF0ET6u/RVDihTo4= +k8s.io/api v0.18.1/go.mod h1:3My4jorQWzSs5a+l7Ge6JBbIxChLnY8HnuT58ZWolss= +k8s.io/api v0.18.2/go.mod h1:SJCWI7OLzhZSvbY7U8zwNl9UA4o1fizoug34OV/2r78= +k8s.io/api v0.18.8/go.mod h1:d/CXqwWv+Z2XEG1LgceeDmHQwpUJhROPx16SlxJgERY= +k8s.io/api v0.19.4/go.mod h1:SbtJ2aHCItirzdJ36YslycFNzWADYH3tgOhvBEFtZAk= k8s.io/api v0.19.7 h1:MpHhls03C2pyzoYcpbe4QqYiiZjdvW+tuWq6TbjV14Y= k8s.io/api v0.19.7/go.mod h1:KTryDUT3l6Mtv7K2J2486PNL9DBns3wOYTkGR+iz63Y= +k8s.io/apiextensions-apiserver v0.0.0-20190918161926-8f644eb6e783/go.mod h1:xvae1SZB3E17UpV59AWc271W/Ph25N+bjPyR63X6tPY= +k8s.io/apiextensions-apiserver v0.17.2/go.mod h1:4KdMpjkEjjDI2pPfBA15OscyNldHWdBCfsWMDWAmSTs= +k8s.io/apiextensions-apiserver v0.18.2/go.mod h1:q3faSnRGmYimiocj6cHQ1I3WpLqmDgJFlKL37fC4ZvY= +k8s.io/apiextensions-apiserver v0.18.8/go.mod h1:7f4ySEkkvifIr4+BRrRWriKKIJjPyg9mb/p63dJKnlM= +k8s.io/apiextensions-apiserver v0.19.4/go.mod h1:B9rpH/nu4JBCtuUp3zTTk8DEjZUupZTBEec7/2zNRYw= k8s.io/apiextensions-apiserver v0.19.7 h1:aV9DANMSCCYBEMbtoT/5oesrtcciQrjy9yqWVtZZL5A= k8s.io/apiextensions-apiserver v0.19.7/go.mod h1:XJNNtjISNNePDEUClHt/igzMpQcmjVVh88QH+PKztPU= +k8s.io/apimachinery v0.0.0-20190809020650-423f5d784010/go.mod h1:Waf/xTS2FGRrgXCkO5FP3XxTOWh0qLf2QhL1qFZZ/R8= +k8s.io/apimachinery v0.0.0-20190913080033-27d36303b655/go.mod h1:nL6pwRT8NgfF8TT68DBI8uEePRt89cSvoXUVqbkWHq4= +k8s.io/apimachinery v0.0.0-20191115015347-3c7067801da2/go.mod h1:dXFS2zaQR8fyzuvRdJDHw2Aerij/yVGJSre0bZQSVJA= +k8s.io/apimachinery v0.0.0-20191121175448-79c2a76c473a/go.mod h1:b9qmWdKlLuU9EBh+06BtLcSf/Mu89rWL33naRxs1uZg= +k8s.io/apimachinery v0.17.2/go.mod h1:b9qmWdKlLuU9EBh+06BtLcSf/Mu89rWL33naRxs1uZg= +k8s.io/apimachinery v0.18.1/go.mod h1:9SnR/e11v5IbyPCGbvJViimtJ0SwHG4nfZFjU77ftcA= +k8s.io/apimachinery v0.18.2/go.mod h1:9SnR/e11v5IbyPCGbvJViimtJ0SwHG4nfZFjU77ftcA= +k8s.io/apimachinery v0.18.8/go.mod h1:6sQd+iHEqmOtALqOFjSWp2KZ9F0wlU/nWm0ZgsYWMig= +k8s.io/apimachinery v0.19.4/go.mod h1:DnPGDnARWFvYa3pMHgSxtbZb7gpzzAZ1pTfaUNDVlmA= k8s.io/apimachinery v0.19.7 h1:nTaEnYVH+i//aPgMA0zTEV2lfVLCV9LextqVd67mulc= k8s.io/apimachinery v0.19.7/go.mod h1:6sRbGRAVY5DOCuZwB5XkqguBqpqLU6q/kOaOdk29z6Q= +k8s.io/apiserver v0.0.0-20190918160949-bfa5e2e684ad/go.mod h1:XPCXEwhjaFN29a8NldXA901ElnKeKLrLtREO9ZhFyhg= +k8s.io/apiserver v0.0.0-20191122221311-9d521947b1e1/go.mod h1:RbsZY5zzBIWnz4KbctZsTVjwIuOpTp4Z8oCgFHN4kZQ= +k8s.io/apiserver v0.17.2/go.mod h1:lBmw/TtQdtxvrTk0e2cgtOxHizXI+d0mmGQURIHQZlo= +k8s.io/apiserver v0.18.2/go.mod h1:Xbh066NqrZO8cbsoenCwyDJ1OSi8Ag8I2lezeHxzwzw= +k8s.io/apiserver v0.18.8/go.mod h1:12u5FuGql8Cc497ORNj79rhPdiXQC4bf53X/skR/1YM= +k8s.io/apiserver v0.19.4/go.mod h1:X8WRHCR1UGZDd7HpV0QDc1h/6VbbpAeAGyxSh8yzZXw= k8s.io/apiserver v0.19.7 h1:fOOELJ9TNC6DgKL3GUkQLE/EBMLjwBseTstx2eRP61o= k8s.io/apiserver v0.19.7/go.mod h1:DmWVQggNePspa+vSsVytVbS3iBSDTXdJVt0akfHacKk= +k8s.io/cli-runtime v0.17.2/go.mod h1:aa8t9ziyQdbkuizkNLAw3qe3srSyWh9zlSB7zTqRNPI= +k8s.io/cli-runtime v0.18.8/go.mod h1:7EzWiDbS9PFd0hamHHVoCY4GrokSTPSL32MA4rzIu0M= +k8s.io/cli-runtime v0.19.4/go.mod h1:m8G32dVbKOeaX1foGhleLEvNd6REvU7YnZyWn5//9rw= k8s.io/cli-runtime v0.19.7 h1:VkHsqrQYCD6+yBm2k9lOxLJtfo1tmb/TdYIHQ2RSCsY= k8s.io/cli-runtime v0.19.7/go.mod h1:UTtbWaGV/USZSrnvuW/lRZGM5OsemAT/q/Du/Ac+wKU= k8s.io/client-go v0.19.7 h1:SoJ4mzZ9LyXBGDe8MmpMznw0CwQ1ITWgsmG7GixvhUU= k8s.io/client-go v0.19.7/go.mod h1:iytGI7S3kmv6bWnn+bSQUE4VlrEi4YFssvVB7J7Hvqg= -k8s.io/cloud-provider v0.19.7/go.mod h1:aO/VpUwkG+JQN7ZXc5WBLZ5NBXuq/Y5B6vri6U94PZ8= k8s.io/cluster-bootstrap v0.19.7 h1:xlI+YfeS5gOVa33WVh1viiPZMDN9j7BAiY0iJkg2LwI= k8s.io/cluster-bootstrap v0.19.7/go.mod h1:W2WG13ZOrQrdydjS2nUyHYWVP+VckZNjwfG8l4CcfL4= +k8s.io/code-generator v0.0.0-20190912054826-cd179ad6a269/go.mod h1:V5BD6M4CyaN5m+VthcclXWsVcT1Hu+glwa1bi3MIsyE= +k8s.io/code-generator v0.17.2/go.mod h1:DVmfPQgxQENqDIzVR2ddLXMH34qeszkKSdH/N+s+38s= +k8s.io/code-generator v0.18.2/go.mod h1:+UHX5rSbxmR8kzS+FAv7um6dtYrZokQvjHpDSYRVkTc= +k8s.io/code-generator v0.18.8/go.mod h1:TgNEVx9hCyPGpdtCWA34olQYLkh3ok9ar7XfSsr8b6c= +k8s.io/code-generator v0.19.4/go.mod h1:moqLn7w0t9cMs4+5CQyxnfA/HV8MF6aAVENF+WZZhgk= k8s.io/code-generator v0.19.7/go.mod h1:lwEq3YnLYb/7uVXLorOJfxg+cUu2oihFhHZ0n9NIla0= +k8s.io/component-base v0.0.0-20190918160511-547f6c5d7090/go.mod h1:933PBGtQFJky3TEwYx4aEPZ4IxqhWh3R6DCmzqIn1hA= +k8s.io/component-base v0.0.0-20191122220729-2684fb322cb9/go.mod h1:NFuUusy/X4Tk21m21tcNUihnmp4OI7lXU7/xA+rYXkc= +k8s.io/component-base v0.17.2/go.mod h1:zMPW3g5aH7cHJpKYQ/ZsGMcgbsA/VyhEugF3QT1awLs= +k8s.io/component-base v0.18.2/go.mod h1:kqLlMuhJNHQ9lz8Z7V5bxUUtjFZnrypArGl58gmDfUM= +k8s.io/component-base v0.18.8/go.mod h1:00frPRDas29rx58pPCxNkhUfPbwajlyyvu8ruNgSErU= +k8s.io/component-base v0.19.4/go.mod h1:ZzuSLlsWhajIDEkKF73j64Gz/5o0AgON08FgRbEPI70= k8s.io/component-base v0.19.7 h1:ZXS2VRWOWBOc2fTd1zjzhi/b/mkqFT9FDqiNsn1cH30= k8s.io/component-base v0.19.7/go.mod h1:YX8spPBgwl3I6UGcSdQiEMAqRMSUsGQOW7SEr4+Qa3U= -k8s.io/cri-api v0.19.7/go.mod h1:PE0eMB8nJJvRigJuZEyqgYvRqL8mBowlvw0g8F/L1LY= -k8s.io/csi-translation-lib v0.19.7/go.mod h1:WghizPQuzuygr2WdpgN2EjcNpDD2V4EAbxFXsgHgSBk= k8s.io/gengo v0.0.0-20190128074634-0689ccc1d7d6/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= +k8s.io/gengo v0.0.0-20190822140433-26a664648505/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= +k8s.io/gengo v0.0.0-20200114144118-36b2048a9120/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= k8s.io/gengo v0.0.0-20200413195148-3a45101e95ac/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= k8s.io/gengo v0.0.0-20200428234225-8167cfdcfc14/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= -k8s.io/heapster v1.2.0-beta.1/go.mod h1:h1uhptVXMwC8xtZBYsPXKVi8fpdlYkTs6k949KozGrM= k8s.io/helm v2.16.12+incompatible h1:K2zhF8+B85Ya1n7n3eH34xwwp5qNUM42TBFENDZJT7w= k8s.io/helm v2.16.12+incompatible/go.mod h1:LZzlS4LQBHfciFOurYBFkCMTaZ0D1l+p0teMg7TSULI= k8s.io/klog v0.0.0-20181102134211-b9b56d5dfc92/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk= k8s.io/klog v0.3.0/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk= +k8s.io/klog v0.3.1/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk= k8s.io/klog v0.4.0/go.mod h1:4Bi6QPql/J/LkTDqv7R/cd3hPo4k2DG6Ptcz060Ez5I= k8s.io/klog v1.0.0 h1:Pt+yjF5aB1xDSVbau4VsWe+dQNzA0qv1LlXdC2dF6Q8= k8s.io/klog v1.0.0/go.mod h1:4Bi6QPql/J/LkTDqv7R/cd3hPo4k2DG6Ptcz060Ez5I= @@ -1661,27 +1615,28 @@ k8s.io/klog/v2 v2.2.0 h1:XRvcwJozkgZ1UQJmfMGpvRthQHOvihEhYtDfAaxMz/A= k8s.io/klog/v2 v2.2.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y= k8s.io/kube-aggregator v0.19.7 h1:Eol5vPNFKaDScdVuTh0AofhuSr4cJxP5Vfv8JXW8OAQ= k8s.io/kube-aggregator v0.19.7/go.mod h1:kA6tIyq3iJ8HJ/Yz9xY6ifceJNp/l/Eym0H1jRRAjMk= -k8s.io/kube-controller-manager v0.19.7/go.mod h1:A5dw0l+rRB/vDLEWscsbZjuHjig8dex+9v+wigKmnRA= +k8s.io/kube-openapi v0.0.0-20190709113604-33be087ad058/go.mod h1:nfDlWeOsu3pUf4yWGL+ERqohP4YsZcBJXWMK+gkzOA4= +k8s.io/kube-openapi v0.0.0-20190816220812-743ec37842bf/go.mod h1:1TqjTSzOxsLGIKfj0lK8EeCP7K1iUG65v09OM0/WG5E= k8s.io/kube-openapi v0.0.0-20191107075043-30be4d16710a/go.mod h1:1TqjTSzOxsLGIKfj0lK8EeCP7K1iUG65v09OM0/WG5E= +k8s.io/kube-openapi v0.0.0-20200121204235-bf4fb3bd569c/go.mod h1:GRQhZsXIAJ1xR0C9bd8UpWHZ5plfAS9fzPjJuQ6JL3E= +k8s.io/kube-openapi v0.0.0-20200410145947-61e04a5be9a6/go.mod h1:GRQhZsXIAJ1xR0C9bd8UpWHZ5plfAS9fzPjJuQ6JL3E= k8s.io/kube-openapi v0.0.0-20200805222855-6aeccd4b50c6 h1:+WnxoVtG8TMiudHBSEtrVL1egv36TkkJm+bA8AxicmQ= k8s.io/kube-openapi v0.0.0-20200805222855-6aeccd4b50c6/go.mod h1:UuqjUnNftUyPE5H64/qeyjQoUZhGpeFDVdxjTeEVN2o= -k8s.io/kube-proxy v0.19.7/go.mod h1:ybN+BAnck/RRxYCUm5/m7O8ajsumnWDdVtxCvVLGYbY= -k8s.io/kube-scheduler v0.19.7/go.mod h1:2K7TS5PJv8YPbclK7HTh3LL8qAX92OsP8gxliNxPEjg= +k8s.io/kubectl v0.17.2/go.mod h1:y4rfLV0n6aPmvbRCqZQjvOp3ezxsFgpqL+zF5jH/lxk= +k8s.io/kubectl v0.18.8/go.mod h1:PlEgIAjOMua4hDFTEkVf+W5M0asHUKfE4y7VDZkpLHM= +k8s.io/kubectl v0.19.4/go.mod h1:XPmlu4DJEYgD83pvZFeKF8+MSvGnYGqunbFSrJsqHv0= k8s.io/kubectl v0.19.7 h1:pSsha+MBr9KLhn0IKrRikeAZ7g2oeShIGHLgqAzE3Ak= k8s.io/kubectl v0.19.7/go.mod h1:zGj+Xcfuftdo8deI/mPo4E+YTAQjfdcyQAW+R+yq4nc= -k8s.io/kubelet v0.19.7/go.mod h1:lvsy+NTglrj4+KJA2wLmbVlLmkroev2a5umPXkNz8bw= k8s.io/kubernetes v1.13.0/go.mod h1:ocZa8+6APFNC2tX1DZASIbocyYT5jHzqFVsY5aoB7Jk= -k8s.io/kubernetes v1.19.7 h1:Yk9W5SL1KR2mwy0nNZwjFXNImfK7ihrbKhXttidNTiE= -k8s.io/kubernetes v1.19.7/go.mod h1:gKuOq0UXDNqdLqmNMmMqFebiI7OUIcvh7XYngH4Oy2s= -k8s.io/legacy-cloud-providers v0.19.7/go.mod h1:dsZk4gH9QIwAtHQ8CK0Ps257xlfgoXE3tMkMNhW2xDU= +k8s.io/metrics v0.17.2/go.mod h1:3TkNHET4ROd+NfzNxkjoVfQ0Ob4iZnaHmSEA4vYpwLw= +k8s.io/metrics v0.18.8/go.mod h1:j7JzZdiyhLP2BsJm/Fzjs+j5Lb1Y7TySjhPWqBPwRXA= +k8s.io/metrics v0.19.4/go.mod h1:a0gvAzrxQPw2ouBqnXI7X9qlggpPkKAFgWU/Py+KZiU= k8s.io/metrics v0.19.7 h1:fpTtFhNtS0DwJiYGGsL4YoSjHlLw8qugkgw3EXSWaUA= k8s.io/metrics v0.19.7/go.mod h1:dE4AXTCyBwOlq0j4A0Ut9hQU3AtA/RbvMXxgg2w/0og= -k8s.io/sample-apiserver v0.19.7/go.mod h1:m1/jdi9n51GLiPOJnGE4O0JSpe5CvCLgrFqiWmLPBhk= -k8s.io/system-validators v1.1.2/go.mod h1:bPldcLgkIUK22ALflnsXk8pvkTEndYdNuaHH6gRrl0Q= k8s.io/utils v0.0.0-20190801114015-581e00157fb1/go.mod h1:sZAwmy6armz5eXlNoLmJcl4F1QuKu7sr+mFQ0byX7Ew= +k8s.io/utils v0.0.0-20191114184206-e782cd3c129f/go.mod h1:sZAwmy6armz5eXlNoLmJcl4F1QuKu7sr+mFQ0byX7Ew= k8s.io/utils v0.0.0-20191114200735-6ca3b61696b6/go.mod h1:sZAwmy6armz5eXlNoLmJcl4F1QuKu7sr+mFQ0byX7Ew= k8s.io/utils v0.0.0-20200324210504-a9aa75ae1b89/go.mod h1:sZAwmy6armz5eXlNoLmJcl4F1QuKu7sr+mFQ0byX7Ew= -k8s.io/utils v0.0.0-20200414100711-2df71ebbae66/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= k8s.io/utils v0.0.0-20200729134348-d5654de09c73 h1:uJmqzgNWG7XyClnU/mLPBWwfKKF1K8Hf8whTseBgJcg= k8s.io/utils v0.0.0-20200729134348-d5654de09c73/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= modernc.org/cc v1.0.0/go.mod h1:1Sk4//wdnYJiUIxnW8ddKpaOJCF37yAdqYnkxUpaYxw= @@ -1692,7 +1647,7 @@ modernc.org/xc v1.0.0/go.mod h1:mRNCo0bvLjGhHO9WsyuKVU4q0ceiDDDoEeWDJHrNx8I= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= rsc.io/letsencrypt v0.0.3 h1:H7xDfhkaFFSYEJlKeq38RwX2jYcnTeHuDQyT+mMNMwM= rsc.io/letsencrypt v0.0.3/go.mod h1:buyQKZ6IXrRnB7TdkHP0RyEybLx18HHyOSoTyoOLqNY= -rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4= +sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.7/go.mod h1:PHgbrJT7lCHcxMU+mDHEm+nx46H4zuuHZkDP6icnhu0= sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.9 h1:rusRLrDhjBp6aYtl9sGEvQJr6faoHoDLd0YcUBTZguI= sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.9/go.mod h1:dzAXnQbTRyDlZPJX2SUPEqvnB+j7AJjtlox7PEwigU0= sigs.k8s.io/controller-runtime v0.6.0 h1:Fzna3DY7c4BIP6KwfSlrfnj20DJ+SeMBK8HSFvOk9NM= @@ -1700,8 +1655,12 @@ sigs.k8s.io/controller-runtime v0.6.0/go.mod h1:CpYf5pdNY/B352A1TFLAS2JVSlnGQ5O2 sigs.k8s.io/controller-tools v0.2.4/go.mod h1:m/ztfQNocGYBgTTCmFdnK94uVvgxeZeE3LtJvd/jIzA= sigs.k8s.io/kustomize v2.0.3+incompatible h1:JUufWFNlI44MdtnjUqVnvh29rR37PQFzPbLXqhyOyX0= sigs.k8s.io/kustomize v2.0.3+incompatible/go.mod h1:MkjgH3RdOWrievjo6c9T245dYlB5QeXV4WCbnt/PEpU= -sigs.k8s.io/structured-merge-diff v0.0.0-20190525122527-15d366b2352e h1:4Z09Hglb792X0kfOBBJUPFEyvVfQWrYT/l8h5EKA6JQ= sigs.k8s.io/structured-merge-diff v0.0.0-20190525122527-15d366b2352e/go.mod h1:wWxsB5ozmmv/SG7nM11ayaAW51xMvak/t1r0CSlcokI= +sigs.k8s.io/structured-merge-diff v0.0.0-20190817042607-6149e4549fca/go.mod h1:IIgPezJWb76P0hotTxzDbWsMYB8APh18qZnxkomBpxA= +sigs.k8s.io/structured-merge-diff v1.0.1-0.20191108220359-b1b620dd3f06 h1:zD2IemQ4LmOcAumeiyDWXKUI2SO0NYDe3H6QGvPOVgU= +sigs.k8s.io/structured-merge-diff v1.0.1-0.20191108220359-b1b620dd3f06/go.mod h1:/ULNhyfzRopfcjskuui0cTITekDduZ7ycKN3oUT9R18= +sigs.k8s.io/structured-merge-diff/v3 v3.0.0-20200116222232-67a7b8c61874/go.mod h1:PlARxl6Hbt/+BC80dRLi1qAmnMqwqDg62YvvVkZjemw= +sigs.k8s.io/structured-merge-diff/v3 v3.0.0/go.mod h1:PlARxl6Hbt/+BC80dRLi1qAmnMqwqDg62YvvVkZjemw= sigs.k8s.io/structured-merge-diff/v4 v4.0.1 h1:YXTMot5Qz/X1iBRJhAt+vI+HVttY0WkSqqhKxQ0xVbA= sigs.k8s.io/structured-merge-diff/v4 v4.0.1/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK1F7G282QMXDPYydCw= sigs.k8s.io/testing_frameworks v0.1.2/go.mod h1:ToQrwSC3s8Xf/lADdZp3Mktcql9CG0UAmdJG9th5i0w= diff --git a/pkg/auth/authorization/aggregation/aggregation.go b/pkg/auth/authorization/aggregation/aggregation.go index 6a88c5b04..d69dddd7a 100644 --- a/pkg/auth/authorization/aggregation/aggregation.go +++ b/pkg/auth/authorization/aggregation/aggregation.go @@ -23,8 +23,6 @@ import ( "k8s.io/apiserver/pkg/authorization/authorizer" "k8s.io/apiserver/pkg/authorization/union" "k8s.io/apiserver/plugin/pkg/authorizer/webhook" - k8sinformers "k8s.io/client-go/informers" - "k8s.io/kubernetes/plugin/pkg/auth/authorizer/rbac" authinternalclient "tkestack.io/tke/api/client/clientset/internalversion/typed/auth/internalversion" "tkestack.io/tke/cmd/tke-auth-api/app/options" "tkestack.io/tke/pkg/apiserver/authorization/abac" @@ -32,9 +30,7 @@ import ( ) // NewAuthorizer creates a authorizer for subject access review and returns it. -func NewAuthorizer(authClient authinternalclient.AuthInterface, authorizationOpts *options.AuthorizationOptions, - authOpts *options.AuthOptions, enforcer *casbin.SyncedEnforcer, - privilegedUsername string, k8sInformers k8sinformers.SharedInformerFactory) (authorizer.Authorizer, error) { +func NewAuthorizer(authClient authinternalclient.AuthInterface, authorizationOpts *options.AuthorizationOptions, authOpts *options.AuthOptions, enforcer *casbin.SyncedEnforcer, privilegedUsername string) (authorizer.Authorizer, error) { var ( authorizers []authorizer.Authorizer ) @@ -59,16 +55,6 @@ func NewAuthorizer(authClient authinternalclient.AuthInterface, authorizationOpt authorizers = append(authorizers, abacAuthorizer) } - if k8sInformers != nil { - rbacAuthorizer := rbac.New( - &rbac.RoleGetter{Lister: k8sInformers.Rbac().V1().Roles().Lister()}, - &rbac.RoleBindingLister{Lister: k8sInformers.Rbac().V1().RoleBindings().Lister()}, - &rbac.ClusterRoleGetter{Lister: k8sInformers.Rbac().V1().ClusterRoles().Lister()}, - &rbac.ClusterRoleBindingLister{Lister: k8sInformers.Rbac().V1().ClusterRoleBindings().Lister()}, - ) - authorizers = append(authorizers, rbacAuthorizer) - } - authorizers = append(authorizers, local.NewAuthorizer(authClient, enforcer, privilegedUsername)) return union.New(authorizers...), nil diff --git a/pkg/auth/filter/filter.go b/pkg/auth/filter/filter.go index 4c76ab517..97707f70f 100644 --- a/pkg/auth/filter/filter.go +++ b/pkg/auth/filter/filter.go @@ -132,14 +132,12 @@ func WithTKEAuthorization(handler http.Handler, a authorizer.Authorizer, s runti ) // first check if user is admin - authorized = UnprotectedAuthorized(attributes) + tkeAttributes := ConvertTKEAttributes(ctx, attributes) + authorized = UnprotectedAuthorized(tkeAttributes) if authorized != authorizer.DecisionAllow { - authorized, reason, err = a.Authorize(ctx, attributes) - } - if authorized != authorizer.DecisionAllow { - attributes = ConvertTKEAttributes(ctx, attributes) - authorized, reason, err = a.Authorize(ctx, attributes) + authorized, reason, err = a.Authorize(ctx, tkeAttributes) } + // an authorizer like RBAC could encounter evaluation errors and still allow the request, so authorizer decision is checked before error here. if authorized == authorizer.DecisionAllow { audit.LogAnnotation(ae, decisionAnnotationKey, decisionAllow) @@ -153,7 +151,7 @@ func WithTKEAuthorization(handler http.Handler, a authorizer.Authorizer, s runti return } - ForbiddenResponse(ctx, attributes, w, req, ae, s, reason) + ForbiddenResponse(ctx, tkeAttributes, w, req, ae, s, reason) }) } diff --git a/pkg/auth/filter/inspector.go b/pkg/auth/filter/inspector.go index dcfa177c9..d6b558a15 100644 --- a/pkg/auth/filter/inspector.go +++ b/pkg/auth/filter/inspector.go @@ -20,33 +20,18 @@ package filter import ( "context" "fmt" + k8serrors "k8s.io/apimachinery/pkg/api/errors" "net/http" - "regexp" - "strings" - "time" - "tkestack.io/tke/pkg/apiserver/util" platformv1 "tkestack.io/tke/api/client/clientset/versioned/typed/platform/v1" "tkestack.io/tke/pkg/apiserver/authentication" - "tkestack.io/tke/pkg/util/apiclient" "tkestack.io/tke/pkg/util/log" - rbacv1 "k8s.io/api/rbac/v1" - k8serrors "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/labels" genericfilters "k8s.io/apiserver/pkg/endpoints/filters" "k8s.io/apiserver/pkg/endpoints/handlers/responsewriters" "k8s.io/apiserver/pkg/endpoints/request" genericapiserver "k8s.io/apiserver/pkg/server" - "k8s.io/client-go/informers" - "k8s.io/client-go/kubernetes" - rbaclisters "k8s.io/client-go/listers/rbac/v1" - "k8s.io/client-go/tools/cache" -) - -var ( - serviceAccountRegExp = regexp.MustCompile(`^system:serviceaccount:([^:]+):(.+)$`) ) type Inspector interface { @@ -54,102 +39,22 @@ type Inspector interface { } type clusterInspector struct { - k8sClient kubernetes.Interface - crbLister rbaclisters.ClusterRoleBindingLister - crLister rbaclisters.ClusterRoleLister platformClient platformv1.PlatformV1Interface privilegedUsername string } -func NewClusterInspector(platformClient platformv1.PlatformV1Interface, privilegedUsername string) (Inspector, error) { - k8sClient, err := apiclient.BuildKubeClient() - if err != nil { - return nil, err - } - informerFactory := informers.NewSharedInformerFactory(k8sClient, time.Minute) - clusterRoleBindingInformer := informerFactory.Rbac().V1().ClusterRoleBindings() - clusterRoleBindingLister := clusterRoleBindingInformer.Lister() - clusterRoleInformer := informerFactory.Rbac().V1().ClusterRoles() - clusterRoleLister := clusterRoleInformer.Lister() - stopCh := util.SetupSignalHandler() - informerFactory.Start(stopCh) - if ok := cache.WaitForCacheSync(stopCh, clusterRoleBindingInformer.Informer().HasSynced, - clusterRoleInformer.Informer().HasSynced); !ok { - return nil, fmt.Errorf("failed to wait for namespaces caches to sync") - } +func NewClusterInspector(platformClient platformv1.PlatformV1Interface, privilegedUsername string) Inspector { return &clusterInspector{ - k8sClient: k8sClient, - crbLister: clusterRoleBindingLister, - crLister: clusterRoleLister, platformClient: platformClient, privilegedUsername: privilegedUsername, - }, nil -} - -func isClusterAdmin(rules []rbacv1.PolicyRule) bool { - if len(rules) != 2 { - return false - } - isAdmin := true - for _, rul := range rules { - if len(rul.APIGroups) == 1 && rul.APIGroups[0] == "*" && - len(rul.Resources) == 1 && rul.Resources[0] == "*" && - len(rul.Verbs) == 1 && rul.Verbs[0] == "*" { - continue - } - if len(rul.NonResourceURLs) == 1 && rul.NonResourceURLs[0] == "*" && - len(rul.Verbs) == 1 && rul.Verbs[0] == "*" { - continue - } - isAdmin = false - break - } - return isAdmin -} - -func (i *clusterInspector) needInspect(ctx context.Context, privilegedUsername string) bool { - username, tenantID := authentication.UsernameAndTenantID(ctx) - if (username == privilegedUsername || username == "system:apiserver") && tenantID == "" { - return false - } - - clusterRoleBindings, err := i.crbLister.List(labels.Everything()) - if err != nil { - log.Errorf("query clusterRoleBindings failed: %+v", err) - return true - } - matches := serviceAccountRegExp.FindStringSubmatch(username) - if len(matches) != 3 { - return true - } - namespace := matches[1] - username = matches[2] - for _, crb := range clusterRoleBindings { - for _, sub := range crb.Subjects { - if sub.Name == username && sub.Namespace == namespace { - cr, err := i.crLister.Get(crb.RoleRef.Name) - if err != nil { - log.Errorf("query clusterRole: %+v failed: %+v", crb.RoleRef.Name, err) - continue - } - if len(cr.Rules) != 2 { - continue - } - log.Debugf("needInspect: username: %+v, namespace: %+v, clusterRole: %+v->%v", - username, namespace, cr.Name, cr.Rules) - if isClusterAdmin(cr.Rules) { - return false - } - } - } } - return true } func (i *clusterInspector) Inspect(handler http.Handler, c *genericapiserver.Config) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) { ctx := req.Context() - if !i.needInspect(ctx, i.privilegedUsername) { + username, tenantID := authentication.UsernameAndTenantID(ctx) + if (username == i.privilegedUsername || username == "system:apiserver") && tenantID == "" { handler.ServeHTTP(w, req) return } @@ -172,19 +77,7 @@ func (i *clusterInspector) Inspect(handler http.Handler, c *genericapiserver.Con "invalid request: too many clusterName in request") return } - username, tenantID := authentication.UsernameAndTenantID(ctx) - // rbac mode use tenantID as suffix of username - if tenantID == "" { - strList := strings.Split(username, ":") - if len(strList) == 4 && strList[0] == "system" && strList[1] == "serviceaccount" { - tenantidStr := strList[len(strList)-1] - index := strings.Index(tenantidStr, "-tenant-") - if index > 0 { - tenantID = tenantidStr[index+8:] - } - } - } - log.Infof(" clusterNames: %+v, username: %+v, tenant: %+v, "+ + log.Infof("WithTKEAuthorization clusterNames: %+v, username: %+v, tenant: %+v, "+ "action: %+v, resource: %+v, name: %+v", clusterNames, username, tenantID, tkeAttributes.GetVerb(), tkeAttributes.GetResource(), tkeAttributes.GetName()) diff --git a/pkg/apiserver/util/signals.go b/pkg/registry/util/client.go similarity index 54% rename from pkg/apiserver/util/signals.go rename to pkg/registry/util/client.go index 5baa3452c..a3357e8eb 100644 --- a/pkg/apiserver/util/signals.go +++ b/pkg/registry/util/client.go @@ -1,7 +1,7 @@ /* * Tencent is pleased to support the open source community by making TKEStack available. * - * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * Copyright (C) 2012-2020 Tencent. All Rights Reserved. * * 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 @@ -18,24 +18,20 @@ package util import ( - "os" - "os/signal" - "syscall" + "k8s.io/client-go/kubernetes" + "k8s.io/client-go/rest" ) -// SetupSignalHandler registered for SIGTERM and SIGINT. A stop channel is returned -// which is closed on one of these signals. If a second signal is caught, the program -// is terminated with exit code 1. -func SetupSignalHandler() (stopCh <-chan struct{}) { - stop := make(chan struct{}) - c := make(chan os.Signal, 2) - signal.Notify(c, os.Interrupt, syscall.SIGTERM) - go func() { - <-c - close(stop) - <-c - os.Exit(1) // second signal. Exit directly. - }() +func BuildKubeClient() (*kubernetes.Clientset, error) { + config, err := rest.InClusterConfig() + if err != nil { + return nil, err + } - return stop + clientset, err := kubernetes.NewForConfig(config) + if err != nil { + return nil, err + } + + return clientset, nil } diff --git a/pkg/registry/util/coredns.go b/pkg/registry/util/coredns.go index 59b94260b..6d4729911 100644 --- a/pkg/registry/util/coredns.go +++ b/pkg/registry/util/coredns.go @@ -22,7 +22,6 @@ import ( "encoding/json" "sync" - "tkestack.io/tke/pkg/util/apiclient" "tkestack.io/tke/pkg/util/log" "github.com/caddyserver/caddy/caddyfile" @@ -56,7 +55,7 @@ type CoreDNS struct { } func NewCoreDNS() (*CoreDNS, error) { - kubeClient, err := apiclient.BuildKubeClient() + kubeClient, err := BuildKubeClient() if err != nil { return nil, err } diff --git a/pkg/util/apiclient/client.go b/pkg/util/apiclient/client.go index b3223d2a0..b892175ae 100644 --- a/pkg/util/apiclient/client.go +++ b/pkg/util/apiclient/client.go @@ -37,20 +37,6 @@ import ( toolswatch "k8s.io/client-go/tools/watch" ) -func BuildKubeClient() (*kubernetes.Clientset, error) { - config, err := rest.InClusterConfig() - if err != nil { - return nil, err - } - - clientset, err := kubernetes.NewForConfig(config) - if err != nil { - return nil, err - } - - return clientset, nil -} - // GetClientset return clientset func GetClientset(masterEndpoint string, token string, caCert []byte) (*kubernetes.Clientset, error) { restConfig := &rest.Config{ From 827f712b8fa3c886149739de33cec6620d02eaf5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=88=98=E7=A5=9E=E8=A5=BF=E7=BA=A2=E6=9F=BF?= <34213033+TomatoAres@users.noreply.github.com> Date: Fri, 27 Aug 2021 11:08:11 +0800 Subject: [PATCH 26/62] docs: upgrade cluster to 1.21 (#1516) Co-authored-by: Cui Shuaijie --- .../best-practices/cluster-upgrade-guide.md | 124 ++++++++------- .../custom-k8s-version-upgrade.md | 146 +++++++++++++++--- .../best-practices/pic/import-success.png | Bin 0 -> 324612 bytes .../best-practices/pic/upgrade-cluster.png | Bin 0 -> 210329 bytes 4 files changed, 191 insertions(+), 79 deletions(-) create mode 100644 docs/guide/zh-CN/best-practices/pic/import-success.png create mode 100644 docs/guide/zh-CN/best-practices/pic/upgrade-cluster.png diff --git a/docs/guide/zh-CN/best-practices/cluster-upgrade-guide.md b/docs/guide/zh-CN/best-practices/cluster-upgrade-guide.md index bed770067..523926f87 100644 --- a/docs/guide/zh-CN/best-practices/cluster-upgrade-guide.md +++ b/docs/guide/zh-CN/best-practices/cluster-upgrade-guide.md @@ -1,55 +1,62 @@ # K8S 版本升级说明 -TKEStack提供升级 Kubernetes 版本的功能,您可通过此功能对运行中的 Kubernetes 集群进行升级。在升级 kubernetes 版本之前,建议您查阅 [CHANGELOG](https://github.com/kubernetes/kubernetes/tree/master/CHANGELOG) 确认Kubernetes 版本差异。 +TKEStack提供升级 Kubernetes 版本的功能,您可通过此功能对运行中的 Kubernetes 集群进行升级。 + +在升级 kubernetes 版本之前,建议您查阅 [CHANGELOG](https://github.com/kubernetes/kubernetes/tree/master/CHANGELOG) 确认Kubernetes 版本差异。 ## Concept -主版本:k8s版本号的格式vx.y.z中的x为主版本,例如v1.18.3主版本是1 +- 主版本:k8s版本号的格式vx.y.z中的x为主版本,例如v1.18.3主版本是1 -次要版本:k8s版本号的格式vx.y.z中的y为次要版本,例如v1.18.3的次要版本是18 +- 次要版本:k8s版本号的格式vx.y.z中的y为次要版本,例如v1.18.3的次要版本是18 -补丁版本:k8s版本号的格式vx.y.z中的z为补丁版本 +- 补丁版本:k8s版本号的格式vx.y.z中的z为补丁版本 ## 升级须知 -1.升级属于不可逆操作、请谨慎进行。 +1. 升级属于不可逆操作、请谨慎进行。 -2.请在升级集群前,查看集群下业务状态是否均为健康状态。 +2. 请在升级集群前,查看集群下业务状态是否均为健康状态。 -3.升级期间不建议对集群进行任何操作。 +3. 升级期间不建议对集群进行任何操作。 -4.仅支持次要版本和补丁版本升级,不支持降级,不支持跨多个版本升级(例如1.16跳过1.17直接升级至1.18),且仅当集群内 Master 版本和 Node 版本一致时才可继续升级下一个版本。 +4. 仅支持次要版本和补丁版本升级, + 1. 不支持降级, + 2. 不支持跨多个版本升级(例如1.16跳过1.17直接升级至1.18), + 3. 且仅当集群内 Master 版本和 Node 版本一致时才可继续升级下一个版本。 ## 升级技术原理 升级的过程为:升级包准备、升级 Master 和升级 Node。 -1.升级包准备 - -当前运行集群所需要的镜像二进制等都保存在tke-installer中,已经安装好的TKEStack已包含至少三个连续的 K8S 版本,如TKEStack v1.5.0 中包含K8S v1.16.9, v1.17.13 和 v1.18.3,同时也包含了对应的kubeadm,kubelet和kubectl版本。 - -2.升级Master +1. 升级包准备 -Master升级采用滚动升级的方式,同一时间只会对一个节点进行升级,只有当前节点升级成功才会进行下个节点的升级。 + - 当前运行集群所需要的镜像二进制等都保存在 `tke-installer` 中, + - 已经安装好的 `TKEStack` 已包含至少三个连续的 K8S 版本,如 TKEStack v1.5.0 中包含K8S v1.16.9, v1.17.13 和 v1.18.3, + - 同时也包含了对应的 kubeadm,kubelet 和 kubectl 版本。 -Master升级调用kubeadm 处理集群的升级操作,Kubeadm 工作原理参考:[how it works](https://kubernetes.io/docs/tasks/administer-cluster/kubeadm/kubeadm-upgrade/#how-it-works) +2. 升级 Master -3.升级Node + - Master 升级采用滚动升级的方式,同一时间只会对一个节点进行升级,只有当前节点升级成功才会进行下个节点的升级。 -节点原地升级,采用滚动升级的方式,即同一时间只会对一个节点进行升级,只有当前节点升级成功后才会进行下个节点的升级。每个节点升级时执行以下操作: + - Master 升级调用 kubeadm 处理集群的升级操作,Kubeadm 工作原理参考:[how it works](https://kubernetes.io/docs/tasks/administer-cluster/kubeadm/kubeadm-upgrade/#how-it-works) -- 替换和重启节点上的 kubelet组件。 +3. 升级Node -- 从集群取回 kubeadm ClusterConfiguration。 + - 节点原地升级,采用滚动升级的方式,即同一时间只会对一个节点进行升级,只有当前节点升级成功后才会进行下个节点的升级。每个节点升级时执行以下操作: -- 为本节点升级 kubelet 配置 + 1. 替换和重启节点上的 kubelet组件。 + 2. 从集群取回 kubeadm ClusterConfiguration。 + 3. 为本节点升级 kubelet 配置 ## 操作步骤 1.登录 平台管理 控制台,选择左侧导航栏中的【集群管理】。 - + 2.在“集群管理”页面,选择需要升级的集群,点击右侧的【升级Master】按钮,进入集群升级页面。 - + +![cls-global-upgrade](./pic/upgrade-cluster.png) + 3.在集群升级页面配置升级所需参数,如下图所示: ![cls-master-upgrade](./pic/cls-master-upgrade.png) @@ -64,7 +71,7 @@ Master升级调用kubeadm 处理集群的升级操作,Kubeadm 工作原理参 7.在点击提交按钮,等待升级完成。同时可以点击【状态】按钮查看当前升级状态。 -###其他技术细节 +### 其他技术细节 1.升级中任何步骤出现错误,系统都将自动进行重试,用户可在升级进度界面中得到错误信息。 @@ -74,80 +81,85 @@ Master节点升级存在一定风险,用户在升级前,应检查集群状 ### 重启kubelet的风险点 -1.Not Ready Pod 数目超过设置值导致升级卡死 +#### 1. Not Ready Pod 数目超过设置值导致升级卡死 选择了【驱逐节点】选项,同时节点过少,而设置【最大不可用pod数】比例过低,没有足够多的节点承载pod的迁移会导致升级卡死。 规避措施: - - 尽如果业务对pod可用比例较高,请考虑选择升级前不驱逐节点。 +- 尽如果业务对pod可用比例较高,请考虑选择升级前不驱逐节点。 -2.kubelet进程无法启动 +#### 2.kubelet进程无法启动 - 当该master节点资源十分紧张的时候,启动kubelet有可能失败,从而导致节点升级无法正常完成。 +当该master节点资源十分紧张的时候,启动kubelet有可能失败,从而导致节点升级无法正常完成。 规避措施: - - 尽量不要将业务Pod运行于master节点 +- 尽量不要将业务Pod运行于master节点 - - 确保节点资源不能处于高度紧张状态 +- 确保节点资源不能处于高度紧张状态 -3.容器重启 +#### 3.容器重启 - 某些版本kubelet与旧版本对于container的管理有一定差异,有可能导致节点上所有container重启 +某些版本kubelet与旧版本对于container的管理有一定差异,有可能导致节点上所有container重启 规避措施: - - 加强container的重启容忍度,例如确保deployment的副本数不为1 +- 加强container的重启容忍度,例如确保deployment的副本数不为1 -## FQA -1.何时使用K8S升级功能: +## FAQ -答:当集群版本不满足业务需求,K8S漏洞修复,或当前集群版本低于TKEStack所能支持的最小版本。 - -2.升级的目标版本能否选择: - -答:目前只支持升级到下一个次要版本,例如1.16.x的集群只能升到1.17.x;或者升级到补丁版本,例如1.16.x升级到 1.16.z +### 1. 何时使用K8S升级功能: -3.为什么我看不到升级worker按钮: +答:当集群版本不满足业务需求,K8S漏洞修复,或当前集群版本低于TKEStack所能支持的最小版本。 -答:只有当前集群所有worker节点版本与master节点版本相同时,才允许进行master版本升级。 +### 2. 升级的目标版本能否选择: -4.是否支持回滚: +- 答:目前只支持升级到下一个次要版本,例如1.16.x的集群只能升到1.17.x;或者升级到补丁版本,例如1.16.x升级到 1.16.z +- 另外:不允许从 tke 发行版升级到社区版,比如 `1.20.4-tke ——>1.20.9` -答:不支持回滚操作。 +### 3. 为什么我看不到升级worker按钮: -5.自行修改的参数怎么办 +- 答:只有当前集群所有worker节点版本与master节点版本相同时,才允许进行master版本升级。 -答:master升级将会把用户自行修改的参数重置成与新建集群时的一致,若用户有特殊参数修改,建议升级完成后手动添加。 +### 4. 是否支持回滚: -6.升级时出现异常情况如何处理? +- 答:不支持回滚操作。 -答:升级过程中有可能出现意想不到的问题而导致升级失败或升级过程被卡住。针对失败发生的时间点不同,管理员处理策略有所不同。 +### 5. 自行修改的参数怎么办 -- 失败发生在k8s集群版本号变化之前: +- 答:master升级将会把用户自行修改的参数重置成与新建集群时的一致,若用户有特殊参数修改,建议升级完成后手动添加。 -此时k8集群版本号未发生变化,首节点尚未升级,可回滚。可以将Cluster.Spec.Version的版本号修改为与当前k8s版本一致,集群便可恢复正常运行状态。 +### 6. 升级时出现异常情况如何处理? -- 失败发生在k8s集群版本号变化之后: +- 答:升级过程中有可能出现意想不到的问题而导致升级失败或升级过程被卡住。针对失败发生的时间点不同,管理员处理策略有所不同: -此时集群的首节点已经升级成功,原则上不允许回滚到低版本。需要管理员排查其他节点没有按照预期进行升级到原因,解决问题后升级流程会自动向前推进。 + 1. 失败发生在k8s集群版本号变化之前:此时k8集群版本号未发生变化,首节点尚未升级,可回滚。可以将Cluster.Spec.Version的版本号修改为与当前k8s版本一致,集群便可恢复正常运行状态。 -7.Not Ready Pod数目超过设置值导致升级卡死 + 2. 失败发生在k8s集群版本号变化之后:此时集群的首节点已经升级成功,原则上不允许回滚到低版本。需要管理员排查其他节点没有按照预期进行升级到原因,解决问题后升级流程会自动向前推进。 -答:升级时遇到Not Ready Pod数目超过设置值导致升级卡死的情况,检查是否是由于驱逐导致的Not Ready状态,可尝试修改cluster.spec.features.upgrade.strategy. drainNodeBeforeUpgrade,设置false不驱逐节点, 或调大 maxUnready 值,以允许容忍更多的Not Ready Pod。 +### 7. Not Ready Pod数目超过设置值导致升级卡死 +- 答:升级时遇到Not Ready Pod数目超过设置值导致升级卡死的情况, + - 检查是否是由于驱逐导致的Not Ready状态,可尝试修改cluster.spec.features.upgrade.strategy. drainNodeBeforeUpgrade,设置false不驱逐节点, + - 或调大 maxUnready 值,以允许容忍更多的Not Ready Pod。 ## 案例分析 -升级时间点选择不当 +### 升级时间点选择不当 - 案例详情:集群 A 的运维人员在工作日业务高峰期进行节点升级操作,由于没有配置合理的扩缩容机制,业务 Pod 一直处于高负载状态,某个节点升级失败导致该节点 Pod 重启,剩余 Pod 无法满足高峰期时段的业务负载导致出现大量访问异常,业务受到较为严重的影响。 - 最佳实践:选择业务低峰期进行节点升级将大大降低业务受影响的概率。 -成功案例 +### 成功案例 - 案例详情:集群 D 计划进行节点升级。运维人员决定先升级测试集群,成功后再升级生产集群,并将升级时间选在业务负载较低的周五凌晨2点。升级前,他通过监控面板观察到各目标节点的负载情况都较低,再通过节点详情页观察每个节点上 Pod 分布较为合理。第一个节点开始升级后,运维人员点击了暂停升级任务,随后第一个节点升级完成后任务到达暂停点自动转为暂停状态。运维人员再次检查被升级节点,确认无异常后点击继续任务,升级动作继续进行。在随后升级过程中,运维人员时刻观察集群和业务情况,直到升级全部完成。成功升级测试集群后,运维人员继续以同样的步骤成功升级生产集群。 -- 最佳实践:1.先升级测试集群或者开发集群,成功后再升级生产集群;2. 时间选择合理;3. 升级前检查集群状态;4.先升级少量节点观察并解决问题;5.升级过程中继续保持观察。 +## 最佳实践 + +1. 先升级测试集群或者开发集群,成功后再升级生产集群; +2. 时间选择合理; +3. 升级前检查集群状态; +4. 先升级少量节点观察并解决问题; +5. 升级过程中继续保持观察。 diff --git a/docs/guide/zh-CN/best-practices/custom-k8s-version-upgrade.md b/docs/guide/zh-CN/best-practices/custom-k8s-version-upgrade.md index 60b721363..1f042c488 100644 --- a/docs/guide/zh-CN/best-practices/custom-k8s-version-upgrade.md +++ b/docs/guide/zh-CN/best-practices/custom-k8s-version-upgrade.md @@ -1,57 +1,157 @@ # 使用installer进行自定义k8s版本升级 +注意: + +- 以下所有操作均在 `global` 集群 `master` 节点上操作 +- 操作的节点当前可用磁盘最少 `30G`,建议`50G`以上,可以手动检查: + + ```sh + # df -h -BG /opt + 文件系统 1G-块 已用 可用 已用% 挂载点 + /dev/vda1 253G 78G 166G 32% / + ``` + ## 物料准备 -升级所需物料需要存放到`/opt/tke-installer/data/`下,默认物料文件夹名称为`custom_upgrade_resource`,由于installer以容器形式执行命令会挂在`/opt/tke-installer/data/`到执行目录的`data/`目录下,installer会默认从`data/custom_upgrade_resource`中获取物料,如用户想指定其他目录请通过installer的`--prepare-custom-images --upgrade-resource-dir your_resource_dir`在准备物料阶段指定位置,`--upgrade-resource-dir`未指定时默认值为`data/custom_upgrade_resource`。 +核心物料简介: + +1. 二进制文件 +2. 升级所需镜像 +3. 集群的 `kubeconfig` 文件 + +大致步骤: + +- 升级所需物料需要存放到`/opt/tke-installer/data/`下, +- 默认物料文件夹名称为`custom_upgrade_resource`, + - 由于installer以容器形式执行命令会挂在`/opt/tke-installer/data/`到执行目录的`data/`目录下,installer会默认从`data/custom_upgrade_resource`中获取物料, + - 如用户想指定其他目录请通过installer的`--upgrade-resource-dir [your_resource_dir]`在准备物料阶段指定位置, + - `--upgrade-resource-dir`未指定时默认值为`data/custom_upgrade_resource`。 + +- `custom_upgrade_resource`下需要有且仅有一个以版本号命名的文件夹, + + ```sh + mkdir -p /opt/tke-installer/data/custom_upgrade_resource/1.16.5 + cd /opt/tke-installer/data/custom_upgrade_resource/1.16.5 + mkdir images + mkdir bins + ``` + + - 此文件夹下需要有`images`和`bins`文件夹,文件目录结构 + + ```sh + # tree /opt/tke-installer/data/ + /opt/tke-installer/data/ + └── custom_upgrade_resource + └── 1.16.5 + ├── bins + └── images + ``` -`custom_upgrade_resource`下需要有且仅有一个以版本号命名的文件夹,例如`1.16.15`,此文件夹下需要有`images`和`bins`文件夹。 +下面将介绍详细准备步骤 ### images -`images`文件夹下用于存放自定义K8s版本的镜像的tar包,如kube-proxy等。在镜像存为tar包之前需要注意: +`images`文件夹下用于存放自定义 K8s 版本的镜像的 tar 包,如 kube-proxy 等。 -1. 镜像名的domain需要统一改为tkestack,否则将不会被installer识别为需要维护的镜像; -2. 镜像名需要携带cpu架构,由于TKEStack支持多架构,installer会将镜像统以`multi-CPU architecture`维护,需要导入镜像携带cpu架构。 +在镜像存为 tar 包之前需要注意: -以官方amd64架构的kube-proxy为例子,通过执行`docker tag k8s.gcr.io/kube-proxy-amd64:v1.16.15 tkestack/kube-proxy-amd64:v1.16.15 && docker save -o kp-amd-16.tar tkestack/kube-proxy-amd64:v1.16.15`就能得到一个可以被installer识别的镜像tar包。 +1. 镜像名的 `repo` 需要统一改为 `tkestack`,否则将不会被 `installer` 识别为需要维护的镜像; +2. 镜像名需要携带 `cpu` 架构,由于 `TKEStack` 支持多种 `CPU架构(multi-arch)`,installer会将镜像统以`multi-CPU architecture`维护,需要导入镜像携带 cpu 架构。 + + - 以官方amd64架构的kube-proxy为例子,执行如下命令,就能得到一个可以被installer识别的镜像tar包。 + + ```sh + docker tag k8s.gcr.io/kube-proxy-amd64:v1.16.5 tkestack/kube-proxy-amd64:v1.16.5 + docker save -o kube-proxy-amd64 tkestack/kube-proxy-amd64:v1.16.5 + ``` ### bins -`bins`目录下可以有两个目录`linux-amd64`和`linux-arm64`,分别用于存放amd64架构和arm64架构的二进制压缩包,用户可以根据自身需求同时创建两个或其中一个。这两个文件夹下需要有一个压缩包,命名规范需要符合`kubernetes-node-linux-$arch-v$version.tar.gz`。此压缩包可以从官方下载下来,以1.16.15版本amd64架构的K8s为例,可以通过命令`curl -o kubernetes-node-linux-amd64-v1.16.15.tar.gz -L https://dl.k8s.io/v1.16.15/kubernetes-node-linux-amd64.tar.gz`下载并重命名为可以被installer识别的压缩包。 +- `bins`目录下可以有两个目录`linux-amd64`和`linux-arm64`,分别用于存放amd64架构和arm64架构的二进制压缩包,用户可以根据自身需求同时创建两个或其中一个。 + +- 这两个文件夹下需要有一个压缩包,命名规范需要符合`kubernetes-node-linux-$arch-v$version.tar.gz`。 + - 此压缩包可以从官方下载下来,以1.16.5版本amd64架构的K8s为例,可以通过命令 + + ```sh + curl -o kubernetes-node-linux-amd64-v1.16.5.tar.gz -L https://dl.k8s.io/v1.16.5/kubernetes-node-linux-amd64.tar.gz + ``` + + 下载并重命名为可以被installer识别的压缩包。 最终文件目录结构可以参考: ```sh /opt/tke-installer/data/custom_upgrade_resource/ -`-- 1.16.15 - |-- bins - | `-- linux-amd64 - | `-- kubernetes-node-linux-amd64-v1.16.15.tar.gz - `-- images - |-- kube-proxy-amd64.tar - |-- kube-controller-manager-amd64.tar - |-- kube-apiserver-amd64.tar - `-- kube-scheduler-amd64.tar +└── 1.16.5 + ├── bins + │   └── linux-amd64 + │   └── kubernetes-node-linux-amd64-v1.16.5.tar.gz + └── images + ├── kube-apiserver-amd64.tar + ├── kube-controller-manager-amd64.tar + ├── kube-proxy-amd64.tar + └── kube-schedular-amd64.tar +``` + +### kubeconfig 文件 + +提前将 `kubeconfig` 文件复制到指定位置:`/opt/tke-installer/conf/kubeconfig` + +```sh +mkdir -p /opt/tke-installer/conf +cp ~/.kube/config /opt/tke-installer/conf/kubeconfig ``` ### 使用installer完成升级 -升级时注意要在global集群节点上执行,提前将kubeconfig文件存放到指定位置等事项,可参考[K8S 版本升级说明](https://github.com/tkestack/tke/blob/master/docs/guide/zh-CN/best-practices/cluster-upgrade-guide.md)。 +1. 升级物料准备完成之后,导入准备的资源:`tke-installer-linux-amd64-xxx.run --prepare-custom-images` + - 注意:`tke-installer` 版本需要和之前部署该集群使用的 `tke-installer` 版本保持一致 + 比如我们当前的集群使用 `tke-installer-1.7` 部署的,升级用的 installer 也需要使用 `tke-installer-1.7` + - 查看导入日志,最终停在这里,该步骤成功: -升级物料准备完成之后,首先通过`tke-installer-linux-amd64-xxx.run --prepare-custom-images`将用户的自定义K8s版本资源以镜像方式准备好,执行成功后再使用`tke-installer-linux-amd64-xxx.run --upgrade`执行升级。 + ```log + # tail -f /opt/tke-installer/data/tke.log + ... + + 2021-08-26 07:27:12.734 info tke-installer ===>prepare custom images task [Sucesss] [392.225361s] + ``` -触发集群升级需要在global集群上修改cluster资源对象内容: + 执行成功之后:会在集群升级页面上多一个选项 -```sh -kubectl edit cluster cls-yourcluster -``` + ![upgrade-cluster](.pic/../pic/upgrade-cluster.png) -修改`spec.version`中的内容为`1.16.15`。 + ![import-success](./pic/import-success.png) + +2. 执行成功后再使用`tke-installer-linux-amd64-xxx.run --upgrade`执行升级。 + - 该步骤执行时间较长,需耐心等待 + - 查看导入日志,确保升级成功: + +3. 触发集群升级需要在 `global` 集群上修改指定 `cluster` 资源对象内容: + + ```sh + kubectl edit cluster [cls-yourcluster] + ``` + + 修改`spec.version`中的内容为`1.16.5` + + 这步操作也可以在 tkestack界面上执行,详情见[集群升级指引](./cluster-upgrade-guide.md) + +### 已知问题 > 目前Web UI不允许补丁版本升级,会导致可以在UI升级选项中可以看到`1.16.15`版本,但是提示无法升级到该版本,后续版本中将会[修复](https://github.com/tkestack/tke/issues/1020)。当前请使用kubectl修改cluster资源对象内容升级自定义版本。 > K8s 1.16.x版本使用kubeadm升级存在[已知bug](https://github.com/kubernetes/kubernetes/issues/88725),会导致coreDNS的pod启动失败。遇到此场景请首先使用`kubectl get -n kube-system cm coredns -o yaml`观察`Corefile`和`Corefile-backup`内容是否一致,如不一致请确保`Corefile`内容为期望内容。之后请使用`kubectl edit -n kube-system deployments.apps coredns`将使用`Corefile-backup`的地方统一修改为`Corefile`。 +## FAQ + +1. 页面上升级集群失败,http 响应`422 Unprocessable Entity`: + - 漏执行步骤 `tke-installer-linux-amd64-xxx.run --upgrade` + +2. 执行 `tke-installer-linux-amd64-xxx.run --prepare-custom-images` 不生效、失败: + 1. 检查当前磁盘可用容量是否够用 + 2. 检查 `kubeconfig` 是否按步骤配置 + 3. 检查 使用 `installer` 版本是否和部署当前的集群版本一致 + # 用户手动进行自定义k8s版本升级 用户可以通过向TKEStack平台提供自定义版本的k8s,以允许集群升级到非内置的版本。本文将以v1.16.15版本的k8s作为例子演示用户如何将集群升级到自定义版本。本文中只以amd64环境作为示例,如果用户希望自己的物料镜像可以支持`multi-CPU architecture`,请在制作镜像和推送镜像阶段参考[Leverage multi-CPU architecture support](https://docs.docker.com/docker-for-mac/multi-arch/)和[构建多CPU架构支持的Docker镜像](https://blog.csdn.net/dev_csdn/article/details/79138424)。 diff --git a/docs/guide/zh-CN/best-practices/pic/import-success.png b/docs/guide/zh-CN/best-practices/pic/import-success.png new file mode 100644 index 0000000000000000000000000000000000000000..ff782628f2e29da1cec753e654b5eacfb13ff8f9 GIT binary patch literal 324612 zcmeFZXH-;M*ENU=iXcg#P>>)7B%8=lr9ePHB<5PkW}OhMJPZ40m)Eg ziXb34=hXZ7q}%WKzU~L@A3eJ79Rn%21)Q_b+HQ3*P}{P3FO z?W@52NV-_8`;V1LuwUY_J-+<(%DvmzrM;Ug(`EEevV$Y%B? z!{D-eGEap~Pu31G8*#2<2k|RanDW^XS0XHA_1Ox3+P-s1!ipJB1M&1iBs;V}@?u@R zd*)meRag}J0?L((BN<(9-o>x*f^hA@)SfR#ez34AsH40=H zQe3p9Bbqw*b@~2#`SY)qao_s*UiQM(wO_n}hnJRNjq^3QQUXPB`hxoBY-qMk< z^^ey%{hSJvufG3WGKh%!kg?^9)@OE7&pD10zBjJ4wBW_W?wd93d5dJD5WaUeZBN{G|XB2o@%UY!)48pq@c&)8NnFXq(}h^)3YxjDW_pi)})%_>sU+j%_VjI5@I%K0-*#}_GeGgU*A#8;)yaCP1Y&B zQm#EW@rpn`U*C(7j^e3W<$UFMyur=OxUbIsz`AGEXL8=~GeO|DagK{*K0rFvtMME8kS&JMi3JLWdf zJ9VNdlyQ_j@mMNbF@sn7rOu zMAW-pY@L-=f9!u?dDU(0VX*_5Bc8-n(Tl0v9s(aHzOP=@mF?ee-8a&0qeO678vQUm zsbWX4d%J({j~LKhq;r7rdBr!yRd+rk2e z={S{lKARhw^|dSiQ#1yH*;Jv}pn3H~(dwYg6V0RUn|E@Y8KZPo#-(pO8` zT)StkVQnQ{jKealg3;y$d@!6cmJIVGxFK*JioHG|oOcA(JYj+oB;9H@4E$~f) z-c@DJwAvZ%RAnAT-#*=-RUWM`Lj`P$)Y4z0xv3m|nYk%t>U?+Q-3V*QFt1h`7gptV zIS#Ln1$okUUNpd_c#P#Gb4Bdi^=CK2h+8i5U3_yfeL{1duIl>bcPz>0x`>t=>~z_z zZ(B23lUmajL=T9%JzKo~{^{+T6fcMw6K>Lxe~@^(Anq#OB(5Y*{aLe+aPY&Tc<@cb zQ2ie`KWx@%*6*z=tjpQZ!b5b$E+&1I6A8N-HXTMCCfcGeaUnGXA!DC(UiM>VMeklO zo(b#L!!4SvlHlOrl3-N3GIeG`6N5$~)W&3skL)y_C${vqrb|I)zH0Q9rUC$3WI zJxg<+HZQqccfVR4 zI$8`_4XL$9Uslr^2nO;!<2P&0AJS2JQ_VqRam|EqOP8wjqaq}_#&%7U_po+V>-+NuhD9Pp(FVh9Y|&d$YEfd*t!@3W zi4Ru_wN+lL{!q;>;5O(oZZ5u58m5|Cz;Cg~H~h9uf3}EuAbns|(Lk|FktxeuF-OrI zO^9Yh<7e-vV9GuXS(z1@qX&uy?1oi`f(zpH)$|Sms2hUy7z)%39ns4<)jsYqM`hbv z+a1>esdot*2ssFMuFVBs50<0Ox|YXB63;E|EFBw{%bn6L*nW9dVz!knBOouJSO25r zFm65W2}vP|!VQaxZuN>>crHgS(WtUTfd&4^{HSJNF?IAko9S;wH-st<%4aKAtWXO& z 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 literal 0 HcmV?d00001 diff --git a/docs/guide/zh-CN/best-practices/pic/upgrade-cluster.png b/docs/guide/zh-CN/best-practices/pic/upgrade-cluster.png new file mode 100644 index 0000000000000000000000000000000000000000..8906c709b415c82081cbcfe4d29869623b6ecd65 GIT binary patch literal 210329 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 Zi#e)ivNU#Jjtu_0A|-br<($sl{{czBr Date: Fri, 27 Aug 2021 11:09:07 +0800 Subject: [PATCH 27/62] feat(platform): use kube-apiserver as authz server (#1513) --- charts/tke-auth-api/templates/configmap.yaml | 3 +- .../tke-application-api.yaml | 6 --- .../manifests/tke-auth-api/tke-auth-api.yaml | 3 +- .../tke-business-api/tke-business-api.yaml | 6 --- .../tke-logagent-api/tke-logagent-api.yaml | 6 --- .../manifests/tke-mesh-api/tke-mesh-api.yaml | 6 --- .../tke-monitor-api/tke-monitor-api.yaml | 6 --- .../tke-notify-api/tke-notify-api.yaml | 6 --- .../tke-platform-api/tke-platform-api.yaml | 6 --- .../tke-registry-api/tke-registry-api.yaml | 6 --- pkg/apiserver/authorization/authorization.go | 14 +++++- pkg/apiserver/handler/chain.go | 4 +- pkg/apiserver/options/authorization.go | 47 ++++++++----------- pkg/auth/filter/filter.go | 40 ++++++++++++---- pkg/auth/filter/inspector.go | 7 ++- 15 files changed, 75 insertions(+), 91 deletions(-) diff --git a/charts/tke-auth-api/templates/configmap.yaml b/charts/tke-auth-api/templates/configmap.yaml index 198071834..924415a70 100644 --- a/charts/tke-auth-api/templates/configmap.yaml +++ b/charts/tke-auth-api/templates/configmap.yaml @@ -6,7 +6,8 @@ metadata: {{- include "tke-auth-api.labels" . | nindent 4 }} data: abac-policy.json: | - {"apiVersion":"abac.authorization.kubernetes.io/v1beta1","kind":"Policy","spec":{"user":"system:*","namespace":"*", "resource":"*","apiGroup":"*", "group": "*", "nonResourcePath":"*"}} + {"apiVersion":"abac.authorization.kubernetes.io/v1beta1","kind":"Policy","spec":{"user":"system:kube-*|system:serviceaccount:kube-system:*","namespace":"*", "resource":"*","apiGroup":"*tkestack.io", "group": "*", "nonResourcePath":"*"}} + {"apiVersion":"abac.authorization.kubernetes.io/v1beta1","kind":"Policy","spec":{"user":"^system:serviceaccount:tke:default$","namespace":"*", "resource":"*","apiGroup":"*", "group": "*", "nonResourcePath":"*"}} tke-auth-api.toml: | [secure_serving] tls_cert_file = "/app/certs/tke-auth-api/tls.crt" diff --git a/cmd/tke-installer/app/installer/manifests/tke-application-api/tke-application-api.yaml b/cmd/tke-installer/app/installer/manifests/tke-application-api/tke-application-api.yaml index 719e1b981..a4537ef17 100644 --- a/cmd/tke-installer/app/installer/manifests/tke-application-api/tke-application-api.yaml +++ b/cmd/tke-installer/app/installer/manifests/tke-application-api/tke-application-api.yaml @@ -123,12 +123,6 @@ data: group_headers = "X-Remote-Group" extra_headers_prefix = "X-Remote-Extra-" - [authorization] -{{- if .EnableAuth }} - mode = "Webhook" - webhook_config_file = "/app/conf/tke-auth-webhook.yaml" -{{- end }} - [secure_serving] tls_cert_file = "/app/certs/server.crt" tls_private_key_file = "/app/certs/server.key" diff --git a/cmd/tke-installer/app/installer/manifests/tke-auth-api/tke-auth-api.yaml b/cmd/tke-installer/app/installer/manifests/tke-auth-api/tke-auth-api.yaml index fb2cccc00..8eedcb0ac 100644 --- a/cmd/tke-installer/app/installer/manifests/tke-auth-api/tke-auth-api.yaml +++ b/cmd/tke-installer/app/installer/manifests/tke-auth-api/tke-auth-api.yaml @@ -96,7 +96,8 @@ metadata: namespace: tke data: abac-policy.json: | - {"apiVersion":"abac.authorization.kubernetes.io/v1beta1","kind":"Policy","spec":{"user":"system:*","namespace":"*", "resource":"*","apiGroup":"*", "group": "*", "nonResourcePath":"*"}} + {"apiVersion":"abac.authorization.kubernetes.io/v1beta1","kind":"Policy","spec":{"user":"system:kube-*|system:serviceaccount:kube-system:*","namespace":"*", "resource":"*","apiGroup":"*tkestack.io", "group": "*", "nonResourcePath":"*"}} + {"apiVersion":"abac.authorization.kubernetes.io/v1beta1","kind":"Policy","spec":{"user":"^system:serviceaccount:tke:default$","namespace":"*", "resource":"*","apiGroup":"*", "group": "*", "nonResourcePath":"*"}} tke-auth-api.toml: | [secure_serving] tls_cert_file = "/app/certs/server.crt" diff --git a/cmd/tke-installer/app/installer/manifests/tke-business-api/tke-business-api.yaml b/cmd/tke-installer/app/installer/manifests/tke-business-api/tke-business-api.yaml index 2d9d06cb2..2047da149 100644 --- a/cmd/tke-installer/app/installer/manifests/tke-business-api/tke-business-api.yaml +++ b/cmd/tke-installer/app/installer/manifests/tke-business-api/tke-business-api.yaml @@ -138,12 +138,6 @@ data: group_headers = "X-Remote-Group" extra_headers_prefix = "X-Remote-Extra-" - [authorization] -{{- if .EnableAuth }} - mode = "Webhook" - webhook_config_file = "/app/conf/tke-auth-webhook.yaml" -{{- end }} - [client] [client.platform] diff --git a/cmd/tke-installer/app/installer/manifests/tke-logagent-api/tke-logagent-api.yaml b/cmd/tke-installer/app/installer/manifests/tke-logagent-api/tke-logagent-api.yaml index d50905446..1e0c61048 100644 --- a/cmd/tke-installer/app/installer/manifests/tke-logagent-api/tke-logagent-api.yaml +++ b/cmd/tke-installer/app/installer/manifests/tke-logagent-api/tke-logagent-api.yaml @@ -138,12 +138,6 @@ data: group_headers = "X-Remote-Group" extra_headers_prefix = "X-Remote-Extra-" - [authorization] -{{- if .EnableAuth }} - mode = "Webhook" - webhook_config_file = "/app/conf/tke-auth-webhook.yaml" -{{- end }} - [client] [client.platform] diff --git a/cmd/tke-installer/app/installer/manifests/tke-mesh-api/tke-mesh-api.yaml b/cmd/tke-installer/app/installer/manifests/tke-mesh-api/tke-mesh-api.yaml index b93d76a23..9577c2ded 100644 --- a/cmd/tke-installer/app/installer/manifests/tke-mesh-api/tke-mesh-api.yaml +++ b/cmd/tke-installer/app/installer/manifests/tke-mesh-api/tke-mesh-api.yaml @@ -140,12 +140,6 @@ data: group_headers = "X-Remote-Group" extra_headers_prefix = "X-Remote-Extra-" - [authorization] -{{- if .EnableAuth }} - mode = "Webhook" - webhook_config_file = "/app/conf/tke-auth-webhook.yaml" -{{- end }} - [client] [client.platform] diff --git a/cmd/tke-installer/app/installer/manifests/tke-monitor-api/tke-monitor-api.yaml b/cmd/tke-installer/app/installer/manifests/tke-monitor-api/tke-monitor-api.yaml index e0e633e0f..fe14985a9 100644 --- a/cmd/tke-installer/app/installer/manifests/tke-monitor-api/tke-monitor-api.yaml +++ b/cmd/tke-installer/app/installer/manifests/tke-monitor-api/tke-monitor-api.yaml @@ -140,12 +140,6 @@ data: group_headers = "X-Remote-Group" extra_headers_prefix = "X-Remote-Extra-" - [authorization] -{{- if .EnableAuth }} - mode = "Webhook" - webhook_config_file = "/app/conf/tke-auth-webhook.yaml" -{{- end }} - [client] [client.platform] diff --git a/cmd/tke-installer/app/installer/manifests/tke-notify-api/tke-notify-api.yaml b/cmd/tke-installer/app/installer/manifests/tke-notify-api/tke-notify-api.yaml index e8a5a2297..88a31e143 100644 --- a/cmd/tke-installer/app/installer/manifests/tke-notify-api/tke-notify-api.yaml +++ b/cmd/tke-installer/app/installer/manifests/tke-notify-api/tke-notify-api.yaml @@ -135,12 +135,6 @@ data: group_headers = "X-Remote-Group" extra_headers_prefix = "X-Remote-Extra-" - [authorization] -{{- if .EnableAuth }} - mode = "Webhook" - webhook_config_file = "/app/conf/tke-auth-webhook.yaml" -{{- end }} - [client] [client.platform] diff --git a/cmd/tke-installer/app/installer/manifests/tke-platform-api/tke-platform-api.yaml b/cmd/tke-installer/app/installer/manifests/tke-platform-api/tke-platform-api.yaml index 25ee47f82..66d91498c 100644 --- a/cmd/tke-installer/app/installer/manifests/tke-platform-api/tke-platform-api.yaml +++ b/cmd/tke-installer/app/installer/manifests/tke-platform-api/tke-platform-api.yaml @@ -197,12 +197,6 @@ data: group_headers = "X-Remote-Group" extra_headers_prefix = "X-Remote-Extra-" - [authorization] -{{- if .EnableAuth }} - mode = "Webhook" - webhook_config_file = "/app/conf/tke-authz-webhook.yaml" -{{- end }} - tke-platform-config.yaml: | apiVersion: v1 kind: Config diff --git a/cmd/tke-installer/app/installer/manifests/tke-registry-api/tke-registry-api.yaml b/cmd/tke-installer/app/installer/manifests/tke-registry-api/tke-registry-api.yaml index 73a90f4a2..855e3c15e 100644 --- a/cmd/tke-installer/app/installer/manifests/tke-registry-api/tke-registry-api.yaml +++ b/cmd/tke-installer/app/installer/manifests/tke-registry-api/tke-registry-api.yaml @@ -154,12 +154,6 @@ data: group_headers = "X-Remote-Group" extra_headers_prefix = "X-Remote-Extra-" - [authorization] -{{- if .EnableAuth }} - mode = "Webhook" - webhook_config_file = "/app/conf/tke-auth-webhook.yaml" -{{- end }} - [secure_serving] tls_cert_file = "/app/certs/server.crt" tls_private_key_file = "/app/certs/server.key" diff --git a/pkg/apiserver/authorization/authorization.go b/pkg/apiserver/authorization/authorization.go index 956b411d4..e3381a059 100644 --- a/pkg/apiserver/authorization/authorization.go +++ b/pkg/apiserver/authorization/authorization.go @@ -20,6 +20,7 @@ package authorization import ( "fmt" + "k8s.io/apiserver/pkg/authorization/authorizer" genericapiserver "k8s.io/apiserver/pkg/server" apiserveroptions "tkestack.io/tke/pkg/apiserver/options" @@ -28,6 +29,15 @@ import ( // SetupAuthorization to setup the generic apiserver by authorization options. func SetupAuthorization(genericAPIServerConfig *genericapiserver.Config, authorizationOpts *apiserveroptions.AuthorizationOptions) error { var err error + if len(authorizationOpts.Modes) == 0 { + authzInfo := genericapiserver.AuthorizationInfo{} + err = authorizationOpts.ApplyTo(&authzInfo) + if err != nil { + return fmt.Errorf("invalid authorization config: %v", err) + } + genericAPIServerConfig.Authorization = authzInfo + return nil + } genericAPIServerConfig.Authorization.Authorizer, genericAPIServerConfig.RuleResolver, err = buildAuthorizer(authorizationOpts) if err != nil { return fmt.Errorf("invalid authorization config: %v", err) @@ -41,8 +51,8 @@ func buildAuthorizer(o *apiserveroptions.AuthorizationOptions) (authorizer.Autho AuthorizationModes: o.Modes, WebhookConfigFile: o.WebhookConfigFile, WebhookVersion: o.WebhookVersion, - WebhookCacheAuthorizedTTL: o.WebhookCacheAuthorizedTTL, - WebhookCacheUnauthorizedTTL: o.WebhookCacheUnauthorizedTTL, + WebhookCacheAuthorizedTTL: o.AllowCacheTTL, + WebhookCacheUnauthorizedTTL: o.DenyCacheTTL, } return authorizationConfig.New() } diff --git a/pkg/apiserver/handler/chain.go b/pkg/apiserver/handler/chain.go index 5c7a4f6a4..be7fd773c 100644 --- a/pkg/apiserver/handler/chain.go +++ b/pkg/apiserver/handler/chain.go @@ -36,8 +36,8 @@ type Chain func(apiHandler http.Handler, c *genericapiserver.Config) http.Handle // BuildHandlerChain returns the chained http Handler. func BuildHandlerChain(ignoreAuthPathPrefixes []string, ignoreAuthzPathPrefixes []string, inspectors []authfilter.Inspector) Chain { return func(apiHandler http.Handler, c *genericapiserver.Config) http.Handler { - handler := authfilter.WithTKEAuthorization(apiHandler, c.Authorization.Authorizer, c.Serializer, append(ignoreAuthPathPrefixes, ignoreAuthzPathPrefixes...)) - handler = authfilter.WithInspectors(handler, inspectors, c) + handler := authfilter.WithInspectors(apiHandler, inspectors, c) + handler = authfilter.WithTKEAuthorization(handler, c.Authorization.Authorizer, c.Serializer, append(ignoreAuthPathPrefixes, ignoreAuthzPathPrefixes...)) handler = genericfilters.WithMaxInFlightLimit(handler, c.MaxRequestsInFlight, c.MaxMutatingRequestsInFlight, c.LongRunningFunc) handler = genericapifilters.WithImpersonation(handler, c.Authorization.Authorizer, c.Serializer) handler = genericapifilters.WithAudit(handler, c.AuditBackend, c.AuditPolicyChecker, c.LongRunningFunc) diff --git a/pkg/apiserver/options/authorization.go b/pkg/apiserver/options/authorization.go index d025023f3..3504125dd 100644 --- a/pkg/apiserver/options/authorization.go +++ b/pkg/apiserver/options/authorization.go @@ -20,23 +20,23 @@ package options import ( "fmt" + "strings" + "github.com/spf13/pflag" "github.com/spf13/viper" "k8s.io/apimachinery/pkg/util/sets" - "strings" - "time" + genericserveroptions "k8s.io/apiserver/pkg/server/options" "tkestack.io/tke/pkg/apiserver/authorization/modes" ) const ( - flagAuthzMode = "authorization-mode" - flagAuthzWebhookConfigFile = "authorization-webhook-config-file" - flagAuthzWebhookVersion = "authorization-webhook-version" - flagAuthzWebhookCacheUnauthorizedTTL = "authorization-webhook-cache-unauthorized-ttl" - flagAuthzWebhookCacheAuthorizedTTL = "authorization-webhook-cache-authorized-ttl" + flagAuthzMode = "authorization-mode" + flagAuthzWebhookConfigFile = "authorization-webhook-config-file" + flagAuthzWebhookVersion = "authorization-webhook-version" ) const ( + configAuthzKubeconfig = "authorization.kubeconfig" configAuthzMode = "authorization.mode" configAuthzWebhookConfigFile = "authorization.webhook_config_file" configAuthzWebhookVersion = "authorization.webhook_version" @@ -47,26 +47,25 @@ const ( // AuthorizationOptions defines the configuration parameters required to // include the authorization. type AuthorizationOptions struct { - Modes []string - WebhookConfigFile string - WebhookVersion string - WebhookCacheAuthorizedTTL time.Duration - WebhookCacheUnauthorizedTTL time.Duration + Modes []string + WebhookConfigFile string + WebhookVersion string + *genericserveroptions.DelegatingAuthorizationOptions } // NewAuthorizationOptions creates the default AuthorizationOptions object and // returns it. func NewAuthorizationOptions() *AuthorizationOptions { return &AuthorizationOptions{ - Modes: []string{modes.ModeAlwaysAllow}, - WebhookVersion: "v1beta1", - WebhookCacheAuthorizedTTL: 5 * time.Minute, - WebhookCacheUnauthorizedTTL: 30 * time.Second, + DelegatingAuthorizationOptions: genericserveroptions.NewDelegatingAuthorizationOptions(), + Modes: []string{}, + WebhookVersion: "v1beta1", } } // AddFlags adds flags for log to the specified FlagSet object. func (o *AuthorizationOptions) AddFlags(fs *pflag.FlagSet) { + o.DelegatingAuthorizationOptions.AddFlags(fs) fs.StringSlice(flagAuthzMode, o.Modes, ""+ "Ordered list of plug-ins to do authorization on secure port. Comma-delimited list of: "+ strings.Join(modes.AuthorizationModeChoices, ",")+".") @@ -80,14 +79,6 @@ func (o *AuthorizationOptions) AddFlags(fs *pflag.FlagSet) { fs.String(flagAuthzWebhookVersion, o.WebhookVersion, ""+ "The API version of the authorization.k8s.io SubjectAccessReview to send to and expect from the webhook.") _ = viper.BindPFlag(configAuthzWebhookVersion, fs.Lookup(flagAuthzWebhookVersion)) - - fs.Duration(flagAuthzWebhookCacheAuthorizedTTL, o.WebhookCacheAuthorizedTTL, ""+ - "The duration to cache 'authorized' responses from the webhook authorizer.") - _ = viper.BindPFlag(configAuthzWebhookCacheAuthorizedTTL, fs.Lookup(flagAuthzWebhookCacheAuthorizedTTL)) - - fs.Duration(flagAuthzWebhookCacheUnauthorizedTTL, o.WebhookCacheUnauthorizedTTL, - "The duration to cache 'unauthorized' responses from the webhook authorizer.") - _ = viper.BindPFlag(configAuthzWebhookCacheUnauthorizedTTL, fs.Lookup(flagAuthzWebhookCacheUnauthorizedTTL)) } // ApplyFlags parsing parameters from the command line or configuration file @@ -95,13 +86,13 @@ func (o *AuthorizationOptions) AddFlags(fs *pflag.FlagSet) { func (o *AuthorizationOptions) ApplyFlags() []error { var errs []error - o.Modes = viper.GetStringSlice(configAuthzMode) - o.WebhookCacheAuthorizedTTL = viper.GetDuration(configAuthzWebhookCacheAuthorizedTTL) - o.WebhookCacheUnauthorizedTTL = viper.GetDuration(configAuthzWebhookCacheUnauthorizedTTL) + o.RemoteKubeConfigFile = viper.GetString(configAuthzKubeconfig) + o.AllowCacheTTL = viper.GetDuration(configAuthzWebhookCacheAuthorizedTTL) + o.DenyCacheTTL = viper.GetDuration(configAuthzWebhookCacheUnauthorizedTTL) o.WebhookConfigFile = viper.GetString(configAuthzWebhookConfigFile) if len(o.Modes) == 0 { - errs = append(errs, fmt.Errorf("at least one authorization-mode must be passed")) + return errs } allowedModes := sets.NewString(modes.AuthorizationModeChoices...) diff --git a/pkg/auth/filter/filter.go b/pkg/auth/filter/filter.go index 97707f70f..2be5469e2 100644 --- a/pkg/auth/filter/filter.go +++ b/pkg/auth/filter/filter.go @@ -22,6 +22,7 @@ import ( "fmt" "net/http" "net/http/httputil" + "strconv" "strings" "unicode" @@ -57,9 +58,10 @@ const ( reasonAnnotationKey = "authorization.auth.tke.com/reason" // Annotation values set in advanced audit - decisionAllow = "allow" - decisionForbid = "forbid" - reasonError = "internal error" + decisionAllow = "allow" + decisionForbid = "forbid" + reasonError = "internal error" + k8sDecisionAllowHeader = "X-TKE-K8sDecisionAllow" ) var ( @@ -131,13 +133,21 @@ func WithTKEAuthorization(handler http.Handler, a authorizer.Authorizer, s runti reason string ) - // first check if user is admin - tkeAttributes := ConvertTKEAttributes(ctx, attributes) - authorized = UnprotectedAuthorized(tkeAttributes) + // firstly check if resource is unprotected + authorized = UnprotectedAuthorized(attributes) if authorized != authorizer.DecisionAllow { - authorized, reason, err = a.Authorize(ctx, tkeAttributes) + authorized, reason, err = a.Authorize(ctx, attributes) } + // secondly check k8s resource authz result + if authorized != authorizer.DecisionAllow { + attributes = ConvertTKEAttributes(ctx, attributes) + authorized, reason, err = a.Authorize(ctx, attributes) + } else { + setK8sDecision(req, true) + } + + // finaly check tke casbin resource authz resoult // an authorizer like RBAC could encounter evaluation errors and still allow the request, so authorizer decision is checked before error here. if authorized == authorizer.DecisionAllow { audit.LogAnnotation(ae, decisionAnnotationKey, decisionAllow) @@ -151,7 +161,7 @@ func WithTKEAuthorization(handler http.Handler, a authorizer.Authorizer, s runti return } - ForbiddenResponse(ctx, tkeAttributes, w, req, ae, s, reason) + ForbiddenResponse(ctx, attributes, w, req, ae, s, reason) }) } @@ -321,3 +331,17 @@ func splitPath(path string) []string { } return strings.Split(path, "/") } + +func setK8sDecision(req *http.Request, k8sDecisionAllow bool) { + if req != nil { + req.Header.Set(k8sDecisionAllowHeader, strconv.FormatBool(k8sDecisionAllow)) + } +} + +func getK8sDecision(req *http.Request) (k8sDecisionAllow bool) { + if req != nil { + k8sDecisionAllowString := req.Header.Get(k8sDecisionAllowHeader) + k8sDecisionAllow, _ = strconv.ParseBool(k8sDecisionAllowString) + } + return k8sDecisionAllow +} diff --git a/pkg/auth/filter/inspector.go b/pkg/auth/filter/inspector.go index d6b558a15..1ea872f57 100644 --- a/pkg/auth/filter/inspector.go +++ b/pkg/auth/filter/inspector.go @@ -20,9 +20,10 @@ package filter import ( "context" "fmt" - k8serrors "k8s.io/apimachinery/pkg/api/errors" "net/http" + k8serrors "k8s.io/apimachinery/pkg/api/errors" + platformv1 "tkestack.io/tke/api/client/clientset/versioned/typed/platform/v1" "tkestack.io/tke/pkg/apiserver/authentication" "tkestack.io/tke/pkg/util/log" @@ -52,6 +53,10 @@ func NewClusterInspector(platformClient platformv1.PlatformV1Interface, privileg func (i *clusterInspector) Inspect(handler http.Handler, c *genericapiserver.Config) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) { + if getK8sDecision(req) { + handler.ServeHTTP(w, req) + return + } ctx := req.Context() username, tenantID := authentication.UsernameAndTenantID(ctx) if (username == i.privilegedUsername || username == "system:apiserver") && tenantID == "" { From a8bf579399f1822d43435cc4839e0d94645ccfea Mon Sep 17 00:00:00 2001 From: jo-hnny Date: Fri, 27 Aug 2021 15:28:22 +0800 Subject: [PATCH 28/62] fix(console): add license to web (#1518) * fix(console): add gulpfile to web * fix(console): add license to web * fix(console): rm license gulpfile --- web/console/Wrapper.tsx | 17 +++++++++++++++++ web/console/ambient/appUtil.d.ts | 17 +++++++++++++++++ web/console/ambient/classnames.d.ts | 17 +++++++++++++++++ web/console/ambient/clipboard.ts | 17 +++++++++++++++++ web/console/ambient/index.d.ts | 17 +++++++++++++++++ web/console/ambient/redux.d.ts | 17 +++++++++++++++++ web/console/blankPage.tsx | 17 +++++++++++++++++ web/console/config/apiServerVersion.ts | 17 +++++++++++++++++ web/console/config/index.ts | 17 +++++++++++++++++ web/console/config/platform.ts | 17 +++++++++++++++++ .../config/resource/common/actionField.ts | 17 +++++++++++++++++ .../config/resource/common/apiVersion.ts | 17 +++++++++++++++++ .../config/resource/common/dataFormat.ts | 17 +++++++++++++++++ .../config/resource/common/detailInfo.ts | 17 +++++++++++++++++ .../config/resource/common/displayField.ts | 17 +++++++++++++++++ .../resource/common/generateResourceInfo.ts | 17 +++++++++++++++++ web/console/config/resource/common/index.ts | 17 +++++++++++++++++ .../resource/k8sConfig/addonResource.ts | 17 +++++++++++++++++ .../config/resource/k8sConfig/alarmPolicy.ts | 17 +++++++++++++++++ .../config/resource/k8sConfig/alarmRecord.ts | 17 +++++++++++++++++ .../config/resource/k8sConfig/application.ts | 17 +++++++++++++++++ .../config/resource/k8sConfig/audit.ts | 17 +++++++++++++++++ .../config/resource/k8sConfig/configmaps.ts | 17 +++++++++++++++++ .../config/resource/k8sConfig/controlPlane.ts | 17 +++++++++++++++++ .../config/resource/k8sConfig/cronjobs.ts | 17 +++++++++++++++++ .../config/resource/k8sConfig/daemonset.ts | 17 +++++++++++++++++ .../config/resource/k8sConfig/deployment.ts | 17 +++++++++++++++++ .../resource/k8sConfig/destinationRule.ts | 17 +++++++++++++++++ .../config/resource/k8sConfig/gateway.ts | 17 +++++++++++++++++ .../config/resource/k8sConfig/index.ts | 17 +++++++++++++++++ .../config/resource/k8sConfig/ingress.ts | 17 +++++++++++++++++ web/console/config/resource/k8sConfig/jobs.ts | 17 +++++++++++++++++ web/console/config/resource/k8sConfig/lbcf.ts | 17 +++++++++++++++++ .../resource/k8sConfig/namespace.project.ts | 17 +++++++++++++++++ .../config/resource/k8sConfig/namespace.ts | 17 +++++++++++++++++ web/console/config/resource/k8sConfig/node.ts | 17 +++++++++++++++++ .../resource/k8sConfig/notifyChannel.ts | 17 +++++++++++++++++ .../resource/k8sConfig/otherResource.ts | 17 +++++++++++++++++ .../k8sConfig/persistentvolumeclaims.ts | 17 +++++++++++++++++ .../resource/k8sConfig/persistentvolumes.ts | 17 +++++++++++++++++ web/console/config/resource/k8sConfig/pods.ts | 17 +++++++++++++++++ .../config/resource/k8sConfig/replicaset.ts | 17 +++++++++++++++++ .../k8sConfig/replicationcontrollers.ts | 17 +++++++++++++++++ .../config/resource/k8sConfig/secret.ts | 17 +++++++++++++++++ .../config/resource/k8sConfig/service.ts | 17 +++++++++++++++++ .../config/resource/k8sConfig/serviceEntry.ts | 17 +++++++++++++++++ .../resource/k8sConfig/serviceForMesh.ts | 17 +++++++++++++++++ .../config/resource/k8sConfig/statefulset.ts | 17 +++++++++++++++++ .../config/resource/k8sConfig/storageclass.ts | 17 +++++++++++++++++ web/console/config/resource/k8sConfig/tapp.ts | 17 +++++++++++++++++ .../resource/k8sConfig/virtualService.ts | 17 +++++++++++++++++ web/console/config/resourceConfig.ts | 17 +++++++++++++++++ web/console/config/routerConfig.project.ts | 17 +++++++++++++++++ web/console/config/routerConfig.ts | 17 +++++++++++++++++ web/console/gulpfile.js | 17 +++++++++++++++++ web/console/helpers/Router.ts | 17 +++++++++++++++++ web/console/helpers/Validator.ts | 17 +++++++++++++++++ web/console/helpers/appUtil.ts | 17 +++++++++++++++++ web/console/helpers/cookieUtil.ts | 17 +++++++++++++++++ web/console/helpers/dateFormatter.ts | 17 +++++++++++++++++ web/console/helpers/dateUtil.ts | 17 +++++++++++++++++ web/console/helpers/downloadCrt.ts | 17 +++++++++++++++++ web/console/helpers/downloadCsv.ts | 17 +++++++++++++++++ web/console/helpers/downloadText.ts | 17 +++++++++++++++++ web/console/helpers/format.ts | 17 +++++++++++++++++ web/console/helpers/getScrollBarSize.ts | 17 +++++++++++++++++ web/console/helpers/index.ts | 17 +++++++++++++++++ web/console/helpers/k8sUnitUtil.ts | 17 +++++++++++++++++ web/console/helpers/reduceNetwork.ts | 17 +++++++++++++++++ web/console/helpers/reduxStore.ts | 17 +++++++++++++++++ web/console/helpers/regionLint.ts | 17 +++++++++++++++++ web/console/helpers/request.ts | 17 +++++++++++++++++ web/console/helpers/urlUtil.ts | 17 +++++++++++++++++ web/console/helpers/version.ts | 17 +++++++++++++++++ web/console/i18n.ts | 17 +++++++++++++++++ web/console/i18n/translation/en.js | 17 +++++++++++++++++ web/console/i18n/translation/jp.js | 17 +++++++++++++++++ web/console/i18n/translation/ko.js | 17 +++++++++++++++++ web/console/i18n/translation/zh.js | 17 +++++++++++++++++ web/console/index.project.tsx | 17 +++++++++++++++++ web/console/index.tke.tsx | 17 +++++++++++++++++ web/console/lib/ff-component/index.ts | 17 +++++++++++++++++ web/console/lib/ff-component/src/cam/Cam.tsx | 17 +++++++++++++++++ web/console/lib/ff-component/src/cam/index.ts | 17 +++++++++++++++++ .../ff-component/src/formpanel/Checkbox.tsx | 17 +++++++++++++++++ .../ff-component/src/formpanel/Checkboxs.tsx | 17 +++++++++++++++++ .../lib/ff-component/src/formpanel/Footer.tsx | 17 +++++++++++++++++ .../ff-component/src/formpanel/FormPanel.tsx | 17 +++++++++++++++++ .../ff-component/src/formpanel/HelpText.tsx | 17 +++++++++++++++++ .../ff-component/src/formpanel/InlineText.tsx | 17 +++++++++++++++++ .../lib/ff-component/src/formpanel/Input.tsx | 17 +++++++++++++++++ .../src/formpanel/InputNumber.tsx | 17 +++++++++++++++++ .../lib/ff-component/src/formpanel/Item.tsx | 17 +++++++++++++++++ .../src/formpanel/KeyValuePanel.tsx | 17 +++++++++++++++++ .../lib/ff-component/src/formpanel/Radios.tsx | 17 +++++++++++++++++ .../ff-component/src/formpanel/Segment.tsx | 17 +++++++++++++++++ .../lib/ff-component/src/formpanel/Select.tsx | 17 +++++++++++++++++ .../lib/ff-component/src/formpanel/Switch.tsx | 17 +++++++++++++++++ .../lib/ff-component/src/formpanel/Text.tsx | 17 +++++++++++++++++ .../src/formpanel/TransferTable.tsx | 17 +++++++++++++++++ .../src/formpanel/Validatable.tsx | 17 +++++++++++++++++ .../lib/ff-component/src/formpanel/index.ts | 17 +++++++++++++++++ web/console/lib/ff-component/src/index.ts | 17 +++++++++++++++++ .../lib/ff-component/src/lib/classname.ts | 17 +++++++++++++++++ web/console/lib/ff-component/src/lib/index.ts | 17 +++++++++++++++++ .../src/tablepanel/TablePanel.tsx | 17 +++++++++++++++++ .../ff-component/src/tablepanel/TagSearch.tsx | 17 +++++++++++++++++ .../lib/ff-component/src/tablepanel/index.ts | 17 +++++++++++++++++ web/console/lib/ff-redux/index.ts | 17 +++++++++++++++++ .../qcloud-lib/decorators/OnOuterClick.ts | 17 +++++++++++++++++ .../libs/qcloud-lib/decorators/OnResize.ts | 17 +++++++++++++++++ .../libs/qcloud-lib/helpers/addComma.ts | 17 +++++++++++++++++ .../libs/qcloud-lib/helpers/appendFunction.ts | 17 +++++++++++++++++ .../qcloud-lib/helpers/bindActionCreators.ts | 19 ++++++++++++++++++- .../qcloud-lib/helpers/collectionPaging.ts | 17 +++++++++++++++++ .../qcloud-lib/helpers/collectionWhere.ts | 17 +++++++++++++++++ .../libs/qcloud-lib/helpers/createConstant.ts | 17 +++++++++++++++++ .../libs/qcloud-lib/helpers/createStore.ts | 17 +++++++++++++++++ .../libs/qcloud-lib/helpers/deepClone.ts | 19 ++++++++++++++++++- .../qcloud-lib/helpers/findByCondition.ts | 17 +++++++++++++++++ .../libs/qcloud-lib/helpers/findById.ts | 17 +++++++++++++++++ .../libs/qcloud-lib/helpers/getDateDelta.ts | 17 +++++++++++++++++ .../libs/qcloud-lib/helpers/getDateStride.ts | 17 +++++++++++++++++ .../libs/qcloud-lib/helpers/getDateString.ts | 17 +++++++++++++++++ .../libs/qcloud-lib/helpers/getDateUTC.ts | 17 +++++++++++++++++ .../libs/qcloud-lib/helpers/getOffsetDate.ts | 17 +++++++++++++++++ .../libs/qcloud-lib/helpers/hashObject.ts | 19 ++++++++++++++++++- .../libs/qcloud-lib/helpers/hashString.ts | 19 ++++++++++++++++++- .../libs/qcloud-lib/helpers/insertCSS.ts | 17 +++++++++++++++++ .../qcloud-lib/helpers/isComponentOfType.ts | 17 +++++++++++++++++ .../libs/qcloud-lib/helpers/isValidDomain.ts | 17 +++++++++++++++++ .../qcloud-lib/helpers/isValidIPAddress.ts | 19 ++++++++++++++++++- .../libs/qcloud-lib/helpers/objectExtend.ts | 17 +++++++++++++++++ .../libs/qcloud-lib/helpers/objectFetch.ts | 17 +++++++++++++++++ .../libs/qcloud-lib/helpers/objectMerge.ts | 17 +++++++++++++++++ .../libs/qcloud-lib/helpers/otherMember.ts | 17 +++++++++++++++++ .../libs/qcloud-lib/helpers/pageList.ts | 19 ++++++++++++++++++- .../qcloud-lib/helpers/reduceToPayload.ts | 19 ++++++++++++++++++- .../libs/qcloud-lib/helpers/searchList.ts | 19 ++++++++++++++++++- .../libs/qcloud-lib/helpers/serialReducer.ts | 19 ++++++++++++++++++- .../ff-redux/libs/qcloud-lib/helpers/uuid.ts | 17 +++++++++++++++++ .../lib/ff-redux/libs/qcloud-lib/index.ts | 19 ++++++++++++++++++- .../libs/qcloud-lib/types/BaseReactProps.ts | 17 +++++++++++++++++ .../libs/qcloud-lib/types/DateQuery.ts | 17 +++++++++++++++++ .../libs/qcloud-lib/types/Identifiable.ts | 17 +++++++++++++++++ .../libs/qcloud-lib/types/PagingQuery.ts | 17 +++++++++++++++++ .../libs/qcloud-lib/types/RecordSet.ts | 17 +++++++++++++++++ .../libs/qcloud-lib/types/ReduxAction.ts | 19 ++++++++++++++++++- .../qcloud-lib/types/ReduxConnectedProps.ts | 17 +++++++++++++++++ .../libs/qcloud-lib/types/SortQuery.ts | 17 +++++++++++++++++ .../libs/qcloud-lib/utils/Children.ts | 17 +++++++++++++++++ .../libs/qcloud-lib/utils/Selection.ts | 17 +++++++++++++++++ .../libs/qcloud-lib/utils/Transition.ts | 19 ++++++++++++++++++- .../libs/qcloud-nmc/ambient/appUtil.d.ts | 17 +++++++++++++++++ .../libs/qcloud-nmc/ambient/constants.d.ts | 17 +++++++++++++++++ .../libs/qcloud-nmc/ambient/eventtarget.d.ts | 19 ++++++++++++++++++- .../libs/qcloud-nmc/ambient/manager.d.ts | 17 +++++++++++++++++ .../ff-redux/libs/qcloud-nmc/ambient/net.d.ts | 17 +++++++++++++++++ .../ff-redux/libs/qcloud-nmc/ambient/nmc.d.ts | 17 +++++++++++++++++ .../libs/qcloud-nmc/ambient/qccomponent.d.ts | 17 +++++++++++++++++ .../libs/qcloud-nmc/ambient/router.d.ts | 17 +++++++++++++++++ .../libs/qcloud-nmc/ambient/seajs.d.ts | 17 +++++++++++++++++ .../libs/qcloud-nmc/ambient/tips.d.ts | 17 +++++++++++++++++ .../lib/ff-redux/libs/qcloud-nmc/index.ts | 19 ++++++++++++++++++- .../lib/ff-redux/libs/qcloud-nmc/utils/CVM.ts | 17 +++++++++++++++++ .../libs/qcloud-nmc/utils/CloudAPI.ts | 17 +++++++++++++++++ .../ff-redux/libs/qcloud-nmc/utils/Entry.ts | 17 +++++++++++++++++ .../libs/qcloud-nmc/utils/LoadBalance.ts | 17 +++++++++++++++++ .../ff-redux/libs/qcloud-nmc/utils/Page.ts | 17 +++++++++++++++++ .../ff-redux/libs/qcloud-nmc/utils/Project.ts | 17 +++++++++++++++++ .../ff-redux/libs/qcloud-nmc/utils/Region.ts | 17 +++++++++++++++++ .../ff-redux/libs/qcloud-nmc/utils/Router.ts | 17 +++++++++++++++++ .../libs/qcloud-nmc/utils/Whitelist.ts | 19 ++++++++++++++++++- .../libs/qcloud-redux-fetcher/index.ts | 19 ++++++++++++++++++- .../libs/qcloud-redux-fetcher/lib/Fetcher.ts | 17 +++++++++++++++++ .../ff-redux/libs/qcloud-redux-query/index.ts | 19 ++++++++++++++++++- .../libs/qcloud-redux-query/lib/Query.ts | 17 +++++++++++++++++ .../libs/qcloud-redux-workflow/index.ts | 19 ++++++++++++++++++- .../qcloud-redux-workflow/lib/Workflow.ts | 17 +++++++++++++++++ web/console/lib/ff-redux/src/base/Action.ts | 17 +++++++++++++++++ .../src/base/Model/ActionTypesEnum.ts | 17 +++++++++++++++++ .../lib/ff-redux/src/base/Model/DataType.ts | 17 +++++++++++++++++ .../ff-redux/src/base/Model/FetchOptions.ts | 17 +++++++++++++++++ .../lib/ff-redux/src/base/Model/FetchState.ts | 17 +++++++++++++++++ .../ff-redux/src/base/Model/FetcherPayload.ts | 17 +++++++++++++++++ .../ff-redux/src/base/Model/FetcherState.ts | 17 +++++++++++++++++ .../ff-redux/src/base/Model/FetcherTrigger.ts | 17 +++++++++++++++++ .../ff-redux/src/base/Model/Identifiable.ts | 17 +++++++++++++++++ .../ff-redux/src/base/Model/PagingQuery.ts | 17 +++++++++++++++++ .../lib/ff-redux/src/base/Model/QueryState.ts | 17 +++++++++++++++++ .../lib/ff-redux/src/base/Model/RecordSet.ts | 17 +++++++++++++++++ .../ff-redux/src/base/Model/ReduxAction.ts | 19 ++++++++++++++++++- .../lib/ff-redux/src/base/Model/SortQuery.ts | 17 +++++++++++++++++ .../lib/ff-redux/src/base/Model/index.ts | 17 +++++++++++++++++ web/console/lib/ff-redux/src/base/Reducer.ts | 17 +++++++++++++++++ web/console/lib/ff-redux/src/base/index.ts | 17 +++++++++++++++++ web/console/lib/ff-redux/src/index.ts | 17 +++++++++++++++++ web/console/lib/ff-redux/src/list/Action.ts | 17 +++++++++++++++++ .../lib/ff-redux/src/list/ActionType.ts | 17 +++++++++++++++++ web/console/lib/ff-redux/src/list/Model.ts | 17 +++++++++++++++++ web/console/lib/ff-redux/src/list/Reducer.ts | 17 +++++++++++++++++ web/console/lib/ff-redux/src/list/index.ts | 17 +++++++++++++++++ web/console/lib/ff-redux/src/object/Action.ts | 17 +++++++++++++++++ .../lib/ff-redux/src/object/ActionType.ts | 17 +++++++++++++++++ web/console/lib/ff-redux/src/object/Model.ts | 17 +++++++++++++++++ .../lib/ff-redux/src/object/Reducer.ts | 17 +++++++++++++++++ web/console/lib/ff-redux/src/object/index.ts | 17 +++++++++++++++++ web/console/lib/ff-redux/utils/extend.ts | 17 +++++++++++++++++ web/console/lib/ff-redux/utils/index.ts | 17 +++++++++++++++++ .../lib/ff-redux/utils/reduceToPayload.ts | 17 +++++++++++++++++ web/console/lib/ff-validator/index.ts | 17 +++++++++++++++++ web/console/lib/ff-validator/src/Action.ts | 17 +++++++++++++++++ .../lib/ff-validator/src/ActionType.ts | 17 +++++++++++++++++ web/console/lib/ff-validator/src/Model.ts | 17 +++++++++++++++++ web/console/lib/ff-validator/src/Reducer.ts | 17 +++++++++++++++++ .../lib/ff-validator/src/Validation.ts | 17 +++++++++++++++++ .../lib/ff-validator/src/utils/cloneDeep.ts | 17 +++++++++++++++++ .../src/utils/getFirstBracketName.ts | 17 +++++++++++++++++ .../lib/ff-validator/src/utils/getMessage.ts | 17 +++++++++++++++++ .../lib/ff-validator/src/utils/getValue.ts | 17 +++++++++++++++++ .../lib/ff-validator/src/utils/index.ts | 17 +++++++++++++++++ .../src/utils/isContainBracket.ts | 17 +++++++++++++++++ .../lib/ff-validator/src/utils/isValid.ts | 17 +++++++++++++++++ .../ff-validator/src/utils/reduceToPayload.ts | 17 +++++++++++++++++ web/console/src/modules/addon/WebAPI.ts | 17 +++++++++++++++++ .../src/modules/addon/actions/addonActions.ts | 17 +++++++++++++++++ .../modules/addon/actions/addonEditActions.ts | 17 +++++++++++++++++ .../modules/addon/actions/clusterActions.ts | 17 +++++++++++++++++ .../src/modules/addon/actions/index.ts | 17 +++++++++++++++++ .../modules/addon/actions/peEditActions.ts | 17 +++++++++++++++++ .../modules/addon/actions/regionActions.ts | 17 +++++++++++++++++ .../modules/addon/actions/validatorActions.ts | 17 +++++++++++++++++ .../modules/addon/actions/workflowActions.ts | 17 +++++++++++++++++ .../addon/components/AddonActionPanel.tsx | 17 +++++++++++++++++ .../src/modules/addon/components/AddonApp.tsx | 17 +++++++++++++++++ .../addon/components/AddonDeleteDialog.tsx | 17 +++++++++++++++++ .../modules/addon/components/AddonDetail.tsx | 17 +++++++++++++++++ .../addon/components/AddonDetailHeadPanel.tsx | 17 +++++++++++++++++ .../addon/components/AddonDetailPanel.tsx | 17 +++++++++++++++++ .../addon/components/AddonHeadPanel.tsx | 17 +++++++++++++++++ .../components/AddonSubpageHeadPanel.tsx | 17 +++++++++++++++++ .../addon/components/AddonTablePanel.tsx | 17 +++++++++++++++++ .../addon/components/EditAddonPanel.tsx | 17 +++++++++++++++++ .../components/EditPersistentEventPanel.tsx | 17 +++++++++++++++++ .../src/modules/addon/constants/ActionType.ts | 17 +++++++++++++++++ .../src/modules/addon/constants/Config.ts | 17 +++++++++++++++++ .../modules/addon/constants/ValidateConfig.ts | 17 +++++++++++++++++ web/console/src/modules/addon/index.tsx | 17 +++++++++++++++++ web/console/src/modules/addon/models/Addon.ts | 17 +++++++++++++++++ .../src/modules/addon/models/AddonEdit.ts | 17 +++++++++++++++++ .../src/modules/addon/models/PeEdit.ts | 17 +++++++++++++++++ .../src/modules/addon/models/RootState.ts | 17 +++++++++++++++++ web/console/src/modules/addon/models/index.ts | 17 +++++++++++++++++ .../addon/reducers/AddonEditReducer.ts | 17 +++++++++++++++++ .../modules/addon/reducers/PeEditReducer.ts | 17 +++++++++++++++++ .../src/modules/addon/reducers/RootReducer.ts | 17 +++++++++++++++++ web/console/src/modules/addon/router.ts | 17 +++++++++++++++++ .../src/modules/addon/stores/RootStore.ts | 17 +++++++++++++++++ web/console/src/modules/alarmPolicy/WebAPI.ts | 17 +++++++++++++++++ .../alarmPolicy/actions/alarmPolicyActions.ts | 17 +++++++++++++++++ .../alarmPolicy/actions/clusterActions.ts | 17 +++++++++++++++++ .../alarmPolicy/actions/groupActions.ts | 17 +++++++++++++++++ .../src/modules/alarmPolicy/actions/index.ts | 17 +++++++++++++++++ .../actions/namespaceActions.project.ts | 17 +++++++++++++++++ .../alarmPolicy/actions/namespaceActions.ts | 17 +++++++++++++++++ .../projectNamespaceActions.project.ts | 17 +++++++++++++++++ .../alarmPolicy/actions/regionActions.ts | 17 +++++++++++++++++ .../alarmPolicy/actions/validatorActions.ts | 17 +++++++++++++++++ .../alarmPolicy/actions/workflowActions.ts | 17 +++++++++++++++++ .../alarmPolicy/actions/workloadActions.ts | 17 +++++++++++++++++ .../components/AlarmPolicyActionPanel.tsx | 17 +++++++++++++++++ .../alarmPolicy/components/AlarmPolicyApp.tsx | 17 +++++++++++++++++ .../AlarmPolicyDetailHeaderPanel.project.tsx | 17 +++++++++++++++++ .../AlarmPolicyDetailHeaderPanel.tsx | 17 +++++++++++++++++ .../components/AlarmPolicyDetailPanel.tsx | 17 +++++++++++++++++ .../AlarmPolicyHeadPanel.project.tsx | 17 +++++++++++++++++ .../components/AlarmPolicyHeadPanel.tsx | 17 +++++++++++++++++ .../AlarmPolicySubpageHeaderPanel.project.tsx | 17 +++++++++++++++++ .../AlarmPolicySubpageHeaderPanel.tsx | 17 +++++++++++++++++ .../components/AlarmPolicyTablePanel.tsx | 17 +++++++++++++++++ .../components/DeleteAlarmPolicyDialog.tsx | 17 +++++++++++++++++ .../components/EditAlarmPolicyObject.tsx | 17 +++++++++++++++++ .../components/EditAlarmPolicyPanel.tsx | 17 +++++++++++++++++ .../EditAlarmPolicyReceiverGroup.tsx | 17 +++++++++++++++++ .../resource/ResourceSidebarPanel.tsx | 17 +++++++++++++++++ .../alarmPolicy/constants/ActionType.ts | 17 +++++++++++++++++ .../modules/alarmPolicy/constants/Config.ts | 17 +++++++++++++++++ web/console/src/modules/alarmPolicy/index.tsx | 17 +++++++++++++++++ .../src/modules/alarmPolicy/models/Addon.ts | 17 +++++++++++++++++ .../modules/alarmPolicy/models/AlarmPolicy.ts | 17 +++++++++++++++++ .../alarmPolicy/models/ClusterFilter.ts | 17 +++++++++++++++++ .../src/modules/alarmPolicy/models/Group.tsx | 17 +++++++++++++++++ .../modules/alarmPolicy/models/Namespace.ts | 17 +++++++++++++++++ .../src/modules/alarmPolicy/models/Region.ts | 17 +++++++++++++++++ .../alarmPolicy/models/RegionFilter.ts | 17 +++++++++++++++++ .../modules/alarmPolicy/models/Resource.ts | 17 +++++++++++++++++ .../modules/alarmPolicy/models/RootState.ts | 17 +++++++++++++++++ .../src/modules/alarmPolicy/models/index.ts | 17 +++++++++++++++++ .../reducers/AlarmPolicyEditReducer.ts | 17 +++++++++++++++++ .../reducers/RootReducer.project.ts | 17 +++++++++++++++++ .../alarmPolicy/reducers/RootReducer.ts | 17 +++++++++++++++++ .../src/modules/alarmPolicy/router.project.ts | 17 +++++++++++++++++ web/console/src/modules/alarmPolicy/router.ts | 17 +++++++++++++++++ .../modules/alarmPolicy/stores/RootStore.ts | 17 +++++++++++++++++ web/console/src/modules/alarmRecord/WebAPI.ts | 17 +++++++++++++++++ .../alarmRecord/actions/alarmRecordActions.ts | 17 +++++++++++++++++ .../alarmRecord/actions/clusterActions.ts | 17 +++++++++++++++++ .../src/modules/alarmRecord/actions/index.ts | 17 +++++++++++++++++ .../components/AlarmHeaderPanel.tsx | 17 +++++++++++++++++ .../alarmRecord/components/AlarmRecordApp.tsx | 17 +++++++++++++++++ .../components/AlarmRecordPanel.tsx | 17 +++++++++++++++++ .../alarmRecord/constants/ActionTypes.ts | 17 +++++++++++++++++ web/console/src/modules/alarmRecord/index.tsx | 17 +++++++++++++++++ .../modules/alarmRecord/models/AlarmRecord.ts | 17 +++++++++++++++++ .../alarmRecord/models/ClusterFilter.ts | 17 +++++++++++++++++ .../modules/alarmRecord/models/RootState.ts | 17 +++++++++++++++++ .../src/modules/alarmRecord/models/index.ts | 17 +++++++++++++++++ .../alarmRecord/reducers/RootReducer.ts | 17 +++++++++++++++++ web/console/src/modules/alarmRecord/router.ts | 17 +++++++++++++++++ .../modules/alarmRecord/stores/RootStore.ts | 17 +++++++++++++++++ web/console/src/modules/application/WebAPI.ts | 17 +++++++++++++++++ .../application/actions/app/createActions.ts | 17 +++++++++++++++++ .../application/actions/app/detailActions.ts | 17 +++++++++++++++++ .../application/actions/app/historyActions.ts | 17 +++++++++++++++++ .../modules/application/actions/app/index.ts | 17 +++++++++++++++++ .../application/actions/app/listActions.ts | 17 +++++++++++++++++ .../actions/app/resourceActions.ts | 17 +++++++++++++++++ .../application/actions/chart/index.ts | 17 +++++++++++++++++ .../application/actions/chart/listActions.ts | 17 +++++++++++++++++ .../application/actions/chartGroup/index.ts | 17 +++++++++++++++++ .../actions/chartGroup/listActions.ts | 17 +++++++++++++++++ .../application/actions/cluster/index.ts | 17 +++++++++++++++++ .../actions/cluster/listActions.ts | 17 +++++++++++++++++ .../src/modules/application/actions/index.ts | 17 +++++++++++++++++ .../application/actions/namespace/index.ts | 17 +++++++++++++++++ .../actions/namespace/listActions.ts | 17 +++++++++++++++++ .../namespace/projectNamespaceListActions.ts | 17 +++++++++++++++++ .../application/actions/project/index.ts | 17 +++++++++++++++++ .../actions/project/listActions.ts | 17 +++++++++++++++++ .../application/components/ApplicationApp.tsx | 17 +++++++++++++++++ .../components/app/AppContainer.tsx | 17 +++++++++++++++++ .../components/app/ChartActionPanel.tsx | 17 +++++++++++++++++ .../components/app/ChartTablePanel.tsx | 17 +++++++++++++++++ .../components/app/ChartValueYamlDialog.tsx | 17 +++++++++++++++++ .../components/app/create/AppCreate.tsx | 17 +++++++++++++++++ .../components/app/create/BaseInfoPanel.tsx | 17 +++++++++++++++++ .../components/app/create/HeaderPanel.tsx | 17 +++++++++++++++++ .../app/create/NamespacePanel.project.tsx | 17 +++++++++++++++++ .../components/app/create/NamespacePanel.tsx | 17 +++++++++++++++++ .../components/app/detail/AppDetail.tsx | 17 +++++++++++++++++ .../components/app/detail/BasicInfoPanel.tsx | 17 +++++++++++++++++ .../components/app/detail/HeaderPanel.tsx | 17 +++++++++++++++++ .../app/detail/HistoryTablePanel.tsx | 17 +++++++++++++++++ .../app/detail/ResourceTablePanel.tsx | 17 +++++++++++++++++ .../components/app/list/ActionPanel.tsx | 17 +++++++++++++++++ .../components/app/list/AppList.tsx | 17 +++++++++++++++++ .../app/list/HeaderPanel.project.tsx | 17 +++++++++++++++++ .../components/app/list/HeaderPanel.tsx | 17 +++++++++++++++++ .../components/app/list/TablePanel.tsx | 17 +++++++++++++++++ .../application/constants/ActionTypes.ts | 17 +++++++++++++++++ .../constants/AppValidateConfig.ts | 17 +++++++++++++++++ .../application/constants/initState.ts | 17 +++++++++++++++++ web/console/src/modules/application/index.tsx | 17 +++++++++++++++++ .../src/modules/application/models/App.ts | 17 +++++++++++++++++ .../src/modules/application/models/Chart.ts | 17 +++++++++++++++++ .../modules/application/models/ChartGroup.ts | 17 +++++++++++++++++ .../src/modules/application/models/Cluster.ts | 17 +++++++++++++++++ .../modules/application/models/Namespace.ts | 17 +++++++++++++++++ .../src/modules/application/models/Project.ts | 17 +++++++++++++++++ .../modules/application/models/RootState.ts | 17 +++++++++++++++++ .../src/modules/application/models/index.ts | 17 +++++++++++++++++ .../application/reducers/RootReducer.ts | 17 +++++++++++++++++ .../src/modules/application/router.project.ts | 17 +++++++++++++++++ web/console/src/modules/application/router.ts | 17 +++++++++++++++++ .../modules/application/stores/RootStore.ts | 17 +++++++++++++++++ web/console/src/modules/audit/WebAPI.ts | 17 +++++++++++++++++ .../src/modules/audit/actions/auditActions.ts | 17 +++++++++++++++++ .../src/modules/audit/actions/index.ts | 17 +++++++++++++++++ .../src/modules/audit/components/AuditApp.tsx | 17 +++++++++++++++++ .../audit/components/AuditDetailsDialog.tsx | 17 +++++++++++++++++ .../modules/audit/components/AuditPanel.tsx | 17 +++++++++++++++++ .../audit/components/AuditSettingDialog.tsx | 17 +++++++++++++++++ .../modules/audit/constants/ActionTypes.ts | 17 +++++++++++++++++ web/console/src/modules/audit/index.tsx | 17 +++++++++++++++++ web/console/src/modules/audit/models/Audit.ts | 17 +++++++++++++++++ .../src/modules/audit/models/RootState.ts | 17 +++++++++++++++++ web/console/src/modules/audit/models/index.ts | 17 +++++++++++++++++ .../src/modules/audit/reducers/RootReducer.ts | 17 +++++++++++++++++ web/console/src/modules/audit/router.ts | 17 +++++++++++++++++ .../src/modules/audit/stores/RootStore.ts | 17 +++++++++++++++++ web/console/src/modules/cluster/WebAPI.ts | 17 +++++++++++++++++ .../src/modules/cluster/WebAPI/ClusterAPI.ts | 17 +++++++++++++++++ .../src/modules/cluster/WebAPI/ComputerAPI.ts | 17 +++++++++++++++++ .../modules/cluster/WebAPI/K8sResourceAPI.ts | 17 +++++++++++++++++ .../src/modules/cluster/WebAPI/ProjectAPI.ts | 17 +++++++++++++++++ .../src/modules/cluster/WebAPI/index.ts | 17 +++++++++++++++++ .../src/modules/cluster/WebAPI/scale.ts | 17 +++++++++++++++++ .../modules/cluster/actions/clusterActions.ts | 17 +++++++++++++++++ .../cluster/actions/clusterCreationAction.ts | 17 +++++++++++++++++ .../modules/cluster/actions/cmEditActions.ts | 17 +++++++++++++++++ .../cluster/actions/computerActions.ts | 17 +++++++++++++++++ .../cluster/actions/computerPodActions.ts | 17 +++++++++++++++++ .../modules/cluster/actions/createICAction.ts | 17 +++++++++++++++++ .../modules/cluster/actions/dialogActions.ts | 17 +++++++++++++++++ .../src/modules/cluster/actions/index.ts | 17 +++++++++++++++++ .../cluster/actions/lbcfEditActions.ts | 17 +++++++++++++++++ .../modules/cluster/actions/modeActions.ts | 17 +++++++++++++++++ .../actions/namespaceActions.project.ts | 17 +++++++++++++++++ .../cluster/actions/namespaceActions.ts | 17 +++++++++++++++++ .../cluster/actions/namespaceEditActions.ts | 17 +++++++++++++++++ .../projectNamespaceActions.project.ts | 17 +++++++++++++++++ .../cluster/actions/regionActions.project.ts | 17 +++++++++++++++++ .../modules/cluster/actions/regionActions.ts | 17 +++++++++++++++++ .../actions/resourceActions.project.ts | 17 +++++++++++++++++ .../cluster/actions/resourceActions.ts | 17 +++++++++++++++++ .../cluster/actions/resourceDetailActions.ts | 17 +++++++++++++++++ .../actions/resourceDetailEventActions.ts | 17 +++++++++++++++++ .../cluster/actions/resourceEventActions.ts | 17 +++++++++++++++++ .../cluster/actions/resourceLogActions.ts | 17 +++++++++++++++++ .../cluster/actions/resourcePodActions.ts | 17 +++++++++++++++++ .../cluster/actions/resourcePodLogActions.ts | 17 +++++++++++++++++ .../cluster/actions/resourceRsActions.ts | 17 +++++++++++++++++ .../cluster/actions/secretEditActions.ts | 17 +++++++++++++++++ .../cluster/actions/serviceEditActions.ts | 17 +++++++++++++++++ .../actions/subRouterActions.project.ts | 17 +++++++++++++++++ .../cluster/actions/subRouterActions.ts | 17 +++++++++++++++++ .../cluster/actions/validateCMActions.ts | 17 +++++++++++++++++ .../actions/validateClusterCreationAction.ts | 17 +++++++++++++++++ .../cluster/actions/validateCreateICAction.ts | 17 +++++++++++++++++ .../cluster/actions/validateLbcfActions.ts | 17 +++++++++++++++++ .../actions/validateNamespaceActions.ts | 17 +++++++++++++++++ .../cluster/actions/validateSecretActinos.ts | 17 +++++++++++++++++ .../cluster/actions/validateServiceActions.ts | 17 +++++++++++++++++ .../actions/validateWorkloadActions.ts | 17 +++++++++++++++++ .../cluster/actions/validatorActions.ts | 17 +++++++++++++++++ .../cluster/actions/workflowActions.ts | 17 +++++++++++++++++ .../cluster/actions/workloadConfigActions.ts | 17 +++++++++++++++++ .../cluster/actions/workloadEditActions.ts | 17 +++++++++++++++++ .../cluster/actions/workloadPvcActions.ts | 17 +++++++++++++++++ .../cluster/actions/workloadSecretActions.ts | 17 +++++++++++++++++ .../components/ApplicationApp.project.tsx | 17 +++++++++++++++++ .../ApplicationHeadPanel.project.tsx | 17 +++++++++++++++++ .../modules/cluster/components/ClusterApp.tsx | 17 +++++++++++++++++ .../cluster/components/KubectlDialog.tsx | 17 +++++++++++++++++ .../cluster/components/clusterManage/CIDR.tsx | 17 +++++++++++++++++ .../clusterManage/ClusterActionPanel.tsx | 17 +++++++++++++++++ .../clusterManage/ClusterDeleteDialog.tsx | 17 +++++++++++++++++ .../clusterManage/ClusterHeadPanel.tsx | 17 +++++++++++++++++ .../clusterManage/ClusterStatusDialog.tsx | 17 +++++++++++++++++ .../ClusterSubpageHeaderPanel.tsx | 17 +++++++++++++++++ .../clusterManage/ClusterTablePanel.tsx | 17 +++++++++++++++++ .../clusterManage/ClusterUpdate.tsx | 17 +++++++++++++++++ .../clusterManage/ConfigPromethus.tsx | 17 +++++++++++++++++ .../clusterManage/CreateClusterPanel.tsx | 17 +++++++++++++++++ .../clusterManage/CreateICPanel.tsx | 17 +++++++++++++++++ .../clusterManage/InputLabelsPanel.tsx | 17 +++++++++++++++++ .../clusterManage/KubeconfigFileParse.tsx | 17 +++++++++++++++++ .../clusterManage/ModifyClusterNameDialog.tsx | 17 +++++++++++++++++ .../clusterManage/SelectICComputerPanel.tsx | 17 +++++++++++++++++ .../clusterManage/ShowICComputerPanel.tsx | 17 +++++++++++++++++ .../clusterManage/TcrRegistyDeployDialog.tsx | 17 +++++++++++++++++ .../UpdateClusterTokenDialog.tsx | 17 +++++++++++++++++ .../components/clusterManage/WorkerUpdate.tsx | 17 +++++++++++++++++ .../resource/ResourceContainerPanel.tsx | 17 +++++++++++++++++ .../resource/ResourceHeaderPanel.project.tsx | 17 +++++++++++++++++ .../resource/ResourceHeaderPanel.tsx | 17 +++++++++++++++++ .../components/resource/ResourceListPanel.tsx | 17 +++++++++++++++++ .../resource/ResourceSidebarPanel.tsx | 17 +++++++++++++++++ .../components/resource/YamlEditorPanel.tsx | 17 +++++++++++++++++ .../clusterInfomation/ClusterDetail.tsx | 17 +++++++++++++++++ .../ClusterDetailBasicInfoPanel.tsx | 17 +++++++++++++++++ .../ClusterPlugInfoPanel.tsx | 17 +++++++++++++++++ .../UpdateClusterAllocationRatioDialog.tsx | 17 +++++++++++++++++ .../nodeManage/BatchDrainComputerDialog.tsx | 17 +++++++++++++++++ .../BatchTurnOnScheduleComputerDialog.tsx | 17 +++++++++++++++++ .../BatchUnScheduleComputerDialog.tsx | 17 +++++++++++++++++ .../nodeManage/ComputerActionPanel.tsx | 17 +++++++++++++++++ .../nodeManage/ComputerStatusDialog.tsx | 17 +++++++++++++++++ .../nodeManage/ComputerTablePanel.tsx | 17 +++++++++++++++++ .../nodeManage/CreateComputerPanel.tsx | 17 +++++++++++++++++ .../nodeManage/DeleteComputerDialog.tsx | 17 +++++++++++++++++ .../nodeManage/UpdateNodeLabelDialog.tsx | 17 +++++++++++++++++ .../nodeManage/UpdateNodeTaintDialog.tsx | 17 +++++++++++++++++ .../resourceDetail/ResourceDetail.tsx | 17 +++++++++++++++++ .../ResourceDetailEventActionPanel.tsx | 17 +++++++++++++++++ .../ResourceDetailEventTablePanel.tsx | 17 +++++++++++++++++ .../resourceDetail/ResourceDetailPanel.tsx | 17 +++++++++++++++++ .../ResourceGrayUpgradeDialog.tsx | 17 +++++++++++++++++ .../ResourceModifyHistoryPanel.tsx | 17 +++++++++++++++++ .../ResourceNamespaceDetailPanel.tsx | 17 +++++++++++++++++ .../ResourceNodeDetailPanel.tsx | 17 +++++++++++++++++ .../resourceDetail/ResourcePodActionPanel.tsx | 17 +++++++++++++++++ .../ResourcePodDeleteDialog.tsx | 17 +++++++++++++++++ .../resourceDetail/ResourcePodLogPanel.tsx | 17 +++++++++++++++++ .../resourceDetail/ResourcePodPanel.tsx | 17 +++++++++++++++++ .../ResourcePodRemoteLoginDialog.tsx | 17 +++++++++++++++++ .../resourceDetail/ResourcePodTable.tsx | 17 +++++++++++++++++ .../resourceDetail/ResourceRollbackDialog.tsx | 17 +++++++++++++++++ .../ResourceTappPodDeleteDialog.tsx | 17 +++++++++++++++++ .../ResourceYamlActionPanel.tsx | 17 +++++++++++++++++ .../resourceDetail/ResourceYamlPanel.tsx | 17 +++++++++++++++++ .../resourceEdition/EditConfigMapPanel.tsx | 17 +++++++++++++++++ .../EditLbcfBackGroupItemPanel.tsx | 17 +++++++++++++++++ .../EditLbcfBackGroupPanel.tsx | 17 +++++++++++++++++ .../resourceEdition/EditLbcfPanel.tsx | 17 +++++++++++++++++ .../resourceEdition/EditNamespacePanel.tsx | 17 +++++++++++++++++ .../EditResourceAdvancedPanel.tsx | 17 +++++++++++++++++ .../EditResourceAnnotations.tsx | 17 +++++++++++++++++ .../EditResourceContainerAdvancedPanel.tsx | 17 +++++++++++++++++ .../EditResourceContainerEnvItem.tsx | 17 +++++++++++++++++ .../EditResourceContainerHealthCheckPanel.tsx | 17 +++++++++++++++++ .../EditResourceContainerItem.tsx | 17 +++++++++++++++++ .../EditResourceContainerLimitItem.tsx | 17 +++++++++++++++++ .../EditResourceContainerMountItem.tsx | 17 +++++++++++++++++ .../EditResourceContainerNumPanel.tsx | 17 +++++++++++++++++ .../EditResourceContainerPanel.tsx | 17 +++++++++++++++++ .../EditResourceImagePullSecretsPanel.tsx | 17 +++++++++++++++++ .../EditResourceLabelPanel.tsx | 17 +++++++++++++++++ .../EditResourceNodeAffinityPanel.tsx | 17 +++++++++++++++++ .../resourceEdition/EditResourcePanel.tsx | 17 +++++++++++++++++ .../EditResourceVisualizationPanel.tsx | 17 +++++++++++++++++ .../EditResourceVolumePanel.tsx | 17 +++++++++++++++++ .../resourceEdition/EditSecretPanel.tsx | 17 +++++++++++++++++ .../EditServiceAdvanceSettingPanel.tsx | 17 +++++++++++++++++ .../EditServiceCommunicationPanel.tsx | 17 +++++++++++++++++ .../resourceEdition/EditServicePanel.tsx | 17 +++++++++++++++++ .../EditServicePortMapPanel.tsx | 17 +++++++++++++++++ .../EditServiceWorkloadDialog.tsx | 17 +++++++++++++++++ .../ResourceContainerListItem.tsx | 17 +++++++++++++++++ .../ResourceEditHostPathDialog.tsx | 17 +++++++++++++++++ .../ResourceSelectConfigDialog.tsx | 17 +++++++++++++++++ .../resourceEdition/SubHeaderPanel.tsx | 17 +++++++++++++++++ .../resourceEdition/UpdateResourcePanel.tsx | 17 +++++++++++++++++ .../ResourceActionPanel.tsx | 17 +++++++++++++++++ .../ResourceDeleteDialog.tsx | 17 +++++++++++++++++ .../ResourceEventPanel.tsx | 17 +++++++++++++++++ .../ResourceLogPanel.tsx | 17 +++++++++++++++++ .../ResourceTablePanel.tsx | 17 +++++++++++++++++ .../UpdateServiceAccessTypePanel.tsx | 17 +++++++++++++++++ .../UpdateWorkloadPodNumPanel.tsx | 17 +++++++++++++++++ .../UpdateWorkloadRegistryPanel.tsx | 17 +++++++++++++++++ .../components/scale/common/hooks/index.ts | 17 +++++++++++++++++ .../scale/common/hooks/useNamespaces.ts | 17 +++++++++++++++++ .../components/scale/cronhpa/constant.ts | 17 +++++++++++++++++ .../components/scale/cronhpa/context.tsx | 17 +++++++++++++++++ .../components/scale/cronhpa/detail/basic.tsx | 17 +++++++++++++++++ .../components/scale/cronhpa/detail/event.tsx | 17 +++++++++++++++++ .../components/scale/cronhpa/detail/index.tsx | 17 +++++++++++++++++ .../components/scale/cronhpa/detail/yaml.tsx | 17 +++++++++++++++++ .../components/scale/cronhpa/editor/hpa.tsx | 17 +++++++++++++++++ .../components/scale/cronhpa/editor/yaml.tsx | 17 +++++++++++++++++ .../components/scale/cronhpa/index.tsx | 17 +++++++++++++++++ .../components/scale/cronhpa/list/index.tsx | 17 +++++++++++++++++ .../scale/cronhpa/list/namespaceSelect.tsx | 17 +++++++++++++++++ .../cluster/components/scale/hpa/constant.ts | 17 +++++++++++++++++ .../cluster/components/scale/hpa/context.tsx | 17 +++++++++++++++++ .../components/scale/hpa/detail/basic.tsx | 17 +++++++++++++++++ .../components/scale/hpa/detail/event.tsx | 17 +++++++++++++++++ .../components/scale/hpa/detail/index.tsx | 17 +++++++++++++++++ .../components/scale/hpa/detail/yaml.tsx | 17 +++++++++++++++++ .../components/scale/hpa/editor/hpa.tsx | 17 +++++++++++++++++ .../components/scale/hpa/editor/yaml.tsx | 17 +++++++++++++++++ .../cluster/components/scale/hpa/index.tsx | 17 +++++++++++++++++ .../components/scale/hpa/list/index.tsx | 17 +++++++++++++++++ .../scale/hpa/list/namespaceSelect.tsx | 17 +++++++++++++++++ .../modules/cluster/constants/ActionType.ts | 17 +++++++++++++++++ .../src/modules/cluster/constants/Config.ts | 17 +++++++++++++++++ .../modules/cluster/constants/initState.ts | 17 +++++++++++++++++ .../cluster/constants/validateConfig.ts | 17 +++++++++++++++++ .../src/modules/cluster/index.project.tsx | 17 +++++++++++++++++ web/console/src/modules/cluster/index.tsx | 17 +++++++++++++++++ .../src/modules/cluster/models/Addon.ts | 17 +++++++++++++++++ .../cluster/models/AllocationRatioEdition.ts | 17 +++++++++++++++++ .../cluster/models/ClusterCreationState.ts | 17 +++++++++++++++++ .../cluster/models/Clustercredential.ts | 17 +++++++++++++++++ .../src/modules/cluster/models/Computer.ts | 17 +++++++++++++++++ .../cluster/models/ComputerOperator.ts | 17 +++++++++++++++++ .../modules/cluster/models/ConfigMapEdit.ts | 17 +++++++++++++++++ .../modules/cluster/models/ContainerEnv.ts | 17 +++++++++++++++++ .../modules/cluster/models/ContainerItem.ts | 17 +++++++++++++++++ .../src/modules/cluster/models/CreateIC.ts | 17 +++++++++++++++++ .../cluster/models/DetailResourceOption.ts | 17 +++++++++++++++++ .../src/modules/cluster/models/DialogState.ts | 17 +++++++++++++++++ .../src/modules/cluster/models/Event.ts | 17 +++++++++++++++++ .../src/modules/cluster/models/Lbcf.ts | 17 +++++++++++++++++ .../src/modules/cluster/models/LbcfEdit.ts | 17 +++++++++++++++++ .../modules/cluster/models/MonitorPanel.tsx | 17 +++++++++++++++++ .../src/modules/cluster/models/Namespace.ts | 17 +++++++++++++++++ .../cluster/models/NamespaceCreation.ts | 17 +++++++++++++++++ .../cluster/models/NamespaceOperator.ts | 17 +++++++++++++++++ web/console/src/modules/cluster/models/Pod.ts | 17 +++++++++++++++++ .../src/modules/cluster/models/PortMap.ts | 17 +++++++++++++++++ .../src/modules/cluster/models/Replicaset.ts | 17 +++++++++++++++++ .../modules/cluster/models/RequestLimit.ts | 17 +++++++++++++++++ .../cluster/models/ResourceDetailState.ts | 17 +++++++++++++++++ .../cluster/models/ResourceEventOption.ts | 17 +++++++++++++++++ .../cluster/models/ResourceLogOption.ts | 17 +++++++++++++++++ .../modules/cluster/models/ResourceOption.ts | 17 +++++++++++++++++ .../src/modules/cluster/models/RootState.ts | 17 +++++++++++++++++ .../src/modules/cluster/models/RuleMap.ts | 17 +++++++++++++++++ .../src/modules/cluster/models/SecretEdit.ts | 17 +++++++++++++++++ .../cluster/models/SelectProjectState.ts | 17 +++++++++++++++++ .../src/modules/cluster/models/ServiceEdit.ts | 17 +++++++++++++++++ .../src/modules/cluster/models/SubRoot.ts | 17 +++++++++++++++++ .../src/modules/cluster/models/SubRouter.ts | 17 +++++++++++++++++ .../src/modules/cluster/models/Version.ts | 17 +++++++++++++++++ .../src/modules/cluster/models/VolumeItem.ts | 17 +++++++++++++++++ .../modules/cluster/models/WorkloadEdit.ts | 17 +++++++++++++++++ .../src/modules/cluster/models/index.ts | 17 +++++++++++++++++ .../cluster/reducers/ComputerReducer.ts | 17 +++++++++++++++++ .../cluster/reducers/ConfigMapEditReducer.ts | 17 +++++++++++++++++ .../cluster/reducers/CreateICReducer.ts | 17 +++++++++++++++++ .../cluster/reducers/DetailResourceReducer.ts | 17 +++++++++++++++++ .../cluster/reducers/LbcfEditReducer.ts | 17 +++++++++++++++++ .../cluster/reducers/NamespaceEditReducer.ts | 17 +++++++++++++++++ .../cluster/reducers/ResourceDetailReducer.ts | 17 +++++++++++++++++ .../cluster/reducers/ResourceEventReducer.ts | 17 +++++++++++++++++ .../cluster/reducers/ResourceLogReducer.ts | 17 +++++++++++++++++ .../cluster/reducers/ResourceReducer.ts | 17 +++++++++++++++++ .../cluster/reducers/RootReducer.project.ts | 17 +++++++++++++++++ .../modules/cluster/reducers/RootReducer.ts | 17 +++++++++++++++++ .../cluster/reducers/SecretEditReducer.ts | 17 +++++++++++++++++ .../cluster/reducers/ServiceEditReducer.ts | 17 +++++++++++++++++ .../modules/cluster/reducers/SubReducer.ts | 17 +++++++++++++++++ .../cluster/reducers/WorkloadEditReducer.ts | 17 +++++++++++++++++ .../src/modules/cluster/router.project.ts | 17 +++++++++++++++++ web/console/src/modules/cluster/router.ts | 17 +++++++++++++++++ .../src/modules/cluster/stores/RootStore.ts | 17 +++++++++++++++++ .../components/ChartBrush/BarChartBrush.tsx | 17 +++++++++++++++++ .../components/ChartBrush/LineChartBrush.tsx | 17 +++++++++++++++++ .../common/components/ChartBrush/bytesTo.ts | 17 +++++++++++++++++ .../common/components/ChartBrush/index.ts | 17 +++++++++++++++++ .../common/components/NavigateLink.tsx | 17 +++++++++++++++++ .../common/components/buttonbar/ButtonBar.tsx | 17 +++++++++++++++++ .../common/components/buttonbar/index.ts | 17 +++++++++++++++++ .../common/components/cardMenu/CardMenu.tsx | 17 +++++++++++++++++ .../common/components/cardMenu/index.ts | 17 +++++++++++++++++ .../modules/common/components/clip/Clip.tsx | 17 +++++++++++++++++ .../modules/common/components/clip/index.ts | 17 +++++++++++++++++ .../codemirror/CodeMirrorEditor.tsx | 17 +++++++++++++++++ .../common/components/codemirror/index.ts | 17 +++++++++++++++++ .../common/components/commonbar/CommonBar.tsx | 17 +++++++++++++++++ .../common/components/commonbar/index.ts | 17 +++++++++++++++++ .../components/datepicker/DatePicker.tsx | 17 +++++++++++++++++ .../datepicker/defaultDatePickerTabs.ts | 17 +++++++++++++++++ .../common/components/datepicker/index.ts | 17 +++++++++++++++++ .../datetimepicker/DateTimePicker.tsx | 17 +++++++++++++++++ .../datetimepicker/SingleDatePicker.tsx | 17 +++++++++++++++++ .../common/components/datetimepicker/index.ts | 17 +++++++++++++++++ .../common/components/downMenu/DownMenu.tsx | 17 +++++++++++++++++ .../common/components/downMenu/index.ts | 17 +++++++++++++++++ .../common/components/dropdown/Dropdown.tsx | 17 +++++++++++++++++ .../common/components/dropdown/index.ts | 17 +++++++++++++++++ .../components/dropdownmenu/DropdownMenu.tsx | 17 +++++++++++++++++ .../common/components/dropdownmenu/index.ts | 17 +++++++++++++++++ .../common/components/empty/emptyTips.tsx | 17 +++++++++++++++++ .../modules/common/components/empty/index.ts | 17 +++++++++++++++++ .../common/components/errortip/ErrorTip.tsx | 17 +++++++++++++++++ .../common/components/errortip/index.ts | 17 +++++++++++++++++ .../common/components/formitem/FormItem.tsx | 17 +++++++++++++++++ .../common/components/formitem/index.ts | 17 +++++++++++++++++ .../common/components/gridtable/GridTable.tsx | 17 +++++++++++++++++ .../common/components/gridtable/index.ts | 17 +++++++++++++++++ .../components/headbubble/HeadBubble.tsx | 17 +++++++++++++++++ .../common/components/headbubble/index.ts | 17 +++++++++++++++++ .../src/modules/common/components/index.ts | 17 +++++++++++++++++ .../components/inputfield/InputField.tsx | 17 +++++++++++++++++ .../common/components/inputfield/index.ts | 17 +++++++++++++++++ .../components/inputrange/InputRange.tsx | 17 +++++++++++++++++ .../common/components/inputrange/index.ts | 17 +++++++++++++++++ .../components/linkbutton/LinkButton.tsx | 17 +++++++++++++++++ .../common/components/linkbutton/index.ts | 17 +++++++++++++++++ .../common/components/listitem/ListItem.tsx | 17 +++++++++++++++++ .../common/components/listitem/index.ts | 17 +++++++++++++++++ .../common/components/logviewer/Panel.tsx | 17 +++++++++++++++++ .../common/components/logviewer/index.ts | 17 +++++++++++++++++ .../common/components/markdown/Markdown.tsx | 17 +++++++++++++++++ .../common/components/markdown/index.ts | 17 +++++++++++++++++ .../common/components/network/Network.tsx | 17 +++++++++++++++++ .../common/components/network/VpcNetwork.tsx | 17 +++++++++++++++++ .../common/components/network/index.ts | 17 +++++++++++++++++ .../common/components/regionbar/RegionBar.tsx | 17 +++++++++++++++++ .../common/components/regionbar/index.ts | 17 +++++++++++++++++ .../components/resourcelist/ResourceList.tsx | 17 +++++++++++++++++ .../common/components/resourcelist/index.ts | 17 +++++++++++++++++ .../resourceselector/ResourceSelector.tsx | 17 +++++++++++++++++ .../components/resourceselector/index.ts | 17 +++++++++++++++++ .../common/components/select/SelectList.tsx | 17 +++++++++++++++++ .../modules/common/components/select/index.ts | 17 +++++++++++++++++ .../common/components/sidepanel/SidePanel.tsx | 17 +++++++++++++++++ .../common/components/sidepanel/index.ts | 17 +++++++++++++++++ .../common/components/stepTab/Step.tsx | 17 +++++++++++++++++ .../common/components/stepTab/StepTab.tsx | 17 +++++++++++++++++ .../common/components/stepTab/index.ts | 17 +++++++++++++++++ .../components/tabselector/TabSelector.tsx | 17 +++++++++++++++++ .../common/components/tabselector/index.ts | 17 +++++++++++++++++ .../tagsearchbox/AttributeSelect.tsx | 17 +++++++++++++++++ .../common/components/tagsearchbox/Input.tsx | 17 +++++++++++++++++ .../common/components/tagsearchbox/Tag.tsx | 17 +++++++++++++++++ .../components/tagsearchbox/TagSearchBox.tsx | 17 +++++++++++++++++ .../common/components/tagsearchbox/index.ts | 17 +++++++++++++++++ .../tagsearchbox/valueselect/Loading.tsx | 17 +++++++++++++++++ .../valueselect/MultipleValueSelect.tsx | 17 +++++++++++++++++ .../tagsearchbox/valueselect/PureInput.tsx | 17 +++++++++++++++++ .../valueselect/SingleValueSelect.tsx | 17 +++++++++++++++++ .../tagsearchbox/valueselect/index.tsx | 17 +++++++++++++++++ .../common/components/timepicker/Select.tsx | 17 +++++++++++++++++ .../components/timepicker/TimePicker.tsx | 17 +++++++++++++++++ .../common/components/timepicker/index.ts | 17 +++++++++++++++++ .../common/components/tipdialog/TipDialog.tsx | 17 +++++++++++++++++ .../common/components/tipdialog/index.ts | 17 +++++++++++++++++ .../common/components/tipinfo/TipInfo.tsx | 17 +++++++++++++++++ .../common/components/tipinfo/index.ts | 17 +++++++++++++++++ .../common/components/tke-version/index.tsx | 17 +++++++++++++++++ .../transferTable/TransferTable.tsx | 17 +++++++++++++++++ .../common/components/transferTable/index.ts | 17 +++++++++++++++++ .../workflowdialog/WorkflowDialog.tsx | 17 +++++++++++++++++ .../components/workflowdialog/index.tsx | 17 +++++++++++++++++ .../components/yamleditor/YamlDialog.tsx | 17 +++++++++++++++++ .../components/yamleditor/YamlEditorPanel.tsx | 17 +++++++++++++++++ .../yamleditor/YamlSearchHelperPanel.tsx | 17 +++++++++++++++++ .../common/components/yamleditor/index.ts | 17 +++++++++++++++++ web/console/src/modules/common/index.ts | 17 +++++++++++++++++ .../src/modules/common/layouts/AntdLayout.tsx | 17 +++++++++++++++++ .../modules/common/layouts/DetailLayout.tsx | 17 +++++++++++++++++ .../common/layouts/DialogBodyLayout.tsx | 17 +++++++++++++++++ .../common/layouts/FixedFormLayout.tsx | 17 +++++++++++++++++ .../src/modules/common/layouts/FormLayout.tsx | 17 +++++++++++++++++ .../modules/common/layouts/MainBodyLayout.tsx | 17 +++++++++++++++++ .../common/layouts/MainTitleLayout.tsx | 17 +++++++++++++++++ .../modules/common/layouts/SubPageLayout.tsx | 17 +++++++++++++++++ .../modules/common/layouts/TableLayout.tsx | 17 +++++++++++++++++ .../src/modules/common/layouts/index.ts | 17 +++++++++++++++++ .../src/modules/common/models/BaseType.ts | 17 +++++++++++++++++ .../src/modules/common/models/Cluster.ts | 17 +++++++++++++++++ .../src/modules/common/models/Config.ts | 17 +++++++++++++++++ .../src/modules/common/models/Container.ts | 17 +++++++++++++++++ .../modules/common/models/CreateResource.ts | 17 +++++++++++++++++ web/console/src/modules/common/models/Env.ts | 17 +++++++++++++++++ .../src/modules/common/models/HealthCheck.ts | 17 +++++++++++++++++ .../src/modules/common/models/K8sVersion.ts | 17 +++++++++++++++++ .../src/modules/common/models/KeyValue.ts | 17 +++++++++++++++++ .../src/modules/common/models/Kubectl.ts | 17 +++++++++++++++++ .../src/modules/common/models/Label.ts | 17 +++++++++++++++++ web/console/src/modules/common/models/Link.ts | 17 +++++++++++++++++ .../src/modules/common/models/LogAgent.ts | 17 +++++++++++++++++ .../src/modules/common/models/Mount.ts | 17 +++++++++++++++++ .../src/modules/common/models/Namespace.ts | 17 +++++++++++++++++ .../src/modules/common/models/PortMap.ts | 17 +++++++++++++++++ .../src/modules/common/models/Repository.ts | 17 +++++++++++++++++ .../src/modules/common/models/Resource.ts | 17 +++++++++++++++++ .../src/modules/common/models/ResourceInfo.ts | 17 +++++++++++++++++ .../common/models/TableFilterOption.ts | 17 +++++++++++++++++ web/console/src/modules/common/models/Tag.ts | 17 +++++++++++++++++ .../src/modules/common/models/Validation.ts | 17 +++++++++++++++++ .../src/modules/common/models/index.ts | 17 +++++++++++++++++ .../src/modules/common/models/region.ts | 17 +++++++++++++++++ .../modules/common/models/requestParams.ts | 17 +++++++++++++++++ .../src/modules/common/utils/bytesTo.ts | 17 +++++++++++++++++ .../src/modules/common/utils/cloneDeep.ts | 17 +++++++++++++++++ .../modules/common/utils/getWorkflowError.ts | 17 +++++++++++++++++ .../src/modules/common/utils/includes.ts | 17 +++++++++++++++++ web/console/src/modules/common/utils/index.ts | 17 +++++++++++++++++ .../src/modules/common/utils/isEmpty.ts | 17 +++++++++++++++++ .../src/modules/common/utils/orderBy.ts | 17 +++++++++++++++++ web/console/src/modules/common/utils/pluck.ts | 17 +++++++++++++++++ .../src/modules/common/utils/remove.ts | 17 +++++++++++++++++ .../src/modules/common/utils/tHooks.ts | 17 +++++++++++++++++ .../src/modules/common/utils/tea_adapter.ts | 17 +++++++++++++++++ web/console/src/modules/common/utils/uniq.ts | 17 +++++++++++++++++ .../src/modules/common/validate/Action.ts | 17 +++++++++++++++++ .../src/modules/common/validate/ActionType.ts | 17 +++++++++++++++++ .../src/modules/common/validate/Form.ts | 17 +++++++++++++++++ .../src/modules/common/validate/Model.ts | 17 +++++++++++++++++ .../src/modules/common/validate/Reducer.ts | 17 +++++++++++++++++ .../src/modules/common/validate/index.ts | 17 +++++++++++++++++ .../modules/common/webapi/K8sResourceAPI.ts | 17 +++++++++++++++++ .../src/modules/common/webapi/LogAgentAPI.ts | 17 +++++++++++++++++ .../src/modules/common/webapi/PromethusAPI.ts | 17 +++++++++++++++++ .../src/modules/common/webapi/RegionAPI.ts | 17 +++++++++++++++++ .../src/modules/common/webapi/index.ts | 17 +++++++++++++++++ web/console/src/modules/helm/WebAPI.ts | 17 +++++++++++++++++ .../modules/helm/actions/clusterActions.ts | 17 +++++++++++++++++ .../src/modules/helm/actions/createActions.ts | 17 +++++++++++++++++ .../src/modules/helm/actions/detailActions.ts | 17 +++++++++++++++++ .../src/modules/helm/actions/helmActions.ts | 17 +++++++++++++++++ web/console/src/modules/helm/actions/index.ts | 17 +++++++++++++++++ .../helm/actions/namespaceActions.project.ts | 17 +++++++++++++++++ .../modules/helm/actions/namespaceActions.ts | 17 +++++++++++++++++ .../projectNamespaceActions.project.ts | 17 +++++++++++++++++ .../src/modules/helm/actions/regionActions.ts | 17 +++++++++++++++++ .../src/modules/helm/components/HelmApp.tsx | 17 +++++++++++++++++ .../helmManage/create/BaseInfoPanel.tsx | 17 +++++++++++++++++ .../helmManage/create/HelmCreate.project.tsx | 17 +++++++++++++++++ .../helmManage/create/HelmCreate.tsx | 17 +++++++++++++++++ .../helmManage/create/KeyValuesPanel.tsx | 17 +++++++++++++++++ .../helmManage/create/OtherChartPanel.tsx | 17 +++++++++++++++++ .../create/TencentHubChartPanel.tsx | 17 +++++++++++++++++ .../helmManage/detail/HelmDetail.tsx | 17 +++++++++++++++++ .../detail/HelmDetailBasicInfoPanel.tsx | 17 +++++++++++++++++ .../helmManage/detail/HistoryTablePanel.tsx | 17 +++++++++++++++++ .../helmManage/detail/ValueYamlPanel.tsx | 17 +++++++++++++++++ .../helmManage/list/HelmActionPanel.tsx | 17 +++++++++++++++++ .../helmManage/list/HelmHeadPanel.project.tsx | 17 +++++++++++++++++ .../helmManage/list/HelmHeadPanel.tsx | 17 +++++++++++++++++ .../helmManage/list/HelmTablePanel.tsx | 17 +++++++++++++++++ .../helmManage/list/InlineOpenHelmDialog.tsx | 17 +++++++++++++++++ .../helmManage/list/InstallingDialog.tsx | 17 +++++++++++++++++ .../helmManage/list/UpdateHelmDialog.tsx | 17 +++++++++++++++++ .../helmManage/list/UpdateHelmDialogOther.tsx | 17 +++++++++++++++++ .../src/modules/helm/constants/ActionType.ts | 17 +++++++++++++++++ .../src/modules/helm/constants/Config.ts | 17 +++++++++++++++++ web/console/src/modules/helm/index.tsx | 17 +++++++++++++++++ .../src/modules/helm/models/DetailState.ts | 17 +++++++++++++++++ web/console/src/modules/helm/models/Helm.ts | 17 +++++++++++++++++ .../src/modules/helm/models/HelmCreation.ts | 17 +++++++++++++++++ .../src/modules/helm/models/ListState.ts | 17 +++++++++++++++++ web/console/src/modules/helm/models/LogRow.ts | 17 +++++++++++++++++ .../src/modules/helm/models/Namespace.ts | 17 +++++++++++++++++ .../src/modules/helm/models/RootState.ts | 17 +++++++++++++++++ .../src/modules/helm/models/Tencenthub.ts | 17 +++++++++++++++++ web/console/src/modules/helm/models/Zone.ts | 17 +++++++++++++++++ web/console/src/modules/helm/models/index.ts | 17 +++++++++++++++++ .../modules/helm/reducers/DetailReducer.ts | 17 +++++++++++++++++ .../helm/reducers/HelmCreationReducer.ts | 17 +++++++++++++++++ .../src/modules/helm/reducers/ListReducer.ts | 17 +++++++++++++++++ .../helm/reducers/RootReducer.project.ts | 17 +++++++++++++++++ .../src/modules/helm/reducers/RootReducer.ts | 17 +++++++++++++++++ .../src/modules/helm/reducers/initState.ts | 17 +++++++++++++++++ .../src/modules/helm/router.project.ts | 17 +++++++++++++++++ web/console/src/modules/helm/router.ts | 17 +++++++++++++++++ .../src/modules/helm/stores/RootStore.ts | 17 +++++++++++++++++ web/console/src/modules/logStash/WebAPI.ts | 17 +++++++++++++++++ .../logStash/actions/clusterActions.ts | 17 +++++++++++++++++ .../logStash/actions/editLogStashActions.ts | 17 +++++++++++++++++ .../src/modules/logStash/actions/index.ts | 17 +++++++++++++++++ .../modules/logStash/actions/logActions.ts | 17 +++++++++++++++++ .../logStash/actions/logDaemonsetActions.ts | 17 +++++++++++++++++ .../logStash/actions/namespaceActions.ts | 17 +++++++++++++++++ .../modules/logStash/actions/podActions.ts | 17 +++++++++++++++++ .../modules/logStash/actions/regionActions.ts | 17 +++++++++++++++++ .../logStash/actions/resourceActions.ts | 17 +++++++++++++++++ .../logStash/actions/validatorActions.ts | 17 +++++++++++++++++ .../logStash/actions/workflowActions.ts | 17 +++++++++++++++++ .../logStash/components/DeleteLogDialog.tsx | 17 +++++++++++++++++ .../logStash/components/EditConsumerPanel.tsx | 17 +++++++++++++++++ .../logStash/components/EditLogStashPanel.tsx | 17 +++++++++++++++++ .../EditOriginContainerFilePanel.tsx | 17 +++++++++++++++++ .../EditOriginContainerItemPanel.tsx | 17 +++++++++++++++++ .../components/EditOriginContainerPanel.tsx | 17 +++++++++++++++++ .../components/EditOriginNodePanel.tsx | 17 +++++++++++++++++ .../ListOriginContainerItemPanel.tsx | 17 +++++++++++++++++ .../logStash/components/LogDetailPanel.tsx | 17 +++++++++++++++++ .../components/LogSettingTablePanel.tsx | 17 +++++++++++++++++ .../components/LogStashActionPanel.tsx | 17 +++++++++++++++++ .../logStash/components/LogStashApp.tsx | 17 +++++++++++++++++ .../logStash/components/LogStashHeadPanel.tsx | 17 +++++++++++++++++ .../components/LogStashSubHeadPanel.tsx | 17 +++++++++++++++++ .../components/LogStashTablePanel.tsx | 17 +++++++++++++++++ .../components/OpenLogStashDialog.tsx | 17 +++++++++++++++++ .../modules/logStash/constants/ActionType.ts | 17 +++++++++++++++++ .../src/modules/logStash/constants/Config.ts | 17 +++++++++++++++++ .../modules/logStash/constants/initState.ts | 17 +++++++++++++++++ web/console/src/modules/logStash/index.tsx | 17 +++++++++++++++++ .../src/modules/logStash/models/Ckafka.ts | 17 +++++++++++++++++ .../src/modules/logStash/models/Cls.ts | 17 +++++++++++++++++ .../logStash/models/ContainerFilePathItem.ts | 17 +++++++++++++++++ .../modules/logStash/models/ContainerLogs.ts | 17 +++++++++++++++++ .../modules/logStash/models/LogDaemonset.ts | 17 +++++++++++++++++ .../modules/logStash/models/LogStashEdit.ts | 17 +++++++++++++++++ .../src/modules/logStash/models/LogStatsh.ts | 17 +++++++++++++++++ .../modules/logStash/models/MetadataItem.ts | 17 +++++++++++++++++ .../src/modules/logStash/models/Resource.ts | 17 +++++++++++++++++ .../src/modules/logStash/models/RootState.ts | 17 +++++++++++++++++ .../src/modules/logStash/models/index.ts | 17 +++++++++++++++++ .../src/modules/logStash/models/pod.ts | 17 +++++++++++++++++ .../logStash/reducers/LogStashEditReducer.ts | 17 +++++++++++++++++ .../modules/logStash/reducers/RootReducer.ts | 17 +++++++++++++++++ web/console/src/modules/logStash/router.ts | 17 +++++++++++++++++ .../src/modules/logStash/stores/RootStore.ts | 17 +++++++++++++++++ web/console/src/modules/notify/WebAPI.ts | 17 +++++++++++++++++ .../src/modules/notify/actions/index.ts | 17 +++++++++++++++++ .../modules/notify/actions/resourceActions.ts | 17 +++++++++++++++++ .../modules/notify/actions/workflowActions.ts | 17 +++++++++++++++++ .../components/DeleteResourceDialog.tsx | 17 +++++++++++++++++ .../modules/notify/components/NotifyApp.tsx | 17 +++++++++++++++++ .../modules/notify/components/NotifyHead.tsx | 17 +++++++++++++++++ .../notify/components/ResourceSidebar.tsx | 17 +++++++++++++++++ .../resourceDetail/ResourceDetail.tsx | 17 +++++++++++++++++ .../resourceDetail/ResourceDetailChannel.tsx | 17 +++++++++++++++++ .../resourceDetail/ResourceDetailReceiver.tsx | 17 +++++++++++++++++ .../ResourceDetailReceiverGroup.tsx | 17 +++++++++++++++++ .../resourceDetail/ResourceDetailTemplate.tsx | 17 +++++++++++++++++ .../resourceDetail/ResourceHeader.tsx | 17 +++++++++++++++++ .../resourceEdition/EditResource.tsx | 17 +++++++++++++++++ .../resourceEdition/EditResourceChannel.tsx | 17 +++++++++++++++++ .../resourceEdition/EditResourceReceiver.tsx | 17 +++++++++++++++++ .../EditResourceReceiverGroup.tsx | 17 +++++++++++++++++ .../resourceEdition/EditResourceTemplate.tsx | 17 +++++++++++++++++ .../components/resourceIntro/BodyIntro.tsx | 17 +++++++++++++++++ .../resourceIntro/BodyIntroHeader.tsx | 17 +++++++++++++++++ .../components/resourceList/ResourceTable.tsx | 17 +++++++++++++++++ .../resourceList/ResourceTableChannel.tsx | 17 +++++++++++++++++ .../resourceList/ResourceTableReceiver.tsx | 17 +++++++++++++++++ .../resourceList/ResourceTableTemplate.tsx | 17 +++++++++++++++++ .../modules/notify/constants/ActionType.ts | 17 +++++++++++++++++ web/console/src/modules/notify/index.tsx | 17 +++++++++++++++++ .../modules/notify/models/ClusterFilter.ts | 17 +++++++++++++++++ .../src/modules/notify/models/Group.tsx | 17 +++++++++++++++++ .../src/modules/notify/models/Namespace.ts | 17 +++++++++++++++++ .../src/modules/notify/models/Region.ts | 17 +++++++++++++++++ .../src/modules/notify/models/RegionFilter.ts | 17 +++++++++++++++++ .../src/modules/notify/models/Resource.ts | 17 +++++++++++++++++ .../src/modules/notify/models/RootState.ts | 17 +++++++++++++++++ .../src/modules/notify/models/index.ts | 17 +++++++++++++++++ .../modules/notify/reducers/RootReducer.ts | 17 +++++++++++++++++ .../src/modules/notify/router.project.ts | 17 +++++++++++++++++ web/console/src/modules/notify/router.ts | 17 +++++++++++++++++ .../modules/notify/schema/channelSchema.ts | 17 +++++++++++++++++ .../notify/schema/receiverGroupSchema.ts | 17 +++++++++++++++++ .../modules/notify/schema/receiverSchema.ts | 17 +++++++++++++++++ .../src/modules/notify/schema/schemaUtil.ts | 17 +++++++++++++++++ .../modules/notify/schema/templateSchema.ts | 17 +++++++++++++++++ .../src/modules/notify/stores/RootStore.ts | 17 +++++++++++++++++ web/console/src/modules/overview/WebAPI.ts | 17 +++++++++++++++++ .../overview/actions/overviewActions.ts | 17 +++++++++++++++++ .../components/ClusterDetailPanel.tsx | 17 +++++++++++++++++ .../overview/components/ClusterOverview.tsx | 17 +++++++++++++++++ .../overview/components/OverviewApp.tsx | 17 +++++++++++++++++ .../overview/components/OverviewHeadPanel.tsx | 17 +++++++++++++++++ .../overview/components/QuickHelpPanel.tsx | 17 +++++++++++++++++ .../modules/overview/components/TipsPanel.tsx | 17 +++++++++++++++++ .../modules/overview/constants/ActionType.ts | 17 +++++++++++++++++ .../src/modules/overview/constants/Config.ts | 17 +++++++++++++++++ web/console/src/modules/overview/index.tsx | 17 +++++++++++++++++ .../src/modules/overview/models/RootState.ts | 17 +++++++++++++++++ .../modules/overview/reducers/RootReducer.ts | 17 +++++++++++++++++ web/console/src/modules/overview/router.ts | 17 +++++++++++++++++ .../src/modules/overview/stores/RootStore.ts | 17 +++++++++++++++++ .../src/modules/persistentEvent/WebAPI.ts | 17 +++++++++++++++++ .../persistentEvent/actions/clusterActions.ts | 17 +++++++++++++++++ .../modules/persistentEvent/actions/index.ts | 17 +++++++++++++++++ .../persistentEvent/actions/peActions.ts | 17 +++++++++++++++++ .../persistentEvent/actions/peEditActions.ts | 17 +++++++++++++++++ .../persistentEvent/actions/regionActions.ts | 17 +++++++++++++++++ .../actions/validatorActions.ts | 17 +++++++++++++++++ .../actions/workflowActions.ts | 17 +++++++++++++++++ .../components/ClusterActionPanel.tsx | 17 +++++++++++++++++ .../components/ClusterTablePanel.tsx | 17 +++++++++++++++++ .../components/EditPersistentEventPanel.tsx | 17 +++++++++++++++++ .../components/PersistentEventApp.tsx | 17 +++++++++++++++++ .../PersistentEventDeleteDialog.tsx | 17 +++++++++++++++++ .../components/PersistentEventHeadPanel.tsx | 17 +++++++++++++++++ .../persistentEvent/constants/ActionType.ts | 17 +++++++++++++++++ .../persistentEvent/constants/Config.ts | 17 +++++++++++++++++ .../persistentEvent/constants/initState.ts | 17 +++++++++++++++++ .../src/modules/persistentEvent/index.tsx | 17 +++++++++++++++++ .../modules/persistentEvent/models/PeEdit.ts | 17 +++++++++++++++++ .../persistentEvent/models/RootState.ts | 17 +++++++++++++++++ .../modules/persistentEvent/models/index.ts | 17 +++++++++++++++++ .../persistentEvent/reducers/PeEditReducer.ts | 17 +++++++++++++++++ .../persistentEvent/reducers/RootReducer.ts | 17 +++++++++++++++++ .../src/modules/persistentEvent/router.ts | 17 +++++++++++++++++ .../persistentEvent/stores/RootStore.ts | 17 +++++++++++++++++ .../src/modules/project/UserManageWebAPI.ts | 17 +++++++++++++++++ web/console/src/modules/project/WebAPI.ts | 17 +++++++++++++++++ .../project/actions/bussinessActions.ts | 17 +++++++++++++++++ .../modules/project/actions/clusterActions.ts | 17 +++++++++++++++++ .../modules/project/actions/detailActions.ts | 17 +++++++++++++++++ .../src/modules/project/actions/index.ts | 17 +++++++++++++++++ .../modules/project/actions/managerActions.ts | 17 +++++++++++++++++ .../project/actions/namespaceActions.ts | 17 +++++++++++++++++ .../actions/policy/associateActions.ts | 17 +++++++++++++++++ .../modules/project/actions/policy/index.ts | 17 +++++++++++++++++ .../modules/project/actions/projectActions.ts | 17 +++++++++++++++++ .../modules/project/actions/regionActions.ts | 17 +++++++++++++++++ .../modules/project/actions/userActions.ts | 17 +++++++++++++++++ .../components/CreateNamespacePanel.tsx | 17 +++++++++++++++++ .../project/components/CreateProjectPanel.tsx | 17 +++++++++++++++++ .../CreateProjectResourceLimitPanel.tsx | 17 +++++++++++++++++ .../DetailSubProjectActionPanel.tsx | 17 +++++++++++++++++ .../components/DetailSubProjectPanel.tsx | 17 +++++++++++++++++ .../components/EditProjectManagerPanel.tsx | 17 +++++++++++++++++ .../components/EditProjectNamePanel.tsx | 17 +++++++++++++++++ .../components/NamespaceActionPanel.tsx | 17 +++++++++++++++++ .../components/NamespaceTablePanel.tsx | 17 +++++++++++++++++ .../components/ProjectActionPanel.project.tsx | 17 +++++++++++++++++ .../project/components/ProjectActionPanel.tsx | 17 +++++++++++++++++ .../modules/project/components/ProjectApp.tsx | 17 +++++++++++++++++ .../project/components/ProjectDetail.tsx | 17 +++++++++++++++++ .../project/components/ProjectDetailPanel.tsx | 17 +++++++++++++++++ .../components/ProjectDetailResourcePanel.tsx | 17 +++++++++++++++++ .../project/components/ProjectHeadPanel.tsx | 17 +++++++++++++++++ .../project/components/ProjectTablePanel.tsx | 17 +++++++++++++++++ .../components/SelectExistProjectDialog.tsx | 17 +++++++++++++++++ .../project/components/SubpageHeadPanel.tsx | 17 +++++++++++++++++ .../project/components/user/UserPanel.tsx | 17 +++++++++++++++++ .../components/user/create/UserCreate.tsx | 17 +++++++++++++++++ .../components/user/list/RoleModifyDialog.tsx | 17 +++++++++++++++++ .../components/user/list/UserActionPanel.tsx | 17 +++++++++++++++++ .../project/components/user/list/UserList.tsx | 17 +++++++++++++++++ .../components/user/list/UserTablePanel.tsx | 17 +++++++++++++++++ .../modules/project/constants/ActionType.ts | 17 +++++++++++++++++ .../src/modules/project/constants/Config.ts | 17 +++++++++++++++++ .../modules/project/constants/initState.ts | 17 +++++++++++++++++ web/console/src/modules/project/index.tsx | 17 +++++++++++++++++ .../src/modules/project/models/Cluster.ts | 17 +++++++++++++++++ .../src/modules/project/models/Manager.ts | 17 +++++++++++++++++ .../src/modules/project/models/Namespace.ts | 17 +++++++++++++++++ .../src/modules/project/models/Policy.ts | 17 +++++++++++++++++ .../src/modules/project/models/Project.ts | 17 +++++++++++++++++ .../src/modules/project/models/Region.ts | 17 +++++++++++++++++ .../src/modules/project/models/RootState.ts | 17 +++++++++++++++++ .../src/modules/project/models/Strategy.ts | 17 +++++++++++++++++ .../src/modules/project/models/User.ts | 17 +++++++++++++++++ .../src/modules/project/models/index.ts | 17 +++++++++++++++++ .../modules/project/reducers/RootReducer.ts | 17 +++++++++++++++++ .../src/modules/project/router.project.ts | 17 +++++++++++++++++ web/console/src/modules/project/router.ts | 17 +++++++++++++++++ .../src/modules/project/stores/RootStore.ts | 17 +++++++++++++++++ web/console/src/modules/registry/WebAPI.ts | 17 +++++++++++++++++ .../modules/registry/actions/apiKeyActions.ts | 17 +++++++++++++++++ .../registry/actions/app/createActions.ts | 17 +++++++++++++++++ .../src/modules/registry/actions/app/index.ts | 17 +++++++++++++++++ .../registry/actions/chart/detailActions.ts | 17 +++++++++++++++++ .../modules/registry/actions/chart/index.ts | 17 +++++++++++++++++ .../registry/actions/chart/listActions.ts | 17 +++++++++++++++++ .../modules/registry/actions/chartActions.ts | 17 +++++++++++++++++ .../actions/chartGroup/createActions.ts | 17 +++++++++++++++++ .../actions/chartGroup/detailActions.ts | 17 +++++++++++++++++ .../registry/actions/chartGroup/index.ts | 17 +++++++++++++++++ .../actions/chartGroup/listActions.ts | 17 +++++++++++++++++ .../registry/actions/chartInsActions.ts | 17 +++++++++++++++++ .../modules/registry/actions/cluster/index.ts | 17 +++++++++++++++++ .../registry/actions/cluster/listActions.ts | 17 +++++++++++++++++ .../modules/registry/actions/imageActions.ts | 17 +++++++++++++++++ .../src/modules/registry/actions/index.ts | 17 +++++++++++++++++ .../registry/actions/namespace/index.ts | 17 +++++++++++++++++ .../registry/actions/namespace/listActions.ts | 17 +++++++++++++++++ .../namespace/projectNamespaceListActions.ts | 17 +++++++++++++++++ .../modules/registry/actions/project/index.ts | 17 +++++++++++++++++ .../registry/actions/project/listActions.ts | 17 +++++++++++++++++ .../modules/registry/actions/repoActions.ts | 17 +++++++++++++++++ .../registry/actions/user/associateActions.ts | 17 +++++++++++++++++ .../registry/actions/user/detailActions.ts | 17 +++++++++++++++++ .../modules/registry/actions/user/index.ts | 17 +++++++++++++++++ .../modules/registry/components/AppCenter.tsx | 17 +++++++++++++++++ .../components/ChartUsageGuideDialog.tsx | 17 +++++++++++++++++ .../registry/components/RegistryApp.tsx | 17 +++++++++++++++++ .../components/apikey/ApiKeyActionPanel.tsx | 17 +++++++++++++++++ .../components/apikey/ApiKeyContainer.tsx | 17 +++++++++++++++++ .../components/apikey/ApiKeyTablePanel.tsx | 17 +++++++++++++++++ .../components/apikey/CreateApiKeyPanel.tsx | 17 +++++++++++++++++ .../registry/components/chart/ChartApp.tsx | 17 +++++++++++++++++ .../components/chart/ChartContainer.tsx | 17 +++++++++++++++++ .../components/chart/ChartDetailPanel.tsx | 17 +++++++++++++++++ .../components/chart/ChartGroupTablePanel.tsx | 17 +++++++++++++++++ .../components/chart/ChartTablePanel.tsx | 17 +++++++++++++++++ .../components/chart/CreateChartPanel.tsx | 17 +++++++++++++++++ .../chart/detail/BasicInfoPanel.tsx | 17 +++++++++++++++++ .../components/chart/detail/ChartDetail.tsx | 17 +++++++++++++++++ .../components/chart/detail/DeployPanel.tsx | 17 +++++++++++++++++ .../components/chart/detail/FileTreePanel.tsx | 17 +++++++++++++++++ .../components/chart/detail/HeaderPanel.tsx | 17 +++++++++++++++++ .../chart/detail/NamespacePanel.project.tsx | 17 +++++++++++++++++ .../chart/detail/NamespacePanel.tsx | 17 +++++++++++++++++ .../chart/detail/VersionTablePanel.tsx | 17 +++++++++++++++++ .../components/chart/list/ActionPanel.tsx | 17 +++++++++++++++++ .../components/chart/list/ChartList.tsx | 17 +++++++++++++++++ .../components/chart/list/HeaderPanel.tsx | 17 +++++++++++++++++ .../components/chart/list/TablePanel.tsx | 17 +++++++++++++++++ .../components/chartgroup/ChartGroupApp.tsx | 17 +++++++++++++++++ .../associate/UserAssociatePanel.tsx | 17 +++++++++++++++++ .../chartgroup/create/BaseInfoPanel.tsx | 17 +++++++++++++++++ .../chartgroup/create/ChartGroupCreate.tsx | 17 +++++++++++++++++ .../chartgroup/create/HeaderPanel.tsx | 17 +++++++++++++++++ .../chartgroup/detail/BaseInfoPanel.tsx | 17 +++++++++++++++++ .../chartgroup/detail/ChartGroupDetail.tsx | 17 +++++++++++++++++ .../chartgroup/detail/HeaderPanel.tsx | 17 +++++++++++++++++ .../chartgroup/list/ActionPanel.tsx | 17 +++++++++++++++++ .../chartgroup/list/ChartGroupList.tsx | 17 +++++++++++++++++ .../chartgroup/list/HeaderPanel.tsx | 17 +++++++++++++++++ .../components/chartgroup/list/TablePanel.tsx | 17 +++++++++++++++++ .../components/repo/CreateImagePanel.tsx | 17 +++++++++++++++++ .../components/repo/CreateRepoPanel.tsx | 17 +++++++++++++++++ .../components/repo/ImageTablePanel.tsx | 17 +++++++++++++++++ .../components/repo/RepoContainer.tsx | 17 +++++++++++++++++ .../components/repo/RepoDetailPanel.tsx | 17 +++++++++++++++++ .../components/repo/RepoTablePanel.tsx | 17 +++++++++++++++++ .../modules/registry/constants/ActionType.ts | 17 +++++++++++++++++ .../registry/constants/AppValidateConfig.ts | 17 +++++++++++++++++ .../constants/ChartGroupValidateConfig.ts | 17 +++++++++++++++++ .../registry/constants/ChartValidateConfig.ts | 17 +++++++++++++++++ .../src/modules/registry/constants/Config.ts | 17 +++++++++++++++++ .../modules/registry/constants/initState.ts | 17 +++++++++++++++++ web/console/src/modules/registry/index.tsx | 17 +++++++++++++++++ .../src/modules/registry/models/ApiKey.ts | 17 +++++++++++++++++ .../src/modules/registry/models/App.ts | 17 +++++++++++++++++ .../src/modules/registry/models/Chart.ts | 17 +++++++++++++++++ .../src/modules/registry/models/ChartGroup.ts | 17 +++++++++++++++++ .../src/modules/registry/models/Cluster.ts | 17 +++++++++++++++++ .../src/modules/registry/models/CommonUser.ts | 17 +++++++++++++++++ .../src/modules/registry/models/Image.ts | 17 +++++++++++++++++ .../src/modules/registry/models/Namespace.ts | 17 +++++++++++++++++ .../src/modules/registry/models/Project.ts | 17 +++++++++++++++++ .../src/modules/registry/models/Repo.ts | 17 +++++++++++++++++ .../src/modules/registry/models/RootState.ts | 17 +++++++++++++++++ .../src/modules/registry/models/UserInfo.ts | 17 +++++++++++++++++ .../src/modules/registry/models/index.ts | 17 +++++++++++++++++ .../modules/registry/reducers/RootReducer.ts | 17 +++++++++++++++++ .../src/modules/registry/router.project.ts | 17 +++++++++++++++++ web/console/src/modules/registry/router.ts | 17 +++++++++++++++++ .../src/modules/registry/stores/RootStore.ts | 17 +++++++++++++++++ web/console/src/modules/uam/WebAPI.ts | 17 +++++++++++++++++ .../modules/uam/actions/associatedActions.ts | 17 +++++++++++++++++ .../uam/actions/group/associateActions.ts | 17 +++++++++++++++++ .../uam/actions/group/createActions.ts | 17 +++++++++++++++++ .../uam/actions/group/detailActions.ts | 17 +++++++++++++++++ .../src/modules/uam/actions/group/index.ts | 17 +++++++++++++++++ .../modules/uam/actions/group/listActions.ts | 17 +++++++++++++++++ web/console/src/modules/uam/actions/index.ts | 17 +++++++++++++++++ .../uam/actions/policy/associateActions.ts | 17 +++++++++++++++++ .../uam/actions/policy/detailActions.ts | 17 +++++++++++++++++ .../src/modules/uam/actions/policy/index.ts | 17 +++++++++++++++++ .../modules/uam/actions/policy/listActions.ts | 17 +++++++++++++++++ .../uam/actions/role/associateActions.ts | 17 +++++++++++++++++ .../modules/uam/actions/role/createActions.ts | 17 +++++++++++++++++ .../modules/uam/actions/role/detailActions.ts | 17 +++++++++++++++++ .../src/modules/uam/actions/role/index.ts | 17 +++++++++++++++++ .../modules/uam/actions/role/listActions.ts | 17 +++++++++++++++++ .../modules/uam/actions/strategyActions.ts | 17 +++++++++++++++++ .../uam/actions/user/associateActions.ts | 17 +++++++++++++++++ .../src/modules/uam/actions/user/index.ts | 17 +++++++++++++++++ .../modules/uam/actions/user/listActions.ts | 17 +++++++++++++++++ .../src/modules/uam/actions/userActions.ts | 17 +++++++++++++++++ .../src/modules/uam/components/UamApp.tsx | 17 +++++++++++++++++ .../uam/components/group/GroupPanel.tsx | 17 +++++++++++++++++ .../group/associate/PolicyAssociatePanel.tsx | 17 +++++++++++++++++ .../group/associate/UserAssociatePanel.tsx | 17 +++++++++++++++++ .../associate/UserAssociateWorkflowDialog.tsx | 17 +++++++++++++++++ .../components/group/create/BaseInfoPanel.tsx | 17 +++++++++++++++++ .../components/group/create/GroupCreate.tsx | 17 +++++++++++++++++ .../components/group/detail/BaseInfoPanel.tsx | 17 +++++++++++++++++ .../components/group/detail/GroupDetail.tsx | 17 +++++++++++++++++ .../components/group/detail/HeaderPanel.tsx | 17 +++++++++++++++++ .../group/detail/PolicyActionPanel.tsx | 17 +++++++++++++++++ .../group/detail/PolicyTablePanel.tsx | 17 +++++++++++++++++ .../group/detail/RoleActionPanel.tsx | 17 +++++++++++++++++ .../group/detail/RoleTablePanel.tsx | 17 +++++++++++++++++ .../group/detail/UserActionPanel.tsx | 17 +++++++++++++++++ .../group/detail/UserTablePanel.tsx | 17 +++++++++++++++++ .../uam/components/group/list/ActionPanel.tsx | 17 +++++++++++++++++ .../uam/components/group/list/GroupList.tsx | 17 +++++++++++++++++ .../uam/components/group/list/HeaderPanel.tsx | 17 +++++++++++++++++ .../group/list/RoleModifyDialog.tsx | 17 +++++++++++++++++ .../uam/components/group/list/TablePanel.tsx | 17 +++++++++++++++++ .../modules/uam/components/role/RoleApp.tsx | 17 +++++++++++++++++ .../role/associate/GroupAssociatePanel.tsx | 17 +++++++++++++++++ .../GroupAssociateWorkflowDialog.tsx | 17 +++++++++++++++++ .../role/associate/PolicyAssociatePanel.tsx | 17 +++++++++++++++++ .../PolicyAssociateWorkflowDialog.tsx | 17 +++++++++++++++++ .../role/associate/UserAssociatePanel.tsx | 17 +++++++++++++++++ .../associate/UserAssociateWorkflowDialog.tsx | 17 +++++++++++++++++ .../components/role/create/BaseInfoPanel.tsx | 17 +++++++++++++++++ .../components/role/create/HeaderPanel.tsx | 17 +++++++++++++++++ .../uam/components/role/create/RoleCreate.tsx | 17 +++++++++++++++++ .../components/role/detail/BaseInfoPanel.tsx | 17 +++++++++++++++++ .../role/detail/GroupActionPanel.tsx | 17 +++++++++++++++++ .../role/detail/GroupTablePanel.tsx | 17 +++++++++++++++++ .../components/role/detail/HeaderPanel.tsx | 17 +++++++++++++++++ .../role/detail/PolicyActionPanel.tsx | 17 +++++++++++++++++ .../role/detail/PolicyTablePanel.tsx | 17 +++++++++++++++++ .../uam/components/role/detail/RoleDetail.tsx | 17 +++++++++++++++++ .../role/detail/UserActionPanel.tsx | 17 +++++++++++++++++ .../components/role/detail/UserTablePanel.tsx | 17 +++++++++++++++++ .../uam/components/role/list/ActionPanel.tsx | 17 +++++++++++++++++ .../uam/components/role/list/HeaderPanel.tsx | 17 +++++++++++++++++ .../uam/components/role/list/RoleList.tsx | 17 +++++++++++++++++ .../uam/components/role/list/TablePanel.tsx | 17 +++++++++++++++++ .../strategy/StrategyActionPanel.tsx | 17 +++++++++++++++++ .../uam/components/strategy/StrategyApp.tsx | 17 +++++++++++++++++ .../strategy/StrategyDetailsPanel.tsx | 17 +++++++++++++++++ .../components/strategy/StrategyHeadPanel.tsx | 17 +++++++++++++++++ .../strategy/StrategyTablePanel.tsx | 17 +++++++++++++++++ .../associate/GroupAssociatePanel.tsx | 17 +++++++++++++++++ .../GroupAssociateWorkflowDialog.tsx | 17 +++++++++++++++++ .../strategy/detail/GroupActionPanel.tsx | 17 +++++++++++++++++ .../strategy/detail/GroupTablePanel.tsx | 17 +++++++++++++++++ .../strategy/detail/RoleActionPanel.tsx | 17 +++++++++++++++++ .../strategy/detail/RoleTablePanel.tsx | 17 +++++++++++++++++ .../modules/uam/components/user/UserApp.tsx | 17 +++++++++++++++++ .../modules/uam/components/user/UserPanel.tsx | 17 +++++++++++++++++ .../uam/components/user/create/UserCreate.tsx | 17 +++++++++++++++++ .../user/detail/GroupActionPanel.tsx | 17 +++++++++++++++++ .../user/detail/GroupTablePanel.tsx | 17 +++++++++++++++++ .../user/detail/RoleActionPanel.tsx | 17 +++++++++++++++++ .../components/user/detail/RoleTablePanel.tsx | 17 +++++++++++++++++ .../uam/components/user/detail/UserDetail.tsx | 17 +++++++++++++++++ .../user/list/PasswordModifyDialog.tsx | 17 +++++++++++++++++ .../components/user/list/RoleModifyDialog.tsx | 17 +++++++++++++++++ .../components/user/list/UserActionPanel.tsx | 17 +++++++++++++++++ .../uam/components/user/list/UserList.tsx | 17 +++++++++++++++++ .../components/user/list/UserTablePanel.tsx | 17 +++++++++++++++++ .../src/modules/uam/constants/ActionTypes.ts | 17 +++++++++++++++++ .../src/modules/uam/constants/Config.ts | 17 +++++++++++++++++ .../uam/constants/GroupValidateConfig.ts | 17 +++++++++++++++++ .../uam/constants/RoleValidateConfig.ts | 17 +++++++++++++++++ .../src/modules/uam/constants/initState.ts | 17 +++++++++++++++++ web/console/src/modules/uam/index.tsx | 17 +++++++++++++++++ .../src/modules/uam/models/Cagtegory.ts | 17 +++++++++++++++++ .../src/modules/uam/models/CommonUser.ts | 17 +++++++++++++++++ web/console/src/modules/uam/models/Group.ts | 17 +++++++++++++++++ web/console/src/modules/uam/models/Policy.ts | 17 +++++++++++++++++ web/console/src/modules/uam/models/Role.ts | 17 +++++++++++++++++ .../src/modules/uam/models/RootState.ts | 17 +++++++++++++++++ .../src/modules/uam/models/Strategy.ts | 17 +++++++++++++++++ .../src/modules/uam/models/StrategyFilter.ts | 17 +++++++++++++++++ web/console/src/modules/uam/models/User.ts | 17 +++++++++++++++++ .../src/modules/uam/models/UserFilter.ts | 17 +++++++++++++++++ web/console/src/modules/uam/models/index.ts | 17 +++++++++++++++++ .../src/modules/uam/reducers/RootReducer.ts | 17 +++++++++++++++++ web/console/src/modules/uam/router.ts | 17 +++++++++++++++++ .../src/modules/uam/stores/RootStore.ts | 17 +++++++++++++++++ web/console/src/webApi/cluster.ts | 17 +++++++++++++++++ web/console/src/webApi/promethus.ts | 17 +++++++++++++++++ web/console/src/webApi/request.ts | 17 +++++++++++++++++ web/console/src/webApi/tkestack.ts | 17 +++++++++++++++++ web/console/webpack/loaders/ifelse-loader.js | 17 +++++++++++++++++ web/console/webpack/loaders/iffile-loader.js | 17 +++++++++++++++++ web/console/webpack/loaders/lib/parse.js | 17 +++++++++++++++++ web/console/webpack/webpack.base.js | 17 +++++++++++++++++ web/console/webpack/webpack.dev.js | 17 +++++++++++++++++ web/console/webpack/webpack.prod.js | 17 +++++++++++++++++ web/installer/ambient/appUtil.d.ts | 17 +++++++++++++++++ web/installer/ambient/clipboard.ts | 17 +++++++++++++++++ web/installer/ambient/index.d.ts | 17 +++++++++++++++++ web/installer/ambient/redux.d.ts | 17 +++++++++++++++++ web/installer/develop/index.ts | 17 +++++++++++++++++ web/installer/develop/server/index.ts | 17 +++++++++++++++++ web/installer/develop/server/server.ts | 17 +++++++++++++++++ web/installer/helpers/Validator.ts | 17 +++++++++++++++++ web/installer/helpers/downloadCrt.ts | 17 +++++++++++++++++ web/installer/helpers/index.ts | 17 +++++++++++++++++ web/installer/helpers/reduxAction.ts | 17 +++++++++++++++++ web/installer/helpers/reduxReducer.ts | 17 +++++++++++++++++ web/installer/helpers/reduxStore.ts | 17 +++++++++++++++++ web/installer/index.tsx | 17 +++++++++++++++++ web/installer/lib/ff-component/index.ts | 17 +++++++++++++++++ .../lib/ff-component/src/cam/Cam.tsx | 17 +++++++++++++++++ .../lib/ff-component/src/cam/index.ts | 17 +++++++++++++++++ .../ff-component/src/formpanel/Checkbox.tsx | 17 +++++++++++++++++ .../ff-component/src/formpanel/Checkboxs.tsx | 17 +++++++++++++++++ .../lib/ff-component/src/formpanel/Footer.tsx | 17 +++++++++++++++++ .../ff-component/src/formpanel/FormPanel.tsx | 17 +++++++++++++++++ .../ff-component/src/formpanel/HelpText.tsx | 17 +++++++++++++++++ .../ff-component/src/formpanel/InlineText.tsx | 17 +++++++++++++++++ .../lib/ff-component/src/formpanel/Input.tsx | 17 +++++++++++++++++ .../src/formpanel/InputNumber.tsx | 17 +++++++++++++++++ .../lib/ff-component/src/formpanel/Item.tsx | 17 +++++++++++++++++ .../src/formpanel/KeyValuePanel.tsx | 17 +++++++++++++++++ .../lib/ff-component/src/formpanel/Radios.tsx | 17 +++++++++++++++++ .../ff-component/src/formpanel/Segment.tsx | 17 +++++++++++++++++ .../lib/ff-component/src/formpanel/Select.tsx | 17 +++++++++++++++++ .../lib/ff-component/src/formpanel/Switch.tsx | 17 +++++++++++++++++ .../lib/ff-component/src/formpanel/Text.tsx | 17 +++++++++++++++++ .../src/formpanel/TransferTable.tsx | 17 +++++++++++++++++ .../src/formpanel/Validatable.tsx | 17 +++++++++++++++++ .../lib/ff-component/src/formpanel/index.ts | 17 +++++++++++++++++ web/installer/lib/ff-component/src/index.ts | 17 +++++++++++++++++ .../lib/ff-component/src/lib/classname.ts | 17 +++++++++++++++++ .../lib/ff-component/src/lib/index.ts | 17 +++++++++++++++++ .../src/tablepanel/TablePanel.tsx | 17 +++++++++++++++++ .../ff-component/src/tablepanel/TagSearch.tsx | 17 +++++++++++++++++ .../lib/ff-component/src/tablepanel/index.ts | 17 +++++++++++++++++ web/installer/lib/ff-redux/index.ts | 17 +++++++++++++++++ .../qcloud-lib/decorators/OnOuterClick.ts | 17 +++++++++++++++++ .../libs/qcloud-lib/decorators/OnResize.ts | 17 +++++++++++++++++ .../libs/qcloud-lib/helpers/addComma.ts | 17 +++++++++++++++++ .../libs/qcloud-lib/helpers/appendFunction.ts | 17 +++++++++++++++++ .../qcloud-lib/helpers/bindActionCreators.ts | 19 ++++++++++++++++++- .../qcloud-lib/helpers/collectionPaging.ts | 17 +++++++++++++++++ .../qcloud-lib/helpers/collectionWhere.ts | 17 +++++++++++++++++ .../libs/qcloud-lib/helpers/createConstant.ts | 17 +++++++++++++++++ .../libs/qcloud-lib/helpers/createStore.ts | 17 +++++++++++++++++ .../libs/qcloud-lib/helpers/deepClone.ts | 19 ++++++++++++++++++- .../qcloud-lib/helpers/findByCondition.ts | 17 +++++++++++++++++ .../libs/qcloud-lib/helpers/findById.ts | 17 +++++++++++++++++ .../libs/qcloud-lib/helpers/getDateDelta.ts | 17 +++++++++++++++++ .../libs/qcloud-lib/helpers/getDateStride.ts | 17 +++++++++++++++++ .../libs/qcloud-lib/helpers/getDateString.ts | 17 +++++++++++++++++ .../libs/qcloud-lib/helpers/getDateUTC.ts | 17 +++++++++++++++++ .../libs/qcloud-lib/helpers/getOffsetDate.ts | 17 +++++++++++++++++ .../libs/qcloud-lib/helpers/hashObject.ts | 17 +++++++++++++++++ .../libs/qcloud-lib/helpers/hashString.ts | 19 ++++++++++++++++++- .../libs/qcloud-lib/helpers/insertCSS.ts | 17 +++++++++++++++++ .../qcloud-lib/helpers/isComponentOfType.ts | 17 +++++++++++++++++ .../libs/qcloud-lib/helpers/isValidDomain.ts | 17 +++++++++++++++++ .../qcloud-lib/helpers/isValidIPAddress.ts | 19 ++++++++++++++++++- .../libs/qcloud-lib/helpers/objectExtend.ts | 17 +++++++++++++++++ .../libs/qcloud-lib/helpers/objectFetch.ts | 17 +++++++++++++++++ .../libs/qcloud-lib/helpers/objectMerge.ts | 17 +++++++++++++++++ .../libs/qcloud-lib/helpers/otherMember.ts | 17 +++++++++++++++++ .../libs/qcloud-lib/helpers/pageList.ts | 17 +++++++++++++++++ .../qcloud-lib/helpers/reduceToPayload.ts | 17 +++++++++++++++++ .../libs/qcloud-lib/helpers/searchList.ts | 19 ++++++++++++++++++- .../libs/qcloud-lib/helpers/serialReducer.ts | 19 ++++++++++++++++++- .../ff-redux/libs/qcloud-lib/helpers/uuid.ts | 17 +++++++++++++++++ .../lib/ff-redux/libs/qcloud-lib/index.ts | 19 ++++++++++++++++++- .../libs/qcloud-lib/types/BaseReactProps.ts | 17 +++++++++++++++++ .../libs/qcloud-lib/types/DateQuery.ts | 17 +++++++++++++++++ .../libs/qcloud-lib/types/Identifiable.ts | 17 +++++++++++++++++ .../libs/qcloud-lib/types/PagingQuery.ts | 17 +++++++++++++++++ .../libs/qcloud-lib/types/RecordSet.ts | 17 +++++++++++++++++ .../libs/qcloud-lib/types/ReduxAction.ts | 19 ++++++++++++++++++- .../qcloud-lib/types/ReduxConnectedProps.ts | 17 +++++++++++++++++ .../libs/qcloud-lib/types/SortQuery.ts | 17 +++++++++++++++++ .../libs/qcloud-lib/utils/Children.ts | 17 +++++++++++++++++ .../libs/qcloud-lib/utils/Selection.ts | 17 +++++++++++++++++ .../libs/qcloud-lib/utils/Transition.ts | 17 +++++++++++++++++ .../libs/qcloud-redux-fetcher/index.ts | 19 ++++++++++++++++++- .../libs/qcloud-redux-fetcher/lib/Fetcher.ts | 17 +++++++++++++++++ .../ff-redux/libs/qcloud-redux-query/index.ts | 19 ++++++++++++++++++- .../libs/qcloud-redux-query/lib/Query.ts | 17 +++++++++++++++++ .../libs/qcloud-redux-workflow/index.ts | 19 ++++++++++++++++++- .../qcloud-redux-workflow/lib/Workflow.ts | 17 +++++++++++++++++ web/installer/lib/ff-redux/src/base/Action.ts | 17 +++++++++++++++++ .../src/base/Model/ActionTypesEnum.ts | 17 +++++++++++++++++ .../lib/ff-redux/src/base/Model/DataType.ts | 17 +++++++++++++++++ .../ff-redux/src/base/Model/FetchOptions.ts | 17 +++++++++++++++++ .../lib/ff-redux/src/base/Model/FetchState.ts | 17 +++++++++++++++++ .../ff-redux/src/base/Model/FetcherPayload.ts | 17 +++++++++++++++++ .../ff-redux/src/base/Model/FetcherState.ts | 17 +++++++++++++++++ .../ff-redux/src/base/Model/FetcherTrigger.ts | 17 +++++++++++++++++ .../ff-redux/src/base/Model/Identifiable.ts | 17 +++++++++++++++++ .../ff-redux/src/base/Model/PagingQuery.ts | 17 +++++++++++++++++ .../lib/ff-redux/src/base/Model/QueryState.ts | 17 +++++++++++++++++ .../lib/ff-redux/src/base/Model/RecordSet.ts | 17 +++++++++++++++++ .../ff-redux/src/base/Model/ReduxAction.ts | 19 ++++++++++++++++++- .../lib/ff-redux/src/base/Model/SortQuery.ts | 17 +++++++++++++++++ .../lib/ff-redux/src/base/Model/index.ts | 17 +++++++++++++++++ .../lib/ff-redux/src/base/Reducer.ts | 17 +++++++++++++++++ web/installer/lib/ff-redux/src/base/index.ts | 17 +++++++++++++++++ web/installer/lib/ff-redux/src/index.ts | 17 +++++++++++++++++ web/installer/lib/ff-redux/src/list/Action.ts | 17 +++++++++++++++++ .../lib/ff-redux/src/list/ActionType.ts | 17 +++++++++++++++++ web/installer/lib/ff-redux/src/list/Model.ts | 17 +++++++++++++++++ .../lib/ff-redux/src/list/Reducer.ts | 17 +++++++++++++++++ web/installer/lib/ff-redux/src/list/index.ts | 17 +++++++++++++++++ .../lib/ff-redux/src/object/Action.ts | 17 +++++++++++++++++ .../lib/ff-redux/src/object/ActionType.ts | 17 +++++++++++++++++ .../lib/ff-redux/src/object/Model.ts | 17 +++++++++++++++++ .../lib/ff-redux/src/object/Reducer.ts | 17 +++++++++++++++++ .../lib/ff-redux/src/object/index.ts | 17 +++++++++++++++++ web/installer/lib/ff-redux/utils/extend.ts | 17 +++++++++++++++++ web/installer/lib/ff-redux/utils/index.ts | 17 +++++++++++++++++ .../lib/ff-redux/utils/reduceToPayload.ts | 17 +++++++++++++++++ web/installer/lib/ff-validator/index.ts | 17 +++++++++++++++++ web/installer/lib/ff-validator/src/Action.ts | 17 +++++++++++++++++ .../lib/ff-validator/src/ActionType.ts | 17 +++++++++++++++++ web/installer/lib/ff-validator/src/Model.ts | 17 +++++++++++++++++ web/installer/lib/ff-validator/src/Reducer.ts | 17 +++++++++++++++++ .../lib/ff-validator/src/Validation.ts | 17 +++++++++++++++++ .../lib/ff-validator/src/utils/cloneDeep.ts | 17 +++++++++++++++++ .../src/utils/getFirstBracketName.ts | 17 +++++++++++++++++ .../lib/ff-validator/src/utils/getMessage.ts | 17 +++++++++++++++++ .../lib/ff-validator/src/utils/getValue.ts | 17 +++++++++++++++++ .../lib/ff-validator/src/utils/index.ts | 17 +++++++++++++++++ .../src/utils/isContainBracket.ts | 17 +++++++++++++++++ .../lib/ff-validator/src/utils/isValid.ts | 17 +++++++++++++++++ .../ff-validator/src/utils/reduceToPayload.ts | 17 +++++++++++++++++ web/installer/loader/ifelse-loader.js | 17 +++++++++++++++++ web/installer/loader/iffile-loader.js | 17 +++++++++++++++++ web/installer/loader/lib/parse.js | 17 +++++++++++++++++ .../modules/common/components/clip/Clip.tsx | 17 +++++++++++++++++ .../modules/common/components/clip/index.ts | 17 +++++++++++++++++ .../codemirror/CodeMirrorEditor.tsx | 17 +++++++++++++++++ .../common/components/codemirror/index.ts | 17 +++++++++++++++++ .../common/components/errortip/ErrorTip.tsx | 17 +++++++++++++++++ .../common/components/errortip/index.ts | 17 +++++++++++++++++ .../components/headbubble/HeadBubble.tsx | 17 +++++++++++++++++ .../common/components/headbubble/index.ts | 17 +++++++++++++++++ .../src/modules/common/components/index.ts | 17 +++++++++++++++++ .../common/components/logviewer/Panel.tsx | 17 +++++++++++++++++ .../common/components/logviewer/index.ts | 17 +++++++++++++++++ .../common/components/toptips/TopTips.tsx | 17 +++++++++++++++++ .../common/components/toptips/index.ts | 17 +++++++++++++++++ .../src/modules/common/configs/menuConfig.ts | 17 +++++++++++++++++ .../src/modules/common/libs/Validator.ts | 17 +++++++++++++++++ .../src/modules/common/models/Record.ts | 17 +++++++++++++++++ .../src/modules/common/models/Validation.ts | 17 +++++++++++++++++ .../src/modules/common/models/index.ts | 17 +++++++++++++++++ .../src/modules/common/utils/bytesTo.ts | 17 +++++++++++++++++ .../src/modules/common/utils/cloneDeep.ts | 17 +++++++++++++++++ .../src/modules/common/utils/flatten.ts | 17 +++++++++++++++++ .../common/utils/formatRequestResult.ts | 17 +++++++++++++++++ .../src/modules/common/utils/formatTime.ts | 17 +++++++++++++++++ .../src/modules/common/utils/getCidrMask.ts | 17 +++++++++++++++++ .../src/modules/common/utils/getCidrPeriod.ts | 17 +++++++++++++++++ .../src/modules/common/utils/getCookie.ts | 17 +++++++++++++++++ .../modules/common/utils/getQueryStatus.ts | 17 +++++++++++++++++ .../common/utils/getRangeSliderSection.ts | 17 +++++++++++++++++ .../modules/common/utils/getScrollBarWidth.ts | 17 +++++++++++++++++ .../modules/common/utils/getValidateStatus.ts | 17 +++++++++++++++++ .../modules/common/utils/getWorkflowError.ts | 17 +++++++++++++++++ .../src/modules/common/utils/hasScrolled.ts | 17 +++++++++++++++++ .../src/modules/common/utils/includes.ts | 17 +++++++++++++++++ .../src/modules/common/utils/index.ts | 17 +++++++++++++++++ .../src/modules/common/utils/isEmpty.ts | 17 +++++++++++++++++ .../modules/common/utils/operationResult.ts | 17 +++++++++++++++++ .../src/modules/common/utils/orderBy.ts | 17 +++++++++++++++++ .../src/modules/common/utils/pluck.ts | 17 +++++++++++++++++ .../src/modules/common/utils/remove.ts | 17 +++++++++++++++++ .../src/modules/common/utils/stringSizeOf.ts | 17 +++++++++++++++++ .../src/modules/common/utils/tea_adapter.ts | 17 +++++++++++++++++ .../src/modules/common/utils/uniq.ts | 17 +++++++++++++++++ web/installer/src/modules/installer/WebAPI.ts | 17 +++++++++++++++++ .../src/modules/installer/actions/index.ts | 17 +++++++++++++++++ .../installer/actions/installerActions.ts | 17 +++++++++++++++++ .../installer/actions/validateActions.ts | 17 +++++++++++++++++ .../src/modules/installer/components/CIDR.tsx | 17 +++++++++++++++++ .../installer/components/EditingItem.tsx | 17 +++++++++++++++++ .../installer/components/InstallerApp.tsx | 17 +++++++++++++++++ .../components/InstallerHeadPanel.tsx | 17 +++++++++++++++++ .../modules/installer/components/ListItem.tsx | 17 +++++++++++++++++ .../installer/components/ResultPanel.tsx | 17 +++++++++++++++++ .../modules/installer/components/Step1.tsx | 17 +++++++++++++++++ .../modules/installer/components/Step10.tsx | 17 +++++++++++++++++ .../modules/installer/components/Step2.tsx | 17 +++++++++++++++++ .../modules/installer/components/Step3.tsx | 17 +++++++++++++++++ .../modules/installer/components/Step4.tsx | 17 +++++++++++++++++ .../modules/installer/components/Step5.tsx | 17 +++++++++++++++++ .../modules/installer/components/Step6.tsx | 17 +++++++++++++++++ .../modules/installer/components/Step7.tsx | 17 +++++++++++++++++ .../modules/installer/components/Step8.tsx | 17 +++++++++++++++++ .../modules/installer/components/Step9.tsx | 17 +++++++++++++++++ .../modules/installer/constants/ActionType.ts | 17 +++++++++++++++++ web/installer/src/modules/installer/index.tsx | 17 +++++++++++++++++ .../src/modules/installer/models/RootState.ts | 17 +++++++++++++++++ .../src/modules/installer/models/index.ts | 17 +++++++++++++++++ .../modules/installer/reducers/RootReducer.ts | 17 +++++++++++++++++ .../modules/installer/reducers/initState.ts | 17 +++++++++++++++++ .../src/modules/installer/stores/RootStore.ts | 17 +++++++++++++++++ web/installer/webpack/webpack.config.js | 17 +++++++++++++++++ web/installer/webpack/webpack.dev.js | 17 +++++++++++++++++ web/installer/webpack/webpack.prod.js | 17 +++++++++++++++++ 1445 files changed, 24596 insertions(+), 31 deletions(-) diff --git a/web/console/Wrapper.tsx b/web/console/Wrapper.tsx index 3a0cff21a..c0232b121 100644 --- a/web/console/Wrapper.tsx +++ b/web/console/Wrapper.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { ConsoleModuleMapProps, diff --git a/web/console/ambient/appUtil.d.ts b/web/console/ambient/appUtil.d.ts index 38c973725..7a8756a55 100644 --- a/web/console/ambient/appUtil.d.ts +++ b/web/console/ambient/appUtil.d.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ declare namespace nmc { interface AppUtil { getRegionId: () => RegionId; diff --git a/web/console/ambient/classnames.d.ts b/web/console/ambient/classnames.d.ts index ac7659df0..ce9955c97 100644 --- a/web/console/ambient/classnames.d.ts +++ b/web/console/ambient/classnames.d.ts @@ -1,2 +1,19 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export = index; declare function index(...args: any[]): any; diff --git a/web/console/ambient/clipboard.ts b/web/console/ambient/clipboard.ts index 659c088a7..867770da4 100644 --- a/web/console/ambient/clipboard.ts +++ b/web/console/ambient/clipboard.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ declare var __clipboard; declare module "clipboard" { diff --git a/web/console/ambient/index.d.ts b/web/console/ambient/index.d.ts index 00a25716c..6414df46e 100644 --- a/web/console/ambient/index.d.ts +++ b/web/console/ambient/index.d.ts @@ -1 +1,18 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ /// \ No newline at end of file diff --git a/web/console/ambient/redux.d.ts b/web/console/ambient/redux.d.ts index c12050dbb..4692bab75 100644 --- a/web/console/ambient/redux.d.ts +++ b/web/console/ambient/redux.d.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ /* eslint-disable */ declare module Redux { interface ActionCreator extends Function { diff --git a/web/console/blankPage.tsx b/web/console/blankPage.tsx index 6e6cb5a46..b748d0b0e 100644 --- a/web/console/blankPage.tsx +++ b/web/console/blankPage.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import React, { useState } from 'react'; import { Button } from '@tea/component/button'; import { Blank, BlankTheme } from '@tea/component/blank'; diff --git a/web/console/config/apiServerVersion.ts b/web/console/config/apiServerVersion.ts index ebdf99721..441ead90e 100644 --- a/web/console/config/apiServerVersion.ts +++ b/web/console/config/apiServerVersion.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ /** * 获取components、info等基础组件的版本,不会更改 */ diff --git a/web/console/config/index.ts b/web/console/config/index.ts index 8a41ba961..169186550 100644 --- a/web/console/config/index.ts +++ b/web/console/config/index.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export { resourceConfig } from './resourceConfig'; export { firstRouterNameMap, typeMapName, subRouterConfig } from './routerConfig'; export { apiServerVersion } from './apiServerVersion'; diff --git a/web/console/config/platform.ts b/web/console/config/platform.ts index ff1079ea7..b3a252670 100644 --- a/web/console/config/platform.ts +++ b/web/console/config/platform.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ /** 获取当前控制台modules的 域名映射表 */ export enum ConsoleModuleEnum { /** tke-apiserver 版本 */ diff --git a/web/console/config/resource/common/actionField.ts b/web/console/config/resource/common/actionField.ts index 6f902f505..fc1ad1fc2 100644 --- a/web/console/config/resource/common/actionField.ts +++ b/web/console/config/resource/common/actionField.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { ActionField } from '../../../src/modules/common/models'; /** resource list资源页面的所提供的操作按钮 */ diff --git a/web/console/config/resource/common/apiVersion.ts b/web/console/config/resource/common/apiVersion.ts index a135d2ab7..117095450 100644 --- a/web/console/config/resource/common/apiVersion.ts +++ b/web/console/config/resource/common/apiVersion.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { apiServerVersion, businessServerVersion, diff --git a/web/console/config/resource/common/dataFormat.ts b/web/console/config/resource/common/dataFormat.ts index 9bdfbd478..a728c4bbf 100644 --- a/web/console/config/resource/common/dataFormat.ts +++ b/web/console/config/resource/common/dataFormat.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ /** 展示数据的形式配置 */ export const dataFormatConfig = { text: 'text', diff --git a/web/console/config/resource/common/detailInfo.ts b/web/console/config/resource/common/detailInfo.ts index a4774c8dd..9e99a5b89 100644 --- a/web/console/config/resource/common/detailInfo.ts +++ b/web/console/config/resource/common/detailInfo.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { dataFormatConfig } from './dataFormat'; import { t, Trans } from '@tencent/tea-app/lib/i18n'; diff --git a/web/console/config/resource/common/displayField.ts b/web/console/config/resource/common/displayField.ts index f74893b9d..ab74304b7 100644 --- a/web/console/config/resource/common/displayField.ts +++ b/web/console/config/resource/common/displayField.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { DisplayField } from '../../../src/modules/common/models'; import { dataFormatConfig } from './dataFormat'; import { t, Trans } from '@tencent/tea-app/lib/i18n'; diff --git a/web/console/config/resource/common/generateResourceInfo.ts b/web/console/config/resource/common/generateResourceInfo.ts index b2eb035f8..097a5d28d 100644 --- a/web/console/config/resource/common/generateResourceInfo.ts +++ b/web/console/config/resource/common/generateResourceInfo.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { RequestType, ResourceInfo, diff --git a/web/console/config/resource/common/index.ts b/web/console/config/resource/common/index.ts index c613f61df..e9799f999 100644 --- a/web/console/config/resource/common/index.ts +++ b/web/console/config/resource/common/index.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export { commonDisplayField } from './displayField'; export { commonDetailInfo, commonTabList, workloadCommonTabList, defaulNotExistedValue } from './detailInfo'; export { apiVersion, ApiVersion, ApiVersionKeyName } from './apiVersion'; diff --git a/web/console/config/resource/k8sConfig/addonResource.ts b/web/console/config/resource/k8sConfig/addonResource.ts index e5507f702..c10d1d3b8 100644 --- a/web/console/config/resource/k8sConfig/addonResource.ts +++ b/web/console/config/resource/k8sConfig/addonResource.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { generateResourceInfo } from '../common'; /** addon的相关配置 */ diff --git a/web/console/config/resource/k8sConfig/alarmPolicy.ts b/web/console/config/resource/k8sConfig/alarmPolicy.ts index 39bd87a0e..dcdaf9fac 100644 --- a/web/console/config/resource/k8sConfig/alarmPolicy.ts +++ b/web/console/config/resource/k8sConfig/alarmPolicy.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { generateResourceInfo } from '../common'; /** lbcf的相关配置 */ diff --git a/web/console/config/resource/k8sConfig/alarmRecord.ts b/web/console/config/resource/k8sConfig/alarmRecord.ts index c41e69dc9..b9d982a43 100644 --- a/web/console/config/resource/k8sConfig/alarmRecord.ts +++ b/web/console/config/resource/k8sConfig/alarmRecord.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { generateResourceInfo } from '../common'; /** lbcf的相关配置 */ diff --git a/web/console/config/resource/k8sConfig/application.ts b/web/console/config/resource/k8sConfig/application.ts index dad524448..735188232 100644 --- a/web/console/config/resource/k8sConfig/application.ts +++ b/web/console/config/resource/k8sConfig/application.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { generateResourceInfo } from '../common'; /** diff --git a/web/console/config/resource/k8sConfig/audit.ts b/web/console/config/resource/k8sConfig/audit.ts index f190cf626..626f0b977 100644 --- a/web/console/config/resource/k8sConfig/audit.ts +++ b/web/console/config/resource/k8sConfig/audit.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { generateResourceInfo } from '../common'; diff --git a/web/console/config/resource/k8sConfig/configmaps.ts b/web/console/config/resource/k8sConfig/configmaps.ts index 8f400f84b..f8d72eb83 100644 --- a/web/console/config/resource/k8sConfig/configmaps.ts +++ b/web/console/config/resource/k8sConfig/configmaps.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { DetailField, DisplayField, DetailInfo } from '../../../src/modules/common/models'; import { defaulNotExistedValue, dataFormatConfig, commonActionField, generateResourceInfo } from '../common'; import { t, Trans } from '@tencent/tea-app/lib/i18n'; diff --git a/web/console/config/resource/k8sConfig/controlPlane.ts b/web/console/config/resource/k8sConfig/controlPlane.ts index f37f5c6e3..e2b34aa8b 100644 --- a/web/console/config/resource/k8sConfig/controlPlane.ts +++ b/web/console/config/resource/k8sConfig/controlPlane.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { ResourceInfo, DetailField, DisplayField, DetailInfo } from '../../../src/modules/common/models'; import { defaulNotExistedValue, commonActionField, dataFormatConfig, generateResourceInfo } from '../common'; import { t, Trans } from '@tencent/tea-app/lib/i18n'; diff --git a/web/console/config/resource/k8sConfig/cronjobs.ts b/web/console/config/resource/k8sConfig/cronjobs.ts index 54c12047a..59eb15119 100644 --- a/web/console/config/resource/k8sConfig/cronjobs.ts +++ b/web/console/config/resource/k8sConfig/cronjobs.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { defaulNotExistedValue, commonActionField, diff --git a/web/console/config/resource/k8sConfig/daemonset.ts b/web/console/config/resource/k8sConfig/daemonset.ts index 55d59cd66..2dd0ae7a9 100644 --- a/web/console/config/resource/k8sConfig/daemonset.ts +++ b/web/console/config/resource/k8sConfig/daemonset.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { DetailField, DetailInfo } from '../../../src/modules/common/models'; import { t, Trans } from '@tencent/tea-app/lib/i18n'; diff --git a/web/console/config/resource/k8sConfig/deployment.ts b/web/console/config/resource/k8sConfig/deployment.ts index 89ad88d5c..6e2f87dab 100644 --- a/web/console/config/resource/k8sConfig/deployment.ts +++ b/web/console/config/resource/k8sConfig/deployment.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { DetailField, DisplayField, DetailInfo } from '../../../src/modules/common/models'; import { commonDisplayField, diff --git a/web/console/config/resource/k8sConfig/destinationRule.ts b/web/console/config/resource/k8sConfig/destinationRule.ts index 417f5250f..6a226d2c7 100644 --- a/web/console/config/resource/k8sConfig/destinationRule.ts +++ b/web/console/config/resource/k8sConfig/destinationRule.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { ResourceInfo, DetailField, DisplayField, DetailInfo } from '../../../src/modules/common/models'; import { defaulNotExistedValue, commonActionField, dataFormatConfig, generateResourceInfo } from '../common'; import { t, Trans } from '@tencent/tea-app/lib/i18n'; diff --git a/web/console/config/resource/k8sConfig/gateway.ts b/web/console/config/resource/k8sConfig/gateway.ts index 6202a317e..5eaefb5a5 100644 --- a/web/console/config/resource/k8sConfig/gateway.ts +++ b/web/console/config/resource/k8sConfig/gateway.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { ResourceInfo, DetailField, DisplayField, DetailInfo } from '../../../src/modules/common/models'; import { commonActionField, defaulNotExistedValue, apiVersion, dataFormatConfig } from '../common'; import { t, Trans } from '@tencent/tea-app/lib/i18n'; diff --git a/web/console/config/resource/k8sConfig/index.ts b/web/console/config/resource/k8sConfig/index.ts index cebb95929..bcd4a8f0d 100644 --- a/web/console/config/resource/k8sConfig/index.ts +++ b/web/console/config/resource/k8sConfig/index.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export { deployment } from './deployment'; export { statefulset } from './statefulset'; export { daemonset } from './daemonset'; diff --git a/web/console/config/resource/k8sConfig/ingress.ts b/web/console/config/resource/k8sConfig/ingress.ts index ebf93224b..69b758b57 100644 --- a/web/console/config/resource/k8sConfig/ingress.ts +++ b/web/console/config/resource/k8sConfig/ingress.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { DetailField, DisplayField, DetailInfo } from '../../../src/modules/common/models'; import { defaulNotExistedValue, diff --git a/web/console/config/resource/k8sConfig/jobs.ts b/web/console/config/resource/k8sConfig/jobs.ts index fd9456110..e5f95780d 100644 --- a/web/console/config/resource/k8sConfig/jobs.ts +++ b/web/console/config/resource/k8sConfig/jobs.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { defaulNotExistedValue, commonActionField, diff --git a/web/console/config/resource/k8sConfig/lbcf.ts b/web/console/config/resource/k8sConfig/lbcf.ts index b7076e952..5694cff79 100644 --- a/web/console/config/resource/k8sConfig/lbcf.ts +++ b/web/console/config/resource/k8sConfig/lbcf.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { ResourceInfo, DetailField, DisplayField, DetailInfo } from '../../../src/modules/common/models'; import { defaulNotExistedValue, diff --git a/web/console/config/resource/k8sConfig/namespace.project.ts b/web/console/config/resource/k8sConfig/namespace.project.ts index 9698b7b5c..2374a7243 100644 --- a/web/console/config/resource/k8sConfig/namespace.project.ts +++ b/web/console/config/resource/k8sConfig/namespace.project.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { DetailField, DisplayField, DetailInfo } from '../../../src/modules/common/models'; import { commonActionField, defaulNotExistedValue, dataFormatConfig, generateResourceInfo } from '../common'; import { t, Trans } from '@tencent/tea-app/lib/i18n'; diff --git a/web/console/config/resource/k8sConfig/namespace.ts b/web/console/config/resource/k8sConfig/namespace.ts index a2300e659..39cfe8e7a 100644 --- a/web/console/config/resource/k8sConfig/namespace.ts +++ b/web/console/config/resource/k8sConfig/namespace.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { DetailField, DisplayField, DetailInfo } from '../../../src/modules/common/models'; import { commonActionField, defaulNotExistedValue, dataFormatConfig, generateResourceInfo } from '../common'; import { t, Trans } from '@tencent/tea-app/lib/i18n'; diff --git a/web/console/config/resource/k8sConfig/node.ts b/web/console/config/resource/k8sConfig/node.ts index b6ab62f3c..2391c7196 100644 --- a/web/console/config/resource/k8sConfig/node.ts +++ b/web/console/config/resource/k8sConfig/node.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { DetailField, DisplayField, DetailInfo } from '../../../src/modules/common/models'; import { commonActionField, diff --git a/web/console/config/resource/k8sConfig/notifyChannel.ts b/web/console/config/resource/k8sConfig/notifyChannel.ts index 6ad1fe7db..2156c0bb0 100644 --- a/web/console/config/resource/k8sConfig/notifyChannel.ts +++ b/web/console/config/resource/k8sConfig/notifyChannel.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { generateResourceInfo } from '../common'; /** notify的相关配置 */ diff --git a/web/console/config/resource/k8sConfig/otherResource.ts b/web/console/config/resource/k8sConfig/otherResource.ts index 1453451c9..68307cb8d 100644 --- a/web/console/config/resource/k8sConfig/otherResource.ts +++ b/web/console/config/resource/k8sConfig/otherResource.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { generateResourceInfo } from '../common'; /** event的相关配置 */ diff --git a/web/console/config/resource/k8sConfig/persistentvolumeclaims.ts b/web/console/config/resource/k8sConfig/persistentvolumeclaims.ts index 4d93a84dc..3770bd4e2 100644 --- a/web/console/config/resource/k8sConfig/persistentvolumeclaims.ts +++ b/web/console/config/resource/k8sConfig/persistentvolumeclaims.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { DetailField, DisplayField, DetailInfo } from '../../../src/modules/common/models'; import { defaulNotExistedValue, dataFormatConfig, commonActionField, generateResourceInfo } from '../common'; import { t, Trans } from '@tencent/tea-app/lib/i18n'; diff --git a/web/console/config/resource/k8sConfig/persistentvolumes.ts b/web/console/config/resource/k8sConfig/persistentvolumes.ts index 301a323e1..c305ae449 100644 --- a/web/console/config/resource/k8sConfig/persistentvolumes.ts +++ b/web/console/config/resource/k8sConfig/persistentvolumes.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { DetailField, DisplayField, DetailInfo } from '../../../src/modules/common/models'; import { defaulNotExistedValue, dataFormatConfig, commonActionField, generateResourceInfo } from '../common'; import { t, Trans } from '@tencent/tea-app/lib/i18n'; diff --git a/web/console/config/resource/k8sConfig/pods.ts b/web/console/config/resource/k8sConfig/pods.ts index 2ad95f591..e697bda1a 100644 --- a/web/console/config/resource/k8sConfig/pods.ts +++ b/web/console/config/resource/k8sConfig/pods.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { DetailField, DetailInfo } from '../../../src/modules/common/models'; import { commonDisplayField, diff --git a/web/console/config/resource/k8sConfig/replicaset.ts b/web/console/config/resource/k8sConfig/replicaset.ts index 5c472fafb..89cc1276b 100644 --- a/web/console/config/resource/k8sConfig/replicaset.ts +++ b/web/console/config/resource/k8sConfig/replicaset.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { DetailField, DetailInfo } from '../../../src/modules/common/models'; import { commonDisplayField, diff --git a/web/console/config/resource/k8sConfig/replicationcontrollers.ts b/web/console/config/resource/k8sConfig/replicationcontrollers.ts index 118307715..d31740d52 100644 --- a/web/console/config/resource/k8sConfig/replicationcontrollers.ts +++ b/web/console/config/resource/k8sConfig/replicationcontrollers.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { DetailField, DetailInfo } from '../../../src/modules/common/models'; import { commonDisplayField, diff --git a/web/console/config/resource/k8sConfig/secret.ts b/web/console/config/resource/k8sConfig/secret.ts index c023e4eef..37907e2c5 100644 --- a/web/console/config/resource/k8sConfig/secret.ts +++ b/web/console/config/resource/k8sConfig/secret.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { DetailField, DisplayField, DetailInfo } from '../../../src/modules/common/models'; import { defaulNotExistedValue, dataFormatConfig, commonActionField, generateResourceInfo } from '../common'; import { t, Trans } from '@tencent/tea-app/lib/i18n'; diff --git a/web/console/config/resource/k8sConfig/service.ts b/web/console/config/resource/k8sConfig/service.ts index 52a40edff..303660d28 100644 --- a/web/console/config/resource/k8sConfig/service.ts +++ b/web/console/config/resource/k8sConfig/service.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { DetailField, DisplayField, DetailInfo } from '../../../src/modules/common/models'; import { defaulNotExistedValue, diff --git a/web/console/config/resource/k8sConfig/serviceEntry.ts b/web/console/config/resource/k8sConfig/serviceEntry.ts index c7a031f78..667d7b860 100644 --- a/web/console/config/resource/k8sConfig/serviceEntry.ts +++ b/web/console/config/resource/k8sConfig/serviceEntry.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { ResourceInfo, DetailField, DisplayField, DetailInfo } from '../../../src/modules/common/models'; import { defaulNotExistedValue, commonActionField, dataFormatConfig, generateResourceInfo } from '../common'; import { t, Trans } from '@tencent/tea-app/lib/i18n'; diff --git a/web/console/config/resource/k8sConfig/serviceForMesh.ts b/web/console/config/resource/k8sConfig/serviceForMesh.ts index f1f68d972..c8325b339 100644 --- a/web/console/config/resource/k8sConfig/serviceForMesh.ts +++ b/web/console/config/resource/k8sConfig/serviceForMesh.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { DetailField, DisplayField, DetailInfo } from '../../../src/modules/common/models'; import { defaulNotExistedValue, commonActionField, dataFormatConfig, generateResourceInfo } from '../common'; import { t, Trans } from '@tencent/tea-app/lib/i18n'; diff --git a/web/console/config/resource/k8sConfig/statefulset.ts b/web/console/config/resource/k8sConfig/statefulset.ts index a91182002..3a9822f99 100644 --- a/web/console/config/resource/k8sConfig/statefulset.ts +++ b/web/console/config/resource/k8sConfig/statefulset.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { DetailField, DetailInfo } from '../../../src/modules/common/models'; import { commonDisplayField, diff --git a/web/console/config/resource/k8sConfig/storageclass.ts b/web/console/config/resource/k8sConfig/storageclass.ts index 8145b8bf0..427d5a13f 100644 --- a/web/console/config/resource/k8sConfig/storageclass.ts +++ b/web/console/config/resource/k8sConfig/storageclass.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { DetailField, DisplayField, DetailInfo } from '../../../src/modules/common/models'; import { defaulNotExistedValue, dataFormatConfig, commonActionField, generateResourceInfo } from '../common'; import { t, Trans } from '@tencent/tea-app/lib/i18n'; diff --git a/web/console/config/resource/k8sConfig/tapp.ts b/web/console/config/resource/k8sConfig/tapp.ts index 038089e35..8989c3f20 100644 --- a/web/console/config/resource/k8sConfig/tapp.ts +++ b/web/console/config/resource/k8sConfig/tapp.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { ResourceInfo, DetailField, DisplayField, DetailInfo } from '../../../src/modules/common/models'; import { commonDisplayField, diff --git a/web/console/config/resource/k8sConfig/virtualService.ts b/web/console/config/resource/k8sConfig/virtualService.ts index 2b93944a0..0a4638e7f 100644 --- a/web/console/config/resource/k8sConfig/virtualService.ts +++ b/web/console/config/resource/k8sConfig/virtualService.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { ResourceInfo, DetailField, DisplayField, DetailInfo } from '../../../src/modules/common/models'; import { defaulNotExistedValue, commonActionField, dataFormatConfig, generateResourceInfo } from '../common'; import { t, Trans } from '@tencent/tea-app/lib/i18n'; diff --git a/web/console/config/resourceConfig.ts b/web/console/config/resourceConfig.ts index ccd9b8bb1..0f0695b28 100644 --- a/web/console/config/resourceConfig.ts +++ b/web/console/config/resourceConfig.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { auth_project } from './resource/k8sConfig/otherResource'; import { deployment, diff --git a/web/console/config/routerConfig.project.ts b/web/console/config/routerConfig.project.ts index e0dc667c0..839cf79e4 100644 --- a/web/console/config/routerConfig.project.ts +++ b/web/console/config/routerConfig.project.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { t, Trans } from '@tencent/tea-app/lib/i18n'; export const firstRouterNameMap = { diff --git a/web/console/config/routerConfig.ts b/web/console/config/routerConfig.ts index 7a97edb39..04d70aef4 100644 --- a/web/console/config/routerConfig.ts +++ b/web/console/config/routerConfig.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { t, Trans } from '@tencent/tea-app/lib/i18n'; export const firstRouterNameMap = { diff --git a/web/console/gulpfile.js b/web/console/gulpfile.js index d87694920..556cbc8ed 100644 --- a/web/console/gulpfile.js +++ b/web/console/gulpfile.js @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ const { src, dest, parallel } = require('gulp'); const uglifyjs = require('gulp-uglify'); const { pipeline } = require('readable-stream'); diff --git a/web/console/helpers/Router.ts b/web/console/helpers/Router.ts index 98ecfdd1f..523286d54 100644 --- a/web/console/helpers/Router.ts +++ b/web/console/helpers/Router.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ /** * router for nmc * diff --git a/web/console/helpers/Validator.ts b/web/console/helpers/Validator.ts index e39e4f98c..880cd7ac2 100644 --- a/web/console/helpers/Validator.ts +++ b/web/console/helpers/Validator.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { Validation } from 'src/modules/common'; import { ControllerFieldState, UseFormStateReturn } from 'react-hook-form'; diff --git a/web/console/helpers/appUtil.ts b/web/console/helpers/appUtil.ts index 0d6121a93..4eca54759 100644 --- a/web/console/helpers/appUtil.ts +++ b/web/console/helpers/appUtil.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ type RegionId = string | number; type ProjectId = string | number; diff --git a/web/console/helpers/cookieUtil.ts b/web/console/helpers/cookieUtil.ts index 5ff29f738..c5faedb5d 100644 --- a/web/console/helpers/cookieUtil.ts +++ b/web/console/helpers/cookieUtil.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ /** * 获取cookies当中的某个字段 * @params name: string cookies当中的字段值 diff --git a/web/console/helpers/dateFormatter.ts b/web/console/helpers/dateFormatter.ts index 87f680f38..32cad3b2e 100644 --- a/web/console/helpers/dateFormatter.ts +++ b/web/console/helpers/dateFormatter.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export function dateFormatter(date: Date, format: string) { const o = { /** diff --git a/web/console/helpers/dateUtil.ts b/web/console/helpers/dateUtil.ts index 0b524bd6f..f83ec7596 100644 --- a/web/console/helpers/dateUtil.ts +++ b/web/console/helpers/dateUtil.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ /** * 日期格式化函数 * @param date 日期 diff --git a/web/console/helpers/downloadCrt.ts b/web/console/helpers/downloadCrt.ts index d49bab466..c000375d5 100644 --- a/web/console/helpers/downloadCrt.ts +++ b/web/console/helpers/downloadCrt.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { Base64 } from 'js-base64'; // export function downloadCrt(crtText, filename = 'cluster-ca.crt') { diff --git a/web/console/helpers/downloadCsv.ts b/web/console/helpers/downloadCsv.ts index 0b0844684..2adb115f3 100644 --- a/web/console/helpers/downloadCsv.ts +++ b/web/console/helpers/downloadCsv.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ // const tips = seajs.require('tips'); export function downloadCsv(rows, header, filename) { diff --git a/web/console/helpers/downloadText.ts b/web/console/helpers/downloadText.ts index 0173382b3..40b63c1d1 100644 --- a/web/console/helpers/downloadText.ts +++ b/web/console/helpers/downloadText.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { t, Trans } from '@tencent/tea-app/lib/i18n'; const tips = seajs.require('tips'); diff --git a/web/console/helpers/format.ts b/web/console/helpers/format.ts index 547ebe74f..e07f67bf2 100644 --- a/web/console/helpers/format.ts +++ b/web/console/helpers/format.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ // 所有单位都换算成byte const memoryMap1000 = ['K', 'M', 'G', 'T', 'P', 'E'].reduce( (all, key, index) => Object.assign(all, { [key]: Math.pow(1000, index + 1) }), diff --git a/web/console/helpers/getScrollBarSize.ts b/web/console/helpers/getScrollBarSize.ts index 4d0575e67..dd30379b4 100644 --- a/web/console/helpers/getScrollBarSize.ts +++ b/web/console/helpers/getScrollBarSize.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ //计算滚动条宽度 export function getScrollBarSize(className?: string) { let inner = document.createElement('p'); diff --git a/web/console/helpers/index.ts b/web/console/helpers/index.ts index 09b077df6..4e44a2857 100644 --- a/web/console/helpers/index.ts +++ b/web/console/helpers/index.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export { downloadCrt, downloadKubeconfig, getKubectlConfig } from './downloadCrt'; export { ResetStoreAction, generateResetableReducer } from './reduxStore'; export { isValidateSuccess, Validate, getReactHookFormStatusWithMessage } from './Validator'; diff --git a/web/console/helpers/k8sUnitUtil.ts b/web/console/helpers/k8sUnitUtil.ts index ed8af4109..8efd40762 100644 --- a/web/console/helpers/k8sUnitUtil.ts +++ b/web/console/helpers/k8sUnitUtil.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export enum K8SUNIT { m = 'm', unit = 'unit', diff --git a/web/console/helpers/reduceNetwork.ts b/web/console/helpers/reduceNetwork.ts index b0a5093df..739af635c 100644 --- a/web/console/helpers/reduceNetwork.ts +++ b/web/console/helpers/reduceNetwork.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import axios from 'axios'; import { OperationResult } from '@tencent/ff-redux'; import { RequestParams, ResourceInfo } from '../src/modules/common/models'; diff --git a/web/console/helpers/reduxStore.ts b/web/console/helpers/reduxStore.ts index 1013a2af2..0eae375eb 100644 --- a/web/console/helpers/reduxStore.ts +++ b/web/console/helpers/reduxStore.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ /** * 重置redux store,用于离开页面时清空状态 */ diff --git a/web/console/helpers/regionLint.ts b/web/console/helpers/regionLint.ts index 98693e9d2..f48349f9e 100644 --- a/web/console/helpers/regionLint.ts +++ b/web/console/helpers/regionLint.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ type RegionId = number | string; type LooseRegionId = number | string; interface Region { diff --git a/web/console/helpers/request.ts b/web/console/helpers/request.ts index 58a29cefa..a1bf4f6ee 100644 --- a/web/console/helpers/request.ts +++ b/web/console/helpers/request.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { Method, reduceNetworkRequest } from '.'; import { RequestParams } from '../src/modules/common/models'; diff --git a/web/console/helpers/urlUtil.ts b/web/console/helpers/urlUtil.ts index 9b710de27..e55d17c70 100644 --- a/web/console/helpers/urlUtil.ts +++ b/web/console/helpers/urlUtil.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { remove, isEmpty } from '../src/modules/common/utils'; import { ResourceInfo } from '../src/modules/common'; import { resourceConfig } from '../config'; diff --git a/web/console/helpers/version.ts b/web/console/helpers/version.ts index 3f6306fe9..3416d4d46 100644 --- a/web/console/helpers/version.ts +++ b/web/console/helpers/version.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as compareVersions from 'compare-versions'; export const compareVersion = (firstVersion: string, secondVersion: string) => { diff --git a/web/console/i18n.ts b/web/console/i18n.ts index 9842acc89..99f3e1247 100644 --- a/web/console/i18n.ts +++ b/web/console/i18n.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ // 导入依赖 import { i18n } from '@tea/app'; // 导入词条 diff --git a/web/console/i18n/translation/en.js b/web/console/i18n/translation/en.js index 67ce2110b..0de630176 100644 --- a/web/console/i18n/translation/en.js +++ b/web/console/i18n/translation/en.js @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ /** * @type {import('@tea/app').I18NTranslation} */ diff --git a/web/console/i18n/translation/jp.js b/web/console/i18n/translation/jp.js index 67ce2110b..0de630176 100644 --- a/web/console/i18n/translation/jp.js +++ b/web/console/i18n/translation/jp.js @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ /** * @type {import('@tea/app').I18NTranslation} */ diff --git a/web/console/i18n/translation/ko.js b/web/console/i18n/translation/ko.js index 67ce2110b..0de630176 100644 --- a/web/console/i18n/translation/ko.js +++ b/web/console/i18n/translation/ko.js @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ /** * @type {import('@tea/app').I18NTranslation} */ diff --git a/web/console/i18n/translation/zh.js b/web/console/i18n/translation/zh.js index 67ce2110b..0de630176 100644 --- a/web/console/i18n/translation/zh.js +++ b/web/console/i18n/translation/zh.js @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ /** * @type {import('@tea/app').I18NTranslation} */ diff --git a/web/console/index.project.tsx b/web/console/index.project.tsx index 77942d04a..8ac3c4d65 100644 --- a/web/console/index.project.tsx +++ b/web/console/index.project.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import './i18n'; import ReactDOM from 'react-dom'; import * as React from 'react'; diff --git a/web/console/index.tke.tsx b/web/console/index.tke.tsx index 12f8ae7cd..4adbffe7e 100644 --- a/web/console/index.tke.tsx +++ b/web/console/index.tke.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import './i18n'; import * as React from 'react'; import { Entry, insertCSS } from '@tencent/ff-redux'; diff --git a/web/console/lib/ff-component/index.ts b/web/console/lib/ff-component/index.ts index 8420b1093..a0d03e4f1 100644 --- a/web/console/lib/ff-component/index.ts +++ b/web/console/lib/ff-component/index.ts @@ -1 +1,18 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export * from './src'; diff --git a/web/console/lib/ff-component/src/cam/Cam.tsx b/web/console/lib/ff-component/src/cam/Cam.tsx index 04fa4aa6b..a7fd1d294 100644 --- a/web/console/lib/ff-component/src/cam/Cam.tsx +++ b/web/console/lib/ff-component/src/cam/Cam.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { BaseReactProps } from '@tencent/ff-redux'; diff --git a/web/console/lib/ff-component/src/cam/index.ts b/web/console/lib/ff-component/src/cam/index.ts index a4d0f0f61..39e441d2a 100644 --- a/web/console/lib/ff-component/src/cam/index.ts +++ b/web/console/lib/ff-component/src/cam/index.ts @@ -1 +1,18 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export { CamBox, CamTips, CamPanel, isCamRefused } from './Cam'; diff --git a/web/console/lib/ff-component/src/formpanel/Checkbox.tsx b/web/console/lib/ff-component/src/formpanel/Checkbox.tsx index 845d584a7..5e008103e 100644 --- a/web/console/lib/ff-component/src/formpanel/Checkbox.tsx +++ b/web/console/lib/ff-component/src/formpanel/Checkbox.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { Checkbox, CheckboxProps } from '@tencent/tea-component'; diff --git a/web/console/lib/ff-component/src/formpanel/Checkboxs.tsx b/web/console/lib/ff-component/src/formpanel/Checkboxs.tsx index 20345cfe4..4471bd8fb 100644 --- a/web/console/lib/ff-component/src/formpanel/Checkboxs.tsx +++ b/web/console/lib/ff-component/src/formpanel/Checkboxs.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { FetchState, FFListAction, FFListModel } from '@tencent/ff-redux'; diff --git a/web/console/lib/ff-component/src/formpanel/Footer.tsx b/web/console/lib/ff-component/src/formpanel/Footer.tsx index 3ab2fb10e..c18e879f1 100644 --- a/web/console/lib/ff-component/src/formpanel/Footer.tsx +++ b/web/console/lib/ff-component/src/formpanel/Footer.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { insertCSS } from '@tencent/ff-redux'; diff --git a/web/console/lib/ff-component/src/formpanel/FormPanel.tsx b/web/console/lib/ff-component/src/formpanel/FormPanel.tsx index bec68e883..70a230420 100644 --- a/web/console/lib/ff-component/src/formpanel/FormPanel.tsx +++ b/web/console/lib/ff-component/src/formpanel/FormPanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { t, Trans } from '@tencent/tea-app/lib/i18n'; diff --git a/web/console/lib/ff-component/src/formpanel/HelpText.tsx b/web/console/lib/ff-component/src/formpanel/HelpText.tsx index 8db4751c5..76858c6c3 100644 --- a/web/console/lib/ff-component/src/formpanel/HelpText.tsx +++ b/web/console/lib/ff-component/src/formpanel/HelpText.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { Text } from '@tencent/tea-component'; diff --git a/web/console/lib/ff-component/src/formpanel/InlineText.tsx b/web/console/lib/ff-component/src/formpanel/InlineText.tsx index 7faf9720f..6afdd6cb5 100644 --- a/web/console/lib/ff-component/src/formpanel/InlineText.tsx +++ b/web/console/lib/ff-component/src/formpanel/InlineText.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { Text } from '@tencent/tea-component'; diff --git a/web/console/lib/ff-component/src/formpanel/Input.tsx b/web/console/lib/ff-component/src/formpanel/Input.tsx index b3aa3c10e..aaab6cc9c 100644 --- a/web/console/lib/ff-component/src/formpanel/Input.tsx +++ b/web/console/lib/ff-component/src/formpanel/Input.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { t, Trans } from '@tencent/tea-app/lib/i18n'; diff --git a/web/console/lib/ff-component/src/formpanel/InputNumber.tsx b/web/console/lib/ff-component/src/formpanel/InputNumber.tsx index 7f5df687f..7ec1b579a 100644 --- a/web/console/lib/ff-component/src/formpanel/InputNumber.tsx +++ b/web/console/lib/ff-component/src/formpanel/InputNumber.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { t, Trans } from '@tencent/tea-app/lib/i18n'; diff --git a/web/console/lib/ff-component/src/formpanel/Item.tsx b/web/console/lib/ff-component/src/formpanel/Item.tsx index 110385df7..0977952de 100644 --- a/web/console/lib/ff-component/src/formpanel/Item.tsx +++ b/web/console/lib/ff-component/src/formpanel/Item.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { insertCSS } from '@tencent/ff-redux'; diff --git a/web/console/lib/ff-component/src/formpanel/KeyValuePanel.tsx b/web/console/lib/ff-component/src/formpanel/KeyValuePanel.tsx index f54151f84..61644eb50 100644 --- a/web/console/lib/ff-component/src/formpanel/KeyValuePanel.tsx +++ b/web/console/lib/ff-component/src/formpanel/KeyValuePanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { t, Trans } from '@tencent/tea-app/lib/i18n'; diff --git a/web/console/lib/ff-component/src/formpanel/Radios.tsx b/web/console/lib/ff-component/src/formpanel/Radios.tsx index 01bdd1ba4..59b420cc1 100644 --- a/web/console/lib/ff-component/src/formpanel/Radios.tsx +++ b/web/console/lib/ff-component/src/formpanel/Radios.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { FetchState, FFListAction, FFListModel } from '@tencent/ff-redux'; diff --git a/web/console/lib/ff-component/src/formpanel/Segment.tsx b/web/console/lib/ff-component/src/formpanel/Segment.tsx index 32c8675e8..fae332a44 100644 --- a/web/console/lib/ff-component/src/formpanel/Segment.tsx +++ b/web/console/lib/ff-component/src/formpanel/Segment.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { FetchState, FFListAction, FFListModel, insertCSS } from '@tencent/ff-redux'; diff --git a/web/console/lib/ff-component/src/formpanel/Select.tsx b/web/console/lib/ff-component/src/formpanel/Select.tsx index a9e11044e..cb88c1265 100644 --- a/web/console/lib/ff-component/src/formpanel/Select.tsx +++ b/web/console/lib/ff-component/src/formpanel/Select.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { FetchState, FFListAction, FFListModel } from '@tencent/ff-redux'; diff --git a/web/console/lib/ff-component/src/formpanel/Switch.tsx b/web/console/lib/ff-component/src/formpanel/Switch.tsx index d6a94f899..cbf5157be 100644 --- a/web/console/lib/ff-component/src/formpanel/Switch.tsx +++ b/web/console/lib/ff-component/src/formpanel/Switch.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { Switch, SwitchProps } from '@tencent/tea-component'; diff --git a/web/console/lib/ff-component/src/formpanel/Text.tsx b/web/console/lib/ff-component/src/formpanel/Text.tsx index f4b070f7b..71440fa25 100644 --- a/web/console/lib/ff-component/src/formpanel/Text.tsx +++ b/web/console/lib/ff-component/src/formpanel/Text.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { FormText, Icon } from '@tencent/tea-component'; diff --git a/web/console/lib/ff-component/src/formpanel/TransferTable.tsx b/web/console/lib/ff-component/src/formpanel/TransferTable.tsx index 52695fdca..dd744934c 100644 --- a/web/console/lib/ff-component/src/formpanel/TransferTable.tsx +++ b/web/console/lib/ff-component/src/formpanel/TransferTable.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { FetcherState, FetchState, FFListAction, FFListModel, RecordSet } from '@tencent/ff-redux'; diff --git a/web/console/lib/ff-component/src/formpanel/Validatable.tsx b/web/console/lib/ff-component/src/formpanel/Validatable.tsx index f070ab281..217c3b33c 100644 --- a/web/console/lib/ff-component/src/formpanel/Validatable.tsx +++ b/web/console/lib/ff-component/src/formpanel/Validatable.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { Placement } from 'popper.js'; import * as React from 'react'; diff --git a/web/console/lib/ff-component/src/formpanel/index.ts b/web/console/lib/ff-component/src/formpanel/index.ts index a7023dbad..16387a80a 100644 --- a/web/console/lib/ff-component/src/formpanel/index.ts +++ b/web/console/lib/ff-component/src/formpanel/index.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export * from './Checkbox'; export * from './Checkboxs'; export * from './Footer'; diff --git a/web/console/lib/ff-component/src/index.ts b/web/console/lib/ff-component/src/index.ts index fdb9cb61d..dacdf5e98 100644 --- a/web/console/lib/ff-component/src/index.ts +++ b/web/console/lib/ff-component/src/index.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export * from './formpanel'; export * from './tablepanel'; export * from './cam'; diff --git a/web/console/lib/ff-component/src/lib/classname.ts b/web/console/lib/ff-component/src/lib/classname.ts index 290bae2a8..394a66c97 100644 --- a/web/console/lib/ff-component/src/lib/classname.ts +++ b/web/console/lib/ff-component/src/lib/classname.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ let hasOwn = {}.hasOwnProperty; export function classNames(...args) { diff --git a/web/console/lib/ff-component/src/lib/index.ts b/web/console/lib/ff-component/src/lib/index.ts index 683888032..fa8a52285 100644 --- a/web/console/lib/ff-component/src/lib/index.ts +++ b/web/console/lib/ff-component/src/lib/index.ts @@ -1 +1,18 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export * from './classname'; diff --git a/web/console/lib/ff-component/src/tablepanel/TablePanel.tsx b/web/console/lib/ff-component/src/tablepanel/TablePanel.tsx index 76657231a..11fa77a69 100644 --- a/web/console/lib/ff-component/src/tablepanel/TablePanel.tsx +++ b/web/console/lib/ff-component/src/tablepanel/TablePanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { FetchState, FFListAction, FFListModel, uuid, insertCSS } from '@tencent/ff-redux'; diff --git a/web/console/lib/ff-component/src/tablepanel/TagSearch.tsx b/web/console/lib/ff-component/src/tablepanel/TagSearch.tsx index d06b180ba..19189f5fa 100644 --- a/web/console/lib/ff-component/src/tablepanel/TagSearch.tsx +++ b/web/console/lib/ff-component/src/tablepanel/TagSearch.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { t, Trans } from '@tencent/tea-app/lib/i18n'; import { TagSearchBox, TagSearchBoxProps } from 'tea-component'; diff --git a/web/console/lib/ff-component/src/tablepanel/index.ts b/web/console/lib/ff-component/src/tablepanel/index.ts index 1da35a4ba..bc02d886a 100644 --- a/web/console/lib/ff-component/src/tablepanel/index.ts +++ b/web/console/lib/ff-component/src/tablepanel/index.ts @@ -1,2 +1,19 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export { TablePanel, TablePanelColumnProps } from './TablePanel'; export { TablePanelTagSearchBox, TablePanelTagSearchProps } from './TagSearch'; diff --git a/web/console/lib/ff-redux/index.ts b/web/console/lib/ff-redux/index.ts index 3589919e0..70407ec0f 100644 --- a/web/console/lib/ff-redux/index.ts +++ b/web/console/lib/ff-redux/index.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export * from './src'; export * from './libs/qcloud-lib'; export * from './libs/qcloud-redux-fetcher'; diff --git a/web/console/lib/ff-redux/libs/qcloud-lib/decorators/OnOuterClick.ts b/web/console/lib/ff-redux/libs/qcloud-lib/decorators/OnOuterClick.ts index 85273d0b2..5149b33ed 100644 --- a/web/console/lib/ff-redux/libs/qcloud-lib/decorators/OnOuterClick.ts +++ b/web/console/lib/ff-redux/libs/qcloud-lib/decorators/OnOuterClick.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import * as ReactDom from 'react-dom'; import { appendFunction } from '../helpers/appendFunction'; diff --git a/web/console/lib/ff-redux/libs/qcloud-lib/decorators/OnResize.ts b/web/console/lib/ff-redux/libs/qcloud-lib/decorators/OnResize.ts index 3bfb62656..44084bcbb 100644 --- a/web/console/lib/ff-redux/libs/qcloud-lib/decorators/OnResize.ts +++ b/web/console/lib/ff-redux/libs/qcloud-lib/decorators/OnResize.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { appendFunction } from '../helpers/appendFunction'; diff --git a/web/console/lib/ff-redux/libs/qcloud-lib/helpers/addComma.ts b/web/console/lib/ff-redux/libs/qcloud-lib/helpers/addComma.ts index 34899d49a..93c0515c6 100644 --- a/web/console/lib/ff-redux/libs/qcloud-lib/helpers/addComma.ts +++ b/web/console/lib/ff-redux/libs/qcloud-lib/helpers/addComma.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ /** * 位数字添加逗号分隔 * diff --git a/web/console/lib/ff-redux/libs/qcloud-lib/helpers/appendFunction.ts b/web/console/lib/ff-redux/libs/qcloud-lib/helpers/appendFunction.ts index f1f8b1a85..b446d6687 100644 --- a/web/console/lib/ff-redux/libs/qcloud-lib/helpers/appendFunction.ts +++ b/web/console/lib/ff-redux/libs/qcloud-lib/helpers/appendFunction.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ /** * 在指定函数后面追加一个函数 */ diff --git a/web/console/lib/ff-redux/libs/qcloud-lib/helpers/bindActionCreators.ts b/web/console/lib/ff-redux/libs/qcloud-lib/helpers/bindActionCreators.ts index 2b347440d..ddcf1df8a 100644 --- a/web/console/lib/ff-redux/libs/qcloud-lib/helpers/bindActionCreators.ts +++ b/web/console/lib/ff-redux/libs/qcloud-lib/helpers/bindActionCreators.ts @@ -1,4 +1,21 @@ -/** +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ +/** * like redux.bindActionCreators but do it recurisivly * */ export function bindActionCreators(actions: T, dispatch: Redux.Dispatch): T { diff --git a/web/console/lib/ff-redux/libs/qcloud-lib/helpers/collectionPaging.ts b/web/console/lib/ff-redux/libs/qcloud-lib/helpers/collectionPaging.ts index dbcfa0ec5..60f9c0607 100644 --- a/web/console/lib/ff-redux/libs/qcloud-lib/helpers/collectionPaging.ts +++ b/web/console/lib/ff-redux/libs/qcloud-lib/helpers/collectionPaging.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { PagingQuery } from '../../../'; // 集合分页 diff --git a/web/console/lib/ff-redux/libs/qcloud-lib/helpers/collectionWhere.ts b/web/console/lib/ff-redux/libs/qcloud-lib/helpers/collectionWhere.ts index 4e20323ef..f486f49db 100644 --- a/web/console/lib/ff-redux/libs/qcloud-lib/helpers/collectionWhere.ts +++ b/web/console/lib/ff-redux/libs/qcloud-lib/helpers/collectionWhere.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ /** * 集合筛选 * */ diff --git a/web/console/lib/ff-redux/libs/qcloud-lib/helpers/createConstant.ts b/web/console/lib/ff-redux/libs/qcloud-lib/helpers/createConstant.ts index 102575f90..ed3893feb 100644 --- a/web/console/lib/ff-redux/libs/qcloud-lib/helpers/createConstant.ts +++ b/web/console/lib/ff-redux/libs/qcloud-lib/helpers/createConstant.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ /** 从枚举类型创建 key-value 一样的常量 */ export function createConstant(enumType: T): T { let constant = {}; diff --git a/web/console/lib/ff-redux/libs/qcloud-lib/helpers/createStore.ts b/web/console/lib/ff-redux/libs/qcloud-lib/helpers/createStore.ts index c684419f9..58e9a9ba4 100644 --- a/web/console/lib/ff-redux/libs/qcloud-lib/helpers/createStore.ts +++ b/web/console/lib/ff-redux/libs/qcloud-lib/helpers/createStore.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { applyMiddleware, createStore as createReduxStore } from 'redux'; import { createLogger } from 'redux-logger'; import thunk from 'redux-thunk'; diff --git a/web/console/lib/ff-redux/libs/qcloud-lib/helpers/deepClone.ts b/web/console/lib/ff-redux/libs/qcloud-lib/helpers/deepClone.ts index b08f8db91..c99b802a3 100644 --- a/web/console/lib/ff-redux/libs/qcloud-lib/helpers/deepClone.ts +++ b/web/console/lib/ff-redux/libs/qcloud-lib/helpers/deepClone.ts @@ -1,4 +1,21 @@ -/** +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ +/** * 深度拷贝值 */ export function deepClone(source: T): T { diff --git a/web/console/lib/ff-redux/libs/qcloud-lib/helpers/findByCondition.ts b/web/console/lib/ff-redux/libs/qcloud-lib/helpers/findByCondition.ts index 94d6b9007..eff564af8 100644 --- a/web/console/lib/ff-redux/libs/qcloud-lib/helpers/findByCondition.ts +++ b/web/console/lib/ff-redux/libs/qcloud-lib/helpers/findByCondition.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ /** * 查找集合中满足给定条件的记录 */ diff --git a/web/console/lib/ff-redux/libs/qcloud-lib/helpers/findById.ts b/web/console/lib/ff-redux/libs/qcloud-lib/helpers/findById.ts index b0ca36a12..e1f5ec941 100644 --- a/web/console/lib/ff-redux/libs/qcloud-lib/helpers/findById.ts +++ b/web/console/lib/ff-redux/libs/qcloud-lib/helpers/findById.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { Identifiable } from '../types/Identifiable'; export function findById(collection: T[], id: string | number): T { diff --git a/web/console/lib/ff-redux/libs/qcloud-lib/helpers/getDateDelta.ts b/web/console/lib/ff-redux/libs/qcloud-lib/helpers/getDateDelta.ts index e07e0534b..d334cba7d 100644 --- a/web/console/lib/ff-redux/libs/qcloud-lib/helpers/getDateDelta.ts +++ b/web/console/lib/ff-redux/libs/qcloud-lib/helpers/getDateDelta.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ /**Parses string formatted as YYYY-MM-DD to a Date object. * If the supplied string does not match the format, an * invalid Date (value NaN) is returned. diff --git a/web/console/lib/ff-redux/libs/qcloud-lib/helpers/getDateStride.ts b/web/console/lib/ff-redux/libs/qcloud-lib/helpers/getDateStride.ts index 1ac21fb3e..84c8293b9 100644 --- a/web/console/lib/ff-redux/libs/qcloud-lib/helpers/getDateStride.ts +++ b/web/console/lib/ff-redux/libs/qcloud-lib/helpers/getDateStride.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { getDateDelta } from './getDateDelta'; function rangeLength(from: string, to: string) { diff --git a/web/console/lib/ff-redux/libs/qcloud-lib/helpers/getDateString.ts b/web/console/lib/ff-redux/libs/qcloud-lib/helpers/getDateString.ts index 859c5883c..11b858711 100644 --- a/web/console/lib/ff-redux/libs/qcloud-lib/helpers/getDateString.ts +++ b/web/console/lib/ff-redux/libs/qcloud-lib/helpers/getDateString.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ function pad(num: number) { let r = String(num); if (r.length === 1) { diff --git a/web/console/lib/ff-redux/libs/qcloud-lib/helpers/getDateUTC.ts b/web/console/lib/ff-redux/libs/qcloud-lib/helpers/getDateUTC.ts index 2758f2090..437c8e21a 100644 --- a/web/console/lib/ff-redux/libs/qcloud-lib/helpers/getDateUTC.ts +++ b/web/console/lib/ff-redux/libs/qcloud-lib/helpers/getDateUTC.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ function parseDate(dateStr) { if (/^(\d{4})[-\s\.,\/]*(\d+)[-\s\.,\/]*(\d+)(?:\s*(\d+)\:(\d+):(\d+))?$/.test(dateStr)) { let year = +RegExp.$1; diff --git a/web/console/lib/ff-redux/libs/qcloud-lib/helpers/getOffsetDate.ts b/web/console/lib/ff-redux/libs/qcloud-lib/helpers/getOffsetDate.ts index 84f5a862f..0458da97f 100644 --- a/web/console/lib/ff-redux/libs/qcloud-lib/helpers/getOffsetDate.ts +++ b/web/console/lib/ff-redux/libs/qcloud-lib/helpers/getOffsetDate.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export function getOffsetDate(date: Date, day: number) { let newDate = new Date(date.valueOf()); newDate.setDate(date.getDate() + day); diff --git a/web/console/lib/ff-redux/libs/qcloud-lib/helpers/hashObject.ts b/web/console/lib/ff-redux/libs/qcloud-lib/helpers/hashObject.ts index 2797b927b..cad885b31 100644 --- a/web/console/lib/ff-redux/libs/qcloud-lib/helpers/hashObject.ts +++ b/web/console/lib/ff-redux/libs/qcloud-lib/helpers/hashObject.ts @@ -1,4 +1,21 @@ -import { hashString } from './hashString'; +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ +import { hashString } from './hashString'; export function hashObject(obj: any) { if (obj.prototype) { diff --git a/web/console/lib/ff-redux/libs/qcloud-lib/helpers/hashString.ts b/web/console/lib/ff-redux/libs/qcloud-lib/helpers/hashString.ts index 92fd378b8..77ed25955 100644 --- a/web/console/lib/ff-redux/libs/qcloud-lib/helpers/hashString.ts +++ b/web/console/lib/ff-redux/libs/qcloud-lib/helpers/hashString.ts @@ -1,4 +1,21 @@ -export function hashString(str: string) { +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ +export function hashString(str: string) { let hash = 0, i, chr, diff --git a/web/console/lib/ff-redux/libs/qcloud-lib/helpers/insertCSS.ts b/web/console/lib/ff-redux/libs/qcloud-lib/helpers/insertCSS.ts index bcf463c7a..0a8e26627 100644 --- a/web/console/lib/ff-redux/libs/qcloud-lib/helpers/insertCSS.ts +++ b/web/console/lib/ff-redux/libs/qcloud-lib/helpers/insertCSS.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ const prefix = 'dynamic-inserted-css-'; /** diff --git a/web/console/lib/ff-redux/libs/qcloud-lib/helpers/isComponentOfType.ts b/web/console/lib/ff-redux/libs/qcloud-lib/helpers/isComponentOfType.ts index fdd0d06da..093f2fafd 100644 --- a/web/console/lib/ff-redux/libs/qcloud-lib/helpers/isComponentOfType.ts +++ b/web/console/lib/ff-redux/libs/qcloud-lib/helpers/isComponentOfType.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; export type ComponentType = diff --git a/web/console/lib/ff-redux/libs/qcloud-lib/helpers/isValidDomain.ts b/web/console/lib/ff-redux/libs/qcloud-lib/helpers/isValidDomain.ts index c36fb8aa3..1afff6a83 100644 --- a/web/console/lib/ff-redux/libs/qcloud-lib/helpers/isValidDomain.ts +++ b/web/console/lib/ff-redux/libs/qcloud-lib/helpers/isValidDomain.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export function isValidDomain(domain: string) { // regex from https://github.com/johnotander/domain-regex/blob/master/index.js return /^((?=[a-z0-9-]{1,63}\.)(xn--)?[a-z0-9]+(-[a-z0-9]+)*\.)+[a-z]{2,63}$/.test(domain); diff --git a/web/console/lib/ff-redux/libs/qcloud-lib/helpers/isValidIPAddress.ts b/web/console/lib/ff-redux/libs/qcloud-lib/helpers/isValidIPAddress.ts index ff37aa9f9..bbece54cb 100644 --- a/web/console/lib/ff-redux/libs/qcloud-lib/helpers/isValidIPAddress.ts +++ b/web/console/lib/ff-redux/libs/qcloud-lib/helpers/isValidIPAddress.ts @@ -1,4 +1,21 @@ -/** +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ +/** * 检查一个 IP 地址是否为合法的 IP 地址 * */ export function isValidIPAddress(ipAddress: string) { diff --git a/web/console/lib/ff-redux/libs/qcloud-lib/helpers/objectExtend.ts b/web/console/lib/ff-redux/libs/qcloud-lib/helpers/objectExtend.ts index 2fa4fa1c3..d25ca9ecf 100644 --- a/web/console/lib/ff-redux/libs/qcloud-lib/helpers/objectExtend.ts +++ b/web/console/lib/ff-redux/libs/qcloud-lib/helpers/objectExtend.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export function extend(target: T, source: S): T & S; export function extend(target: T, source1: S1, source2: S2): T & S1 & S2; export function extend(target: T, source1: S1, source2: S2): T & S1 & S2; diff --git a/web/console/lib/ff-redux/libs/qcloud-lib/helpers/objectFetch.ts b/web/console/lib/ff-redux/libs/qcloud-lib/helpers/objectFetch.ts index 039266986..4e32289fd 100644 --- a/web/console/lib/ff-redux/libs/qcloud-lib/helpers/objectFetch.ts +++ b/web/console/lib/ff-redux/libs/qcloud-lib/helpers/objectFetch.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ /** * 从 source 抓取 target 中定义的值 * diff --git a/web/console/lib/ff-redux/libs/qcloud-lib/helpers/objectMerge.ts b/web/console/lib/ff-redux/libs/qcloud-lib/helpers/objectMerge.ts index 84612e312..37f47c058 100644 --- a/web/console/lib/ff-redux/libs/qcloud-lib/helpers/objectMerge.ts +++ b/web/console/lib/ff-redux/libs/qcloud-lib/helpers/objectMerge.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ const deepExtend = require('deep-extend'); export function merge(target: T, source: S): T & S; diff --git a/web/console/lib/ff-redux/libs/qcloud-lib/helpers/otherMember.ts b/web/console/lib/ff-redux/libs/qcloud-lib/helpers/otherMember.ts index a30214409..e4a7cad7b 100644 --- a/web/console/lib/ff-redux/libs/qcloud-lib/helpers/otherMember.ts +++ b/web/console/lib/ff-redux/libs/qcloud-lib/helpers/otherMember.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ /** * 查找一个集合中不再排除集合里的部分 * diff --git a/web/console/lib/ff-redux/libs/qcloud-lib/helpers/pageList.ts b/web/console/lib/ff-redux/libs/qcloud-lib/helpers/pageList.ts index 0989498ce..b1634b40a 100644 --- a/web/console/lib/ff-redux/libs/qcloud-lib/helpers/pageList.ts +++ b/web/console/lib/ff-redux/libs/qcloud-lib/helpers/pageList.ts @@ -1,4 +1,21 @@ -import { PagingQuery } from '../../..'; +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ +import { PagingQuery } from '../../..'; export function pageList(list: T[], paging: PagingQuery): T[] { const start = (paging.pageIndex - 1) * paging.pageSize; diff --git a/web/console/lib/ff-redux/libs/qcloud-lib/helpers/reduceToPayload.ts b/web/console/lib/ff-redux/libs/qcloud-lib/helpers/reduceToPayload.ts index 68f25b37c..655b79fa2 100644 --- a/web/console/lib/ff-redux/libs/qcloud-lib/helpers/reduceToPayload.ts +++ b/web/console/lib/ff-redux/libs/qcloud-lib/helpers/reduceToPayload.ts @@ -1,4 +1,21 @@ -import { ReduxAction } from '../../../'; +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ +import { ReduxAction } from '../../../'; export function reduceToPayload(actionType: string | number, initialState: T) { return (state: T = initialState, action: ReduxAction) => { diff --git a/web/console/lib/ff-redux/libs/qcloud-lib/helpers/searchList.ts b/web/console/lib/ff-redux/libs/qcloud-lib/helpers/searchList.ts index 6ecc5832d..2d0b1ba65 100644 --- a/web/console/lib/ff-redux/libs/qcloud-lib/helpers/searchList.ts +++ b/web/console/lib/ff-redux/libs/qcloud-lib/helpers/searchList.ts @@ -1,4 +1,21 @@ -export function searchList(list: T[], search: string, ...fields: string[]): T[] { +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ +export function searchList(list: T[], search: string, ...fields: string[]): T[] { if (!search) { return list; } diff --git a/web/console/lib/ff-redux/libs/qcloud-lib/helpers/serialReducer.ts b/web/console/lib/ff-redux/libs/qcloud-lib/helpers/serialReducer.ts index 07bf59f02..452107f07 100644 --- a/web/console/lib/ff-redux/libs/qcloud-lib/helpers/serialReducer.ts +++ b/web/console/lib/ff-redux/libs/qcloud-lib/helpers/serialReducer.ts @@ -1,4 +1,21 @@ -export type Reducer = (state: TState, action: TAction) => TState; +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ +export type Reducer = (state: TState, action: TAction) => TState; export function serialReducer( first: Reducer, diff --git a/web/console/lib/ff-redux/libs/qcloud-lib/helpers/uuid.ts b/web/console/lib/ff-redux/libs/qcloud-lib/helpers/uuid.ts index ba121f7d9..27f0a4d24 100644 --- a/web/console/lib/ff-redux/libs/qcloud-lib/helpers/uuid.ts +++ b/web/console/lib/ff-redux/libs/qcloud-lib/helpers/uuid.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ let index = 10000; const timeLead = 1e12; export function uuid() { diff --git a/web/console/lib/ff-redux/libs/qcloud-lib/index.ts b/web/console/lib/ff-redux/libs/qcloud-lib/index.ts index f66b5f612..2e5c27101 100644 --- a/web/console/lib/ff-redux/libs/qcloud-lib/index.ts +++ b/web/console/lib/ff-redux/libs/qcloud-lib/index.ts @@ -1,4 +1,21 @@ -// export all helpers +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ +// export all helpers // export * from "./helpers/addComma"; export * from './helpers/appendFunction'; export * from './helpers/bindActionCreators'; diff --git a/web/console/lib/ff-redux/libs/qcloud-lib/types/BaseReactProps.ts b/web/console/lib/ff-redux/libs/qcloud-lib/types/BaseReactProps.ts index fd16ac51e..4b7bba920 100644 --- a/web/console/lib/ff-redux/libs/qcloud-lib/types/BaseReactProps.ts +++ b/web/console/lib/ff-redux/libs/qcloud-lib/types/BaseReactProps.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; /** diff --git a/web/console/lib/ff-redux/libs/qcloud-lib/types/DateQuery.ts b/web/console/lib/ff-redux/libs/qcloud-lib/types/DateQuery.ts index 310ac1a28..5eb6997e5 100644 --- a/web/console/lib/ff-redux/libs/qcloud-lib/types/DateQuery.ts +++ b/web/console/lib/ff-redux/libs/qcloud-lib/types/DateQuery.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export interface DateQuery { /** * 查询的起始日期 diff --git a/web/console/lib/ff-redux/libs/qcloud-lib/types/Identifiable.ts b/web/console/lib/ff-redux/libs/qcloud-lib/types/Identifiable.ts index 7944abaa6..96cc19101 100644 --- a/web/console/lib/ff-redux/libs/qcloud-lib/types/Identifiable.ts +++ b/web/console/lib/ff-redux/libs/qcloud-lib/types/Identifiable.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ /** * 要求主键的数据,一般用于数组 */ diff --git a/web/console/lib/ff-redux/libs/qcloud-lib/types/PagingQuery.ts b/web/console/lib/ff-redux/libs/qcloud-lib/types/PagingQuery.ts index 36cc0f9eb..5c907bdcf 100644 --- a/web/console/lib/ff-redux/libs/qcloud-lib/types/PagingQuery.ts +++ b/web/console/lib/ff-redux/libs/qcloud-lib/types/PagingQuery.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ /** 表示一次分页请求 */ export interface PagingQuery { /** 请求的页码,从 1 开始索引 */ diff --git a/web/console/lib/ff-redux/libs/qcloud-lib/types/RecordSet.ts b/web/console/lib/ff-redux/libs/qcloud-lib/types/RecordSet.ts index 7b4d7ae11..b9d18fd82 100644 --- a/web/console/lib/ff-redux/libs/qcloud-lib/types/RecordSet.ts +++ b/web/console/lib/ff-redux/libs/qcloud-lib/types/RecordSet.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export interface RecordSet { data?: ExtendParamsT; recordCount: number; diff --git a/web/console/lib/ff-redux/libs/qcloud-lib/types/ReduxAction.ts b/web/console/lib/ff-redux/libs/qcloud-lib/types/ReduxAction.ts index fed63fd6f..e96fc33af 100644 --- a/web/console/lib/ff-redux/libs/qcloud-lib/types/ReduxAction.ts +++ b/web/console/lib/ff-redux/libs/qcloud-lib/types/ReduxAction.ts @@ -1,4 +1,21 @@ -/** +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ +/** * FSA (https://github.com/acdlite/flux-standard-action) with generic type * */ export interface ReduxAction { diff --git a/web/console/lib/ff-redux/libs/qcloud-lib/types/ReduxConnectedProps.ts b/web/console/lib/ff-redux/libs/qcloud-lib/types/ReduxConnectedProps.ts index edf55fbf4..f3dd270d6 100644 --- a/web/console/lib/ff-redux/libs/qcloud-lib/types/ReduxConnectedProps.ts +++ b/web/console/lib/ff-redux/libs/qcloud-lib/types/ReduxConnectedProps.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export declare interface ReduxConnectedProps { dispatch?: Redux.Dispatch; } diff --git a/web/console/lib/ff-redux/libs/qcloud-lib/types/SortQuery.ts b/web/console/lib/ff-redux/libs/qcloud-lib/types/SortQuery.ts index 0ef71be08..423e4bfed 100644 --- a/web/console/lib/ff-redux/libs/qcloud-lib/types/SortQuery.ts +++ b/web/console/lib/ff-redux/libs/qcloud-lib/types/SortQuery.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export interface SortQuery { by?: string; desc?: boolean; diff --git a/web/console/lib/ff-redux/libs/qcloud-lib/utils/Children.ts b/web/console/lib/ff-redux/libs/qcloud-lib/utils/Children.ts index 2f6f997d9..9692a3600 100644 --- a/web/console/lib/ff-redux/libs/qcloud-lib/utils/Children.ts +++ b/web/console/lib/ff-redux/libs/qcloud-lib/utils/Children.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { isComponentOfType } from '../helpers/isComponentOfType'; diff --git a/web/console/lib/ff-redux/libs/qcloud-lib/utils/Selection.ts b/web/console/lib/ff-redux/libs/qcloud-lib/utils/Selection.ts index d422bc8ad..b459ae6c8 100644 --- a/web/console/lib/ff-redux/libs/qcloud-lib/utils/Selection.ts +++ b/web/console/lib/ff-redux/libs/qcloud-lib/utils/Selection.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ /** * @fileOverview * diff --git a/web/console/lib/ff-redux/libs/qcloud-lib/utils/Transition.ts b/web/console/lib/ff-redux/libs/qcloud-lib/utils/Transition.ts index 69d4984af..b671ac8ec 100644 --- a/web/console/lib/ff-redux/libs/qcloud-lib/utils/Transition.ts +++ b/web/console/lib/ff-redux/libs/qcloud-lib/utils/Transition.ts @@ -1,4 +1,21 @@ -import { insertCSS } from '../helpers/insertCSS'; +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ +import { insertCSS } from '../helpers/insertCSS'; import { hashObject } from '../helpers/hashObject'; /** diff --git a/web/console/lib/ff-redux/libs/qcloud-nmc/ambient/appUtil.d.ts b/web/console/lib/ff-redux/libs/qcloud-nmc/ambient/appUtil.d.ts index d4ec0cf1d..efc39ec19 100644 --- a/web/console/lib/ff-redux/libs/qcloud-nmc/ambient/appUtil.d.ts +++ b/web/console/lib/ff-redux/libs/qcloud-nmc/ambient/appUtil.d.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ declare namespace nmc { type RegionId = string | number; type ProjectId = string | number; diff --git a/web/console/lib/ff-redux/libs/qcloud-nmc/ambient/constants.d.ts b/web/console/lib/ff-redux/libs/qcloud-nmc/ambient/constants.d.ts index 25596a52b..87170407a 100644 --- a/web/console/lib/ff-redux/libs/qcloud-nmc/ambient/constants.d.ts +++ b/web/console/lib/ff-redux/libs/qcloud-nmc/ambient/constants.d.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ declare namespace nmc { interface Constants { /** RegionID => RegionKey */ diff --git a/web/console/lib/ff-redux/libs/qcloud-nmc/ambient/eventtarget.d.ts b/web/console/lib/ff-redux/libs/qcloud-nmc/ambient/eventtarget.d.ts index b910f5c81..662001ca6 100644 --- a/web/console/lib/ff-redux/libs/qcloud-nmc/ambient/eventtarget.d.ts +++ b/web/console/lib/ff-redux/libs/qcloud-nmc/ambient/eventtarget.d.ts @@ -1,4 +1,21 @@ -interface EventTarget { +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ +interface EventTarget { value?: any; checked?: boolean; } diff --git a/web/console/lib/ff-redux/libs/qcloud-nmc/ambient/manager.d.ts b/web/console/lib/ff-redux/libs/qcloud-nmc/ambient/manager.d.ts index 53cb3a44b..41e4bc582 100644 --- a/web/console/lib/ff-redux/libs/qcloud-nmc/ambient/manager.d.ts +++ b/web/console/lib/ff-redux/libs/qcloud-nmc/ambient/manager.d.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ declare namespace nmc { // region-id to region-name interface RegionMap { diff --git a/web/console/lib/ff-redux/libs/qcloud-nmc/ambient/net.d.ts b/web/console/lib/ff-redux/libs/qcloud-nmc/ambient/net.d.ts index 9065712d1..e0f2c2e78 100644 --- a/web/console/lib/ff-redux/libs/qcloud-nmc/ambient/net.d.ts +++ b/web/console/lib/ff-redux/libs/qcloud-nmc/ambient/net.d.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ /// /// declare namespace nmc { diff --git a/web/console/lib/ff-redux/libs/qcloud-nmc/ambient/nmc.d.ts b/web/console/lib/ff-redux/libs/qcloud-nmc/ambient/nmc.d.ts index 0a5eda0e5..fae53640c 100644 --- a/web/console/lib/ff-redux/libs/qcloud-nmc/ambient/nmc.d.ts +++ b/web/console/lib/ff-redux/libs/qcloud-nmc/ambient/nmc.d.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ /// /// /// diff --git a/web/console/lib/ff-redux/libs/qcloud-nmc/ambient/qccomponent.d.ts b/web/console/lib/ff-redux/libs/qcloud-nmc/ambient/qccomponent.d.ts index 16b6c6940..478ef7964 100644 --- a/web/console/lib/ff-redux/libs/qcloud-nmc/ambient/qccomponent.d.ts +++ b/web/console/lib/ff-redux/libs/qcloud-nmc/ambient/qccomponent.d.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ declare namespace nmc { export interface BeeInstance { $set(props: any): void; diff --git a/web/console/lib/ff-redux/libs/qcloud-nmc/ambient/router.d.ts b/web/console/lib/ff-redux/libs/qcloud-nmc/ambient/router.d.ts index 488e12dd2..2e2293458 100644 --- a/web/console/lib/ff-redux/libs/qcloud-nmc/ambient/router.d.ts +++ b/web/console/lib/ff-redux/libs/qcloud-nmc/ambient/router.d.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ declare namespace nmc { interface Router { /** diff --git a/web/console/lib/ff-redux/libs/qcloud-nmc/ambient/seajs.d.ts b/web/console/lib/ff-redux/libs/qcloud-nmc/ambient/seajs.d.ts index f11755559..95993e420 100644 --- a/web/console/lib/ff-redux/libs/qcloud-nmc/ambient/seajs.d.ts +++ b/web/console/lib/ff-redux/libs/qcloud-nmc/ambient/seajs.d.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ /// interface DefineInterface { diff --git a/web/console/lib/ff-redux/libs/qcloud-nmc/ambient/tips.d.ts b/web/console/lib/ff-redux/libs/qcloud-nmc/ambient/tips.d.ts index 5173c4fa6..f3960c702 100644 --- a/web/console/lib/ff-redux/libs/qcloud-nmc/ambient/tips.d.ts +++ b/web/console/lib/ff-redux/libs/qcloud-nmc/ambient/tips.d.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ declare namespace nmc { interface Tips { /** diff --git a/web/console/lib/ff-redux/libs/qcloud-nmc/index.ts b/web/console/lib/ff-redux/libs/qcloud-nmc/index.ts index da1429fb3..de0a9b6f8 100644 --- a/web/console/lib/ff-redux/libs/qcloud-nmc/index.ts +++ b/web/console/lib/ff-redux/libs/qcloud-nmc/index.ts @@ -1,4 +1,21 @@ -export * from './utils/CloudAPI'; +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ +export * from './utils/CloudAPI'; export * from './utils/CVM'; export * from './utils/Entry'; export * from './utils/Page'; diff --git a/web/console/lib/ff-redux/libs/qcloud-nmc/utils/CVM.ts b/web/console/lib/ff-redux/libs/qcloud-nmc/utils/CVM.ts index da095c8e5..a12d3676d 100644 --- a/web/console/lib/ff-redux/libs/qcloud-nmc/utils/CVM.ts +++ b/web/console/lib/ff-redux/libs/qcloud-nmc/utils/CVM.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export interface Subnet { [index: number]: string; } diff --git a/web/console/lib/ff-redux/libs/qcloud-nmc/utils/CloudAPI.ts b/web/console/lib/ff-redux/libs/qcloud-nmc/utils/CloudAPI.ts index 569fa14e6..74bb7af4d 100644 --- a/web/console/lib/ff-redux/libs/qcloud-nmc/utils/CloudAPI.ts +++ b/web/console/lib/ff-redux/libs/qcloud-nmc/utils/CloudAPI.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { OperationResult } from '../../../'; import { extend } from '../../qcloud-lib'; diff --git a/web/console/lib/ff-redux/libs/qcloud-nmc/utils/Entry.ts b/web/console/lib/ff-redux/libs/qcloud-nmc/utils/Entry.ts index 005006641..e7e2a7d3e 100644 --- a/web/console/lib/ff-redux/libs/qcloud-nmc/utils/Entry.ts +++ b/web/console/lib/ff-redux/libs/qcloud-nmc/utils/Entry.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { Page } from './Page'; /* eslint-disable */ diff --git a/web/console/lib/ff-redux/libs/qcloud-nmc/utils/LoadBalance.ts b/web/console/lib/ff-redux/libs/qcloud-nmc/utils/LoadBalance.ts index 900543657..a6abcc0ec 100644 --- a/web/console/lib/ff-redux/libs/qcloud-nmc/utils/LoadBalance.ts +++ b/web/console/lib/ff-redux/libs/qcloud-nmc/utils/LoadBalance.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export interface VipInfoList { vip: string; ispId: number; diff --git a/web/console/lib/ff-redux/libs/qcloud-nmc/utils/Page.ts b/web/console/lib/ff-redux/libs/qcloud-nmc/utils/Page.ts index 5c0511b0c..518667961 100644 --- a/web/console/lib/ff-redux/libs/qcloud-nmc/utils/Page.ts +++ b/web/console/lib/ff-redux/libs/qcloud-nmc/utils/Page.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import * as ReactDom from 'react-dom'; diff --git a/web/console/lib/ff-redux/libs/qcloud-nmc/utils/Project.ts b/web/console/lib/ff-redux/libs/qcloud-nmc/utils/Project.ts index 9e802bdf5..3340ca3a7 100644 --- a/web/console/lib/ff-redux/libs/qcloud-nmc/utils/Project.ts +++ b/web/console/lib/ff-redux/libs/qcloud-nmc/utils/Project.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ const manager = seajs.require('manager'); const appUtil = seajs.require('appUtil'); diff --git a/web/console/lib/ff-redux/libs/qcloud-nmc/utils/Region.ts b/web/console/lib/ff-redux/libs/qcloud-nmc/utils/Region.ts index 47dcf64bf..d1aca91f1 100644 --- a/web/console/lib/ff-redux/libs/qcloud-nmc/utils/Region.ts +++ b/web/console/lib/ff-redux/libs/qcloud-nmc/utils/Region.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { findByCondition } from '../../qcloud-lib'; const manager = seajs.require('manager'); diff --git a/web/console/lib/ff-redux/libs/qcloud-nmc/utils/Router.ts b/web/console/lib/ff-redux/libs/qcloud-nmc/utils/Router.ts index 1ed59b592..5eef8718d 100644 --- a/web/console/lib/ff-redux/libs/qcloud-nmc/utils/Router.ts +++ b/web/console/lib/ff-redux/libs/qcloud-nmc/utils/Router.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; /** * router for nmc diff --git a/web/console/lib/ff-redux/libs/qcloud-nmc/utils/Whitelist.ts b/web/console/lib/ff-redux/libs/qcloud-nmc/utils/Whitelist.ts index 08ab6db6f..534f4471e 100644 --- a/web/console/lib/ff-redux/libs/qcloud-nmc/utils/Whitelist.ts +++ b/web/console/lib/ff-redux/libs/qcloud-nmc/utils/Whitelist.ts @@ -1,4 +1,21 @@ -const manager = seajs.require('manager'); +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ +const manager = seajs.require('manager'); type Callback = (data: T) => any; diff --git a/web/console/lib/ff-redux/libs/qcloud-redux-fetcher/index.ts b/web/console/lib/ff-redux/libs/qcloud-redux-fetcher/index.ts index 6d753e864..02ed26983 100644 --- a/web/console/lib/ff-redux/libs/qcloud-redux-fetcher/index.ts +++ b/web/console/lib/ff-redux/libs/qcloud-redux-fetcher/index.ts @@ -1 +1,18 @@ -export * from './lib/Fetcher'; +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ +export * from './lib/Fetcher'; diff --git a/web/console/lib/ff-redux/libs/qcloud-redux-fetcher/lib/Fetcher.ts b/web/console/lib/ff-redux/libs/qcloud-redux-fetcher/lib/Fetcher.ts index a5db21e35..4c8b3e473 100644 --- a/web/console/lib/ff-redux/libs/qcloud-redux-fetcher/lib/Fetcher.ts +++ b/web/console/lib/ff-redux/libs/qcloud-redux-fetcher/lib/Fetcher.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { Dispatch } from 'redux'; import { ReduxAction } from '../../../'; diff --git a/web/console/lib/ff-redux/libs/qcloud-redux-query/index.ts b/web/console/lib/ff-redux/libs/qcloud-redux-query/index.ts index 1c45417b6..f50b06ac3 100644 --- a/web/console/lib/ff-redux/libs/qcloud-redux-query/index.ts +++ b/web/console/lib/ff-redux/libs/qcloud-redux-query/index.ts @@ -1 +1,18 @@ -export * from './lib/Query'; +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ +export * from './lib/Query'; diff --git a/web/console/lib/ff-redux/libs/qcloud-redux-query/lib/Query.ts b/web/console/lib/ff-redux/libs/qcloud-redux-query/lib/Query.ts index 2fcf2c501..ca30f92c4 100644 --- a/web/console/lib/ff-redux/libs/qcloud-redux-query/lib/Query.ts +++ b/web/console/lib/ff-redux/libs/qcloud-redux-query/lib/Query.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { Dispatch } from 'redux'; import { extend, merge } from '../../qcloud-lib'; import { QueryState, PagingQuery, ReduxAction, ActionTypesEnum } from '../../../src/base'; diff --git a/web/console/lib/ff-redux/libs/qcloud-redux-workflow/index.ts b/web/console/lib/ff-redux/libs/qcloud-redux-workflow/index.ts index fd4e95479..ebc5dff13 100644 --- a/web/console/lib/ff-redux/libs/qcloud-redux-workflow/index.ts +++ b/web/console/lib/ff-redux/libs/qcloud-redux-workflow/index.ts @@ -1 +1,18 @@ -export * from './lib/Workflow'; +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ +export * from './lib/Workflow'; diff --git a/web/console/lib/ff-redux/libs/qcloud-redux-workflow/lib/Workflow.ts b/web/console/lib/ff-redux/libs/qcloud-redux-workflow/lib/Workflow.ts index 6ffa20dee..874f67a72 100644 --- a/web/console/lib/ff-redux/libs/qcloud-redux-workflow/lib/Workflow.ts +++ b/web/console/lib/ff-redux/libs/qcloud-redux-workflow/lib/Workflow.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ /** * @author techirdliu@tencent.com * diff --git a/web/console/lib/ff-redux/src/base/Action.ts b/web/console/lib/ff-redux/src/base/Action.ts index 0769e5a26..bce009349 100644 --- a/web/console/lib/ff-redux/src/base/Action.ts +++ b/web/console/lib/ff-redux/src/base/Action.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { Dispatch } from 'redux'; import { diff --git a/web/console/lib/ff-redux/src/base/Model/ActionTypesEnum.ts b/web/console/lib/ff-redux/src/base/Model/ActionTypesEnum.ts index f78141d4d..de3b0f3c6 100644 --- a/web/console/lib/ff-redux/src/base/Model/ActionTypesEnum.ts +++ b/web/console/lib/ff-redux/src/base/Model/ActionTypesEnum.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export enum ActionTypesEnum { ChangeKeyword = 'ChangeKeyword', PerformSearch = 'PerformSearch', diff --git a/web/console/lib/ff-redux/src/base/Model/DataType.ts b/web/console/lib/ff-redux/src/base/Model/DataType.ts index 1985b5852..426ac22f1 100644 --- a/web/console/lib/ff-redux/src/base/Model/DataType.ts +++ b/web/console/lib/ff-redux/src/base/Model/DataType.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export enum DataType { List = 'List', Object = 'Object' diff --git a/web/console/lib/ff-redux/src/base/Model/FetchOptions.ts b/web/console/lib/ff-redux/src/base/Model/FetchOptions.ts index 0d9a61f99..4986030db 100644 --- a/web/console/lib/ff-redux/src/base/Model/FetchOptions.ts +++ b/web/console/lib/ff-redux/src/base/Model/FetchOptions.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export interface FetchOptions { /** * 是否要求强制无缓存拉取 diff --git a/web/console/lib/ff-redux/src/base/Model/FetchState.ts b/web/console/lib/ff-redux/src/base/Model/FetchState.ts index 0fb4f7a48..bb1349fbc 100644 --- a/web/console/lib/ff-redux/src/base/Model/FetchState.ts +++ b/web/console/lib/ff-redux/src/base/Model/FetchState.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export enum FetchState { /** indicates the data is up to date and ready to use */ Ready = 'Ready', diff --git a/web/console/lib/ff-redux/src/base/Model/FetcherPayload.ts b/web/console/lib/ff-redux/src/base/Model/FetcherPayload.ts index 86230f0fd..eafb0b799 100644 --- a/web/console/lib/ff-redux/src/base/Model/FetcherPayload.ts +++ b/web/console/lib/ff-redux/src/base/Model/FetcherPayload.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { FetcherTrigger } from './FetcherTrigger'; import { ReduxAction } from './ReduxAction'; diff --git a/web/console/lib/ff-redux/src/base/Model/FetcherState.ts b/web/console/lib/ff-redux/src/base/Model/FetcherState.ts index 9781b605e..6bc808c06 100644 --- a/web/console/lib/ff-redux/src/base/Model/FetcherState.ts +++ b/web/console/lib/ff-redux/src/base/Model/FetcherState.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { FetchState } from './FetchState'; import { RecordSet } from './RecordSet'; diff --git a/web/console/lib/ff-redux/src/base/Model/FetcherTrigger.ts b/web/console/lib/ff-redux/src/base/Model/FetcherTrigger.ts index 54600dbdb..c866b37f9 100644 --- a/web/console/lib/ff-redux/src/base/Model/FetcherTrigger.ts +++ b/web/console/lib/ff-redux/src/base/Model/FetcherTrigger.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export enum FetcherTrigger { /** * trigger a load operation diff --git a/web/console/lib/ff-redux/src/base/Model/Identifiable.ts b/web/console/lib/ff-redux/src/base/Model/Identifiable.ts index 7944abaa6..96cc19101 100644 --- a/web/console/lib/ff-redux/src/base/Model/Identifiable.ts +++ b/web/console/lib/ff-redux/src/base/Model/Identifiable.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ /** * 要求主键的数据,一般用于数组 */ diff --git a/web/console/lib/ff-redux/src/base/Model/PagingQuery.ts b/web/console/lib/ff-redux/src/base/Model/PagingQuery.ts index 276ee682b..c5352053b 100644 --- a/web/console/lib/ff-redux/src/base/Model/PagingQuery.ts +++ b/web/console/lib/ff-redux/src/base/Model/PagingQuery.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ /** 表示一次分页请求 */ export interface PagingQuery { /** 请求的页码,从 1 开始索引 */ diff --git a/web/console/lib/ff-redux/src/base/Model/QueryState.ts b/web/console/lib/ff-redux/src/base/Model/QueryState.ts index 06b84521a..72175307f 100644 --- a/web/console/lib/ff-redux/src/base/Model/QueryState.ts +++ b/web/console/lib/ff-redux/src/base/Model/QueryState.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { PagingQuery } from './PagingQuery'; import { SortQuery } from './SortQuery'; diff --git a/web/console/lib/ff-redux/src/base/Model/RecordSet.ts b/web/console/lib/ff-redux/src/base/Model/RecordSet.ts index 2a0cdac2c..48ff51409 100644 --- a/web/console/lib/ff-redux/src/base/Model/RecordSet.ts +++ b/web/console/lib/ff-redux/src/base/Model/RecordSet.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export interface RecordSet { data?: ExtendParamsT; recordCount: number; diff --git a/web/console/lib/ff-redux/src/base/Model/ReduxAction.ts b/web/console/lib/ff-redux/src/base/Model/ReduxAction.ts index fed63fd6f..e96fc33af 100644 --- a/web/console/lib/ff-redux/src/base/Model/ReduxAction.ts +++ b/web/console/lib/ff-redux/src/base/Model/ReduxAction.ts @@ -1,4 +1,21 @@ -/** +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ +/** * FSA (https://github.com/acdlite/flux-standard-action) with generic type * */ export interface ReduxAction { diff --git a/web/console/lib/ff-redux/src/base/Model/SortQuery.ts b/web/console/lib/ff-redux/src/base/Model/SortQuery.ts index 0ef71be08..423e4bfed 100644 --- a/web/console/lib/ff-redux/src/base/Model/SortQuery.ts +++ b/web/console/lib/ff-redux/src/base/Model/SortQuery.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export interface SortQuery { by?: string; desc?: boolean; diff --git a/web/console/lib/ff-redux/src/base/Model/index.ts b/web/console/lib/ff-redux/src/base/Model/index.ts index 7a97a1636..404f04be5 100644 --- a/web/console/lib/ff-redux/src/base/Model/index.ts +++ b/web/console/lib/ff-redux/src/base/Model/index.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export * from './ActionTypesEnum'; export * from './DataType'; export * from './FetcherPayload'; diff --git a/web/console/lib/ff-redux/src/base/Reducer.ts b/web/console/lib/ff-redux/src/base/Reducer.ts index 7ad4a39ae..ea4a93e32 100644 --- a/web/console/lib/ff-redux/src/base/Reducer.ts +++ b/web/console/lib/ff-redux/src/base/Reducer.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { extend, merge } from '../../libs/qcloud-lib'; import { ActionTypesEnum, diff --git a/web/console/lib/ff-redux/src/base/index.ts b/web/console/lib/ff-redux/src/base/index.ts index f78f2830a..5eff9cac6 100644 --- a/web/console/lib/ff-redux/src/base/index.ts +++ b/web/console/lib/ff-redux/src/base/index.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export * from './Reducer'; export * from './Action'; export * from './Model'; diff --git a/web/console/lib/ff-redux/src/index.ts b/web/console/lib/ff-redux/src/index.ts index 3cb68ba18..b697083c1 100644 --- a/web/console/lib/ff-redux/src/index.ts +++ b/web/console/lib/ff-redux/src/index.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export * from './base'; export * from './list'; export * from './object'; diff --git a/web/console/lib/ff-redux/src/list/Action.ts b/web/console/lib/ff-redux/src/list/Action.ts index e101d4cb1..26b9757b4 100644 --- a/web/console/lib/ff-redux/src/list/Action.ts +++ b/web/console/lib/ff-redux/src/list/Action.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { extend } from '../../libs/qcloud-lib'; import { BaseAction, createBaseAction, FetcherState, FetchOptions, FetchState, QueryState, RecordSet } from '../base'; import { createFFListActionType } from './ActionType'; diff --git a/web/console/lib/ff-redux/src/list/ActionType.ts b/web/console/lib/ff-redux/src/list/ActionType.ts index e989f8fc0..8dbf3e5cb 100644 --- a/web/console/lib/ff-redux/src/list/ActionType.ts +++ b/web/console/lib/ff-redux/src/list/ActionType.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export enum FFListType { Base = 'Base', Fetch = 'Fetch', diff --git a/web/console/lib/ff-redux/src/list/Model.ts b/web/console/lib/ff-redux/src/list/Model.ts index 2a855137a..8ccdc344c 100644 --- a/web/console/lib/ff-redux/src/list/Model.ts +++ b/web/console/lib/ff-redux/src/list/Model.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { FetcherState, QueryState, RecordSet } from '../base/Model'; export type FFListModel = { diff --git a/web/console/lib/ff-redux/src/list/Reducer.ts b/web/console/lib/ff-redux/src/list/Reducer.ts index 5851ece1f..cabec1818 100644 --- a/web/console/lib/ff-redux/src/list/Reducer.ts +++ b/web/console/lib/ff-redux/src/list/Reducer.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { combineReducers } from 'redux'; import { reduceToPayload } from '../../libs/qcloud-lib'; diff --git a/web/console/lib/ff-redux/src/list/index.ts b/web/console/lib/ff-redux/src/list/index.ts index 04430516d..149dcb46b 100644 --- a/web/console/lib/ff-redux/src/list/index.ts +++ b/web/console/lib/ff-redux/src/list/index.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export * from './ActionType'; export * from './Model'; export * from './Reducer'; diff --git a/web/console/lib/ff-redux/src/object/Action.ts b/web/console/lib/ff-redux/src/object/Action.ts index ea10a57dc..a5426da4e 100644 --- a/web/console/lib/ff-redux/src/object/Action.ts +++ b/web/console/lib/ff-redux/src/object/Action.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { FetcherState, FetchOptions, QueryState } from '../../'; import { extend } from '../../libs/qcloud-lib'; import { createFFObjectActionType } from './ActionType'; diff --git a/web/console/lib/ff-redux/src/object/ActionType.ts b/web/console/lib/ff-redux/src/object/ActionType.ts index 4f016a2f3..a02439078 100644 --- a/web/console/lib/ff-redux/src/object/ActionType.ts +++ b/web/console/lib/ff-redux/src/object/ActionType.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export enum FFObjectType { Base = 'Base', Fetch = 'Fetch', diff --git a/web/console/lib/ff-redux/src/object/Model.ts b/web/console/lib/ff-redux/src/object/Model.ts index 9b5b195ed..94f90d19b 100644 --- a/web/console/lib/ff-redux/src/object/Model.ts +++ b/web/console/lib/ff-redux/src/object/Model.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { FetcherState, QueryState } from '../base/Model'; export type FFObjectModel = { diff --git a/web/console/lib/ff-redux/src/object/Reducer.ts b/web/console/lib/ff-redux/src/object/Reducer.ts index 0913e94eb..bbaab9a59 100644 --- a/web/console/lib/ff-redux/src/object/Reducer.ts +++ b/web/console/lib/ff-redux/src/object/Reducer.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { combineReducers } from 'redux'; import { createFFObjectActionType } from './ActionType'; diff --git a/web/console/lib/ff-redux/src/object/index.ts b/web/console/lib/ff-redux/src/object/index.ts index 04430516d..149dcb46b 100644 --- a/web/console/lib/ff-redux/src/object/index.ts +++ b/web/console/lib/ff-redux/src/object/index.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export * from './ActionType'; export * from './Model'; export * from './Reducer'; diff --git a/web/console/lib/ff-redux/utils/extend.ts b/web/console/lib/ff-redux/utils/extend.ts index 2fa4fa1c3..d25ca9ecf 100644 --- a/web/console/lib/ff-redux/utils/extend.ts +++ b/web/console/lib/ff-redux/utils/extend.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export function extend(target: T, source: S): T & S; export function extend(target: T, source1: S1, source2: S2): T & S1 & S2; export function extend(target: T, source1: S1, source2: S2): T & S1 & S2; diff --git a/web/console/lib/ff-redux/utils/index.ts b/web/console/lib/ff-redux/utils/index.ts index 3852acb7e..eae45d8fc 100644 --- a/web/console/lib/ff-redux/utils/index.ts +++ b/web/console/lib/ff-redux/utils/index.ts @@ -1,2 +1,19 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export { extend } from './extend'; export { reduceToPayload, ReduxAction } from './reduceToPayload'; diff --git a/web/console/lib/ff-redux/utils/reduceToPayload.ts b/web/console/lib/ff-redux/utils/reduceToPayload.ts index 42ef9f76e..bc75975c0 100644 --- a/web/console/lib/ff-redux/utils/reduceToPayload.ts +++ b/web/console/lib/ff-redux/utils/reduceToPayload.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export interface ReduxAction { /** * The action type, the `number` type is to support enum. diff --git a/web/console/lib/ff-validator/index.ts b/web/console/lib/ff-validator/index.ts index d26f663d0..d7bf85afc 100644 --- a/web/console/lib/ff-validator/index.ts +++ b/web/console/lib/ff-validator/index.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export { ValidateSchema, ValidatorStatusEnum, diff --git a/web/console/lib/ff-validator/src/Action.ts b/web/console/lib/ff-validator/src/Action.ts index 6f28c02d0..469375516 100644 --- a/web/console/lib/ff-validator/src/Action.ts +++ b/web/console/lib/ff-validator/src/Action.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { ValidateSchema, RuleTypeEnum, diff --git a/web/console/lib/ff-validator/src/ActionType.ts b/web/console/lib/ff-validator/src/ActionType.ts index cc58f7d75..b5347bc6a 100644 --- a/web/console/lib/ff-validator/src/ActionType.ts +++ b/web/console/lib/ff-validator/src/ActionType.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ /** * 获取ActionType * @param formKey: string 表单的名称 diff --git a/web/console/lib/ff-validator/src/Model.ts b/web/console/lib/ff-validator/src/Model.ts index 149923170..15ac4b907 100644 --- a/web/console/lib/ff-validator/src/Model.ts +++ b/web/console/lib/ff-validator/src/Model.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { Validation } from './Validation'; export interface ValidatorModel { diff --git a/web/console/lib/ff-validator/src/Reducer.ts b/web/console/lib/ff-validator/src/Reducer.ts index aacee944b..2da296511 100644 --- a/web/console/lib/ff-validator/src/Reducer.ts +++ b/web/console/lib/ff-validator/src/Reducer.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { ValidateSchema } from './Model'; import { Reducer } from 'redux'; import { reduceToPayload } from './utils/reduceToPayload'; diff --git a/web/console/lib/ff-validator/src/Validation.ts b/web/console/lib/ff-validator/src/Validation.ts index 59c085b67..4508d52d0 100644 --- a/web/console/lib/ff-validator/src/Validation.ts +++ b/web/console/lib/ff-validator/src/Validation.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export interface Validation { /**验证状态 0: 初始状态;1:校验通过;2:校验不通过;*/ status?: number; diff --git a/web/console/lib/ff-validator/src/utils/cloneDeep.ts b/web/console/lib/ff-validator/src/utils/cloneDeep.ts index 205dd6958..16165c3ac 100644 --- a/web/console/lib/ff-validator/src/utils/cloneDeep.ts +++ b/web/console/lib/ff-validator/src/utils/cloneDeep.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ /* eslint-disable */ export const cloneDeep = function(item) { if (!item) { diff --git a/web/console/lib/ff-validator/src/utils/getFirstBracketName.ts b/web/console/lib/ff-validator/src/utils/getFirstBracketName.ts index beaaf7c52..ed25402a9 100644 --- a/web/console/lib/ff-validator/src/utils/getFirstBracketName.ts +++ b/web/console/lib/ff-validator/src/utils/getFirstBracketName.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ /** * 获取bracket的名称 * @return string diff --git a/web/console/lib/ff-validator/src/utils/getMessage.ts b/web/console/lib/ff-validator/src/utils/getMessage.ts index 0080a7c71..9bbdac436 100644 --- a/web/console/lib/ff-validator/src/utils/getMessage.ts +++ b/web/console/lib/ff-validator/src/utils/getMessage.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { ValidatorModel } from '../Model'; /** diff --git a/web/console/lib/ff-validator/src/utils/getValue.ts b/web/console/lib/ff-validator/src/utils/getValue.ts index 29202c76d..4f98cbc47 100644 --- a/web/console/lib/ff-validator/src/utils/getValue.ts +++ b/web/console/lib/ff-validator/src/utils/getValue.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { ValidatorModel, ValidatorStatusEnum } from '../Model'; import { Validation } from '../Validation'; diff --git a/web/console/lib/ff-validator/src/utils/index.ts b/web/console/lib/ff-validator/src/utils/index.ts index b4f25c6e4..bc6f207a3 100644 --- a/web/console/lib/ff-validator/src/utils/index.ts +++ b/web/console/lib/ff-validator/src/utils/index.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export { getValue } from './getValue'; export { isValid } from './isValid'; export { reduceToPayload } from './reduceToPayload'; diff --git a/web/console/lib/ff-validator/src/utils/isContainBracket.ts b/web/console/lib/ff-validator/src/utils/isContainBracket.ts index 3fb05c223..9479c5eb7 100644 --- a/web/console/lib/ff-validator/src/utils/isContainBracket.ts +++ b/web/console/lib/ff-validator/src/utils/isContainBracket.ts @@ -1,2 +1,19 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ /** 格式化传入的vkey,将方括号当中的数字去除 */ export const formatVkeyRegExp: RegExp = /\[(\d*)\]/g; diff --git a/web/console/lib/ff-validator/src/utils/isValid.ts b/web/console/lib/ff-validator/src/utils/isValid.ts index 4c4692498..882b2d5e3 100644 --- a/web/console/lib/ff-validator/src/utils/isValid.ts +++ b/web/console/lib/ff-validator/src/utils/isValid.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { ValidatorModel, ValidatorStatusEnum } from '../Model'; /** diff --git a/web/console/lib/ff-validator/src/utils/reduceToPayload.ts b/web/console/lib/ff-validator/src/utils/reduceToPayload.ts index b34edf70b..3f98b7eb9 100644 --- a/web/console/lib/ff-validator/src/utils/reduceToPayload.ts +++ b/web/console/lib/ff-validator/src/utils/reduceToPayload.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export interface ReduxAction { /** * The action type, the `number` type is to support enum. diff --git a/web/console/src/modules/addon/WebAPI.ts b/web/console/src/modules/addon/WebAPI.ts index eb68b8cef..939e16374 100644 --- a/web/console/src/modules/addon/WebAPI.ts +++ b/web/console/src/modules/addon/WebAPI.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { RecordSet, uuid } from '@tencent/ff-redux'; import { t, Trans } from '@tencent/tea-app/lib/i18n'; diff --git a/web/console/src/modules/addon/actions/addonActions.ts b/web/console/src/modules/addon/actions/addonActions.ts index ba8e2f030..0a0b870c0 100644 --- a/web/console/src/modules/addon/actions/addonActions.ts +++ b/web/console/src/modules/addon/actions/addonActions.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { createFFListActions, extend } from '@tencent/ff-redux'; import { resourceConfig } from '../../../../config'; diff --git a/web/console/src/modules/addon/actions/addonEditActions.ts b/web/console/src/modules/addon/actions/addonEditActions.ts index 6926988fd..e92ce5104 100644 --- a/web/console/src/modules/addon/actions/addonEditActions.ts +++ b/web/console/src/modules/addon/actions/addonEditActions.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { ReduxAction } from '@tencent/ff-redux'; import * as ActionType from '../constants/ActionType'; diff --git a/web/console/src/modules/addon/actions/clusterActions.ts b/web/console/src/modules/addon/actions/clusterActions.ts index 82c8968b2..9da71eaae 100644 --- a/web/console/src/modules/addon/actions/clusterActions.ts +++ b/web/console/src/modules/addon/actions/clusterActions.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { createFFListActions, extend } from '@tencent/ff-redux'; import { resourceConfig } from '../../../../config'; diff --git a/web/console/src/modules/addon/actions/index.ts b/web/console/src/modules/addon/actions/index.ts index 2a8d7a625..bb94f2021 100644 --- a/web/console/src/modules/addon/actions/index.ts +++ b/web/console/src/modules/addon/actions/index.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { regionActions } from './regionActions'; import { clusterActions } from './clusterActions'; import { addonActions } from './addonActions'; diff --git a/web/console/src/modules/addon/actions/peEditActions.ts b/web/console/src/modules/addon/actions/peEditActions.ts index 64e257f24..db58e8d83 100644 --- a/web/console/src/modules/addon/actions/peEditActions.ts +++ b/web/console/src/modules/addon/actions/peEditActions.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { ReduxAction } from '@tencent/ff-redux'; import { includes } from '../../common'; diff --git a/web/console/src/modules/addon/actions/regionActions.ts b/web/console/src/modules/addon/actions/regionActions.ts index baf6d5d12..0d63391cb 100644 --- a/web/console/src/modules/addon/actions/regionActions.ts +++ b/web/console/src/modules/addon/actions/regionActions.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { createFFListActions, extend } from '@tencent/ff-redux'; import { assureRegion, getRegionId, setRegionId } from '../../../../helpers'; diff --git a/web/console/src/modules/addon/actions/validatorActions.ts b/web/console/src/modules/addon/actions/validatorActions.ts index 5e75a6692..06ec07e78 100644 --- a/web/console/src/modules/addon/actions/validatorActions.ts +++ b/web/console/src/modules/addon/actions/validatorActions.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { RootState, PeEdit, AddonEdit } from '../models'; import * as ActionType from '../constants//ActionType'; import { t, Trans } from '@tencent/tea-app/lib/i18n'; diff --git a/web/console/src/modules/addon/actions/workflowActions.ts b/web/console/src/modules/addon/actions/workflowActions.ts index cd35fcb89..1b77785d8 100644 --- a/web/console/src/modules/addon/actions/workflowActions.ts +++ b/web/console/src/modules/addon/actions/workflowActions.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { generateWorkflowActionCreator, isSuccessWorkflow, OperationTrigger } from '@tencent/ff-redux'; diff --git a/web/console/src/modules/addon/components/AddonActionPanel.tsx b/web/console/src/modules/addon/components/AddonActionPanel.tsx index a79c08f2a..8a27f3a54 100644 --- a/web/console/src/modules/addon/components/AddonActionPanel.tsx +++ b/web/console/src/modules/addon/components/AddonActionPanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect } from 'react-redux'; diff --git a/web/console/src/modules/addon/components/AddonApp.tsx b/web/console/src/modules/addon/components/AddonApp.tsx index f68b4abdf..e6dce240b 100644 --- a/web/console/src/modules/addon/components/AddonApp.tsx +++ b/web/console/src/modules/addon/components/AddonApp.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect, Provider } from 'react-redux'; diff --git a/web/console/src/modules/addon/components/AddonDeleteDialog.tsx b/web/console/src/modules/addon/components/AddonDeleteDialog.tsx index 934d6879b..87a71927e 100644 --- a/web/console/src/modules/addon/components/AddonDeleteDialog.tsx +++ b/web/console/src/modules/addon/components/AddonDeleteDialog.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect } from 'react-redux'; diff --git a/web/console/src/modules/addon/components/AddonDetail.tsx b/web/console/src/modules/addon/components/AddonDetail.tsx index 327516718..52e8dee24 100644 --- a/web/console/src/modules/addon/components/AddonDetail.tsx +++ b/web/console/src/modules/addon/components/AddonDetail.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect } from 'react-redux'; diff --git a/web/console/src/modules/addon/components/AddonDetailHeadPanel.tsx b/web/console/src/modules/addon/components/AddonDetailHeadPanel.tsx index 7e87b219a..129263b87 100644 --- a/web/console/src/modules/addon/components/AddonDetailHeadPanel.tsx +++ b/web/console/src/modules/addon/components/AddonDetailHeadPanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect } from 'react-redux'; diff --git a/web/console/src/modules/addon/components/AddonDetailPanel.tsx b/web/console/src/modules/addon/components/AddonDetailPanel.tsx index d67255e89..0f777c4da 100644 --- a/web/console/src/modules/addon/components/AddonDetailPanel.tsx +++ b/web/console/src/modules/addon/components/AddonDetailPanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect } from 'react-redux'; diff --git a/web/console/src/modules/addon/components/AddonHeadPanel.tsx b/web/console/src/modules/addon/components/AddonHeadPanel.tsx index 3d8a8ccaf..df441d35c 100644 --- a/web/console/src/modules/addon/components/AddonHeadPanel.tsx +++ b/web/console/src/modules/addon/components/AddonHeadPanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect } from 'react-redux'; diff --git a/web/console/src/modules/addon/components/AddonSubpageHeadPanel.tsx b/web/console/src/modules/addon/components/AddonSubpageHeadPanel.tsx index 0c8caad52..8aa8a79f4 100644 --- a/web/console/src/modules/addon/components/AddonSubpageHeadPanel.tsx +++ b/web/console/src/modules/addon/components/AddonSubpageHeadPanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { Justify, Icon, Text } from '@tencent/tea-component'; import { router } from '../router'; diff --git a/web/console/src/modules/addon/components/AddonTablePanel.tsx b/web/console/src/modules/addon/components/AddonTablePanel.tsx index 0784f21a2..fbe5fd574 100644 --- a/web/console/src/modules/addon/components/AddonTablePanel.tsx +++ b/web/console/src/modules/addon/components/AddonTablePanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect } from 'react-redux'; diff --git a/web/console/src/modules/addon/components/EditAddonPanel.tsx b/web/console/src/modules/addon/components/EditAddonPanel.tsx index 73202efb8..bc9e3d9b7 100644 --- a/web/console/src/modules/addon/components/EditAddonPanel.tsx +++ b/web/console/src/modules/addon/components/EditAddonPanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect } from 'react-redux'; diff --git a/web/console/src/modules/addon/components/EditPersistentEventPanel.tsx b/web/console/src/modules/addon/components/EditPersistentEventPanel.tsx index 891b18281..c97899800 100644 --- a/web/console/src/modules/addon/components/EditPersistentEventPanel.tsx +++ b/web/console/src/modules/addon/components/EditPersistentEventPanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect } from 'react-redux'; diff --git a/web/console/src/modules/addon/constants/ActionType.ts b/web/console/src/modules/addon/constants/ActionType.ts index 6b0347410..1a6dfe7e4 100644 --- a/web/console/src/modules/addon/constants/ActionType.ts +++ b/web/console/src/modules/addon/constants/ActionType.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export const ClusterVersion = 'ClusterVersion'; /** ======================== start 开通addon相关的 ======================= */ diff --git a/web/console/src/modules/addon/constants/Config.ts b/web/console/src/modules/addon/constants/Config.ts index ea75a469a..6ae495c4b 100644 --- a/web/console/src/modules/addon/constants/Config.ts +++ b/web/console/src/modules/addon/constants/Config.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { t, Trans } from '@tencent/tea-app/lib/i18n'; import { ApiVersionKeyName } from '../../../../config/resource/common'; /** ========================= start FFRedux的相关配置 ======================== */ diff --git a/web/console/src/modules/addon/constants/ValidateConfig.ts b/web/console/src/modules/addon/constants/ValidateConfig.ts index c64b2cc2a..232edad14 100644 --- a/web/console/src/modules/addon/constants/ValidateConfig.ts +++ b/web/console/src/modules/addon/constants/ValidateConfig.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { RuleTypeEnum, FieldConfig } from '../../common'; import { AddonEdit } from '../models'; import { AddonNameEnum } from './Config'; diff --git a/web/console/src/modules/addon/index.tsx b/web/console/src/modules/addon/index.tsx index bdc2d2ca0..13557a2bb 100644 --- a/web/console/src/modules/addon/index.tsx +++ b/web/console/src/modules/addon/index.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { AddonAppContainer } from './components/AddonApp'; diff --git a/web/console/src/modules/addon/models/Addon.ts b/web/console/src/modules/addon/models/Addon.ts index 7737de2b7..f6b9a2c71 100644 --- a/web/console/src/modules/addon/models/Addon.ts +++ b/web/console/src/modules/addon/models/Addon.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { Identifiable } from '@tencent/ff-redux'; export interface Addon extends Identifiable { diff --git a/web/console/src/modules/addon/models/AddonEdit.ts b/web/console/src/modules/addon/models/AddonEdit.ts index 455b2238e..f8a750236 100644 --- a/web/console/src/modules/addon/models/AddonEdit.ts +++ b/web/console/src/modules/addon/models/AddonEdit.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { PeEdit } from './PeEdit'; export interface AddonEdit { diff --git a/web/console/src/modules/addon/models/PeEdit.ts b/web/console/src/modules/addon/models/PeEdit.ts index aa4c5b69a..f062eadb4 100644 --- a/web/console/src/modules/addon/models/PeEdit.ts +++ b/web/console/src/modules/addon/models/PeEdit.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { Validation } from '../../common'; export interface PeEdit { diff --git a/web/console/src/modules/addon/models/RootState.ts b/web/console/src/modules/addon/models/RootState.ts index 0e0530f2a..eaebd6aea 100644 --- a/web/console/src/modules/addon/models/RootState.ts +++ b/web/console/src/modules/addon/models/RootState.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { FFListModel, WorkflowState } from '@tencent/ff-redux'; import { RouteState } from '../../../../helpers'; diff --git a/web/console/src/modules/addon/models/index.ts b/web/console/src/modules/addon/models/index.ts index 006d89512..6950b5c98 100644 --- a/web/console/src/modules/addon/models/index.ts +++ b/web/console/src/modules/addon/models/index.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export { RootState } from './RootState'; export { Addon } from './Addon'; export * from './AddonEdit'; diff --git a/web/console/src/modules/addon/reducers/AddonEditReducer.ts b/web/console/src/modules/addon/reducers/AddonEditReducer.ts index 1793e4a91..a602753bc 100644 --- a/web/console/src/modules/addon/reducers/AddonEditReducer.ts +++ b/web/console/src/modules/addon/reducers/AddonEditReducer.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { combineReducers } from 'redux'; import { reduceToPayload } from '@tencent/ff-redux'; diff --git a/web/console/src/modules/addon/reducers/PeEditReducer.ts b/web/console/src/modules/addon/reducers/PeEditReducer.ts index 812a4a368..5b29b6eba 100644 --- a/web/console/src/modules/addon/reducers/PeEditReducer.ts +++ b/web/console/src/modules/addon/reducers/PeEditReducer.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { combineReducers } from 'redux'; import { reduceToPayload } from '@tencent/ff-redux'; diff --git a/web/console/src/modules/addon/reducers/RootReducer.ts b/web/console/src/modules/addon/reducers/RootReducer.ts index d7c1d72f3..6d8f1105c 100644 --- a/web/console/src/modules/addon/reducers/RootReducer.ts +++ b/web/console/src/modules/addon/reducers/RootReducer.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { combineReducers } from 'redux'; import { createFFListReducer, generateWorkflowReducer, reduceToPayload } from '@tencent/ff-redux'; diff --git a/web/console/src/modules/addon/router.ts b/web/console/src/modules/addon/router.ts index df409f198..cdc8f4167 100644 --- a/web/console/src/modules/addon/router.ts +++ b/web/console/src/modules/addon/router.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { Router } from '../../../helpers/Router'; /** diff --git a/web/console/src/modules/addon/stores/RootStore.ts b/web/console/src/modules/addon/stores/RootStore.ts index 528dcd48c..83ff139b0 100644 --- a/web/console/src/modules/addon/stores/RootStore.ts +++ b/web/console/src/modules/addon/stores/RootStore.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { createStore } from '@tencent/ff-redux'; import { generateResetableReducer } from '../../../../helpers'; diff --git a/web/console/src/modules/alarmPolicy/WebAPI.ts b/web/console/src/modules/alarmPolicy/WebAPI.ts index 4a1196c2d..a6d377f04 100644 --- a/web/console/src/modules/alarmPolicy/WebAPI.ts +++ b/web/console/src/modules/alarmPolicy/WebAPI.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { reduceNs } from '@helper'; import { OperationResult, QueryState, RecordSet, uuid } from '@tencent/ff-redux'; diff --git a/web/console/src/modules/alarmPolicy/actions/alarmPolicyActions.ts b/web/console/src/modules/alarmPolicy/actions/alarmPolicyActions.ts index 61148bfca..e26fbc5a7 100644 --- a/web/console/src/modules/alarmPolicy/actions/alarmPolicyActions.ts +++ b/web/console/src/modules/alarmPolicy/actions/alarmPolicyActions.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { createFFListActions, deepClone, extend, uuid } from '@tencent/ff-redux'; import { initValidator } from '../../common/models'; diff --git a/web/console/src/modules/alarmPolicy/actions/clusterActions.ts b/web/console/src/modules/alarmPolicy/actions/clusterActions.ts index f519e50ef..db34c0d1d 100644 --- a/web/console/src/modules/alarmPolicy/actions/clusterActions.ts +++ b/web/console/src/modules/alarmPolicy/actions/clusterActions.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { reduceNs } from '@helper'; import { resourceConfig } from '@config'; import { ResourceInfo } from '@src/modules/common'; diff --git a/web/console/src/modules/alarmPolicy/actions/groupActions.ts b/web/console/src/modules/alarmPolicy/actions/groupActions.ts index 131bd52f0..cca4ddd66 100644 --- a/web/console/src/modules/alarmPolicy/actions/groupActions.ts +++ b/web/console/src/modules/alarmPolicy/actions/groupActions.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { RootState } from '../models'; type GetState = () => RootState; diff --git a/web/console/src/modules/alarmPolicy/actions/index.ts b/web/console/src/modules/alarmPolicy/actions/index.ts index fdd3846aa..1b8fc495e 100644 --- a/web/console/src/modules/alarmPolicy/actions/index.ts +++ b/web/console/src/modules/alarmPolicy/actions/index.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { projectNamespaceActions } from './projectNamespaceActions.project'; import { workloadActions } from './workloadActions'; // import { groupActions } from './groupActions'; diff --git a/web/console/src/modules/alarmPolicy/actions/namespaceActions.project.ts b/web/console/src/modules/alarmPolicy/actions/namespaceActions.project.ts index 640283036..7d10f67fa 100644 --- a/web/console/src/modules/alarmPolicy/actions/namespaceActions.project.ts +++ b/web/console/src/modules/alarmPolicy/actions/namespaceActions.project.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { extend, FetchOptions, generateFetcherActionCreator, uuid } from '@tencent/ff-redux'; import { generateQueryActionCreator } from '@tencent/qcloud-redux-query'; diff --git a/web/console/src/modules/alarmPolicy/actions/namespaceActions.ts b/web/console/src/modules/alarmPolicy/actions/namespaceActions.ts index 395d220f4..e1d20d34f 100644 --- a/web/console/src/modules/alarmPolicy/actions/namespaceActions.ts +++ b/web/console/src/modules/alarmPolicy/actions/namespaceActions.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { extend } from '@tencent/ff-redux'; import { generateFetcherActionCreator } from '@tencent/qcloud-redux-fetcher'; import { generateQueryActionCreator } from '@tencent/qcloud-redux-query'; diff --git a/web/console/src/modules/alarmPolicy/actions/projectNamespaceActions.project.ts b/web/console/src/modules/alarmPolicy/actions/projectNamespaceActions.project.ts index 6d098b476..32d2c72f3 100644 --- a/web/console/src/modules/alarmPolicy/actions/projectNamespaceActions.project.ts +++ b/web/console/src/modules/alarmPolicy/actions/projectNamespaceActions.project.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { setProjectName } from '@helper'; import { extend, FetchOptions, generateFetcherActionCreator, RecordSet, ReduxAction, uuid } from '@tencent/ff-redux'; import { generateQueryActionCreator } from '@tencent/qcloud-redux-query'; diff --git a/web/console/src/modules/alarmPolicy/actions/regionActions.ts b/web/console/src/modules/alarmPolicy/actions/regionActions.ts index a176a53b0..b3afcd6ef 100644 --- a/web/console/src/modules/alarmPolicy/actions/regionActions.ts +++ b/web/console/src/modules/alarmPolicy/actions/regionActions.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ // import { extend } from '@tencent/ff-redux'; // import { router } from '../router'; // import { getRegionId, setRegionId, assureRegion } from '../../../../helpers'; diff --git a/web/console/src/modules/alarmPolicy/actions/validatorActions.ts b/web/console/src/modules/alarmPolicy/actions/validatorActions.ts index 12f0e29b9..68bc524b0 100644 --- a/web/console/src/modules/alarmPolicy/actions/validatorActions.ts +++ b/web/console/src/modules/alarmPolicy/actions/validatorActions.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { deepClone } from '@tencent/ff-redux'; import { t, Trans } from '@tencent/tea-app/lib/i18n'; diff --git a/web/console/src/modules/alarmPolicy/actions/workflowActions.ts b/web/console/src/modules/alarmPolicy/actions/workflowActions.ts index d364fa78a..9d4f9d057 100644 --- a/web/console/src/modules/alarmPolicy/actions/workflowActions.ts +++ b/web/console/src/modules/alarmPolicy/actions/workflowActions.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { extend, generateWorkflowActionCreator, isSuccessWorkflow, OperationHooks, OperationTrigger, RecordSet, ReduxAction diff --git a/web/console/src/modules/alarmPolicy/actions/workloadActions.ts b/web/console/src/modules/alarmPolicy/actions/workloadActions.ts index 72eb966d8..a8b7ab257 100644 --- a/web/console/src/modules/alarmPolicy/actions/workloadActions.ts +++ b/web/console/src/modules/alarmPolicy/actions/workloadActions.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { extend } from '@tencent/ff-redux'; import { generateFetcherActionCreator } from '@tencent/qcloud-redux-fetcher'; import { generateQueryActionCreator } from '@tencent/qcloud-redux-query'; diff --git a/web/console/src/modules/alarmPolicy/components/AlarmPolicyActionPanel.tsx b/web/console/src/modules/alarmPolicy/components/AlarmPolicyActionPanel.tsx index 37e2347a6..69261eb20 100644 --- a/web/console/src/modules/alarmPolicy/components/AlarmPolicyActionPanel.tsx +++ b/web/console/src/modules/alarmPolicy/components/AlarmPolicyActionPanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ // import { connect } from 'react-redux'; // import { allActions } from '../actions'; // import * as React from 'react'; diff --git a/web/console/src/modules/alarmPolicy/components/AlarmPolicyApp.tsx b/web/console/src/modules/alarmPolicy/components/AlarmPolicyApp.tsx index e8de43d11..1be6d6382 100644 --- a/web/console/src/modules/alarmPolicy/components/AlarmPolicyApp.tsx +++ b/web/console/src/modules/alarmPolicy/components/AlarmPolicyApp.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect, Provider } from 'react-redux'; diff --git a/web/console/src/modules/alarmPolicy/components/AlarmPolicyDetailHeaderPanel.project.tsx b/web/console/src/modules/alarmPolicy/components/AlarmPolicyDetailHeaderPanel.project.tsx index 6ff675cf0..9a51cd7b0 100644 --- a/web/console/src/modules/alarmPolicy/components/AlarmPolicyDetailHeaderPanel.project.tsx +++ b/web/console/src/modules/alarmPolicy/components/AlarmPolicyDetailHeaderPanel.project.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { RootProps } from './AlarmPolicyApp'; import { router } from '../router'; diff --git a/web/console/src/modules/alarmPolicy/components/AlarmPolicyDetailHeaderPanel.tsx b/web/console/src/modules/alarmPolicy/components/AlarmPolicyDetailHeaderPanel.tsx index 1a6819339..0aaac1660 100644 --- a/web/console/src/modules/alarmPolicy/components/AlarmPolicyDetailHeaderPanel.tsx +++ b/web/console/src/modules/alarmPolicy/components/AlarmPolicyDetailHeaderPanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { RootProps } from './AlarmPolicyApp'; import { router } from '../router'; diff --git a/web/console/src/modules/alarmPolicy/components/AlarmPolicyDetailPanel.tsx b/web/console/src/modules/alarmPolicy/components/AlarmPolicyDetailPanel.tsx index 66f4919ef..7c1f708f9 100644 --- a/web/console/src/modules/alarmPolicy/components/AlarmPolicyDetailPanel.tsx +++ b/web/console/src/modules/alarmPolicy/components/AlarmPolicyDetailPanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { RootProps } from './AlarmPolicyApp'; import { LinkButton } from '../../common/components'; diff --git a/web/console/src/modules/alarmPolicy/components/AlarmPolicyHeadPanel.project.tsx b/web/console/src/modules/alarmPolicy/components/AlarmPolicyHeadPanel.project.tsx index 25c825fea..8bcf883b0 100644 --- a/web/console/src/modules/alarmPolicy/components/AlarmPolicyHeadPanel.project.tsx +++ b/web/console/src/modules/alarmPolicy/components/AlarmPolicyHeadPanel.project.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { FormPanel } from '@tencent/ff-component'; import { t } from '@tencent/tea-app/lib/i18n'; import { Justify, Tooltip, Select } from '@tencent/tea-component'; diff --git a/web/console/src/modules/alarmPolicy/components/AlarmPolicyHeadPanel.tsx b/web/console/src/modules/alarmPolicy/components/AlarmPolicyHeadPanel.tsx index 246fde111..fbc5663bc 100644 --- a/web/console/src/modules/alarmPolicy/components/AlarmPolicyHeadPanel.tsx +++ b/web/console/src/modules/alarmPolicy/components/AlarmPolicyHeadPanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { FormPanelSelect, FormPanelSelectProps } from '@tencent/ff-component'; import { t } from '@tencent/tea-app/lib/i18n'; import { Justify } from '@tencent/tea-component'; diff --git a/web/console/src/modules/alarmPolicy/components/AlarmPolicySubpageHeaderPanel.project.tsx b/web/console/src/modules/alarmPolicy/components/AlarmPolicySubpageHeaderPanel.project.tsx index 5909297a3..e3f4ae97f 100644 --- a/web/console/src/modules/alarmPolicy/components/AlarmPolicySubpageHeaderPanel.project.tsx +++ b/web/console/src/modules/alarmPolicy/components/AlarmPolicySubpageHeaderPanel.project.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { t, Trans } from '@tencent/tea-app/lib/i18n'; diff --git a/web/console/src/modules/alarmPolicy/components/AlarmPolicySubpageHeaderPanel.tsx b/web/console/src/modules/alarmPolicy/components/AlarmPolicySubpageHeaderPanel.tsx index 1e3de2e7c..b1af4de7c 100644 --- a/web/console/src/modules/alarmPolicy/components/AlarmPolicySubpageHeaderPanel.tsx +++ b/web/console/src/modules/alarmPolicy/components/AlarmPolicySubpageHeaderPanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { RootProps } from './AlarmPolicyApp'; import { router } from '../router'; diff --git a/web/console/src/modules/alarmPolicy/components/AlarmPolicyTablePanel.tsx b/web/console/src/modules/alarmPolicy/components/AlarmPolicyTablePanel.tsx index 3621949bd..417e30380 100644 --- a/web/console/src/modules/alarmPolicy/components/AlarmPolicyTablePanel.tsx +++ b/web/console/src/modules/alarmPolicy/components/AlarmPolicyTablePanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { Bubble, Button, TableColumn } from 'tea-component'; diff --git a/web/console/src/modules/alarmPolicy/components/DeleteAlarmPolicyDialog.tsx b/web/console/src/modules/alarmPolicy/components/DeleteAlarmPolicyDialog.tsx index 0bac73211..14daa29ef 100644 --- a/web/console/src/modules/alarmPolicy/components/DeleteAlarmPolicyDialog.tsx +++ b/web/console/src/modules/alarmPolicy/components/DeleteAlarmPolicyDialog.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { t } from '@tencent/tea-app/lib/i18n'; import { Table } from 'tea-component'; import * as React from 'react'; diff --git a/web/console/src/modules/alarmPolicy/components/EditAlarmPolicyObject.tsx b/web/console/src/modules/alarmPolicy/components/EditAlarmPolicyObject.tsx index 880f6fec0..ecbb0335a 100644 --- a/web/console/src/modules/alarmPolicy/components/EditAlarmPolicyObject.tsx +++ b/web/console/src/modules/alarmPolicy/components/EditAlarmPolicyObject.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { Checkbox, Radio } from '@tea/component'; diff --git a/web/console/src/modules/alarmPolicy/components/EditAlarmPolicyPanel.tsx b/web/console/src/modules/alarmPolicy/components/EditAlarmPolicyPanel.tsx index 9393fc02c..8c9b0cea1 100644 --- a/web/console/src/modules/alarmPolicy/components/EditAlarmPolicyPanel.tsx +++ b/web/console/src/modules/alarmPolicy/components/EditAlarmPolicyPanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import classNames from 'classnames'; import * as React from 'react'; diff --git a/web/console/src/modules/alarmPolicy/components/EditAlarmPolicyReceiverGroup.tsx b/web/console/src/modules/alarmPolicy/components/EditAlarmPolicyReceiverGroup.tsx index 3cac70101..934d3aea4 100644 --- a/web/console/src/modules/alarmPolicy/components/EditAlarmPolicyReceiverGroup.tsx +++ b/web/console/src/modules/alarmPolicy/components/EditAlarmPolicyReceiverGroup.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { ExternalLink, Text } from '@tea/component'; diff --git a/web/console/src/modules/alarmPolicy/components/resource/ResourceSidebarPanel.tsx b/web/console/src/modules/alarmPolicy/components/resource/ResourceSidebarPanel.tsx index 8c2227c64..baa9680cf 100644 --- a/web/console/src/modules/alarmPolicy/components/resource/ResourceSidebarPanel.tsx +++ b/web/console/src/modules/alarmPolicy/components/resource/ResourceSidebarPanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ // import { BasicRouter } from '../../models'; import * as classnames from 'classnames'; import * as React from 'react'; diff --git a/web/console/src/modules/alarmPolicy/constants/ActionType.ts b/web/console/src/modules/alarmPolicy/constants/ActionType.ts index e349c1735..f749bfbdd 100644 --- a/web/console/src/modules/alarmPolicy/constants/ActionType.ts +++ b/web/console/src/modules/alarmPolicy/constants/ActionType.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export const isI18n = 'isI18n'; export const FetchRegion = 'FetchRegion'; export const QueryRegion = 'QueryRegion'; diff --git a/web/console/src/modules/alarmPolicy/constants/Config.ts b/web/console/src/modules/alarmPolicy/constants/Config.ts index 6fa0201a8..da89b6729 100644 --- a/web/console/src/modules/alarmPolicy/constants/Config.ts +++ b/web/console/src/modules/alarmPolicy/constants/Config.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { t, Trans } from '@tencent/tea-app/lib/i18n'; export const AlarmObjectsType = { diff --git a/web/console/src/modules/alarmPolicy/index.tsx b/web/console/src/modules/alarmPolicy/index.tsx index fed793d5a..f013ce239 100644 --- a/web/console/src/modules/alarmPolicy/index.tsx +++ b/web/console/src/modules/alarmPolicy/index.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { AlarmPolicyAppContainer } from './components/AlarmPolicyApp'; diff --git a/web/console/src/modules/alarmPolicy/models/Addon.ts b/web/console/src/modules/alarmPolicy/models/Addon.ts index d74e5affe..6baafca3c 100644 --- a/web/console/src/modules/alarmPolicy/models/Addon.ts +++ b/web/console/src/modules/alarmPolicy/models/Addon.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export interface AddonStatus { [propName: string]: Addon; } diff --git a/web/console/src/modules/alarmPolicy/models/AlarmPolicy.ts b/web/console/src/modules/alarmPolicy/models/AlarmPolicy.ts index 09a1030cb..931508f8f 100644 --- a/web/console/src/modules/alarmPolicy/models/AlarmPolicy.ts +++ b/web/console/src/modules/alarmPolicy/models/AlarmPolicy.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { extend, Identifiable } from '@tencent/ff-redux'; import { Validation } from '../../common/models/Validation'; diff --git a/web/console/src/modules/alarmPolicy/models/ClusterFilter.ts b/web/console/src/modules/alarmPolicy/models/ClusterFilter.ts index 83bb77782..29a5db065 100644 --- a/web/console/src/modules/alarmPolicy/models/ClusterFilter.ts +++ b/web/console/src/modules/alarmPolicy/models/ClusterFilter.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export interface ClusterFilter { regionId?: number; } diff --git a/web/console/src/modules/alarmPolicy/models/Group.tsx b/web/console/src/modules/alarmPolicy/models/Group.tsx index f65a4613d..4b1235603 100644 --- a/web/console/src/modules/alarmPolicy/models/Group.tsx +++ b/web/console/src/modules/alarmPolicy/models/Group.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { Identifiable } from '@tencent/ff-redux'; export interface Group extends Identifiable { diff --git a/web/console/src/modules/alarmPolicy/models/Namespace.ts b/web/console/src/modules/alarmPolicy/models/Namespace.ts index 55a8b9604..33844709c 100644 --- a/web/console/src/modules/alarmPolicy/models/Namespace.ts +++ b/web/console/src/modules/alarmPolicy/models/Namespace.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { Identifiable } from '@tencent/ff-redux'; export interface Namespace extends Identifiable { diff --git a/web/console/src/modules/alarmPolicy/models/Region.ts b/web/console/src/modules/alarmPolicy/models/Region.ts index 6b1123671..df092f5fb 100644 --- a/web/console/src/modules/alarmPolicy/models/Region.ts +++ b/web/console/src/modules/alarmPolicy/models/Region.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { Identifiable } from '@tencent/ff-redux'; export interface Region extends Identifiable { diff --git a/web/console/src/modules/alarmPolicy/models/RegionFilter.ts b/web/console/src/modules/alarmPolicy/models/RegionFilter.ts index 7c823fef6..745d06417 100644 --- a/web/console/src/modules/alarmPolicy/models/RegionFilter.ts +++ b/web/console/src/modules/alarmPolicy/models/RegionFilter.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export interface RegionFilter { /**默认 */ regionId?: string | number; diff --git a/web/console/src/modules/alarmPolicy/models/Resource.ts b/web/console/src/modules/alarmPolicy/models/Resource.ts index a942a5e18..0737b8c1d 100644 --- a/web/console/src/modules/alarmPolicy/models/Resource.ts +++ b/web/console/src/modules/alarmPolicy/models/Resource.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { Identifiable, RecordSet } from '@tencent/ff-redux'; export interface Resource extends Identifiable { diff --git a/web/console/src/modules/alarmPolicy/models/RootState.ts b/web/console/src/modules/alarmPolicy/models/RootState.ts index 555e3869b..fb9522a09 100644 --- a/web/console/src/modules/alarmPolicy/models/RootState.ts +++ b/web/console/src/modules/alarmPolicy/models/RootState.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { FetcherState, FFListModel, QueryState, RecordSet, WorkflowState } from '@tencent/ff-redux'; //import { RouteState } from "@tencent/qcloud-nmc"; diff --git a/web/console/src/modules/alarmPolicy/models/index.ts b/web/console/src/modules/alarmPolicy/models/index.ts index 130ab4f07..0d242c749 100644 --- a/web/console/src/modules/alarmPolicy/models/index.ts +++ b/web/console/src/modules/alarmPolicy/models/index.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export { ResourceFilter, Resource } from './Resource'; export { RootState } from './RootState'; export { RegionFilter } from './RegionFilter'; diff --git a/web/console/src/modules/alarmPolicy/reducers/AlarmPolicyEditReducer.ts b/web/console/src/modules/alarmPolicy/reducers/AlarmPolicyEditReducer.ts index fe4885387..2b94df235 100644 --- a/web/console/src/modules/alarmPolicy/reducers/AlarmPolicyEditReducer.ts +++ b/web/console/src/modules/alarmPolicy/reducers/AlarmPolicyEditReducer.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { combineReducers } from 'redux'; import { reduceToPayload } from '@tencent/ff-redux'; diff --git a/web/console/src/modules/alarmPolicy/reducers/RootReducer.project.ts b/web/console/src/modules/alarmPolicy/reducers/RootReducer.project.ts index 5d3f4e376..19eaa67e7 100644 --- a/web/console/src/modules/alarmPolicy/reducers/RootReducer.project.ts +++ b/web/console/src/modules/alarmPolicy/reducers/RootReducer.project.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { combineReducers } from 'redux'; import { createFFListReducer, generateWorkflowReducer, RecordSet, reduceToPayload } from '@tencent/ff-redux'; diff --git a/web/console/src/modules/alarmPolicy/reducers/RootReducer.ts b/web/console/src/modules/alarmPolicy/reducers/RootReducer.ts index 8a5a9503b..66327ac97 100644 --- a/web/console/src/modules/alarmPolicy/reducers/RootReducer.ts +++ b/web/console/src/modules/alarmPolicy/reducers/RootReducer.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { combineReducers } from 'redux'; import { diff --git a/web/console/src/modules/alarmPolicy/router.project.ts b/web/console/src/modules/alarmPolicy/router.project.ts index 364fe409a..07092c251 100644 --- a/web/console/src/modules/alarmPolicy/router.project.ts +++ b/web/console/src/modules/alarmPolicy/router.project.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { Router } from '../../../helpers/Router'; export const router = new Router('/tkestack-project/alarm(/:sub)(/:tab)', { sub: '', tab: '' }); diff --git a/web/console/src/modules/alarmPolicy/router.ts b/web/console/src/modules/alarmPolicy/router.ts index f22387b69..aacdc8dde 100644 --- a/web/console/src/modules/alarmPolicy/router.ts +++ b/web/console/src/modules/alarmPolicy/router.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { Router } from '../../../helpers/Router'; export const router = new Router('/tkestack/alarm(/:sub)(/:tab)', { sub: '', tab: '' }); diff --git a/web/console/src/modules/alarmPolicy/stores/RootStore.ts b/web/console/src/modules/alarmPolicy/stores/RootStore.ts index 528dcd48c..83ff139b0 100644 --- a/web/console/src/modules/alarmPolicy/stores/RootStore.ts +++ b/web/console/src/modules/alarmPolicy/stores/RootStore.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { createStore } from '@tencent/ff-redux'; import { generateResetableReducer } from '../../../../helpers'; diff --git a/web/console/src/modules/alarmRecord/WebAPI.ts b/web/console/src/modules/alarmRecord/WebAPI.ts index 75eba9262..5631d9132 100644 --- a/web/console/src/modules/alarmRecord/WebAPI.ts +++ b/web/console/src/modules/alarmRecord/WebAPI.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { OperationResult, QueryState, RecordSet, uuid } from '@tencent/ff-redux'; import { resourceConfig } from '../../../config/resourceConfig'; diff --git a/web/console/src/modules/alarmRecord/actions/alarmRecordActions.ts b/web/console/src/modules/alarmRecord/actions/alarmRecordActions.ts index ab8502a6b..2417bc4f4 100644 --- a/web/console/src/modules/alarmRecord/actions/alarmRecordActions.ts +++ b/web/console/src/modules/alarmRecord/actions/alarmRecordActions.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { createFFListActions, extend, diff --git a/web/console/src/modules/alarmRecord/actions/clusterActions.ts b/web/console/src/modules/alarmRecord/actions/clusterActions.ts index aaebcb7cf..bf52aebc6 100644 --- a/web/console/src/modules/alarmRecord/actions/clusterActions.ts +++ b/web/console/src/modules/alarmRecord/actions/clusterActions.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { createFFListActions, extend } from '@tencent/ff-redux'; import { FFReduxActionName } from '../../cluster/constants/Config'; import * as WebAPI from '../../cluster/WebAPI'; diff --git a/web/console/src/modules/alarmRecord/actions/index.ts b/web/console/src/modules/alarmRecord/actions/index.ts index aa65cf350..9dbf29d0f 100644 --- a/web/console/src/modules/alarmRecord/actions/index.ts +++ b/web/console/src/modules/alarmRecord/actions/index.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { alarmRecordActions } from './alarmRecordActions'; import { clusterActions } from './clusterActions'; export const allActions = { diff --git a/web/console/src/modules/alarmRecord/components/AlarmHeaderPanel.tsx b/web/console/src/modules/alarmRecord/components/AlarmHeaderPanel.tsx index 2e8f2ace1..9706d37cb 100644 --- a/web/console/src/modules/alarmRecord/components/AlarmHeaderPanel.tsx +++ b/web/console/src/modules/alarmRecord/components/AlarmHeaderPanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { useDispatch, useSelector } from 'react-redux'; import { FormPanelSelect, FormPanelSelectProps } from '@tencent/ff-component'; diff --git a/web/console/src/modules/alarmRecord/components/AlarmRecordApp.tsx b/web/console/src/modules/alarmRecord/components/AlarmRecordApp.tsx index 9a415a466..54646a369 100644 --- a/web/console/src/modules/alarmRecord/components/AlarmRecordApp.tsx +++ b/web/console/src/modules/alarmRecord/components/AlarmRecordApp.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect, Provider } from 'react-redux'; import { t } from '@tencent/tea-app/lib/i18n'; diff --git a/web/console/src/modules/alarmRecord/components/AlarmRecordPanel.tsx b/web/console/src/modules/alarmRecord/components/AlarmRecordPanel.tsx index 56fb44f9b..063ebc628 100644 --- a/web/console/src/modules/alarmRecord/components/AlarmRecordPanel.tsx +++ b/web/console/src/modules/alarmRecord/components/AlarmRecordPanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { useDispatch, useSelector } from 'react-redux'; import { Text, TableColumn, Table, Justify, SearchBox, Bubble } from '@tea/component'; diff --git a/web/console/src/modules/alarmRecord/constants/ActionTypes.ts b/web/console/src/modules/alarmRecord/constants/ActionTypes.ts index 5686bc140..e32bca443 100644 --- a/web/console/src/modules/alarmRecord/constants/ActionTypes.ts +++ b/web/console/src/modules/alarmRecord/constants/ActionTypes.ts @@ -1,2 +1,19 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export const FetchAlarmRecord = 'FetchAlarmRecord'; export const FetchAuditFilterCondition = 'FetchAuditFilterCondition'; diff --git a/web/console/src/modules/alarmRecord/index.tsx b/web/console/src/modules/alarmRecord/index.tsx index fe36dc7b5..6df2530eb 100644 --- a/web/console/src/modules/alarmRecord/index.tsx +++ b/web/console/src/modules/alarmRecord/index.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { AlarmRecordContainer } from './components/AlarmRecordApp'; diff --git a/web/console/src/modules/alarmRecord/models/AlarmRecord.ts b/web/console/src/modules/alarmRecord/models/AlarmRecord.ts index 5ad58872e..38092ed70 100644 --- a/web/console/src/modules/alarmRecord/models/AlarmRecord.ts +++ b/web/console/src/modules/alarmRecord/models/AlarmRecord.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { Identifiable } from '@tencent/ff-redux'; export interface AlarmRecord extends Identifiable { diff --git a/web/console/src/modules/alarmRecord/models/ClusterFilter.ts b/web/console/src/modules/alarmRecord/models/ClusterFilter.ts index 83bb77782..29a5db065 100644 --- a/web/console/src/modules/alarmRecord/models/ClusterFilter.ts +++ b/web/console/src/modules/alarmRecord/models/ClusterFilter.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export interface ClusterFilter { regionId?: number; } diff --git a/web/console/src/modules/alarmRecord/models/RootState.ts b/web/console/src/modules/alarmRecord/models/RootState.ts index 8dc43fdc7..590885332 100644 --- a/web/console/src/modules/alarmRecord/models/RootState.ts +++ b/web/console/src/modules/alarmRecord/models/RootState.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { RouteState } from '../../../../helpers'; import { FFListModel } from '@tencent/ff-redux'; import { AlarmRecord, AlarmRecordFilter, ClusterFilter } from '../models'; diff --git a/web/console/src/modules/alarmRecord/models/index.ts b/web/console/src/modules/alarmRecord/models/index.ts index 8544d6bc0..738842016 100644 --- a/web/console/src/modules/alarmRecord/models/index.ts +++ b/web/console/src/modules/alarmRecord/models/index.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export { RootState } from './RootState'; export { AlarmRecord, AlarmRecordFilter } from './AlarmRecord'; export { ClusterFilter } from './ClusterFilter'; diff --git a/web/console/src/modules/alarmRecord/reducers/RootReducer.ts b/web/console/src/modules/alarmRecord/reducers/RootReducer.ts index 539a01131..af4cdb403 100644 --- a/web/console/src/modules/alarmRecord/reducers/RootReducer.ts +++ b/web/console/src/modules/alarmRecord/reducers/RootReducer.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { combineReducers } from 'redux'; import { router } from '../router'; import * as ActionTypes from '../constants/ActionTypes'; diff --git a/web/console/src/modules/alarmRecord/router.ts b/web/console/src/modules/alarmRecord/router.ts index 3301ba292..2eb39427a 100644 --- a/web/console/src/modules/alarmRecord/router.ts +++ b/web/console/src/modules/alarmRecord/router.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { Router } from '../../../helpers/Router'; /** diff --git a/web/console/src/modules/alarmRecord/stores/RootStore.ts b/web/console/src/modules/alarmRecord/stores/RootStore.ts index de5a4b40b..129458081 100644 --- a/web/console/src/modules/alarmRecord/stores/RootStore.ts +++ b/web/console/src/modules/alarmRecord/stores/RootStore.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { createStore } from '@tencent/ff-redux'; import { generateResetableReducer } from '../../../../helpers'; diff --git a/web/console/src/modules/application/WebAPI.ts b/web/console/src/modules/application/WebAPI.ts index 1f4188576..ac78f4657 100644 --- a/web/console/src/modules/application/WebAPI.ts +++ b/web/console/src/modules/application/WebAPI.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { OperationResult, QueryState, RecordSet } from '@tencent/ff-redux'; import { diff --git a/web/console/src/modules/application/actions/app/createActions.ts b/web/console/src/modules/application/actions/app/createActions.ts index 7bb2a8a65..f263006f1 100644 --- a/web/console/src/modules/application/actions/app/createActions.ts +++ b/web/console/src/modules/application/actions/app/createActions.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { ReduxAction, extend, diff --git a/web/console/src/modules/application/actions/app/detailActions.ts b/web/console/src/modules/application/actions/app/detailActions.ts index 971f07388..929ff20f0 100644 --- a/web/console/src/modules/application/actions/app/detailActions.ts +++ b/web/console/src/modules/application/actions/app/detailActions.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { ReduxAction, extend, diff --git a/web/console/src/modules/application/actions/app/historyActions.ts b/web/console/src/modules/application/actions/app/historyActions.ts index 181188f6d..2409aba0d 100644 --- a/web/console/src/modules/application/actions/app/historyActions.ts +++ b/web/console/src/modules/application/actions/app/historyActions.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { extend, createFFObjectActions, diff --git a/web/console/src/modules/application/actions/app/index.ts b/web/console/src/modules/application/actions/app/index.ts index a08806c5a..f7823a440 100644 --- a/web/console/src/modules/application/actions/app/index.ts +++ b/web/console/src/modules/application/actions/app/index.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { listActions } from './listActions'; import { createActions } from './createActions'; import { detailActions } from './detailActions'; diff --git a/web/console/src/modules/application/actions/app/listActions.ts b/web/console/src/modules/application/actions/app/listActions.ts index e1e5142a5..42c0a501e 100644 --- a/web/console/src/modules/application/actions/app/listActions.ts +++ b/web/console/src/modules/application/actions/app/listActions.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { extend, generateWorkflowActionCreator, diff --git a/web/console/src/modules/application/actions/app/resourceActions.ts b/web/console/src/modules/application/actions/app/resourceActions.ts index 4bcad53cb..b32e297d8 100644 --- a/web/console/src/modules/application/actions/app/resourceActions.ts +++ b/web/console/src/modules/application/actions/app/resourceActions.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { extend, createFFObjectActions, uuid } from '@tencent/ff-redux'; import * as JsYAML from 'js-yaml'; import { RootState, AppResource, AppResourceFilter, Resource } from '../../models'; diff --git a/web/console/src/modules/application/actions/chart/index.ts b/web/console/src/modules/application/actions/chart/index.ts index 82f333270..b743c23e0 100644 --- a/web/console/src/modules/application/actions/chart/index.ts +++ b/web/console/src/modules/application/actions/chart/index.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { listActions } from './listActions'; export const chartActions = { diff --git a/web/console/src/modules/application/actions/chart/listActions.ts b/web/console/src/modules/application/actions/chart/listActions.ts index f81c2f6ee..563d26d45 100644 --- a/web/console/src/modules/application/actions/chart/listActions.ts +++ b/web/console/src/modules/application/actions/chart/listActions.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { extend, generateWorkflowActionCreator, diff --git a/web/console/src/modules/application/actions/chartGroup/index.ts b/web/console/src/modules/application/actions/chartGroup/index.ts index 7e6b74e20..5a6f88848 100644 --- a/web/console/src/modules/application/actions/chartGroup/index.ts +++ b/web/console/src/modules/application/actions/chartGroup/index.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { listActions } from './listActions'; export const chartGroupActions = { diff --git a/web/console/src/modules/application/actions/chartGroup/listActions.ts b/web/console/src/modules/application/actions/chartGroup/listActions.ts index d419c7004..c98ba9eb5 100644 --- a/web/console/src/modules/application/actions/chartGroup/listActions.ts +++ b/web/console/src/modules/application/actions/chartGroup/listActions.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { extend, generateWorkflowActionCreator, diff --git a/web/console/src/modules/application/actions/cluster/index.ts b/web/console/src/modules/application/actions/cluster/index.ts index b7786fac0..d22d7590d 100644 --- a/web/console/src/modules/application/actions/cluster/index.ts +++ b/web/console/src/modules/application/actions/cluster/index.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { listActions } from './listActions'; export const clusterActions = { diff --git a/web/console/src/modules/application/actions/cluster/listActions.ts b/web/console/src/modules/application/actions/cluster/listActions.ts index e70410b0d..11903c56d 100644 --- a/web/console/src/modules/application/actions/cluster/listActions.ts +++ b/web/console/src/modules/application/actions/cluster/listActions.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { extend, generateWorkflowActionCreator, diff --git a/web/console/src/modules/application/actions/index.ts b/web/console/src/modules/application/actions/index.ts index cf93e0fdb..24f8435fc 100644 --- a/web/console/src/modules/application/actions/index.ts +++ b/web/console/src/modules/application/actions/index.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { appActions } from './app'; import { clusterActions } from './cluster'; import { namespaceActions, projectNamespaceActions } from './namespace'; diff --git a/web/console/src/modules/application/actions/namespace/index.ts b/web/console/src/modules/application/actions/namespace/index.ts index 2032c5dfb..459589141 100644 --- a/web/console/src/modules/application/actions/namespace/index.ts +++ b/web/console/src/modules/application/actions/namespace/index.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { listActions } from './listActions'; import { projectNamespaceListActions } from './projectNamespaceListActions'; diff --git a/web/console/src/modules/application/actions/namespace/listActions.ts b/web/console/src/modules/application/actions/namespace/listActions.ts index 0d5055e14..019435e31 100644 --- a/web/console/src/modules/application/actions/namespace/listActions.ts +++ b/web/console/src/modules/application/actions/namespace/listActions.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { extend, generateWorkflowActionCreator, diff --git a/web/console/src/modules/application/actions/namespace/projectNamespaceListActions.ts b/web/console/src/modules/application/actions/namespace/projectNamespaceListActions.ts index 5f72f8874..d69373b34 100644 --- a/web/console/src/modules/application/actions/namespace/projectNamespaceListActions.ts +++ b/web/console/src/modules/application/actions/namespace/projectNamespaceListActions.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { extend, generateWorkflowActionCreator, diff --git a/web/console/src/modules/application/actions/project/index.ts b/web/console/src/modules/application/actions/project/index.ts index e0a240d9c..c82b305f5 100644 --- a/web/console/src/modules/application/actions/project/index.ts +++ b/web/console/src/modules/application/actions/project/index.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { listActions } from './listActions'; export const projectActions = { diff --git a/web/console/src/modules/application/actions/project/listActions.ts b/web/console/src/modules/application/actions/project/listActions.ts index 1c8d1ec68..4feef2a21 100644 --- a/web/console/src/modules/application/actions/project/listActions.ts +++ b/web/console/src/modules/application/actions/project/listActions.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { extend, createFFListActions } from '@tencent/ff-redux'; import { RootState, Project } from '../../models'; import * as ActionTypes from '../../constants/ActionTypes'; diff --git a/web/console/src/modules/application/components/ApplicationApp.tsx b/web/console/src/modules/application/components/ApplicationApp.tsx index 772087325..b527b189a 100644 --- a/web/console/src/modules/application/components/ApplicationApp.tsx +++ b/web/console/src/modules/application/components/ApplicationApp.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect, Provider } from 'react-redux'; diff --git a/web/console/src/modules/application/components/app/AppContainer.tsx b/web/console/src/modules/application/components/app/AppContainer.tsx index 152fdbe38..d814b3281 100644 --- a/web/console/src/modules/application/components/app/AppContainer.tsx +++ b/web/console/src/modules/application/components/app/AppContainer.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect, Provider } from 'react-redux'; import { bindActionCreators } from '@tencent/ff-redux'; diff --git a/web/console/src/modules/application/components/app/ChartActionPanel.tsx b/web/console/src/modules/application/components/app/ChartActionPanel.tsx index b490c6298..49d331105 100644 --- a/web/console/src/modules/application/components/app/ChartActionPanel.tsx +++ b/web/console/src/modules/application/components/app/ChartActionPanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect } from 'react-redux'; import { Justify, Icon, Table, Button, SearchBox, Segment, Select } from '@tea/component'; diff --git a/web/console/src/modules/application/components/app/ChartTablePanel.tsx b/web/console/src/modules/application/components/app/ChartTablePanel.tsx index 3ae0f6d03..e6cafddbd 100644 --- a/web/console/src/modules/application/components/app/ChartTablePanel.tsx +++ b/web/console/src/modules/application/components/app/ChartTablePanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect } from 'react-redux'; import { TablePanel as CTablePanel } from '@tencent/ff-component'; diff --git a/web/console/src/modules/application/components/app/ChartValueYamlDialog.tsx b/web/console/src/modules/application/components/app/ChartValueYamlDialog.tsx index cb095505f..f9b6faa47 100644 --- a/web/console/src/modules/application/components/app/ChartValueYamlDialog.tsx +++ b/web/console/src/modules/application/components/app/ChartValueYamlDialog.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as JsYAML from 'js-yaml'; import * as React from 'react'; diff --git a/web/console/src/modules/application/components/app/create/AppCreate.tsx b/web/console/src/modules/application/components/app/create/AppCreate.tsx index 758f3b2f4..9c193b28f 100644 --- a/web/console/src/modules/application/components/app/create/AppCreate.tsx +++ b/web/console/src/modules/application/components/app/create/AppCreate.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect } from 'react-redux'; import { bindActionCreators } from '@tencent/ff-redux'; diff --git a/web/console/src/modules/application/components/app/create/BaseInfoPanel.tsx b/web/console/src/modules/application/components/app/create/BaseInfoPanel.tsx index 3f9e73a88..8b91d1224 100644 --- a/web/console/src/modules/application/components/app/create/BaseInfoPanel.tsx +++ b/web/console/src/modules/application/components/app/create/BaseInfoPanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect } from 'react-redux'; import { t, Trans } from '@tencent/tea-app/lib/i18n'; diff --git a/web/console/src/modules/application/components/app/create/HeaderPanel.tsx b/web/console/src/modules/application/components/app/create/HeaderPanel.tsx index 10fc7f682..8f61fdd8e 100644 --- a/web/console/src/modules/application/components/app/create/HeaderPanel.tsx +++ b/web/console/src/modules/application/components/app/create/HeaderPanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { RootProps } from '../AppContainer'; import { Justify, Icon } from '@tencent/tea-component'; diff --git a/web/console/src/modules/application/components/app/create/NamespacePanel.project.tsx b/web/console/src/modules/application/components/app/create/NamespacePanel.project.tsx index 1e4844ac3..4a2eabe61 100644 --- a/web/console/src/modules/application/components/app/create/NamespacePanel.project.tsx +++ b/web/console/src/modules/application/components/app/create/NamespacePanel.project.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect } from 'react-redux'; import { t, Trans } from '@tencent/tea-app/lib/i18n'; diff --git a/web/console/src/modules/application/components/app/create/NamespacePanel.tsx b/web/console/src/modules/application/components/app/create/NamespacePanel.tsx index 4c40ce3cf..7777a0f61 100644 --- a/web/console/src/modules/application/components/app/create/NamespacePanel.tsx +++ b/web/console/src/modules/application/components/app/create/NamespacePanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect } from 'react-redux'; import { t, Trans } from '@tencent/tea-app/lib/i18n'; diff --git a/web/console/src/modules/application/components/app/detail/AppDetail.tsx b/web/console/src/modules/application/components/app/detail/AppDetail.tsx index eb818daf3..d226c42b7 100644 --- a/web/console/src/modules/application/components/app/detail/AppDetail.tsx +++ b/web/console/src/modules/application/components/app/detail/AppDetail.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect } from 'react-redux'; import { bindActionCreators } from '@tencent/ff-redux'; diff --git a/web/console/src/modules/application/components/app/detail/BasicInfoPanel.tsx b/web/console/src/modules/application/components/app/detail/BasicInfoPanel.tsx index d2935ec66..dd2975747 100644 --- a/web/console/src/modules/application/components/app/detail/BasicInfoPanel.tsx +++ b/web/console/src/modules/application/components/app/detail/BasicInfoPanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect } from 'react-redux'; import { RootProps } from '../AppContainer'; diff --git a/web/console/src/modules/application/components/app/detail/HeaderPanel.tsx b/web/console/src/modules/application/components/app/detail/HeaderPanel.tsx index 67aa35ca7..f9520e3b5 100644 --- a/web/console/src/modules/application/components/app/detail/HeaderPanel.tsx +++ b/web/console/src/modules/application/components/app/detail/HeaderPanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect } from 'react-redux'; import { RootProps } from '../AppContainer'; diff --git a/web/console/src/modules/application/components/app/detail/HistoryTablePanel.tsx b/web/console/src/modules/application/components/app/detail/HistoryTablePanel.tsx index c3e14b401..d1397e426 100644 --- a/web/console/src/modules/application/components/app/detail/HistoryTablePanel.tsx +++ b/web/console/src/modules/application/components/app/detail/HistoryTablePanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect } from 'react-redux'; import { LinkButton, YamlEditorPanel } from '../../../../common/components'; diff --git a/web/console/src/modules/application/components/app/detail/ResourceTablePanel.tsx b/web/console/src/modules/application/components/app/detail/ResourceTablePanel.tsx index b1bfc38e4..3038311f0 100644 --- a/web/console/src/modules/application/components/app/detail/ResourceTablePanel.tsx +++ b/web/console/src/modules/application/components/app/detail/ResourceTablePanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect } from 'react-redux'; import { Table, TableColumn, Text, Modal, Card, Bubble, Icon, ContentView } from '@tea/component'; diff --git a/web/console/src/modules/application/components/app/list/ActionPanel.tsx b/web/console/src/modules/application/components/app/list/ActionPanel.tsx index 0c8ac0a68..c581ec373 100644 --- a/web/console/src/modules/application/components/app/list/ActionPanel.tsx +++ b/web/console/src/modules/application/components/app/list/ActionPanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect } from 'react-redux'; import { Justify, Icon, Table, Button, SearchBox } from '@tea/component'; diff --git a/web/console/src/modules/application/components/app/list/AppList.tsx b/web/console/src/modules/application/components/app/list/AppList.tsx index 2ac67646e..2786aa69a 100644 --- a/web/console/src/modules/application/components/app/list/AppList.tsx +++ b/web/console/src/modules/application/components/app/list/AppList.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect } from 'react-redux'; import { bindActionCreators } from '@tencent/ff-redux'; diff --git a/web/console/src/modules/application/components/app/list/HeaderPanel.project.tsx b/web/console/src/modules/application/components/app/list/HeaderPanel.project.tsx index 9d9344e45..8b2faf4b9 100644 --- a/web/console/src/modules/application/components/app/list/HeaderPanel.project.tsx +++ b/web/console/src/modules/application/components/app/list/HeaderPanel.project.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect } from 'react-redux'; import { Justify, Icon, Select, Tooltip } from '@tea/component'; diff --git a/web/console/src/modules/application/components/app/list/HeaderPanel.tsx b/web/console/src/modules/application/components/app/list/HeaderPanel.tsx index 93e5830f9..f769da217 100644 --- a/web/console/src/modules/application/components/app/list/HeaderPanel.tsx +++ b/web/console/src/modules/application/components/app/list/HeaderPanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect } from 'react-redux'; import { Justify, Icon } from '@tea/component'; diff --git a/web/console/src/modules/application/components/app/list/TablePanel.tsx b/web/console/src/modules/application/components/app/list/TablePanel.tsx index f34f26d8c..5d680dd5f 100644 --- a/web/console/src/modules/application/components/app/list/TablePanel.tsx +++ b/web/console/src/modules/application/components/app/list/TablePanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect } from 'react-redux'; import { TablePanel as CTablePanel } from '@tencent/ff-component'; diff --git a/web/console/src/modules/application/constants/ActionTypes.ts b/web/console/src/modules/application/constants/ActionTypes.ts index 109d73669..b9192653f 100644 --- a/web/console/src/modules/application/constants/ActionTypes.ts +++ b/web/console/src/modules/application/constants/ActionTypes.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ /** ----- 选择栏 ----- */ export const ClusterList = 'ClusterList'; export const NamespaceList = 'NamespaceList'; diff --git a/web/console/src/modules/application/constants/AppValidateConfig.ts b/web/console/src/modules/application/constants/AppValidateConfig.ts index 6eed4811b..39491d0bb 100644 --- a/web/console/src/modules/application/constants/AppValidateConfig.ts +++ b/web/console/src/modules/application/constants/AppValidateConfig.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { ModelTypeEnum, RuleTypeEnum, ValidateSchema, ValidatorStatusEnum } from '@tencent/ff-validator'; import { Validation } from '../../common/models'; diff --git a/web/console/src/modules/application/constants/initState.ts b/web/console/src/modules/application/constants/initState.ts index c465b2129..2b2b9fb89 100644 --- a/web/console/src/modules/application/constants/initState.ts +++ b/web/console/src/modules/application/constants/initState.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { uuid } from '@tencent/ff-redux'; export const initAppCreationState = { diff --git a/web/console/src/modules/application/index.tsx b/web/console/src/modules/application/index.tsx index eb1233104..dd3852b57 100644 --- a/web/console/src/modules/application/index.tsx +++ b/web/console/src/modules/application/index.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { ApplicationAppContainer } from './components/ApplicationApp'; diff --git a/web/console/src/modules/application/models/App.ts b/web/console/src/modules/application/models/App.ts index ba92740ae..f91ca985a 100644 --- a/web/console/src/modules/application/models/App.ts +++ b/web/console/src/modules/application/models/App.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { Identifiable } from '@tencent/ff-redux'; import { Validation } from '../../common/models'; diff --git a/web/console/src/modules/application/models/Chart.ts b/web/console/src/modules/application/models/Chart.ts index 183752a66..5e13c1adb 100644 --- a/web/console/src/modules/application/models/Chart.ts +++ b/web/console/src/modules/application/models/Chart.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { Identifiable } from '@tencent/ff-redux'; import { Validation } from '../../common/models'; diff --git a/web/console/src/modules/application/models/ChartGroup.ts b/web/console/src/modules/application/models/ChartGroup.ts index 3ed43b43f..ba7d28a2d 100644 --- a/web/console/src/modules/application/models/ChartGroup.ts +++ b/web/console/src/modules/application/models/ChartGroup.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { Identifiable } from '@tencent/ff-redux'; export interface ChartGroup extends Identifiable { diff --git a/web/console/src/modules/application/models/Cluster.ts b/web/console/src/modules/application/models/Cluster.ts index 7e479b84d..ee8c1865e 100644 --- a/web/console/src/modules/application/models/Cluster.ts +++ b/web/console/src/modules/application/models/Cluster.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { Identifiable } from '@tencent/ff-redux'; import { Validation } from '../../common/models'; diff --git a/web/console/src/modules/application/models/Namespace.ts b/web/console/src/modules/application/models/Namespace.ts index 71f761888..f183a1261 100644 --- a/web/console/src/modules/application/models/Namespace.ts +++ b/web/console/src/modules/application/models/Namespace.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { Identifiable } from '@tencent/ff-redux'; import { Validation } from '../../common/models'; diff --git a/web/console/src/modules/application/models/Project.ts b/web/console/src/modules/application/models/Project.ts index b16849c2d..e3d46a028 100644 --- a/web/console/src/modules/application/models/Project.ts +++ b/web/console/src/modules/application/models/Project.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { Identifiable } from '@tencent/ff-redux'; export interface Project extends Identifiable { diff --git a/web/console/src/modules/application/models/RootState.ts b/web/console/src/modules/application/models/RootState.ts index d43dae32b..8e3fa71a8 100644 --- a/web/console/src/modules/application/models/RootState.ts +++ b/web/console/src/modules/application/models/RootState.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { WorkflowState, FetcherState, FFListModel, FFObjectModel } from '@tencent/ff-redux'; import { App, diff --git a/web/console/src/modules/application/models/index.ts b/web/console/src/modules/application/models/index.ts index cc444d45c..7f5b11888 100644 --- a/web/console/src/modules/application/models/index.ts +++ b/web/console/src/modules/application/models/index.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export * from './App'; export * from './Cluster'; export * from './Namespace'; diff --git a/web/console/src/modules/application/reducers/RootReducer.ts b/web/console/src/modules/application/reducers/RootReducer.ts index 23316b244..fe65eee61 100644 --- a/web/console/src/modules/application/reducers/RootReducer.ts +++ b/web/console/src/modules/application/reducers/RootReducer.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { combineReducers } from 'redux'; import { diff --git a/web/console/src/modules/application/router.project.ts b/web/console/src/modules/application/router.project.ts index cd678570f..cad2f6705 100644 --- a/web/console/src/modules/application/router.project.ts +++ b/web/console/src/modules/application/router.project.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { Router } from '../../../helpers/Router'; /** diff --git a/web/console/src/modules/application/router.ts b/web/console/src/modules/application/router.ts index 41736ccf0..05469489d 100644 --- a/web/console/src/modules/application/router.ts +++ b/web/console/src/modules/application/router.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { Router } from '../../../helpers/Router'; /** diff --git a/web/console/src/modules/application/stores/RootStore.ts b/web/console/src/modules/application/stores/RootStore.ts index 528dcd48c..83ff139b0 100644 --- a/web/console/src/modules/application/stores/RootStore.ts +++ b/web/console/src/modules/application/stores/RootStore.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { createStore } from '@tencent/ff-redux'; import { generateResetableReducer } from '../../../../helpers'; diff --git a/web/console/src/modules/audit/WebAPI.ts b/web/console/src/modules/audit/WebAPI.ts index 936d4eece..2d1d5b9b0 100644 --- a/web/console/src/modules/audit/WebAPI.ts +++ b/web/console/src/modules/audit/WebAPI.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { OperationResult, QueryState, RecordSet, uuid } from '@tencent/ff-redux'; import { Base64 } from 'js-base64'; diff --git a/web/console/src/modules/audit/actions/auditActions.ts b/web/console/src/modules/audit/actions/auditActions.ts index 5b95a032e..305a20ce1 100644 --- a/web/console/src/modules/audit/actions/auditActions.ts +++ b/web/console/src/modules/audit/actions/auditActions.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { createFFListActions, extend, FetchOptions, generateFetcherActionCreator, generateWorkflowActionCreator, OperationTrigger diff --git a/web/console/src/modules/audit/actions/index.ts b/web/console/src/modules/audit/actions/index.ts index 362020b75..d70d1a3e9 100644 --- a/web/console/src/modules/audit/actions/index.ts +++ b/web/console/src/modules/audit/actions/index.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { auditActions } from './auditActions'; export const allActions = { audit: auditActions diff --git a/web/console/src/modules/audit/components/AuditApp.tsx b/web/console/src/modules/audit/components/AuditApp.tsx index 25938bb10..149ee4700 100644 --- a/web/console/src/modules/audit/components/AuditApp.tsx +++ b/web/console/src/modules/audit/components/AuditApp.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect, Provider } from 'react-redux'; diff --git a/web/console/src/modules/audit/components/AuditDetailsDialog.tsx b/web/console/src/modules/audit/components/AuditDetailsDialog.tsx index fa37ef760..b3a99ec6e 100644 --- a/web/console/src/modules/audit/components/AuditDetailsDialog.tsx +++ b/web/console/src/modules/audit/components/AuditDetailsDialog.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { useDispatch, useSelector } from 'react-redux'; diff --git a/web/console/src/modules/audit/components/AuditPanel.tsx b/web/console/src/modules/audit/components/AuditPanel.tsx index b9db16ce9..b1714048f 100644 --- a/web/console/src/modules/audit/components/AuditPanel.tsx +++ b/web/console/src/modules/audit/components/AuditPanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { useDispatch, useSelector } from 'react-redux'; import { Card, Form, Select, Text, DatePicker, Table, Button } from 'tea-component'; diff --git a/web/console/src/modules/audit/components/AuditSettingDialog.tsx b/web/console/src/modules/audit/components/AuditSettingDialog.tsx index 66b58bdab..b49f8a274 100644 --- a/web/console/src/modules/audit/components/AuditSettingDialog.tsx +++ b/web/console/src/modules/audit/components/AuditSettingDialog.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ /** * 审计配置 */ diff --git a/web/console/src/modules/audit/constants/ActionTypes.ts b/web/console/src/modules/audit/constants/ActionTypes.ts index 7e4531d05..6c35da280 100644 --- a/web/console/src/modules/audit/constants/ActionTypes.ts +++ b/web/console/src/modules/audit/constants/ActionTypes.ts @@ -1,2 +1,19 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export const FetchAuditList = 'FetchAuditList'; export const FetchAuditFilterCondition = 'FetchAuditFilterCondition'; diff --git a/web/console/src/modules/audit/index.tsx b/web/console/src/modules/audit/index.tsx index c65e141cf..476ab4fe8 100644 --- a/web/console/src/modules/audit/index.tsx +++ b/web/console/src/modules/audit/index.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { AuditAppContainer } from './components/AuditApp'; diff --git a/web/console/src/modules/audit/models/Audit.ts b/web/console/src/modules/audit/models/Audit.ts index 5b07cc848..119289877 100644 --- a/web/console/src/modules/audit/models/Audit.ts +++ b/web/console/src/modules/audit/models/Audit.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { Identifiable } from '@tencent/ff-redux'; export interface Audit extends Identifiable { diff --git a/web/console/src/modules/audit/models/RootState.ts b/web/console/src/modules/audit/models/RootState.ts index d934dd68f..853796a53 100644 --- a/web/console/src/modules/audit/models/RootState.ts +++ b/web/console/src/modules/audit/models/RootState.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { RouteState } from '../../../../helpers'; import { FetcherState, FFListModel, OperationResult, RecordSet, WorkflowState } from '@tencent/ff-redux'; import { Audit, AuditFilter, AuditFilterConditionValues } from '../models'; diff --git a/web/console/src/modules/audit/models/index.ts b/web/console/src/modules/audit/models/index.ts index 0064fa1ef..9e0495c5f 100644 --- a/web/console/src/modules/audit/models/index.ts +++ b/web/console/src/modules/audit/models/index.ts @@ -1,2 +1,19 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export { RootState } from './RootState'; export { Audit, AuditFilter, AuditFilterConditionValues } from './Audit'; diff --git a/web/console/src/modules/audit/reducers/RootReducer.ts b/web/console/src/modules/audit/reducers/RootReducer.ts index b9b5acf26..ab4c55902 100644 --- a/web/console/src/modules/audit/reducers/RootReducer.ts +++ b/web/console/src/modules/audit/reducers/RootReducer.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { combineReducers } from 'redux'; import { router } from '../router'; import * as ActionTypes from '../constants/ActionTypes'; diff --git a/web/console/src/modules/audit/router.ts b/web/console/src/modules/audit/router.ts index abdfdf22a..df782225c 100644 --- a/web/console/src/modules/audit/router.ts +++ b/web/console/src/modules/audit/router.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { Router } from '../../../helpers/Router'; /** diff --git a/web/console/src/modules/audit/stores/RootStore.ts b/web/console/src/modules/audit/stores/RootStore.ts index de5a4b40b..129458081 100644 --- a/web/console/src/modules/audit/stores/RootStore.ts +++ b/web/console/src/modules/audit/stores/RootStore.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { createStore } from '@tencent/ff-redux'; import { generateResetableReducer } from '../../../../helpers'; diff --git a/web/console/src/modules/cluster/WebAPI.ts b/web/console/src/modules/cluster/WebAPI.ts index acf46c577..efb2fb2bf 100644 --- a/web/console/src/modules/cluster/WebAPI.ts +++ b/web/console/src/modules/cluster/WebAPI.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { QueryState, RecordSet, uuid } from '@tencent/ff-redux'; import { subRouterConfig } from '../../../config'; diff --git a/web/console/src/modules/cluster/WebAPI/ClusterAPI.ts b/web/console/src/modules/cluster/WebAPI/ClusterAPI.ts index 4d277dd8d..b6f61193d 100644 --- a/web/console/src/modules/cluster/WebAPI/ClusterAPI.ts +++ b/web/console/src/modules/cluster/WebAPI/ClusterAPI.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { QueryState, RecordSet, uuid } from '@tencent/ff-redux'; import { resourceConfig } from '../../../../config'; diff --git a/web/console/src/modules/cluster/WebAPI/ComputerAPI.ts b/web/console/src/modules/cluster/WebAPI/ComputerAPI.ts index 7d2c4d05c..abff94890 100644 --- a/web/console/src/modules/cluster/WebAPI/ComputerAPI.ts +++ b/web/console/src/modules/cluster/WebAPI/ComputerAPI.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { QueryState, RecordSet } from '@tencent/ff-redux'; import { t, Trans } from '@tencent/tea-app/lib/i18n'; diff --git a/web/console/src/modules/cluster/WebAPI/K8sResourceAPI.ts b/web/console/src/modules/cluster/WebAPI/K8sResourceAPI.ts index 89c75546d..949788552 100644 --- a/web/console/src/modules/cluster/WebAPI/K8sResourceAPI.ts +++ b/web/console/src/modules/cluster/WebAPI/K8sResourceAPI.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { resourceConfig } from '@config'; import { QueryState, RecordSet, uuid } from '@tencent/ff-redux'; import { t, Trans } from '@tencent/tea-app/lib/i18n'; diff --git a/web/console/src/modules/cluster/WebAPI/ProjectAPI.ts b/web/console/src/modules/cluster/WebAPI/ProjectAPI.ts index 21246bc1c..0a7fbfc7d 100644 --- a/web/console/src/modules/cluster/WebAPI/ProjectAPI.ts +++ b/web/console/src/modules/cluster/WebAPI/ProjectAPI.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { QueryState, RecordSet, uuid } from '@tencent/ff-redux'; import { resourceConfig } from '../../../../config/resourceConfig'; diff --git a/web/console/src/modules/cluster/WebAPI/index.ts b/web/console/src/modules/cluster/WebAPI/index.ts index 079578276..deae3c827 100644 --- a/web/console/src/modules/cluster/WebAPI/index.ts +++ b/web/console/src/modules/cluster/WebAPI/index.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export * from './ClusterAPI'; export * from './ComputerAPI'; export * from './K8sResourceAPI'; diff --git a/web/console/src/modules/cluster/WebAPI/scale.ts b/web/console/src/modules/cluster/WebAPI/scale.ts index 8e6f1a08f..d22497e66 100644 --- a/web/console/src/modules/cluster/WebAPI/scale.ts +++ b/web/console/src/modules/cluster/WebAPI/scale.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { Modal } from '@tea/component'; import { Method, reduceK8sRestfulPath, reduceNetworkRequest } from '@helper/index'; import { RequestParams, Resource, ResourceInfo } from '../../common/models'; diff --git a/web/console/src/modules/cluster/actions/clusterActions.ts b/web/console/src/modules/cluster/actions/clusterActions.ts index dbd1ae3e9..58d41e6e3 100644 --- a/web/console/src/modules/cluster/actions/clusterActions.ts +++ b/web/console/src/modules/cluster/actions/clusterActions.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { AddonNameMapToGenerateName } from '@src/modules/addon/constants/Config'; import { AddonEditUniversalJsonYaml } from '@src/modules/addon/models'; import { createFFListActions, extend, FetchOptions, generateFetcherActionCreator, uuid } from '@tencent/ff-redux'; diff --git a/web/console/src/modules/cluster/actions/clusterCreationAction.ts b/web/console/src/modules/cluster/actions/clusterCreationAction.ts index f312e3dd4..dc6809cd5 100644 --- a/web/console/src/modules/cluster/actions/clusterCreationAction.ts +++ b/web/console/src/modules/cluster/actions/clusterCreationAction.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { deepClone, ReduxAction, uuid } from '@tencent/ff-redux'; import * as ActionType from '../constants/ActionType'; diff --git a/web/console/src/modules/cluster/actions/cmEditActions.ts b/web/console/src/modules/cluster/actions/cmEditActions.ts index 97ac2b2e8..357f749e4 100644 --- a/web/console/src/modules/cluster/actions/cmEditActions.ts +++ b/web/console/src/modules/cluster/actions/cmEditActions.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { ReduxAction, uuid } from '@tencent/ff-redux'; import { cloneDeep } from '../../common/utils'; diff --git a/web/console/src/modules/cluster/actions/computerActions.ts b/web/console/src/modules/cluster/actions/computerActions.ts index 9f67d60fb..6ef581158 100644 --- a/web/console/src/modules/cluster/actions/computerActions.ts +++ b/web/console/src/modules/cluster/actions/computerActions.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { MachineStatus } from './../constants/Config'; import { createFFListActions, extend, RecordSet, uuid } from '@tencent/ff-redux'; diff --git a/web/console/src/modules/cluster/actions/computerPodActions.ts b/web/console/src/modules/cluster/actions/computerPodActions.ts index 82ccdee67..d01396ad0 100644 --- a/web/console/src/modules/cluster/actions/computerPodActions.ts +++ b/web/console/src/modules/cluster/actions/computerPodActions.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { extend, FetchOptions, generateFetcherActionCreator, RecordSet, ReduxAction } from '@tencent/ff-redux'; import { generateQueryActionCreator } from '@tencent/qcloud-redux-query'; diff --git a/web/console/src/modules/cluster/actions/createICAction.ts b/web/console/src/modules/cluster/actions/createICAction.ts index a15ae38ac..1ab6b42a8 100644 --- a/web/console/src/modules/cluster/actions/createICAction.ts +++ b/web/console/src/modules/cluster/actions/createICAction.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { deepClone, ReduxAction, uuid } from '@tencent/ff-redux'; import * as ActionType from '../constants/ActionType'; diff --git a/web/console/src/modules/cluster/actions/dialogActions.ts b/web/console/src/modules/cluster/actions/dialogActions.ts index fd2d041d0..d9b423d89 100644 --- a/web/console/src/modules/cluster/actions/dialogActions.ts +++ b/web/console/src/modules/cluster/actions/dialogActions.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { RootState, DialogNameEnum } from '../models'; import { cloneDeep } from '../../common'; import * as ActionType from '../constants/ActionType'; diff --git a/web/console/src/modules/cluster/actions/index.ts b/web/console/src/modules/cluster/actions/index.ts index b79594b75..cf30de01b 100644 --- a/web/console/src/modules/cluster/actions/index.ts +++ b/web/console/src/modules/cluster/actions/index.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { clusterCreationAction } from './clusterCreationAction'; import { clusterActions } from './clusterActions'; import { computerActions } from './computerActions'; diff --git a/web/console/src/modules/cluster/actions/lbcfEditActions.ts b/web/console/src/modules/cluster/actions/lbcfEditActions.ts index df612365f..e6b40f760 100644 --- a/web/console/src/modules/cluster/actions/lbcfEditActions.ts +++ b/web/console/src/modules/cluster/actions/lbcfEditActions.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { FFReduxActionName } from './../constants/Config'; import { initStringArray } from './../constants/initState'; import { KeyValue } from 'src/modules/common'; diff --git a/web/console/src/modules/cluster/actions/modeActions.ts b/web/console/src/modules/cluster/actions/modeActions.ts index 5d5bf7c6b..2d8a9c4f2 100644 --- a/web/console/src/modules/cluster/actions/modeActions.ts +++ b/web/console/src/modules/cluster/actions/modeActions.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { regionActions } from './regionActions'; import { RootState } from '../models'; import * as ActionType from '../constants/ActionType'; diff --git a/web/console/src/modules/cluster/actions/namespaceActions.project.ts b/web/console/src/modules/cluster/actions/namespaceActions.project.ts index 331ac8877..5bceb6121 100644 --- a/web/console/src/modules/cluster/actions/namespaceActions.project.ts +++ b/web/console/src/modules/cluster/actions/namespaceActions.project.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { extend, FetchOptions, generateFetcherActionCreator, uuid } from '@tencent/ff-redux'; import { generateQueryActionCreator } from '@tencent/qcloud-redux-query'; diff --git a/web/console/src/modules/cluster/actions/namespaceActions.ts b/web/console/src/modules/cluster/actions/namespaceActions.ts index 913b6ef2b..008363df2 100644 --- a/web/console/src/modules/cluster/actions/namespaceActions.ts +++ b/web/console/src/modules/cluster/actions/namespaceActions.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { extend, FetchOptions, generateFetcherActionCreator } from '@tencent/ff-redux'; import { generateQueryActionCreator } from '@tencent/qcloud-redux-query'; diff --git a/web/console/src/modules/cluster/actions/namespaceEditActions.ts b/web/console/src/modules/cluster/actions/namespaceEditActions.ts index 24f51e729..69b881f9a 100644 --- a/web/console/src/modules/cluster/actions/namespaceEditActions.ts +++ b/web/console/src/modules/cluster/actions/namespaceEditActions.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { ReduxAction } from '@tencent/ff-redux'; import * as ActionType from '../constants/ActionType'; diff --git a/web/console/src/modules/cluster/actions/projectNamespaceActions.project.ts b/web/console/src/modules/cluster/actions/projectNamespaceActions.project.ts index 2689d8f51..3907dc956 100644 --- a/web/console/src/modules/cluster/actions/projectNamespaceActions.project.ts +++ b/web/console/src/modules/cluster/actions/projectNamespaceActions.project.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { extend, FetchOptions, generateFetcherActionCreator, RecordSet } from '@tencent/ff-redux'; import { generateQueryActionCreator } from '@tencent/qcloud-redux-query'; diff --git a/web/console/src/modules/cluster/actions/regionActions.project.ts b/web/console/src/modules/cluster/actions/regionActions.project.ts index cd285ed0a..0a64b3e2c 100644 --- a/web/console/src/modules/cluster/actions/regionActions.project.ts +++ b/web/console/src/modules/cluster/actions/regionActions.project.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { createFFListActions, extend } from '@tencent/ff-redux'; import { assureRegion } from '../../../../helpers'; diff --git a/web/console/src/modules/cluster/actions/regionActions.ts b/web/console/src/modules/cluster/actions/regionActions.ts index a428ab5bb..2d5e86886 100644 --- a/web/console/src/modules/cluster/actions/regionActions.ts +++ b/web/console/src/modules/cluster/actions/regionActions.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { createFFListActions, extend } from '@tencent/ff-redux'; import { assureRegion } from '../../../../helpers'; diff --git a/web/console/src/modules/cluster/actions/resourceActions.project.ts b/web/console/src/modules/cluster/actions/resourceActions.project.ts index f8688f53e..6017e46c7 100644 --- a/web/console/src/modules/cluster/actions/resourceActions.project.ts +++ b/web/console/src/modules/cluster/actions/resourceActions.project.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { extend, FetchOptions, diff --git a/web/console/src/modules/cluster/actions/resourceActions.ts b/web/console/src/modules/cluster/actions/resourceActions.ts index aa2ba9aa5..4909d7a50 100644 --- a/web/console/src/modules/cluster/actions/resourceActions.ts +++ b/web/console/src/modules/cluster/actions/resourceActions.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { createFFListActions, extend, FetchOptions, ReduxAction } from '@tencent/ff-redux'; import { resourceConfig } from '../../../../config'; import { ResourceInfo } from '../../common/models'; diff --git a/web/console/src/modules/cluster/actions/resourceDetailActions.ts b/web/console/src/modules/cluster/actions/resourceDetailActions.ts index 2c6e86d93..cc25c92f3 100644 --- a/web/console/src/modules/cluster/actions/resourceDetailActions.ts +++ b/web/console/src/modules/cluster/actions/resourceDetailActions.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { extend, FetchOptions, diff --git a/web/console/src/modules/cluster/actions/resourceDetailEventActions.ts b/web/console/src/modules/cluster/actions/resourceDetailEventActions.ts index 6f4f83666..fe4a464d6 100644 --- a/web/console/src/modules/cluster/actions/resourceDetailEventActions.ts +++ b/web/console/src/modules/cluster/actions/resourceDetailEventActions.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { createFFListActions, extend, ReduxAction } from '@tencent/ff-redux'; import { resourceConfig } from '../../../../config'; diff --git a/web/console/src/modules/cluster/actions/resourceEventActions.ts b/web/console/src/modules/cluster/actions/resourceEventActions.ts index e93f44ddc..1bb768cf6 100644 --- a/web/console/src/modules/cluster/actions/resourceEventActions.ts +++ b/web/console/src/modules/cluster/actions/resourceEventActions.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { extend, FetchOptions, generateFetcherActionCreator } from '@tencent/ff-redux'; import { generateQueryActionCreator } from '@tencent/qcloud-redux-query'; diff --git a/web/console/src/modules/cluster/actions/resourceLogActions.ts b/web/console/src/modules/cluster/actions/resourceLogActions.ts index 4f23a58d1..2defd68b9 100644 --- a/web/console/src/modules/cluster/actions/resourceLogActions.ts +++ b/web/console/src/modules/cluster/actions/resourceLogActions.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { extend, FetchOptions, generateFetcherActionCreator } from '@tencent/ff-redux'; import { generateQueryActionCreator } from '@tencent/qcloud-redux-query'; diff --git a/web/console/src/modules/cluster/actions/resourcePodActions.ts b/web/console/src/modules/cluster/actions/resourcePodActions.ts index d7036eeba..321b3f1aa 100644 --- a/web/console/src/modules/cluster/actions/resourcePodActions.ts +++ b/web/console/src/modules/cluster/actions/resourcePodActions.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { extend, FetchOptions, generateFetcherActionCreator, RecordSet, ReduxAction } from '@tencent/ff-redux'; import { generateQueryActionCreator } from '@tencent/qcloud-redux-query'; diff --git a/web/console/src/modules/cluster/actions/resourcePodLogActions.ts b/web/console/src/modules/cluster/actions/resourcePodLogActions.ts index 46b7c223b..4fd61624b 100644 --- a/web/console/src/modules/cluster/actions/resourcePodLogActions.ts +++ b/web/console/src/modules/cluster/actions/resourcePodLogActions.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { extend, FetchOptions, generateFetcherActionCreator, ReduxAction } from '@tencent/ff-redux'; import { generateQueryActionCreator } from '@tencent/qcloud-redux-query'; diff --git a/web/console/src/modules/cluster/actions/resourceRsActions.ts b/web/console/src/modules/cluster/actions/resourceRsActions.ts index 58a40368d..5698d0004 100644 --- a/web/console/src/modules/cluster/actions/resourceRsActions.ts +++ b/web/console/src/modules/cluster/actions/resourceRsActions.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { extend, FetchOptions, generateFetcherActionCreator } from '@tencent/ff-redux'; import { generateQueryActionCreator } from '@tencent/qcloud-redux-query'; diff --git a/web/console/src/modules/cluster/actions/secretEditActions.ts b/web/console/src/modules/cluster/actions/secretEditActions.ts index db561dae5..be84ca5c4 100644 --- a/web/console/src/modules/cluster/actions/secretEditActions.ts +++ b/web/console/src/modules/cluster/actions/secretEditActions.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { extend, ReduxAction, uuid } from '@tencent/ff-redux'; import { generateFetcherActionCreator } from '@tencent/qcloud-redux-fetcher'; import { generateQueryActionCreator } from '@tencent/qcloud-redux-query'; diff --git a/web/console/src/modules/cluster/actions/serviceEditActions.ts b/web/console/src/modules/cluster/actions/serviceEditActions.ts index 4a01e7e4d..14571823c 100644 --- a/web/console/src/modules/cluster/actions/serviceEditActions.ts +++ b/web/console/src/modules/cluster/actions/serviceEditActions.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { extend, FetchOptions, generateFetcherActionCreator, ReduxAction, uuid } from '@tencent/ff-redux'; import { generateQueryActionCreator } from '@tencent/qcloud-redux-query'; diff --git a/web/console/src/modules/cluster/actions/subRouterActions.project.ts b/web/console/src/modules/cluster/actions/subRouterActions.project.ts index 4c5848184..045959068 100644 --- a/web/console/src/modules/cluster/actions/subRouterActions.project.ts +++ b/web/console/src/modules/cluster/actions/subRouterActions.project.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { extend, FetchOptions, generateFetcherActionCreator } from '@tencent/ff-redux'; import { generateQueryActionCreator } from '@tencent/qcloud-redux-query'; diff --git a/web/console/src/modules/cluster/actions/subRouterActions.ts b/web/console/src/modules/cluster/actions/subRouterActions.ts index 0ec3e4c6b..cac435cee 100644 --- a/web/console/src/modules/cluster/actions/subRouterActions.ts +++ b/web/console/src/modules/cluster/actions/subRouterActions.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { extend, FetchOptions, generateFetcherActionCreator } from '@tencent/ff-redux'; import { generateQueryActionCreator } from '@tencent/qcloud-redux-query'; diff --git a/web/console/src/modules/cluster/actions/validateCMActions.ts b/web/console/src/modules/cluster/actions/validateCMActions.ts index ab940caa0..edbd01c5e 100644 --- a/web/console/src/modules/cluster/actions/validateCMActions.ts +++ b/web/console/src/modules/cluster/actions/validateCMActions.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as ActionType from '../constants/ActionType'; import { RootState, ConfigMapEdit } from '../models'; import { cloneDeep } from '../../common/utils'; diff --git a/web/console/src/modules/cluster/actions/validateClusterCreationAction.ts b/web/console/src/modules/cluster/actions/validateClusterCreationAction.ts index 7d6824aaa..1cf44c91f 100644 --- a/web/console/src/modules/cluster/actions/validateClusterCreationAction.ts +++ b/web/console/src/modules/cluster/actions/validateClusterCreationAction.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { ClusterCreationState } from './../models/ClusterCreationState'; import { RootState, NamespaceEdit } from '../models'; import { clusterCreationAction } from './clusterCreationAction'; diff --git a/web/console/src/modules/cluster/actions/validateCreateICAction.ts b/web/console/src/modules/cluster/actions/validateCreateICAction.ts index 747b23d74..83e4dac51 100644 --- a/web/console/src/modules/cluster/actions/validateCreateICAction.ts +++ b/web/console/src/modules/cluster/actions/validateCreateICAction.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as ActionType from '../constants/ActionType'; import { RootState, NamespaceEdit } from '../models'; import validatorJs from 'validator'; diff --git a/web/console/src/modules/cluster/actions/validateLbcfActions.ts b/web/console/src/modules/cluster/actions/validateLbcfActions.ts index df3d13f1e..1bdf60924 100644 --- a/web/console/src/modules/cluster/actions/validateLbcfActions.ts +++ b/web/console/src/modules/cluster/actions/validateLbcfActions.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { KeyValue } from 'src/modules/common'; import { deepClone, FFListModel } from '@tencent/ff-redux'; import { t, Trans } from '@tencent/tea-app/lib/i18n'; diff --git a/web/console/src/modules/cluster/actions/validateNamespaceActions.ts b/web/console/src/modules/cluster/actions/validateNamespaceActions.ts index fd876d90b..443031658 100644 --- a/web/console/src/modules/cluster/actions/validateNamespaceActions.ts +++ b/web/console/src/modules/cluster/actions/validateNamespaceActions.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as ActionType from '../constants/ActionType'; import { RootState, NamespaceEdit } from '../models'; import { t, Trans } from '@tencent/tea-app/lib/i18n'; diff --git a/web/console/src/modules/cluster/actions/validateSecretActinos.ts b/web/console/src/modules/cluster/actions/validateSecretActinos.ts index c6e0834ed..16a5c44e8 100644 --- a/web/console/src/modules/cluster/actions/validateSecretActinos.ts +++ b/web/console/src/modules/cluster/actions/validateSecretActinos.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as ActionType from '../constants/ActionType'; import { RootState, SecretData, SecretEdit } from '../models'; import { cloneDeep } from '../../common/utils'; diff --git a/web/console/src/modules/cluster/actions/validateServiceActions.ts b/web/console/src/modules/cluster/actions/validateServiceActions.ts index 7380ab87b..347cdac05 100644 --- a/web/console/src/modules/cluster/actions/validateServiceActions.ts +++ b/web/console/src/modules/cluster/actions/validateServiceActions.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { SessionAffinity } from './../constants/Config'; import * as ActionType from '../constants/ActionType'; import { RootState, PortMap, ServiceEdit, Selector } from '../models'; diff --git a/web/console/src/modules/cluster/actions/validateWorkloadActions.ts b/web/console/src/modules/cluster/actions/validateWorkloadActions.ts index 630c8a6ec..35f892f07 100644 --- a/web/console/src/modules/cluster/actions/validateWorkloadActions.ts +++ b/web/console/src/modules/cluster/actions/validateWorkloadActions.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { affinityType } from './../constants/Config'; import * as ActionType from '../constants/ActionType'; import { diff --git a/web/console/src/modules/cluster/actions/validatorActions.ts b/web/console/src/modules/cluster/actions/validatorActions.ts index 3821725f2..e8191412c 100644 --- a/web/console/src/modules/cluster/actions/validatorActions.ts +++ b/web/console/src/modules/cluster/actions/validatorActions.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { ComputerLabel, ComputerTaint } from './../models/Computer'; import { RootState } from '../models'; import * as ActionType from '../constants/ActionType'; diff --git a/web/console/src/modules/cluster/actions/workflowActions.ts b/web/console/src/modules/cluster/actions/workflowActions.ts index c71559b9a..493ef346d 100644 --- a/web/console/src/modules/cluster/actions/workflowActions.ts +++ b/web/console/src/modules/cluster/actions/workflowActions.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { extend, generateWorkflowActionCreator, diff --git a/web/console/src/modules/cluster/actions/workloadConfigActions.ts b/web/console/src/modules/cluster/actions/workloadConfigActions.ts index 40c9bde1b..ab13a7435 100644 --- a/web/console/src/modules/cluster/actions/workloadConfigActions.ts +++ b/web/console/src/modules/cluster/actions/workloadConfigActions.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { extend, uuid } from '@tencent/ff-redux'; import { generateFetcherActionCreator } from '@tencent/qcloud-redux-fetcher'; import { generateQueryActionCreator } from '@tencent/qcloud-redux-query'; diff --git a/web/console/src/modules/cluster/actions/workloadEditActions.ts b/web/console/src/modules/cluster/actions/workloadEditActions.ts index 579404289..5c44b3958 100644 --- a/web/console/src/modules/cluster/actions/workloadEditActions.ts +++ b/web/console/src/modules/cluster/actions/workloadEditActions.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { ResourceInfo } from '@src/modules/common'; import { FFReduxActionName } from './../constants/Config'; import { Computer, ComputerFilter } from './../models/Computer'; diff --git a/web/console/src/modules/cluster/actions/workloadPvcActions.ts b/web/console/src/modules/cluster/actions/workloadPvcActions.ts index 7b08ed050..6110577e1 100644 --- a/web/console/src/modules/cluster/actions/workloadPvcActions.ts +++ b/web/console/src/modules/cluster/actions/workloadPvcActions.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { extend, FetchOptions, generateFetcherActionCreator } from '@tencent/ff-redux'; import { generateQueryActionCreator } from '@tencent/qcloud-redux-query'; diff --git a/web/console/src/modules/cluster/actions/workloadSecretActions.ts b/web/console/src/modules/cluster/actions/workloadSecretActions.ts index 6d730a7a4..3976097e9 100644 --- a/web/console/src/modules/cluster/actions/workloadSecretActions.ts +++ b/web/console/src/modules/cluster/actions/workloadSecretActions.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { extend, FetchOptions, generateFetcherActionCreator, ReduxAction, uuid } from '@tencent/ff-redux'; diff --git a/web/console/src/modules/cluster/components/ApplicationApp.project.tsx b/web/console/src/modules/cluster/components/ApplicationApp.project.tsx index 6331946c6..fe4b5d659 100644 --- a/web/console/src/modules/cluster/components/ApplicationApp.project.tsx +++ b/web/console/src/modules/cluster/components/ApplicationApp.project.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect, Provider } from 'react-redux'; diff --git a/web/console/src/modules/cluster/components/ApplicationHeadPanel.project.tsx b/web/console/src/modules/cluster/components/ApplicationHeadPanel.project.tsx index 253cf871a..1bb830fe5 100644 --- a/web/console/src/modules/cluster/components/ApplicationHeadPanel.project.tsx +++ b/web/console/src/modules/cluster/components/ApplicationHeadPanel.project.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect } from 'react-redux'; diff --git a/web/console/src/modules/cluster/components/ClusterApp.tsx b/web/console/src/modules/cluster/components/ClusterApp.tsx index a7e4a40e7..0a8c2dfcd 100644 --- a/web/console/src/modules/cluster/components/ClusterApp.tsx +++ b/web/console/src/modules/cluster/components/ClusterApp.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect, Provider } from 'react-redux'; diff --git a/web/console/src/modules/cluster/components/KubectlDialog.tsx b/web/console/src/modules/cluster/components/KubectlDialog.tsx index 4a1827cb3..b4e4b3eb4 100644 --- a/web/console/src/modules/cluster/components/KubectlDialog.tsx +++ b/web/console/src/modules/cluster/components/KubectlDialog.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect } from 'react-redux'; diff --git a/web/console/src/modules/cluster/components/clusterManage/CIDR.tsx b/web/console/src/modules/cluster/components/clusterManage/CIDR.tsx index c02eea3d2..8780b07b0 100644 --- a/web/console/src/modules/cluster/components/clusterManage/CIDR.tsx +++ b/web/console/src/modules/cluster/components/clusterManage/CIDR.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { RootProps } from '../ClusterApp'; import { Bubble, ExternalLink, Icon, Checkbox } from '@tea/component'; diff --git a/web/console/src/modules/cluster/components/clusterManage/ClusterActionPanel.tsx b/web/console/src/modules/cluster/components/clusterManage/ClusterActionPanel.tsx index 4ce56d6f9..79eeac69f 100644 --- a/web/console/src/modules/cluster/components/clusterManage/ClusterActionPanel.tsx +++ b/web/console/src/modules/cluster/components/clusterManage/ClusterActionPanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect } from 'react-redux'; diff --git a/web/console/src/modules/cluster/components/clusterManage/ClusterDeleteDialog.tsx b/web/console/src/modules/cluster/components/clusterManage/ClusterDeleteDialog.tsx index ee5d13b88..4c4a69dd1 100644 --- a/web/console/src/modules/cluster/components/clusterManage/ClusterDeleteDialog.tsx +++ b/web/console/src/modules/cluster/components/clusterManage/ClusterDeleteDialog.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect } from 'react-redux'; diff --git a/web/console/src/modules/cluster/components/clusterManage/ClusterHeadPanel.tsx b/web/console/src/modules/cluster/components/clusterManage/ClusterHeadPanel.tsx index bc5f0d656..5e91bb6f4 100644 --- a/web/console/src/modules/cluster/components/clusterManage/ClusterHeadPanel.tsx +++ b/web/console/src/modules/cluster/components/clusterManage/ClusterHeadPanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect } from 'react-redux'; diff --git a/web/console/src/modules/cluster/components/clusterManage/ClusterStatusDialog.tsx b/web/console/src/modules/cluster/components/clusterManage/ClusterStatusDialog.tsx index 3e79f5118..d08886ec7 100644 --- a/web/console/src/modules/cluster/components/clusterManage/ClusterStatusDialog.tsx +++ b/web/console/src/modules/cluster/components/clusterManage/ClusterStatusDialog.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect } from 'react-redux'; diff --git a/web/console/src/modules/cluster/components/clusterManage/ClusterSubpageHeaderPanel.tsx b/web/console/src/modules/cluster/components/clusterManage/ClusterSubpageHeaderPanel.tsx index 90d0055d8..aff9c7f45 100644 --- a/web/console/src/modules/cluster/components/clusterManage/ClusterSubpageHeaderPanel.tsx +++ b/web/console/src/modules/cluster/components/clusterManage/ClusterSubpageHeaderPanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { RootProps } from '../ClusterApp'; import { router } from '../../router'; diff --git a/web/console/src/modules/cluster/components/clusterManage/ClusterTablePanel.tsx b/web/console/src/modules/cluster/components/clusterManage/ClusterTablePanel.tsx index acd8a55e6..e38d586dd 100644 --- a/web/console/src/modules/cluster/components/clusterManage/ClusterTablePanel.tsx +++ b/web/console/src/modules/cluster/components/clusterManage/ClusterTablePanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect } from 'react-redux'; diff --git a/web/console/src/modules/cluster/components/clusterManage/ClusterUpdate.tsx b/web/console/src/modules/cluster/components/clusterManage/ClusterUpdate.tsx index 2fd8de873..57cbcf0d5 100644 --- a/web/console/src/modules/cluster/components/clusterManage/ClusterUpdate.tsx +++ b/web/console/src/modules/cluster/components/clusterManage/ClusterUpdate.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import React, { useState, useEffect } from 'react'; import { AntdLayout } from '@src/modules/common/layouts'; import { Button, H5, Form, Select, Checkbox, InputNumber } from 'tea-component'; diff --git a/web/console/src/modules/cluster/components/clusterManage/ConfigPromethus.tsx b/web/console/src/modules/cluster/components/clusterManage/ConfigPromethus.tsx index 506e4f73a..ee0ab2bfe 100644 --- a/web/console/src/modules/cluster/components/clusterManage/ConfigPromethus.tsx +++ b/web/console/src/modules/cluster/components/clusterManage/ConfigPromethus.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import React from 'react'; import { enablePromethus, EnablePromethusParams } from '@/src/webApi/promethus'; import { RootProps } from '../ClusterApp'; diff --git a/web/console/src/modules/cluster/components/clusterManage/CreateClusterPanel.tsx b/web/console/src/modules/cluster/components/clusterManage/CreateClusterPanel.tsx index 8d04c3687..fe1b901d2 100644 --- a/web/console/src/modules/cluster/components/clusterManage/CreateClusterPanel.tsx +++ b/web/console/src/modules/cluster/components/clusterManage/CreateClusterPanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect } from 'react-redux'; diff --git a/web/console/src/modules/cluster/components/clusterManage/CreateICPanel.tsx b/web/console/src/modules/cluster/components/clusterManage/CreateICPanel.tsx index 1a483d7b5..06346a099 100644 --- a/web/console/src/modules/cluster/components/clusterManage/CreateICPanel.tsx +++ b/web/console/src/modules/cluster/components/clusterManage/CreateICPanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect } from 'react-redux'; diff --git a/web/console/src/modules/cluster/components/clusterManage/InputLabelsPanel.tsx b/web/console/src/modules/cluster/components/clusterManage/InputLabelsPanel.tsx index 3ce28c2ff..10ea8e88b 100644 --- a/web/console/src/modules/cluster/components/clusterManage/InputLabelsPanel.tsx +++ b/web/console/src/modules/cluster/components/clusterManage/InputLabelsPanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { FormPanel } from '@tencent/ff-component'; import { t } from '@tencent/tea-app/lib/i18n'; import { Bubble, Button, Input } from '@tencent/tea-component'; diff --git a/web/console/src/modules/cluster/components/clusterManage/KubeconfigFileParse.tsx b/web/console/src/modules/cluster/components/clusterManage/KubeconfigFileParse.tsx index 14802d7ba..5c4ae0c82 100644 --- a/web/console/src/modules/cluster/components/clusterManage/KubeconfigFileParse.tsx +++ b/web/console/src/modules/cluster/components/clusterManage/KubeconfigFileParse.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import React, { useState } from 'react'; import { Upload, Text } from '@tea/component'; import * as yaml from 'js-yaml'; diff --git a/web/console/src/modules/cluster/components/clusterManage/ModifyClusterNameDialog.tsx b/web/console/src/modules/cluster/components/clusterManage/ModifyClusterNameDialog.tsx index a480c00f8..a2d45e0ef 100644 --- a/web/console/src/modules/cluster/components/clusterManage/ModifyClusterNameDialog.tsx +++ b/web/console/src/modules/cluster/components/clusterManage/ModifyClusterNameDialog.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import classNames from 'classnames'; import * as React from 'react'; import { connect } from 'react-redux'; diff --git a/web/console/src/modules/cluster/components/clusterManage/SelectICComputerPanel.tsx b/web/console/src/modules/cluster/components/clusterManage/SelectICComputerPanel.tsx index 1bddac3b2..c027aff91 100644 --- a/web/console/src/modules/cluster/components/clusterManage/SelectICComputerPanel.tsx +++ b/web/console/src/modules/cluster/components/clusterManage/SelectICComputerPanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { FormPanel } from '@tencent/ff-component'; import { t } from '@tencent/tea-app/lib/i18n'; import { Button, Justify, Segment } from '@tencent/tea-component'; diff --git a/web/console/src/modules/cluster/components/clusterManage/ShowICComputerPanel.tsx b/web/console/src/modules/cluster/components/clusterManage/ShowICComputerPanel.tsx index 4f7702c69..25462d201 100644 --- a/web/console/src/modules/cluster/components/clusterManage/ShowICComputerPanel.tsx +++ b/web/console/src/modules/cluster/components/clusterManage/ShowICComputerPanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { ICComponter } from '../../models'; import { Justify, Button, Text, Bubble } from '@tencent/tea-component'; diff --git a/web/console/src/modules/cluster/components/clusterManage/TcrRegistyDeployDialog.tsx b/web/console/src/modules/cluster/components/clusterManage/TcrRegistyDeployDialog.tsx index 01383f6b2..7a751e9ab 100644 --- a/web/console/src/modules/cluster/components/clusterManage/TcrRegistyDeployDialog.tsx +++ b/web/console/src/modules/cluster/components/clusterManage/TcrRegistyDeployDialog.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect } from 'react-redux'; diff --git a/web/console/src/modules/cluster/components/clusterManage/UpdateClusterTokenDialog.tsx b/web/console/src/modules/cluster/components/clusterManage/UpdateClusterTokenDialog.tsx index 20895d60a..aae280551 100644 --- a/web/console/src/modules/cluster/components/clusterManage/UpdateClusterTokenDialog.tsx +++ b/web/console/src/modules/cluster/components/clusterManage/UpdateClusterTokenDialog.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect } from 'react-redux'; import { CreateResource, Validation } from 'src/modules/common'; diff --git a/web/console/src/modules/cluster/components/clusterManage/WorkerUpdate.tsx b/web/console/src/modules/cluster/components/clusterManage/WorkerUpdate.tsx index 0affeccf6..6d05fd1c2 100644 --- a/web/console/src/modules/cluster/components/clusterManage/WorkerUpdate.tsx +++ b/web/console/src/modules/cluster/components/clusterManage/WorkerUpdate.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import React, { useEffect, useState } from 'react'; import { AntdLayout } from '@src/modules/common/layouts'; import { RootProps } from '../ClusterApp'; diff --git a/web/console/src/modules/cluster/components/resource/ResourceContainerPanel.tsx b/web/console/src/modules/cluster/components/resource/ResourceContainerPanel.tsx index 2f2b53ea5..d5576008e 100644 --- a/web/console/src/modules/cluster/components/resource/ResourceContainerPanel.tsx +++ b/web/console/src/modules/cluster/components/resource/ResourceContainerPanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect } from 'react-redux'; diff --git a/web/console/src/modules/cluster/components/resource/ResourceHeaderPanel.project.tsx b/web/console/src/modules/cluster/components/resource/ResourceHeaderPanel.project.tsx index 24877c1b6..588c1994e 100644 --- a/web/console/src/modules/cluster/components/resource/ResourceHeaderPanel.project.tsx +++ b/web/console/src/modules/cluster/components/resource/ResourceHeaderPanel.project.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect } from 'react-redux'; diff --git a/web/console/src/modules/cluster/components/resource/ResourceHeaderPanel.tsx b/web/console/src/modules/cluster/components/resource/ResourceHeaderPanel.tsx index 095156ea4..f725b6137 100644 --- a/web/console/src/modules/cluster/components/resource/ResourceHeaderPanel.tsx +++ b/web/console/src/modules/cluster/components/resource/ResourceHeaderPanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect } from 'react-redux'; diff --git a/web/console/src/modules/cluster/components/resource/ResourceListPanel.tsx b/web/console/src/modules/cluster/components/resource/ResourceListPanel.tsx index 0e77973de..7d89ab191 100644 --- a/web/console/src/modules/cluster/components/resource/ResourceListPanel.tsx +++ b/web/console/src/modules/cluster/components/resource/ResourceListPanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect } from 'react-redux'; import { TipInfo } from 'src/modules/common'; diff --git a/web/console/src/modules/cluster/components/resource/ResourceSidebarPanel.tsx b/web/console/src/modules/cluster/components/resource/ResourceSidebarPanel.tsx index 8e1082a7d..b76b21511 100644 --- a/web/console/src/modules/cluster/components/resource/ResourceSidebarPanel.tsx +++ b/web/console/src/modules/cluster/components/resource/ResourceSidebarPanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as classnames from 'classnames'; import * as React from 'react'; import { connect } from 'react-redux'; diff --git a/web/console/src/modules/cluster/components/resource/YamlEditorPanel.tsx b/web/console/src/modules/cluster/components/resource/YamlEditorPanel.tsx index 09402d98f..675615341 100644 --- a/web/console/src/modules/cluster/components/resource/YamlEditorPanel.tsx +++ b/web/console/src/modules/cluster/components/resource/YamlEditorPanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { UnControlled as CodeMirror } from 'react-codemirror2'; diff --git a/web/console/src/modules/cluster/components/resource/clusterInfomation/ClusterDetail.tsx b/web/console/src/modules/cluster/components/resource/clusterInfomation/ClusterDetail.tsx index bd360d59e..09477fa05 100644 --- a/web/console/src/modules/cluster/components/resource/clusterInfomation/ClusterDetail.tsx +++ b/web/console/src/modules/cluster/components/resource/clusterInfomation/ClusterDetail.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect } from 'react-redux'; diff --git a/web/console/src/modules/cluster/components/resource/clusterInfomation/ClusterDetailBasicInfoPanel.tsx b/web/console/src/modules/cluster/components/resource/clusterInfomation/ClusterDetailBasicInfoPanel.tsx index d8b1cd365..4b7465e3e 100644 --- a/web/console/src/modules/cluster/components/resource/clusterInfomation/ClusterDetailBasicInfoPanel.tsx +++ b/web/console/src/modules/cluster/components/resource/clusterInfomation/ClusterDetailBasicInfoPanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { FormPanel } from '@tencent/ff-component'; diff --git a/web/console/src/modules/cluster/components/resource/clusterInfomation/ClusterPlugInfoPanel.tsx b/web/console/src/modules/cluster/components/resource/clusterInfomation/ClusterPlugInfoPanel.tsx index b9288f4c9..532b3049e 100644 --- a/web/console/src/modules/cluster/components/resource/clusterInfomation/ClusterPlugInfoPanel.tsx +++ b/web/console/src/modules/cluster/components/resource/clusterInfomation/ClusterPlugInfoPanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import React, { useEffect } from 'react'; import { FormPanel } from '@tencent/ff-component'; import { Table, TableColumn, Button, Icon } from '@tea/component'; diff --git a/web/console/src/modules/cluster/components/resource/clusterInfomation/UpdateClusterAllocationRatioDialog.tsx b/web/console/src/modules/cluster/components/resource/clusterInfomation/UpdateClusterAllocationRatioDialog.tsx index 06b425387..54f98598e 100644 --- a/web/console/src/modules/cluster/components/resource/clusterInfomation/UpdateClusterAllocationRatioDialog.tsx +++ b/web/console/src/modules/cluster/components/resource/clusterInfomation/UpdateClusterAllocationRatioDialog.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect } from 'react-redux'; import { CreateResource } from 'src/modules/common'; diff --git a/web/console/src/modules/cluster/components/resource/nodeManage/BatchDrainComputerDialog.tsx b/web/console/src/modules/cluster/components/resource/nodeManage/BatchDrainComputerDialog.tsx index 60228d124..2bb125ecf 100644 --- a/web/console/src/modules/cluster/components/resource/nodeManage/BatchDrainComputerDialog.tsx +++ b/web/console/src/modules/cluster/components/resource/nodeManage/BatchDrainComputerDialog.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as classnames from 'classnames'; import * as React from 'react'; diff --git a/web/console/src/modules/cluster/components/resource/nodeManage/BatchTurnOnScheduleComputerDialog.tsx b/web/console/src/modules/cluster/components/resource/nodeManage/BatchTurnOnScheduleComputerDialog.tsx index 37cf6109d..18ebf99b2 100644 --- a/web/console/src/modules/cluster/components/resource/nodeManage/BatchTurnOnScheduleComputerDialog.tsx +++ b/web/console/src/modules/cluster/components/resource/nodeManage/BatchTurnOnScheduleComputerDialog.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as classnames from 'classnames'; import * as React from 'react'; import { connect } from 'react-redux'; diff --git a/web/console/src/modules/cluster/components/resource/nodeManage/BatchUnScheduleComputerDialog.tsx b/web/console/src/modules/cluster/components/resource/nodeManage/BatchUnScheduleComputerDialog.tsx index 43d577905..8b7e849d4 100644 --- a/web/console/src/modules/cluster/components/resource/nodeManage/BatchUnScheduleComputerDialog.tsx +++ b/web/console/src/modules/cluster/components/resource/nodeManage/BatchUnScheduleComputerDialog.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as classnames from 'classnames'; import * as React from 'react'; import { connect } from 'react-redux'; diff --git a/web/console/src/modules/cluster/components/resource/nodeManage/ComputerActionPanel.tsx b/web/console/src/modules/cluster/components/resource/nodeManage/ComputerActionPanel.tsx index 1a58ae735..7b103ce4c 100644 --- a/web/console/src/modules/cluster/components/resource/nodeManage/ComputerActionPanel.tsx +++ b/web/console/src/modules/cluster/components/resource/nodeManage/ComputerActionPanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect } from 'react-redux'; import { WorkflowDialog } from 'src/modules/common'; diff --git a/web/console/src/modules/cluster/components/resource/nodeManage/ComputerStatusDialog.tsx b/web/console/src/modules/cluster/components/resource/nodeManage/ComputerStatusDialog.tsx index e361200ab..419506222 100644 --- a/web/console/src/modules/cluster/components/resource/nodeManage/ComputerStatusDialog.tsx +++ b/web/console/src/modules/cluster/components/resource/nodeManage/ComputerStatusDialog.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect } from 'react-redux'; diff --git a/web/console/src/modules/cluster/components/resource/nodeManage/ComputerTablePanel.tsx b/web/console/src/modules/cluster/components/resource/nodeManage/ComputerTablePanel.tsx index 234746674..39b2026d9 100644 --- a/web/console/src/modules/cluster/components/resource/nodeManage/ComputerTablePanel.tsx +++ b/web/console/src/modules/cluster/components/resource/nodeManage/ComputerTablePanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect } from 'react-redux'; diff --git a/web/console/src/modules/cluster/components/resource/nodeManage/CreateComputerPanel.tsx b/web/console/src/modules/cluster/components/resource/nodeManage/CreateComputerPanel.tsx index 14709fc59..42aa08dc3 100644 --- a/web/console/src/modules/cluster/components/resource/nodeManage/CreateComputerPanel.tsx +++ b/web/console/src/modules/cluster/components/resource/nodeManage/CreateComputerPanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect } from 'react-redux'; diff --git a/web/console/src/modules/cluster/components/resource/nodeManage/DeleteComputerDialog.tsx b/web/console/src/modules/cluster/components/resource/nodeManage/DeleteComputerDialog.tsx index 9d9bea92c..ae14cfe29 100644 --- a/web/console/src/modules/cluster/components/resource/nodeManage/DeleteComputerDialog.tsx +++ b/web/console/src/modules/cluster/components/resource/nodeManage/DeleteComputerDialog.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect } from 'react-redux'; diff --git a/web/console/src/modules/cluster/components/resource/nodeManage/UpdateNodeLabelDialog.tsx b/web/console/src/modules/cluster/components/resource/nodeManage/UpdateNodeLabelDialog.tsx index 1cfbae6f9..837298a21 100644 --- a/web/console/src/modules/cluster/components/resource/nodeManage/UpdateNodeLabelDialog.tsx +++ b/web/console/src/modules/cluster/components/resource/nodeManage/UpdateNodeLabelDialog.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect } from 'react-redux'; diff --git a/web/console/src/modules/cluster/components/resource/nodeManage/UpdateNodeTaintDialog.tsx b/web/console/src/modules/cluster/components/resource/nodeManage/UpdateNodeTaintDialog.tsx index 5855c4759..56c4794b2 100644 --- a/web/console/src/modules/cluster/components/resource/nodeManage/UpdateNodeTaintDialog.tsx +++ b/web/console/src/modules/cluster/components/resource/nodeManage/UpdateNodeTaintDialog.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect } from 'react-redux'; diff --git a/web/console/src/modules/cluster/components/resource/resourceDetail/ResourceDetail.tsx b/web/console/src/modules/cluster/components/resource/resourceDetail/ResourceDetail.tsx index ef693bf8a..27cd5ee42 100644 --- a/web/console/src/modules/cluster/components/resource/resourceDetail/ResourceDetail.tsx +++ b/web/console/src/modules/cluster/components/resource/resourceDetail/ResourceDetail.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect } from 'react-redux'; diff --git a/web/console/src/modules/cluster/components/resource/resourceDetail/ResourceDetailEventActionPanel.tsx b/web/console/src/modules/cluster/components/resource/resourceDetail/ResourceDetailEventActionPanel.tsx index 7b2b06885..0f1326b23 100644 --- a/web/console/src/modules/cluster/components/resource/resourceDetail/ResourceDetailEventActionPanel.tsx +++ b/web/console/src/modules/cluster/components/resource/resourceDetail/ResourceDetailEventActionPanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect } from 'react-redux'; diff --git a/web/console/src/modules/cluster/components/resource/resourceDetail/ResourceDetailEventTablePanel.tsx b/web/console/src/modules/cluster/components/resource/resourceDetail/ResourceDetailEventTablePanel.tsx index 22d461f8e..3815d1af8 100644 --- a/web/console/src/modules/cluster/components/resource/resourceDetail/ResourceDetailEventTablePanel.tsx +++ b/web/console/src/modules/cluster/components/resource/resourceDetail/ResourceDetailEventTablePanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as classnames from 'classnames'; import * as React from 'react'; import { connect } from 'react-redux'; diff --git a/web/console/src/modules/cluster/components/resource/resourceDetail/ResourceDetailPanel.tsx b/web/console/src/modules/cluster/components/resource/resourceDetail/ResourceDetailPanel.tsx index 3a5cb8264..905de449a 100644 --- a/web/console/src/modules/cluster/components/resource/resourceDetail/ResourceDetailPanel.tsx +++ b/web/console/src/modules/cluster/components/resource/resourceDetail/ResourceDetailPanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { Bubble, Button, Card, PopConfirm, Table, TableColumn, TabPanel, Tabs, Text } from '@tea/component'; import { stylize } from '@tea/component/table/addons/stylize'; import { bindActionCreators, OperationState, uuid } from '@tencent/ff-redux'; diff --git a/web/console/src/modules/cluster/components/resource/resourceDetail/ResourceGrayUpgradeDialog.tsx b/web/console/src/modules/cluster/components/resource/resourceDetail/ResourceGrayUpgradeDialog.tsx index 0e47005c6..242cd0ce1 100644 --- a/web/console/src/modules/cluster/components/resource/resourceDetail/ResourceGrayUpgradeDialog.tsx +++ b/web/console/src/modules/cluster/components/resource/resourceDetail/ResourceGrayUpgradeDialog.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as classnames from 'classnames'; import * as React from 'react'; import { connect } from 'react-redux'; diff --git a/web/console/src/modules/cluster/components/resource/resourceDetail/ResourceModifyHistoryPanel.tsx b/web/console/src/modules/cluster/components/resource/resourceDetail/ResourceModifyHistoryPanel.tsx index 4d2a5665e..7887e6408 100644 --- a/web/console/src/modules/cluster/components/resource/resourceDetail/ResourceModifyHistoryPanel.tsx +++ b/web/console/src/modules/cluster/components/resource/resourceDetail/ResourceModifyHistoryPanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as yaml from 'js-yaml'; import * as React from 'react'; import { connect } from 'react-redux'; diff --git a/web/console/src/modules/cluster/components/resource/resourceDetail/ResourceNamespaceDetailPanel.tsx b/web/console/src/modules/cluster/components/resource/resourceDetail/ResourceNamespaceDetailPanel.tsx index 1710eaa1e..1c1f23b47 100644 --- a/web/console/src/modules/cluster/components/resource/resourceDetail/ResourceNamespaceDetailPanel.tsx +++ b/web/console/src/modules/cluster/components/resource/resourceDetail/ResourceNamespaceDetailPanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as classnames from 'classnames'; import * as React from 'react'; import { connect } from 'react-redux'; diff --git a/web/console/src/modules/cluster/components/resource/resourceDetail/ResourceNodeDetailPanel.tsx b/web/console/src/modules/cluster/components/resource/resourceDetail/ResourceNodeDetailPanel.tsx index 44020ae17..c93d35356 100644 --- a/web/console/src/modules/cluster/components/resource/resourceDetail/ResourceNodeDetailPanel.tsx +++ b/web/console/src/modules/cluster/components/resource/resourceDetail/ResourceNodeDetailPanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect } from 'react-redux'; diff --git a/web/console/src/modules/cluster/components/resource/resourceDetail/ResourcePodActionPanel.tsx b/web/console/src/modules/cluster/components/resource/resourceDetail/ResourcePodActionPanel.tsx index 74e6516d5..ed69b619c 100644 --- a/web/console/src/modules/cluster/components/resource/resourceDetail/ResourcePodActionPanel.tsx +++ b/web/console/src/modules/cluster/components/resource/resourceDetail/ResourcePodActionPanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect } from 'react-redux'; import { isEmpty, cloneDeep, uniq } from 'lodash'; diff --git a/web/console/src/modules/cluster/components/resource/resourceDetail/ResourcePodDeleteDialog.tsx b/web/console/src/modules/cluster/components/resource/resourceDetail/ResourcePodDeleteDialog.tsx index 37b6374aa..570c23088 100644 --- a/web/console/src/modules/cluster/components/resource/resourceDetail/ResourcePodDeleteDialog.tsx +++ b/web/console/src/modules/cluster/components/resource/resourceDetail/ResourcePodDeleteDialog.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect } from 'react-redux'; diff --git a/web/console/src/modules/cluster/components/resource/resourceDetail/ResourcePodLogPanel.tsx b/web/console/src/modules/cluster/components/resource/resourceDetail/ResourcePodLogPanel.tsx index dd78615a5..5d7ca7541 100644 --- a/web/console/src/modules/cluster/components/resource/resourceDetail/ResourcePodLogPanel.tsx +++ b/web/console/src/modules/cluster/components/resource/resourceDetail/ResourcePodLogPanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect } from 'react-redux'; diff --git a/web/console/src/modules/cluster/components/resource/resourceDetail/ResourcePodPanel.tsx b/web/console/src/modules/cluster/components/resource/resourceDetail/ResourcePodPanel.tsx index 7bb167dcb..673d820d5 100644 --- a/web/console/src/modules/cluster/components/resource/resourceDetail/ResourcePodPanel.tsx +++ b/web/console/src/modules/cluster/components/resource/resourceDetail/ResourcePodPanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as classnames from 'classnames'; import * as React from 'react'; import { connect } from 'react-redux'; diff --git a/web/console/src/modules/cluster/components/resource/resourceDetail/ResourcePodRemoteLoginDialog.tsx b/web/console/src/modules/cluster/components/resource/resourceDetail/ResourcePodRemoteLoginDialog.tsx index e7fbafcf5..8f9cf5052 100644 --- a/web/console/src/modules/cluster/components/resource/resourceDetail/ResourcePodRemoteLoginDialog.tsx +++ b/web/console/src/modules/cluster/components/resource/resourceDetail/ResourcePodRemoteLoginDialog.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as classnames from 'classnames'; import * as React from 'react'; import { connect } from 'react-redux'; diff --git a/web/console/src/modules/cluster/components/resource/resourceDetail/ResourcePodTable.tsx b/web/console/src/modules/cluster/components/resource/resourceDetail/ResourcePodTable.tsx index 457d8a791..77a12eb6d 100644 --- a/web/console/src/modules/cluster/components/resource/resourceDetail/ResourcePodTable.tsx +++ b/web/console/src/modules/cluster/components/resource/resourceDetail/ResourcePodTable.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import React, { useEffect } from 'react'; import { Card, Pagination, Table, TableProps } from '@tea/component'; import { RootProps } from '../../ClusterApp'; diff --git a/web/console/src/modules/cluster/components/resource/resourceDetail/ResourceRollbackDialog.tsx b/web/console/src/modules/cluster/components/resource/resourceDetail/ResourceRollbackDialog.tsx index f61d749d1..c93b234b6 100644 --- a/web/console/src/modules/cluster/components/resource/resourceDetail/ResourceRollbackDialog.tsx +++ b/web/console/src/modules/cluster/components/resource/resourceDetail/ResourceRollbackDialog.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect } from 'react-redux'; diff --git a/web/console/src/modules/cluster/components/resource/resourceDetail/ResourceTappPodDeleteDialog.tsx b/web/console/src/modules/cluster/components/resource/resourceDetail/ResourceTappPodDeleteDialog.tsx index c38da4547..5a53b2355 100644 --- a/web/console/src/modules/cluster/components/resource/resourceDetail/ResourceTappPodDeleteDialog.tsx +++ b/web/console/src/modules/cluster/components/resource/resourceDetail/ResourceTappPodDeleteDialog.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect } from 'react-redux'; diff --git a/web/console/src/modules/cluster/components/resource/resourceDetail/ResourceYamlActionPanel.tsx b/web/console/src/modules/cluster/components/resource/resourceDetail/ResourceYamlActionPanel.tsx index 28099cc54..a75fac7b3 100644 --- a/web/console/src/modules/cluster/components/resource/resourceDetail/ResourceYamlActionPanel.tsx +++ b/web/console/src/modules/cluster/components/resource/resourceDetail/ResourceYamlActionPanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect } from 'react-redux'; diff --git a/web/console/src/modules/cluster/components/resource/resourceDetail/ResourceYamlPanel.tsx b/web/console/src/modules/cluster/components/resource/resourceDetail/ResourceYamlPanel.tsx index 2976a55ea..fcce32723 100644 --- a/web/console/src/modules/cluster/components/resource/resourceDetail/ResourceYamlPanel.tsx +++ b/web/console/src/modules/cluster/components/resource/resourceDetail/ResourceYamlPanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect } from 'react-redux'; diff --git a/web/console/src/modules/cluster/components/resource/resourceEdition/EditConfigMapPanel.tsx b/web/console/src/modules/cluster/components/resource/resourceEdition/EditConfigMapPanel.tsx index 3c4864d72..89f862ff0 100644 --- a/web/console/src/modules/cluster/components/resource/resourceEdition/EditConfigMapPanel.tsx +++ b/web/console/src/modules/cluster/components/resource/resourceEdition/EditConfigMapPanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect } from 'react-redux'; diff --git a/web/console/src/modules/cluster/components/resource/resourceEdition/EditLbcfBackGroupItemPanel.tsx b/web/console/src/modules/cluster/components/resource/resourceEdition/EditLbcfBackGroupItemPanel.tsx index a598c98ea..de75fe0f3 100644 --- a/web/console/src/modules/cluster/components/resource/resourceEdition/EditLbcfBackGroupItemPanel.tsx +++ b/web/console/src/modules/cluster/components/resource/resourceEdition/EditLbcfBackGroupItemPanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect } from 'react-redux'; diff --git a/web/console/src/modules/cluster/components/resource/resourceEdition/EditLbcfBackGroupPanel.tsx b/web/console/src/modules/cluster/components/resource/resourceEdition/EditLbcfBackGroupPanel.tsx index da5fea433..2fc644a03 100644 --- a/web/console/src/modules/cluster/components/resource/resourceEdition/EditLbcfBackGroupPanel.tsx +++ b/web/console/src/modules/cluster/components/resource/resourceEdition/EditLbcfBackGroupPanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect } from 'react-redux'; diff --git a/web/console/src/modules/cluster/components/resource/resourceEdition/EditLbcfPanel.tsx b/web/console/src/modules/cluster/components/resource/resourceEdition/EditLbcfPanel.tsx index 535893ec8..115cb8ac5 100644 --- a/web/console/src/modules/cluster/components/resource/resourceEdition/EditLbcfPanel.tsx +++ b/web/console/src/modules/cluster/components/resource/resourceEdition/EditLbcfPanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect } from 'react-redux'; diff --git a/web/console/src/modules/cluster/components/resource/resourceEdition/EditNamespacePanel.tsx b/web/console/src/modules/cluster/components/resource/resourceEdition/EditNamespacePanel.tsx index e2530ea17..daa760ab2 100644 --- a/web/console/src/modules/cluster/components/resource/resourceEdition/EditNamespacePanel.tsx +++ b/web/console/src/modules/cluster/components/resource/resourceEdition/EditNamespacePanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as classnames from 'classnames'; import * as React from 'react'; import { connect } from 'react-redux'; diff --git a/web/console/src/modules/cluster/components/resource/resourceEdition/EditResourceAdvancedPanel.tsx b/web/console/src/modules/cluster/components/resource/resourceEdition/EditResourceAdvancedPanel.tsx index 23211bbad..69a00a6bc 100644 --- a/web/console/src/modules/cluster/components/resource/resourceEdition/EditResourceAdvancedPanel.tsx +++ b/web/console/src/modules/cluster/components/resource/resourceEdition/EditResourceAdvancedPanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect } from 'react-redux'; diff --git a/web/console/src/modules/cluster/components/resource/resourceEdition/EditResourceAnnotations.tsx b/web/console/src/modules/cluster/components/resource/resourceEdition/EditResourceAnnotations.tsx index 0ab2cdb82..18be279c0 100644 --- a/web/console/src/modules/cluster/components/resource/resourceEdition/EditResourceAnnotations.tsx +++ b/web/console/src/modules/cluster/components/resource/resourceEdition/EditResourceAnnotations.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as classnames from 'classnames'; import * as React from 'react'; import { connect } from 'react-redux'; diff --git a/web/console/src/modules/cluster/components/resource/resourceEdition/EditResourceContainerAdvancedPanel.tsx b/web/console/src/modules/cluster/components/resource/resourceEdition/EditResourceContainerAdvancedPanel.tsx index 8d7e183ae..6bbb57f64 100644 --- a/web/console/src/modules/cluster/components/resource/resourceEdition/EditResourceContainerAdvancedPanel.tsx +++ b/web/console/src/modules/cluster/components/resource/resourceEdition/EditResourceContainerAdvancedPanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as classnames from 'classnames'; import * as React from 'react'; import { connect } from 'react-redux'; diff --git a/web/console/src/modules/cluster/components/resource/resourceEdition/EditResourceContainerEnvItem.tsx b/web/console/src/modules/cluster/components/resource/resourceEdition/EditResourceContainerEnvItem.tsx index 236951098..bec5b8f5f 100644 --- a/web/console/src/modules/cluster/components/resource/resourceEdition/EditResourceContainerEnvItem.tsx +++ b/web/console/src/modules/cluster/components/resource/resourceEdition/EditResourceContainerEnvItem.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect } from 'react-redux'; diff --git a/web/console/src/modules/cluster/components/resource/resourceEdition/EditResourceContainerHealthCheckPanel.tsx b/web/console/src/modules/cluster/components/resource/resourceEdition/EditResourceContainerHealthCheckPanel.tsx index f9426ec4d..fa5a23732 100644 --- a/web/console/src/modules/cluster/components/resource/resourceEdition/EditResourceContainerHealthCheckPanel.tsx +++ b/web/console/src/modules/cluster/components/resource/resourceEdition/EditResourceContainerHealthCheckPanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect } from 'react-redux'; diff --git a/web/console/src/modules/cluster/components/resource/resourceEdition/EditResourceContainerItem.tsx b/web/console/src/modules/cluster/components/resource/resourceEdition/EditResourceContainerItem.tsx index 560075afd..6120620b5 100644 --- a/web/console/src/modules/cluster/components/resource/resourceEdition/EditResourceContainerItem.tsx +++ b/web/console/src/modules/cluster/components/resource/resourceEdition/EditResourceContainerItem.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as classnames from 'classnames'; import * as React from 'react'; import { connect } from 'react-redux'; diff --git a/web/console/src/modules/cluster/components/resource/resourceEdition/EditResourceContainerLimitItem.tsx b/web/console/src/modules/cluster/components/resource/resourceEdition/EditResourceContainerLimitItem.tsx index 8e5072004..a2dc9fafb 100644 --- a/web/console/src/modules/cluster/components/resource/resourceEdition/EditResourceContainerLimitItem.tsx +++ b/web/console/src/modules/cluster/components/resource/resourceEdition/EditResourceContainerLimitItem.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as classnames from 'classnames'; import * as React from 'react'; import { connect } from 'react-redux'; diff --git a/web/console/src/modules/cluster/components/resource/resourceEdition/EditResourceContainerMountItem.tsx b/web/console/src/modules/cluster/components/resource/resourceEdition/EditResourceContainerMountItem.tsx index d14d945b6..7aeb53e99 100644 --- a/web/console/src/modules/cluster/components/resource/resourceEdition/EditResourceContainerMountItem.tsx +++ b/web/console/src/modules/cluster/components/resource/resourceEdition/EditResourceContainerMountItem.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as classnames from 'classnames'; import * as React from 'react'; import { connect } from 'react-redux'; diff --git a/web/console/src/modules/cluster/components/resource/resourceEdition/EditResourceContainerNumPanel.tsx b/web/console/src/modules/cluster/components/resource/resourceEdition/EditResourceContainerNumPanel.tsx index 66bb9e7e3..ebfdda5f2 100644 --- a/web/console/src/modules/cluster/components/resource/resourceEdition/EditResourceContainerNumPanel.tsx +++ b/web/console/src/modules/cluster/components/resource/resourceEdition/EditResourceContainerNumPanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as classnames from 'classnames'; import * as React from 'react'; import { connect } from 'react-redux'; diff --git a/web/console/src/modules/cluster/components/resource/resourceEdition/EditResourceContainerPanel.tsx b/web/console/src/modules/cluster/components/resource/resourceEdition/EditResourceContainerPanel.tsx index db556b8e1..2f57ce417 100644 --- a/web/console/src/modules/cluster/components/resource/resourceEdition/EditResourceContainerPanel.tsx +++ b/web/console/src/modules/cluster/components/resource/resourceEdition/EditResourceContainerPanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect } from 'react-redux'; diff --git a/web/console/src/modules/cluster/components/resource/resourceEdition/EditResourceImagePullSecretsPanel.tsx b/web/console/src/modules/cluster/components/resource/resourceEdition/EditResourceImagePullSecretsPanel.tsx index 8901b58e3..5a4f42d3c 100644 --- a/web/console/src/modules/cluster/components/resource/resourceEdition/EditResourceImagePullSecretsPanel.tsx +++ b/web/console/src/modules/cluster/components/resource/resourceEdition/EditResourceImagePullSecretsPanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect } from 'react-redux'; diff --git a/web/console/src/modules/cluster/components/resource/resourceEdition/EditResourceLabelPanel.tsx b/web/console/src/modules/cluster/components/resource/resourceEdition/EditResourceLabelPanel.tsx index f4b94236b..e2a3aa5ee 100644 --- a/web/console/src/modules/cluster/components/resource/resourceEdition/EditResourceLabelPanel.tsx +++ b/web/console/src/modules/cluster/components/resource/resourceEdition/EditResourceLabelPanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as classnames from 'classnames'; import * as React from 'react'; import { connect } from 'react-redux'; diff --git a/web/console/src/modules/cluster/components/resource/resourceEdition/EditResourceNodeAffinityPanel.tsx b/web/console/src/modules/cluster/components/resource/resourceEdition/EditResourceNodeAffinityPanel.tsx index c5c7fc472..e4daa8490 100644 --- a/web/console/src/modules/cluster/components/resource/resourceEdition/EditResourceNodeAffinityPanel.tsx +++ b/web/console/src/modules/cluster/components/resource/resourceEdition/EditResourceNodeAffinityPanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect } from 'react-redux'; diff --git a/web/console/src/modules/cluster/components/resource/resourceEdition/EditResourcePanel.tsx b/web/console/src/modules/cluster/components/resource/resourceEdition/EditResourcePanel.tsx index 4570ba29e..0d4cd0e0d 100644 --- a/web/console/src/modules/cluster/components/resource/resourceEdition/EditResourcePanel.tsx +++ b/web/console/src/modules/cluster/components/resource/resourceEdition/EditResourcePanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { Button, Icon } from '@tea/component'; diff --git a/web/console/src/modules/cluster/components/resource/resourceEdition/EditResourceVisualizationPanel.tsx b/web/console/src/modules/cluster/components/resource/resourceEdition/EditResourceVisualizationPanel.tsx index 5421ef0f7..084792f78 100644 --- a/web/console/src/modules/cluster/components/resource/resourceEdition/EditResourceVisualizationPanel.tsx +++ b/web/console/src/modules/cluster/components/resource/resourceEdition/EditResourceVisualizationPanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as classnames from 'classnames'; import * as React from 'react'; import { connect } from 'react-redux'; diff --git a/web/console/src/modules/cluster/components/resource/resourceEdition/EditResourceVolumePanel.tsx b/web/console/src/modules/cluster/components/resource/resourceEdition/EditResourceVolumePanel.tsx index 12ac69bc5..a1048f0f8 100644 --- a/web/console/src/modules/cluster/components/resource/resourceEdition/EditResourceVolumePanel.tsx +++ b/web/console/src/modules/cluster/components/resource/resourceEdition/EditResourceVolumePanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as classnames from 'classnames'; import * as React from 'react'; import { connect } from 'react-redux'; diff --git a/web/console/src/modules/cluster/components/resource/resourceEdition/EditSecretPanel.tsx b/web/console/src/modules/cluster/components/resource/resourceEdition/EditSecretPanel.tsx index 96ac97d52..3256a41b8 100644 --- a/web/console/src/modules/cluster/components/resource/resourceEdition/EditSecretPanel.tsx +++ b/web/console/src/modules/cluster/components/resource/resourceEdition/EditSecretPanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as classnames from 'classnames'; import * as React from 'react'; import { connect } from 'react-redux'; diff --git a/web/console/src/modules/cluster/components/resource/resourceEdition/EditServiceAdvanceSettingPanel.tsx b/web/console/src/modules/cluster/components/resource/resourceEdition/EditServiceAdvanceSettingPanel.tsx index 677dfaa96..f922dc53d 100644 --- a/web/console/src/modules/cluster/components/resource/resourceEdition/EditServiceAdvanceSettingPanel.tsx +++ b/web/console/src/modules/cluster/components/resource/resourceEdition/EditServiceAdvanceSettingPanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { RadioGroup, Radio } from '@tea/component'; import { FormItem, InputField } from '../../../../common/components'; diff --git a/web/console/src/modules/cluster/components/resource/resourceEdition/EditServiceCommunicationPanel.tsx b/web/console/src/modules/cluster/components/resource/resourceEdition/EditServiceCommunicationPanel.tsx index 488790d29..ea5cfc2a3 100644 --- a/web/console/src/modules/cluster/components/resource/resourceEdition/EditServiceCommunicationPanel.tsx +++ b/web/console/src/modules/cluster/components/resource/resourceEdition/EditServiceCommunicationPanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { Bubble, Radio } from '@tea/component'; diff --git a/web/console/src/modules/cluster/components/resource/resourceEdition/EditServicePanel.tsx b/web/console/src/modules/cluster/components/resource/resourceEdition/EditServicePanel.tsx index af3fcf214..c2116cf9a 100644 --- a/web/console/src/modules/cluster/components/resource/resourceEdition/EditServicePanel.tsx +++ b/web/console/src/modules/cluster/components/resource/resourceEdition/EditServicePanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as classnames from 'classnames'; import * as React from 'react'; import { connect } from 'react-redux'; diff --git a/web/console/src/modules/cluster/components/resource/resourceEdition/EditServicePortMapPanel.tsx b/web/console/src/modules/cluster/components/resource/resourceEdition/EditServicePortMapPanel.tsx index 34a91dda7..884beb5ac 100644 --- a/web/console/src/modules/cluster/components/resource/resourceEdition/EditServicePortMapPanel.tsx +++ b/web/console/src/modules/cluster/components/resource/resourceEdition/EditServicePortMapPanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { Bubble, Table, TableColumn } from '@tea/component'; diff --git a/web/console/src/modules/cluster/components/resource/resourceEdition/EditServiceWorkloadDialog.tsx b/web/console/src/modules/cluster/components/resource/resourceEdition/EditServiceWorkloadDialog.tsx index 422c6c74d..169292f09 100644 --- a/web/console/src/modules/cluster/components/resource/resourceEdition/EditServiceWorkloadDialog.tsx +++ b/web/console/src/modules/cluster/components/resource/resourceEdition/EditServiceWorkloadDialog.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect } from 'react-redux'; diff --git a/web/console/src/modules/cluster/components/resource/resourceEdition/ResourceContainerListItem.tsx b/web/console/src/modules/cluster/components/resource/resourceEdition/ResourceContainerListItem.tsx index 15b56fe8e..8cd87dff4 100644 --- a/web/console/src/modules/cluster/components/resource/resourceEdition/ResourceContainerListItem.tsx +++ b/web/console/src/modules/cluster/components/resource/resourceEdition/ResourceContainerListItem.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as classnames from 'classnames'; import * as React from 'react'; import { connect } from 'react-redux'; diff --git a/web/console/src/modules/cluster/components/resource/resourceEdition/ResourceEditHostPathDialog.tsx b/web/console/src/modules/cluster/components/resource/resourceEdition/ResourceEditHostPathDialog.tsx index 43605f4c1..23cef3401 100644 --- a/web/console/src/modules/cluster/components/resource/resourceEdition/ResourceEditHostPathDialog.tsx +++ b/web/console/src/modules/cluster/components/resource/resourceEdition/ResourceEditHostPathDialog.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect } from 'react-redux'; diff --git a/web/console/src/modules/cluster/components/resource/resourceEdition/ResourceSelectConfigDialog.tsx b/web/console/src/modules/cluster/components/resource/resourceEdition/ResourceSelectConfigDialog.tsx index dce8a5cbd..0db26b5eb 100644 --- a/web/console/src/modules/cluster/components/resource/resourceEdition/ResourceSelectConfigDialog.tsx +++ b/web/console/src/modules/cluster/components/resource/resourceEdition/ResourceSelectConfigDialog.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as classnames from 'classnames'; import * as React from 'react'; import { connect } from 'react-redux'; diff --git a/web/console/src/modules/cluster/components/resource/resourceEdition/SubHeaderPanel.tsx b/web/console/src/modules/cluster/components/resource/resourceEdition/SubHeaderPanel.tsx index 5a222f511..b5079fcab 100644 --- a/web/console/src/modules/cluster/components/resource/resourceEdition/SubHeaderPanel.tsx +++ b/web/console/src/modules/cluster/components/resource/resourceEdition/SubHeaderPanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect } from 'react-redux'; diff --git a/web/console/src/modules/cluster/components/resource/resourceEdition/UpdateResourcePanel.tsx b/web/console/src/modules/cluster/components/resource/resourceEdition/UpdateResourcePanel.tsx index 099afb64c..69463c11f 100644 --- a/web/console/src/modules/cluster/components/resource/resourceEdition/UpdateResourcePanel.tsx +++ b/web/console/src/modules/cluster/components/resource/resourceEdition/UpdateResourcePanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect } from 'react-redux'; diff --git a/web/console/src/modules/cluster/components/resource/resourceTableOperation/ResourceActionPanel.tsx b/web/console/src/modules/cluster/components/resource/resourceTableOperation/ResourceActionPanel.tsx index 49ca2c6ed..15785d4e4 100644 --- a/web/console/src/modules/cluster/components/resource/resourceTableOperation/ResourceActionPanel.tsx +++ b/web/console/src/modules/cluster/components/resource/resourceTableOperation/ResourceActionPanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect } from 'react-redux'; diff --git a/web/console/src/modules/cluster/components/resource/resourceTableOperation/ResourceDeleteDialog.tsx b/web/console/src/modules/cluster/components/resource/resourceTableOperation/ResourceDeleteDialog.tsx index e09ac15c4..d4c4dec10 100644 --- a/web/console/src/modules/cluster/components/resource/resourceTableOperation/ResourceDeleteDialog.tsx +++ b/web/console/src/modules/cluster/components/resource/resourceTableOperation/ResourceDeleteDialog.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect } from 'react-redux'; diff --git a/web/console/src/modules/cluster/components/resource/resourceTableOperation/ResourceEventPanel.tsx b/web/console/src/modules/cluster/components/resource/resourceTableOperation/ResourceEventPanel.tsx index ff1d1b80f..2c1c7b352 100644 --- a/web/console/src/modules/cluster/components/resource/resourceTableOperation/ResourceEventPanel.tsx +++ b/web/console/src/modules/cluster/components/resource/resourceTableOperation/ResourceEventPanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as classnames from 'classnames'; import * as React from 'react'; import { connect } from 'react-redux'; diff --git a/web/console/src/modules/cluster/components/resource/resourceTableOperation/ResourceLogPanel.tsx b/web/console/src/modules/cluster/components/resource/resourceTableOperation/ResourceLogPanel.tsx index 294538f59..4d21056c0 100644 --- a/web/console/src/modules/cluster/components/resource/resourceTableOperation/ResourceLogPanel.tsx +++ b/web/console/src/modules/cluster/components/resource/resourceTableOperation/ResourceLogPanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect } from 'react-redux'; diff --git a/web/console/src/modules/cluster/components/resource/resourceTableOperation/ResourceTablePanel.tsx b/web/console/src/modules/cluster/components/resource/resourceTableOperation/ResourceTablePanel.tsx index 6a2fc9b1b..b77f7f92b 100644 --- a/web/console/src/modules/cluster/components/resource/resourceTableOperation/ResourceTablePanel.tsx +++ b/web/console/src/modules/cluster/components/resource/resourceTableOperation/ResourceTablePanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as classnames from 'classnames'; import * as React from 'react'; import { connect } from 'react-redux'; diff --git a/web/console/src/modules/cluster/components/resource/resourceTableOperation/UpdateServiceAccessTypePanel.tsx b/web/console/src/modules/cluster/components/resource/resourceTableOperation/UpdateServiceAccessTypePanel.tsx index 3ed804e57..f9fb0aeb1 100644 --- a/web/console/src/modules/cluster/components/resource/resourceTableOperation/UpdateServiceAccessTypePanel.tsx +++ b/web/console/src/modules/cluster/components/resource/resourceTableOperation/UpdateServiceAccessTypePanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect } from 'react-redux'; diff --git a/web/console/src/modules/cluster/components/resource/resourceTableOperation/UpdateWorkloadPodNumPanel.tsx b/web/console/src/modules/cluster/components/resource/resourceTableOperation/UpdateWorkloadPodNumPanel.tsx index 30371f32d..88b0a6455 100644 --- a/web/console/src/modules/cluster/components/resource/resourceTableOperation/UpdateWorkloadPodNumPanel.tsx +++ b/web/console/src/modules/cluster/components/resource/resourceTableOperation/UpdateWorkloadPodNumPanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect } from 'react-redux'; diff --git a/web/console/src/modules/cluster/components/resource/resourceTableOperation/UpdateWorkloadRegistryPanel.tsx b/web/console/src/modules/cluster/components/resource/resourceTableOperation/UpdateWorkloadRegistryPanel.tsx index be65dbd57..afa157e6f 100644 --- a/web/console/src/modules/cluster/components/resource/resourceTableOperation/UpdateWorkloadRegistryPanel.tsx +++ b/web/console/src/modules/cluster/components/resource/resourceTableOperation/UpdateWorkloadRegistryPanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as classnames from 'classnames'; import * as React from 'react'; import { connect } from 'react-redux'; diff --git a/web/console/src/modules/cluster/components/scale/common/hooks/index.ts b/web/console/src/modules/cluster/components/scale/common/hooks/index.ts index a0c839f2d..de1b894f3 100644 --- a/web/console/src/modules/cluster/components/scale/common/hooks/index.ts +++ b/web/console/src/modules/cluster/components/scale/common/hooks/index.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { useNamespaces } from './useNamespaces'; export { useNamespaces }; diff --git a/web/console/src/modules/cluster/components/scale/common/hooks/useNamespaces.ts b/web/console/src/modules/cluster/components/scale/common/hooks/useNamespaces.ts index eaeb6da01..c7a44c280 100644 --- a/web/console/src/modules/cluster/components/scale/common/hooks/useNamespaces.ts +++ b/web/console/src/modules/cluster/components/scale/common/hooks/useNamespaces.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { useState, useEffect, useRef, useCallback } from 'react'; import { fetchNamespaceList, fetchProjectNamespaceList } from '@src/modules/cluster/WebAPI/scale'; diff --git a/web/console/src/modules/cluster/components/scale/cronhpa/constant.ts b/web/console/src/modules/cluster/components/scale/cronhpa/constant.ts index 4bc84de87..101fda87c 100644 --- a/web/console/src/modules/cluster/components/scale/cronhpa/constant.ts +++ b/web/console/src/modules/cluster/components/scale/cronhpa/constant.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export const MetricsResourceMap = { cpu: { key: 'cpuUtilization', meaning: 'CPU利用率', unit: '%' }, cpuUtilization: { key: 'cpuUtilization', meaning: 'CPU利用率', unit: '%' }, diff --git a/web/console/src/modules/cluster/components/scale/cronhpa/context.tsx b/web/console/src/modules/cluster/components/scale/cronhpa/context.tsx index 310fd0f19..bb3a747e8 100644 --- a/web/console/src/modules/cluster/components/scale/cronhpa/context.tsx +++ b/web/console/src/modules/cluster/components/scale/cronhpa/context.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ /** * hpa这个scope内的全局数据 */ diff --git a/web/console/src/modules/cluster/components/scale/cronhpa/detail/basic.tsx b/web/console/src/modules/cluster/components/scale/cronhpa/detail/basic.tsx index 7abf3411a..0c869c7c6 100644 --- a/web/console/src/modules/cluster/components/scale/cronhpa/detail/basic.tsx +++ b/web/console/src/modules/cluster/components/scale/cronhpa/detail/basic.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ /** * hpa详情,基本信息tab */ diff --git a/web/console/src/modules/cluster/components/scale/cronhpa/detail/event.tsx b/web/console/src/modules/cluster/components/scale/cronhpa/detail/event.tsx index 7975337a6..1d0818d25 100644 --- a/web/console/src/modules/cluster/components/scale/cronhpa/detail/event.tsx +++ b/web/console/src/modules/cluster/components/scale/cronhpa/detail/event.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ /** * hpa详情,事件列表tab */ diff --git a/web/console/src/modules/cluster/components/scale/cronhpa/detail/index.tsx b/web/console/src/modules/cluster/components/scale/cronhpa/detail/index.tsx index 6da750024..da0690bcb 100644 --- a/web/console/src/modules/cluster/components/scale/cronhpa/detail/index.tsx +++ b/web/console/src/modules/cluster/components/scale/cronhpa/detail/index.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ /** * hpa详情页入口 */ diff --git a/web/console/src/modules/cluster/components/scale/cronhpa/detail/yaml.tsx b/web/console/src/modules/cluster/components/scale/cronhpa/detail/yaml.tsx index 4b316ef4f..bbce06411 100644 --- a/web/console/src/modules/cluster/components/scale/cronhpa/detail/yaml.tsx +++ b/web/console/src/modules/cluster/components/scale/cronhpa/detail/yaml.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ /** * hpa详情,yaml tab */ diff --git a/web/console/src/modules/cluster/components/scale/cronhpa/editor/hpa.tsx b/web/console/src/modules/cluster/components/scale/cronhpa/editor/hpa.tsx index 0a0ac0cf0..293ffd9d2 100644 --- a/web/console/src/modules/cluster/components/scale/cronhpa/editor/hpa.tsx +++ b/web/console/src/modules/cluster/components/scale/cronhpa/editor/hpa.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ /** * HPA创建及修改组件 */ diff --git a/web/console/src/modules/cluster/components/scale/cronhpa/editor/yaml.tsx b/web/console/src/modules/cluster/components/scale/cronhpa/editor/yaml.tsx index 0f77d8ed4..76b377a47 100644 --- a/web/console/src/modules/cluster/components/scale/cronhpa/editor/yaml.tsx +++ b/web/console/src/modules/cluster/components/scale/cronhpa/editor/yaml.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ /** * yaml编辑组件 */ diff --git a/web/console/src/modules/cluster/components/scale/cronhpa/index.tsx b/web/console/src/modules/cluster/components/scale/cronhpa/index.tsx index 1f0a3ebc8..d9a5c9bd7 100644 --- a/web/console/src/modules/cluster/components/scale/cronhpa/index.tsx +++ b/web/console/src/modules/cluster/components/scale/cronhpa/index.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import React, { useState, useEffect, useContext, useRef, useCallback, useMemo } from 'react'; import { useSelector } from 'react-redux'; import { HpaScopeProvider, DispatchContext, StateContext } from './context'; diff --git a/web/console/src/modules/cluster/components/scale/cronhpa/list/index.tsx b/web/console/src/modules/cluster/components/scale/cronhpa/list/index.tsx index d876cbb35..ae2d41c10 100644 --- a/web/console/src/modules/cluster/components/scale/cronhpa/list/index.tsx +++ b/web/console/src/modules/cluster/components/scale/cronhpa/list/index.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import React, { useState, useEffect, useContext, useCallback, useMemo } from 'react'; import { useDispatch, useSelector } from 'react-redux'; import { t, Trans } from '@tencent/tea-app/lib/i18n'; diff --git a/web/console/src/modules/cluster/components/scale/cronhpa/list/namespaceSelect.tsx b/web/console/src/modules/cluster/components/scale/cronhpa/list/namespaceSelect.tsx index e6854ef32..7d76ab5b9 100644 --- a/web/console/src/modules/cluster/components/scale/cronhpa/list/namespaceSelect.tsx +++ b/web/console/src/modules/cluster/components/scale/cronhpa/list/namespaceSelect.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ /** * namespace下拉选择组件 */ diff --git a/web/console/src/modules/cluster/components/scale/hpa/constant.ts b/web/console/src/modules/cluster/components/scale/hpa/constant.ts index e52966b58..703d168b6 100644 --- a/web/console/src/modules/cluster/components/scale/hpa/constant.ts +++ b/web/console/src/modules/cluster/components/scale/hpa/constant.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export const NestedMetricsResourceMap = { cpu: { targetAverageUtilization: { key: 'cpuUtilization', meaning: 'CPU利用率', unit: '%' }, diff --git a/web/console/src/modules/cluster/components/scale/hpa/context.tsx b/web/console/src/modules/cluster/components/scale/hpa/context.tsx index b313b686c..46568ee4f 100644 --- a/web/console/src/modules/cluster/components/scale/hpa/context.tsx +++ b/web/console/src/modules/cluster/components/scale/hpa/context.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ /** * hpa这个scope内的全局数据 */ diff --git a/web/console/src/modules/cluster/components/scale/hpa/detail/basic.tsx b/web/console/src/modules/cluster/components/scale/hpa/detail/basic.tsx index dd0eca3c7..1e13e97a5 100644 --- a/web/console/src/modules/cluster/components/scale/hpa/detail/basic.tsx +++ b/web/console/src/modules/cluster/components/scale/hpa/detail/basic.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ /** * hpa详情,基本信息tab */ diff --git a/web/console/src/modules/cluster/components/scale/hpa/detail/event.tsx b/web/console/src/modules/cluster/components/scale/hpa/detail/event.tsx index 2a5fb2d53..85ef5ca90 100644 --- a/web/console/src/modules/cluster/components/scale/hpa/detail/event.tsx +++ b/web/console/src/modules/cluster/components/scale/hpa/detail/event.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ /** * hpa详情,事件列表tab */ diff --git a/web/console/src/modules/cluster/components/scale/hpa/detail/index.tsx b/web/console/src/modules/cluster/components/scale/hpa/detail/index.tsx index bada2b7f2..988e6fb08 100644 --- a/web/console/src/modules/cluster/components/scale/hpa/detail/index.tsx +++ b/web/console/src/modules/cluster/components/scale/hpa/detail/index.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ /** * hpa详情页入口 */ diff --git a/web/console/src/modules/cluster/components/scale/hpa/detail/yaml.tsx b/web/console/src/modules/cluster/components/scale/hpa/detail/yaml.tsx index 2c74667a7..030d322e8 100644 --- a/web/console/src/modules/cluster/components/scale/hpa/detail/yaml.tsx +++ b/web/console/src/modules/cluster/components/scale/hpa/detail/yaml.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ /** * hpa详情,yaml tab */ diff --git a/web/console/src/modules/cluster/components/scale/hpa/editor/hpa.tsx b/web/console/src/modules/cluster/components/scale/hpa/editor/hpa.tsx index d0216a4fc..51cdf0911 100644 --- a/web/console/src/modules/cluster/components/scale/hpa/editor/hpa.tsx +++ b/web/console/src/modules/cluster/components/scale/hpa/editor/hpa.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ /** * HPA创建及修改组件 */ diff --git a/web/console/src/modules/cluster/components/scale/hpa/editor/yaml.tsx b/web/console/src/modules/cluster/components/scale/hpa/editor/yaml.tsx index 256d67500..95dc2200d 100644 --- a/web/console/src/modules/cluster/components/scale/hpa/editor/yaml.tsx +++ b/web/console/src/modules/cluster/components/scale/hpa/editor/yaml.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ /** * yaml编辑组件 */ diff --git a/web/console/src/modules/cluster/components/scale/hpa/index.tsx b/web/console/src/modules/cluster/components/scale/hpa/index.tsx index 214635e8c..2bcfe519d 100644 --- a/web/console/src/modules/cluster/components/scale/hpa/index.tsx +++ b/web/console/src/modules/cluster/components/scale/hpa/index.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import React, { useState, useEffect, useContext, useRef, useCallback } from 'react'; import { useSelector } from 'react-redux'; import { HpaScopeProvider, DispatchContext, StateContext } from './context'; diff --git a/web/console/src/modules/cluster/components/scale/hpa/list/index.tsx b/web/console/src/modules/cluster/components/scale/hpa/list/index.tsx index c2023330c..017a0db79 100644 --- a/web/console/src/modules/cluster/components/scale/hpa/list/index.tsx +++ b/web/console/src/modules/cluster/components/scale/hpa/list/index.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import React, { useState, useEffect, useContext, useCallback } from 'react'; import { useDispatch, useSelector } from 'react-redux'; import { t, Trans } from '@tencent/tea-app/lib/i18n'; diff --git a/web/console/src/modules/cluster/components/scale/hpa/list/namespaceSelect.tsx b/web/console/src/modules/cluster/components/scale/hpa/list/namespaceSelect.tsx index f9efc9c8b..e321575b8 100644 --- a/web/console/src/modules/cluster/components/scale/hpa/list/namespaceSelect.tsx +++ b/web/console/src/modules/cluster/components/scale/hpa/list/namespaceSelect.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ /** * namespace下拉选择组件 */ diff --git a/web/console/src/modules/cluster/constants/ActionType.ts b/web/console/src/modules/cluster/constants/ActionType.ts index f585fddc6..46c35d7df 100644 --- a/web/console/src/modules/cluster/constants/ActionType.ts +++ b/web/console/src/modules/cluster/constants/ActionType.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ /** 公有云 | 私有云切换 */ export const SelectMode = 'SelectMode'; export const IsI18n = 'IsI18n'; diff --git a/web/console/src/modules/cluster/constants/Config.ts b/web/console/src/modules/cluster/constants/Config.ts index 7f681bf3d..9c4216c1a 100644 --- a/web/console/src/modules/cluster/constants/Config.ts +++ b/web/console/src/modules/cluster/constants/Config.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { t, Trans } from '@tencent/tea-app/lib/i18n'; /** ========================= start FFRedux的相关配置 ======================== */ export const FFReduxActionName = { diff --git a/web/console/src/modules/cluster/constants/initState.ts b/web/console/src/modules/cluster/constants/initState.ts index 1de34d33b..32543f46f 100644 --- a/web/console/src/modules/cluster/constants/initState.ts +++ b/web/console/src/modules/cluster/constants/initState.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { uuid } from '@tencent/ff-redux'; import { initValidator } from '../../common/models'; diff --git a/web/console/src/modules/cluster/constants/validateConfig.ts b/web/console/src/modules/cluster/constants/validateConfig.ts index 8d88d878a..ab47bbd35 100644 --- a/web/console/src/modules/cluster/constants/validateConfig.ts +++ b/web/console/src/modules/cluster/constants/validateConfig.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { ValidateSchema, RuleTypeEnum } from '../../common/validate/Model'; export const clusterValidateSchema: ValidateSchema = { diff --git a/web/console/src/modules/cluster/index.project.tsx b/web/console/src/modules/cluster/index.project.tsx index 24d95c21c..2a4c1e16d 100644 --- a/web/console/src/modules/cluster/index.project.tsx +++ b/web/console/src/modules/cluster/index.project.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { ApplicationAppContainer } from './components/ApplicationApp.project'; diff --git a/web/console/src/modules/cluster/index.tsx b/web/console/src/modules/cluster/index.tsx index bd5a4bfc8..04af3574d 100644 --- a/web/console/src/modules/cluster/index.tsx +++ b/web/console/src/modules/cluster/index.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { ClusterAppContainer } from './components/ClusterApp'; diff --git a/web/console/src/modules/cluster/models/Addon.ts b/web/console/src/modules/cluster/models/Addon.ts index d74e5affe..6baafca3c 100644 --- a/web/console/src/modules/cluster/models/Addon.ts +++ b/web/console/src/modules/cluster/models/Addon.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export interface AddonStatus { [propName: string]: Addon; } diff --git a/web/console/src/modules/cluster/models/AllocationRatioEdition.ts b/web/console/src/modules/cluster/models/AllocationRatioEdition.ts index 10acda2ce..2b1512c71 100644 --- a/web/console/src/modules/cluster/models/AllocationRatioEdition.ts +++ b/web/console/src/modules/cluster/models/AllocationRatioEdition.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { Validation } from 'src/modules/common'; import { Identifiable } from '@tencent/ff-redux'; diff --git a/web/console/src/modules/cluster/models/ClusterCreationState.ts b/web/console/src/modules/cluster/models/ClusterCreationState.ts index 6006d6de8..ce0e1ab1b 100644 --- a/web/console/src/modules/cluster/models/ClusterCreationState.ts +++ b/web/console/src/modules/cluster/models/ClusterCreationState.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { Identifiable } from '@tencent/ff-redux'; import { Validation } from '../../common/models'; diff --git a/web/console/src/modules/cluster/models/Clustercredential.ts b/web/console/src/modules/cluster/models/Clustercredential.ts index 26091ea6f..1061ef0c2 100644 --- a/web/console/src/modules/cluster/models/Clustercredential.ts +++ b/web/console/src/modules/cluster/models/Clustercredential.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export interface Clustercredential { name: string; clusterName: string; diff --git a/web/console/src/modules/cluster/models/Computer.ts b/web/console/src/modules/cluster/models/Computer.ts index 3f5dea2cb..1a043d3b0 100644 --- a/web/console/src/modules/cluster/models/Computer.ts +++ b/web/console/src/modules/cluster/models/Computer.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { FetcherState, FFListModel, Identifiable, QueryState, RecordSet, WorkflowState } from '@tencent/ff-redux'; import { CreateResource } from '../../common'; diff --git a/web/console/src/modules/cluster/models/ComputerOperator.ts b/web/console/src/modules/cluster/models/ComputerOperator.ts index cd573229e..b1c71b89e 100644 --- a/web/console/src/modules/cluster/models/ComputerOperator.ts +++ b/web/console/src/modules/cluster/models/ComputerOperator.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export interface ComputerOperator { /** * 集群Id diff --git a/web/console/src/modules/cluster/models/ConfigMapEdit.ts b/web/console/src/modules/cluster/models/ConfigMapEdit.ts index 37bcf837b..7705fea2b 100644 --- a/web/console/src/modules/cluster/models/ConfigMapEdit.ts +++ b/web/console/src/modules/cluster/models/ConfigMapEdit.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { Identifiable, uuid } from '@tencent/ff-redux'; import { initValidator, Validation } from '../../common/models'; diff --git a/web/console/src/modules/cluster/models/ContainerEnv.ts b/web/console/src/modules/cluster/models/ContainerEnv.ts index eb33fd3c9..ec2c19d0b 100644 --- a/web/console/src/modules/cluster/models/ContainerEnv.ts +++ b/web/console/src/modules/cluster/models/ContainerEnv.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { Identifiable } from '@tencent/ff-redux'; import { t } from '@tencent/tea-app/lib/i18n'; import { Validation, initValidator } from '@tencent/ff-validator'; diff --git a/web/console/src/modules/cluster/models/ContainerItem.ts b/web/console/src/modules/cluster/models/ContainerItem.ts index d7a873fb5..c66b5feb1 100644 --- a/web/console/src/modules/cluster/models/ContainerItem.ts +++ b/web/console/src/modules/cluster/models/ContainerItem.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { Identifiable } from '@tencent/ff-redux'; import { Validation } from '../../common/models'; diff --git a/web/console/src/modules/cluster/models/CreateIC.ts b/web/console/src/modules/cluster/models/CreateIC.ts index b507d2098..721c60f72 100644 --- a/web/console/src/modules/cluster/models/CreateIC.ts +++ b/web/console/src/modules/cluster/models/CreateIC.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { Identifiable } from '@tencent/ff-redux'; import { Validation } from '../../common/models'; diff --git a/web/console/src/modules/cluster/models/DetailResourceOption.ts b/web/console/src/modules/cluster/models/DetailResourceOption.ts index 5285d6025..5188c0c85 100644 --- a/web/console/src/modules/cluster/models/DetailResourceOption.ts +++ b/web/console/src/modules/cluster/models/DetailResourceOption.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { ResourceInfo } from '../../common'; export interface DetailResourceOption { diff --git a/web/console/src/modules/cluster/models/DialogState.ts b/web/console/src/modules/cluster/models/DialogState.ts index c75e771f3..a517aa6d7 100644 --- a/web/console/src/modules/cluster/models/DialogState.ts +++ b/web/console/src/modules/cluster/models/DialogState.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export enum DialogNameEnum { /** 集群凭证 弹窗 */ kuberctlDialog = 'kuberctlDialog', diff --git a/web/console/src/modules/cluster/models/Event.ts b/web/console/src/modules/cluster/models/Event.ts index 4cf1492c0..c7f38f28e 100644 --- a/web/console/src/modules/cluster/models/Event.ts +++ b/web/console/src/modules/cluster/models/Event.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { Identifiable } from '@tencent/ff-redux'; import { ResourceFilter } from './ResourceOption'; diff --git a/web/console/src/modules/cluster/models/Lbcf.ts b/web/console/src/modules/cluster/models/Lbcf.ts index ee3067739..08a34ba6d 100644 --- a/web/console/src/modules/cluster/models/Lbcf.ts +++ b/web/console/src/modules/cluster/models/Lbcf.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { extend, Identifiable, RecordSet } from '@tencent/ff-redux'; export interface LbcfResource extends Identifiable { diff --git a/web/console/src/modules/cluster/models/LbcfEdit.ts b/web/console/src/modules/cluster/models/LbcfEdit.ts index a3be0abfb..991ed0c5e 100644 --- a/web/console/src/modules/cluster/models/LbcfEdit.ts +++ b/web/console/src/modules/cluster/models/LbcfEdit.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { string } from 'prop-types'; import { extend, Identifiable, RecordSet, FFListModel } from '@tencent/ff-redux'; diff --git a/web/console/src/modules/cluster/models/MonitorPanel.tsx b/web/console/src/modules/cluster/models/MonitorPanel.tsx index 0c0896ad5..2f1b19acf 100644 --- a/web/console/src/modules/cluster/models/MonitorPanel.tsx +++ b/web/console/src/modules/cluster/models/MonitorPanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { t, Trans } from '@tencent/tea-app/lib/i18n'; import { TransformField } from '@tencent/tchart'; diff --git a/web/console/src/modules/cluster/models/Namespace.ts b/web/console/src/modules/cluster/models/Namespace.ts index aba6c3781..d43085fbb 100644 --- a/web/console/src/modules/cluster/models/Namespace.ts +++ b/web/console/src/modules/cluster/models/Namespace.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { Identifiable } from '@tencent/ff-redux'; import { Validation } from '../../common/models'; diff --git a/web/console/src/modules/cluster/models/NamespaceCreation.ts b/web/console/src/modules/cluster/models/NamespaceCreation.ts index ddc4bb0b9..c084ed774 100644 --- a/web/console/src/modules/cluster/models/NamespaceCreation.ts +++ b/web/console/src/modules/cluster/models/NamespaceCreation.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { Identifiable } from '@tencent/ff-redux'; import { Validation } from '../../common/models'; diff --git a/web/console/src/modules/cluster/models/NamespaceOperator.ts b/web/console/src/modules/cluster/models/NamespaceOperator.ts index 26c3b5d10..63e57f039 100644 --- a/web/console/src/modules/cluster/models/NamespaceOperator.ts +++ b/web/console/src/modules/cluster/models/NamespaceOperator.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export interface NamespaceOperator { /** * 集群Id diff --git a/web/console/src/modules/cluster/models/Pod.ts b/web/console/src/modules/cluster/models/Pod.ts index 6fec38603..55dbfee43 100644 --- a/web/console/src/modules/cluster/models/Pod.ts +++ b/web/console/src/modules/cluster/models/Pod.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { Identifiable } from '@tencent/ff-redux'; export interface Pod extends Identifiable { diff --git a/web/console/src/modules/cluster/models/PortMap.ts b/web/console/src/modules/cluster/models/PortMap.ts index 570d1bc87..17000dcb6 100644 --- a/web/console/src/modules/cluster/models/PortMap.ts +++ b/web/console/src/modules/cluster/models/PortMap.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { Identifiable } from '@tencent/ff-redux'; import { Validation } from '../../common/models'; diff --git a/web/console/src/modules/cluster/models/Replicaset.ts b/web/console/src/modules/cluster/models/Replicaset.ts index f01db1f32..05c3d3141 100644 --- a/web/console/src/modules/cluster/models/Replicaset.ts +++ b/web/console/src/modules/cluster/models/Replicaset.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { Identifiable } from '@tencent/ff-redux'; export interface Replicaset extends Identifiable { diff --git a/web/console/src/modules/cluster/models/RequestLimit.ts b/web/console/src/modules/cluster/models/RequestLimit.ts index 96009cac0..678f365c3 100644 --- a/web/console/src/modules/cluster/models/RequestLimit.ts +++ b/web/console/src/modules/cluster/models/RequestLimit.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { Identifiable } from '@tencent/ff-redux'; export interface RequestLimit extends Identifiable { diff --git a/web/console/src/modules/cluster/models/ResourceDetailState.ts b/web/console/src/modules/cluster/models/ResourceDetailState.ts index 1294322bc..689d605c5 100644 --- a/web/console/src/modules/cluster/models/ResourceDetailState.ts +++ b/web/console/src/modules/cluster/models/ResourceDetailState.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { Validation, LogAgent } from 'src/modules/common'; import { FetcherState, FFListModel, QueryState, RecordSet, WorkflowState } from '@tencent/ff-redux'; diff --git a/web/console/src/modules/cluster/models/ResourceEventOption.ts b/web/console/src/modules/cluster/models/ResourceEventOption.ts index 1f9177585..f265a9dd8 100644 --- a/web/console/src/modules/cluster/models/ResourceEventOption.ts +++ b/web/console/src/modules/cluster/models/ResourceEventOption.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { FetcherState, QueryState, RecordSet } from '@tencent/ff-redux'; import { Event, EventFilter } from './Event'; diff --git a/web/console/src/modules/cluster/models/ResourceLogOption.ts b/web/console/src/modules/cluster/models/ResourceLogOption.ts index a0bbe2fc2..62aa92ce2 100644 --- a/web/console/src/modules/cluster/models/ResourceLogOption.ts +++ b/web/console/src/modules/cluster/models/ResourceLogOption.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { FetcherState, QueryState, RecordSet } from '@tencent/ff-redux'; import { Pod } from './Pod'; diff --git a/web/console/src/modules/cluster/models/ResourceOption.ts b/web/console/src/modules/cluster/models/ResourceOption.ts index 8bc5dfb58..0e00cc41b 100644 --- a/web/console/src/modules/cluster/models/ResourceOption.ts +++ b/web/console/src/modules/cluster/models/ResourceOption.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { Identifiable, FFListModel } from '@tencent/ff-redux'; export interface ResourceOption { diff --git a/web/console/src/modules/cluster/models/RootState.ts b/web/console/src/modules/cluster/models/RootState.ts index 109d5c516..fda99eb7e 100644 --- a/web/console/src/modules/cluster/models/RootState.ts +++ b/web/console/src/modules/cluster/models/RootState.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { FetcherState, FFListModel, QueryState, RecordSet, WorkflowState } from '@tencent/ff-redux'; import { RouteState } from '../../../../helpers'; diff --git a/web/console/src/modules/cluster/models/RuleMap.ts b/web/console/src/modules/cluster/models/RuleMap.ts index 03b162377..6593cea0d 100644 --- a/web/console/src/modules/cluster/models/RuleMap.ts +++ b/web/console/src/modules/cluster/models/RuleMap.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { Identifiable } from '@tencent/ff-redux'; import { Validation } from '../../common/models'; diff --git a/web/console/src/modules/cluster/models/SecretEdit.ts b/web/console/src/modules/cluster/models/SecretEdit.ts index e5346d7b4..5b6a357a7 100644 --- a/web/console/src/modules/cluster/models/SecretEdit.ts +++ b/web/console/src/modules/cluster/models/SecretEdit.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { FetcherState, Identifiable, QueryState, RecordSet } from '@tencent/ff-redux'; import { Validation } from '../../common/models'; diff --git a/web/console/src/modules/cluster/models/SelectProjectState.ts b/web/console/src/modules/cluster/models/SelectProjectState.ts index 8e4950ca1..222267d31 100644 --- a/web/console/src/modules/cluster/models/SelectProjectState.ts +++ b/web/console/src/modules/cluster/models/SelectProjectState.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export interface SelectProjectState { /** * 新业务 diff --git a/web/console/src/modules/cluster/models/ServiceEdit.ts b/web/console/src/modules/cluster/models/ServiceEdit.ts index c797b012d..f9b444a49 100644 --- a/web/console/src/modules/cluster/models/ServiceEdit.ts +++ b/web/console/src/modules/cluster/models/ServiceEdit.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { FetcherState, Identifiable, QueryState, RecordSet } from '@tencent/ff-redux'; import { Validation } from '../../common/models'; diff --git a/web/console/src/modules/cluster/models/SubRoot.ts b/web/console/src/modules/cluster/models/SubRoot.ts index 677c3e00e..97075c4e7 100644 --- a/web/console/src/modules/cluster/models/SubRoot.ts +++ b/web/console/src/modules/cluster/models/SubRoot.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { FetcherState, QueryState, RecordSet, WorkflowState } from '@tencent/ff-redux'; import { ResourceInfo } from '../../common/models'; diff --git a/web/console/src/modules/cluster/models/SubRouter.ts b/web/console/src/modules/cluster/models/SubRouter.ts index e6b707686..49b8651d0 100644 --- a/web/console/src/modules/cluster/models/SubRouter.ts +++ b/web/console/src/modules/cluster/models/SubRouter.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { Identifiable } from '@tencent/ff-redux'; export interface SubRouter extends Identifiable, BasicRouter { diff --git a/web/console/src/modules/cluster/models/Version.ts b/web/console/src/modules/cluster/models/Version.ts index b65ba7a95..8cfb48ea8 100644 --- a/web/console/src/modules/cluster/models/Version.ts +++ b/web/console/src/modules/cluster/models/Version.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { Identifiable } from '@tencent/ff-redux'; export interface Version extends Identifiable { diff --git a/web/console/src/modules/cluster/models/VolumeItem.ts b/web/console/src/modules/cluster/models/VolumeItem.ts index 20fc30a6b..a405d3fe2 100644 --- a/web/console/src/modules/cluster/models/VolumeItem.ts +++ b/web/console/src/modules/cluster/models/VolumeItem.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { Identifiable } from '@tencent/ff-redux'; import { Validation } from '../../common/models'; diff --git a/web/console/src/modules/cluster/models/WorkloadEdit.ts b/web/console/src/modules/cluster/models/WorkloadEdit.ts index 2708060cf..6f99d7b74 100644 --- a/web/console/src/modules/cluster/models/WorkloadEdit.ts +++ b/web/console/src/modules/cluster/models/WorkloadEdit.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { FetcherState, Identifiable, QueryState, RecordSet, FFListModel } from '@tencent/ff-redux'; import { Validation } from '../../common/models'; diff --git a/web/console/src/modules/cluster/models/index.ts b/web/console/src/modules/cluster/models/index.ts index 5764e11b9..6bf8b219a 100644 --- a/web/console/src/modules/cluster/models/index.ts +++ b/web/console/src/modules/cluster/models/index.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export { RootState } from './RootState'; export { Computer, ComputerFilter, ComputerState } from './Computer'; diff --git a/web/console/src/modules/cluster/reducers/ComputerReducer.ts b/web/console/src/modules/cluster/reducers/ComputerReducer.ts index d542443aa..da0fada49 100644 --- a/web/console/src/modules/cluster/reducers/ComputerReducer.ts +++ b/web/console/src/modules/cluster/reducers/ComputerReducer.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { combineReducers } from 'redux'; import { createFFListReducer, generateWorkflowReducer, RecordSet, reduceToPayload, uuid } from '@tencent/ff-redux'; diff --git a/web/console/src/modules/cluster/reducers/ConfigMapEditReducer.ts b/web/console/src/modules/cluster/reducers/ConfigMapEditReducer.ts index 8170796d8..d50ef404d 100644 --- a/web/console/src/modules/cluster/reducers/ConfigMapEditReducer.ts +++ b/web/console/src/modules/cluster/reducers/ConfigMapEditReducer.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { combineReducers } from 'redux'; import { RecordSet, reduceToPayload, ReduxAction } from '@tencent/ff-redux'; diff --git a/web/console/src/modules/cluster/reducers/CreateICReducer.ts b/web/console/src/modules/cluster/reducers/CreateICReducer.ts index 77ffa39c1..e315c8d6f 100644 --- a/web/console/src/modules/cluster/reducers/CreateICReducer.ts +++ b/web/console/src/modules/cluster/reducers/CreateICReducer.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { combineReducers } from 'redux'; import { RecordSet, reduceToPayload } from '@tencent/ff-redux'; diff --git a/web/console/src/modules/cluster/reducers/DetailResourceReducer.ts b/web/console/src/modules/cluster/reducers/DetailResourceReducer.ts index dc61f5686..d59db2ecf 100644 --- a/web/console/src/modules/cluster/reducers/DetailResourceReducer.ts +++ b/web/console/src/modules/cluster/reducers/DetailResourceReducer.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { combineReducers } from 'redux'; import { RecordSet, reduceToPayload } from '@tencent/ff-redux'; diff --git a/web/console/src/modules/cluster/reducers/LbcfEditReducer.ts b/web/console/src/modules/cluster/reducers/LbcfEditReducer.ts index 6bfb3b293..68e09da97 100644 --- a/web/console/src/modules/cluster/reducers/LbcfEditReducer.ts +++ b/web/console/src/modules/cluster/reducers/LbcfEditReducer.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { FFReduxActionName } from './../constants/Config'; import { combineReducers } from 'redux'; diff --git a/web/console/src/modules/cluster/reducers/NamespaceEditReducer.ts b/web/console/src/modules/cluster/reducers/NamespaceEditReducer.ts index c58b60bb6..6818b1794 100644 --- a/web/console/src/modules/cluster/reducers/NamespaceEditReducer.ts +++ b/web/console/src/modules/cluster/reducers/NamespaceEditReducer.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { combineReducers } from 'redux'; import { RecordSet, reduceToPayload } from '@tencent/ff-redux'; diff --git a/web/console/src/modules/cluster/reducers/ResourceDetailReducer.ts b/web/console/src/modules/cluster/reducers/ResourceDetailReducer.ts index b758de18a..95a406c2d 100644 --- a/web/console/src/modules/cluster/reducers/ResourceDetailReducer.ts +++ b/web/console/src/modules/cluster/reducers/ResourceDetailReducer.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { combineReducers } from 'redux'; import { createFFListReducer, generateWorkflowReducer, RecordSet, reduceToPayload } from '@tencent/ff-redux'; diff --git a/web/console/src/modules/cluster/reducers/ResourceEventReducer.ts b/web/console/src/modules/cluster/reducers/ResourceEventReducer.ts index 30d2cc622..272229edb 100644 --- a/web/console/src/modules/cluster/reducers/ResourceEventReducer.ts +++ b/web/console/src/modules/cluster/reducers/ResourceEventReducer.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { combineReducers } from 'redux'; import { RecordSet, reduceToPayload } from '@tencent/ff-redux'; diff --git a/web/console/src/modules/cluster/reducers/ResourceLogReducer.ts b/web/console/src/modules/cluster/reducers/ResourceLogReducer.ts index 979ca4424..38b60abf5 100644 --- a/web/console/src/modules/cluster/reducers/ResourceLogReducer.ts +++ b/web/console/src/modules/cluster/reducers/ResourceLogReducer.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { combineReducers } from 'redux'; import { RecordSet, reduceToPayload } from '@tencent/ff-redux'; diff --git a/web/console/src/modules/cluster/reducers/ResourceReducer.ts b/web/console/src/modules/cluster/reducers/ResourceReducer.ts index 52ccfcbab..e26cfe438 100644 --- a/web/console/src/modules/cluster/reducers/ResourceReducer.ts +++ b/web/console/src/modules/cluster/reducers/ResourceReducer.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { combineReducers } from 'redux'; import { reduceToPayload, createFFListReducer } from '@tencent/ff-redux'; diff --git a/web/console/src/modules/cluster/reducers/RootReducer.project.ts b/web/console/src/modules/cluster/reducers/RootReducer.project.ts index 513e6a6e6..7f62f6f66 100644 --- a/web/console/src/modules/cluster/reducers/RootReducer.project.ts +++ b/web/console/src/modules/cluster/reducers/RootReducer.project.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { combineReducers } from 'redux'; import { diff --git a/web/console/src/modules/cluster/reducers/RootReducer.ts b/web/console/src/modules/cluster/reducers/RootReducer.ts index 92ca66f31..9d76f271d 100644 --- a/web/console/src/modules/cluster/reducers/RootReducer.ts +++ b/web/console/src/modules/cluster/reducers/RootReducer.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { combineReducers } from 'redux'; import { diff --git a/web/console/src/modules/cluster/reducers/SecretEditReducer.ts b/web/console/src/modules/cluster/reducers/SecretEditReducer.ts index f263ff012..c0c2ff43f 100644 --- a/web/console/src/modules/cluster/reducers/SecretEditReducer.ts +++ b/web/console/src/modules/cluster/reducers/SecretEditReducer.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { combineReducers } from 'redux'; import { RecordSet, reduceToPayload } from '@tencent/ff-redux'; diff --git a/web/console/src/modules/cluster/reducers/ServiceEditReducer.ts b/web/console/src/modules/cluster/reducers/ServiceEditReducer.ts index a84c5db1e..b06467196 100644 --- a/web/console/src/modules/cluster/reducers/ServiceEditReducer.ts +++ b/web/console/src/modules/cluster/reducers/ServiceEditReducer.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { combineReducers } from 'redux'; import { RecordSet, reduceToPayload } from '@tencent/ff-redux'; diff --git a/web/console/src/modules/cluster/reducers/SubReducer.ts b/web/console/src/modules/cluster/reducers/SubReducer.ts index 1abe69a38..855e2ca93 100644 --- a/web/console/src/modules/cluster/reducers/SubReducer.ts +++ b/web/console/src/modules/cluster/reducers/SubReducer.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { combineReducers } from 'redux'; import { generateWorkflowReducer, RecordSet, reduceToPayload } from '@tencent/ff-redux'; diff --git a/web/console/src/modules/cluster/reducers/WorkloadEditReducer.ts b/web/console/src/modules/cluster/reducers/WorkloadEditReducer.ts index 30610fd82..e51bf47d2 100644 --- a/web/console/src/modules/cluster/reducers/WorkloadEditReducer.ts +++ b/web/console/src/modules/cluster/reducers/WorkloadEditReducer.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { ComputerFilter, Computer } from './../models/Computer'; import { FFReduxActionName } from './../constants/Config'; import { combineReducers } from 'redux'; diff --git a/web/console/src/modules/cluster/router.project.ts b/web/console/src/modules/cluster/router.project.ts index bdb17950b..89d434a41 100644 --- a/web/console/src/modules/cluster/router.project.ts +++ b/web/console/src/modules/cluster/router.project.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { Router } from '../../../helpers/Router'; /** diff --git a/web/console/src/modules/cluster/router.ts b/web/console/src/modules/cluster/router.ts index 995c4b473..87f96ada4 100644 --- a/web/console/src/modules/cluster/router.ts +++ b/web/console/src/modules/cluster/router.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { Router } from '../../../helpers/Router'; /** diff --git a/web/console/src/modules/cluster/stores/RootStore.ts b/web/console/src/modules/cluster/stores/RootStore.ts index 528dcd48c..83ff139b0 100644 --- a/web/console/src/modules/cluster/stores/RootStore.ts +++ b/web/console/src/modules/cluster/stores/RootStore.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { createStore } from '@tencent/ff-redux'; import { generateResetableReducer } from '../../../../helpers'; diff --git a/web/console/src/modules/common/components/ChartBrush/BarChartBrush.tsx b/web/console/src/modules/common/components/ChartBrush/BarChartBrush.tsx index 02d748794..a645f62bf 100644 --- a/web/console/src/modules/common/components/ChartBrush/BarChartBrush.tsx +++ b/web/console/src/modules/common/components/ChartBrush/BarChartBrush.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as d3 from 'd3'; import * as React from 'react'; diff --git a/web/console/src/modules/common/components/ChartBrush/LineChartBrush.tsx b/web/console/src/modules/common/components/ChartBrush/LineChartBrush.tsx index 52b6b8a35..37b7f6546 100644 --- a/web/console/src/modules/common/components/ChartBrush/LineChartBrush.tsx +++ b/web/console/src/modules/common/components/ChartBrush/LineChartBrush.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as d3 from 'd3'; import * as React from 'react'; diff --git a/web/console/src/modules/common/components/ChartBrush/bytesTo.ts b/web/console/src/modules/common/components/ChartBrush/bytesTo.ts index 7e85a49d9..05b033a6f 100644 --- a/web/console/src/modules/common/components/ChartBrush/bytesTo.ts +++ b/web/console/src/modules/common/components/ChartBrush/bytesTo.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ /** * Bytes -> GB/MB/KB/Bytes */ diff --git a/web/console/src/modules/common/components/ChartBrush/index.ts b/web/console/src/modules/common/components/ChartBrush/index.ts index 69248dd65..df7799983 100644 --- a/web/console/src/modules/common/components/ChartBrush/index.ts +++ b/web/console/src/modules/common/components/ChartBrush/index.ts @@ -1,2 +1,19 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export { LineChartBrush, LineChartBrushProps } from './LineChartBrush'; export { BarChartBrush, BarChartBrushProps } from './BarChartBrush'; diff --git a/web/console/src/modules/common/components/NavigateLink.tsx b/web/console/src/modules/common/components/NavigateLink.tsx index a8e19947b..7b24ca149 100644 --- a/web/console/src/modules/common/components/NavigateLink.tsx +++ b/web/console/src/modules/common/components/NavigateLink.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; export function NavigateLink({ title, diff --git a/web/console/src/modules/common/components/buttonbar/ButtonBar.tsx b/web/console/src/modules/common/components/buttonbar/ButtonBar.tsx index b0bf61be1..02f744200 100644 --- a/web/console/src/modules/common/components/buttonbar/ButtonBar.tsx +++ b/web/console/src/modules/common/components/buttonbar/ButtonBar.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as classNames from 'classnames'; import * as React from 'react'; diff --git a/web/console/src/modules/common/components/buttonbar/index.ts b/web/console/src/modules/common/components/buttonbar/index.ts index fabb431d2..af569e123 100644 --- a/web/console/src/modules/common/components/buttonbar/index.ts +++ b/web/console/src/modules/common/components/buttonbar/index.ts @@ -1 +1,18 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export { ButtonBar, ButtonBarItem, ButtonBarProps } from './ButtonBar'; diff --git a/web/console/src/modules/common/components/cardMenu/CardMenu.tsx b/web/console/src/modules/common/components/cardMenu/CardMenu.tsx index 8dd9b3f7a..6223ea689 100644 --- a/web/console/src/modules/common/components/cardMenu/CardMenu.tsx +++ b/web/console/src/modules/common/components/cardMenu/CardMenu.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as classnames from 'classnames'; import * as React from 'react'; diff --git a/web/console/src/modules/common/components/cardMenu/index.ts b/web/console/src/modules/common/components/cardMenu/index.ts index 5242245c4..52d9df8fb 100644 --- a/web/console/src/modules/common/components/cardMenu/index.ts +++ b/web/console/src/modules/common/components/cardMenu/index.ts @@ -1 +1,18 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export { CardMenu, CardMenuItem } from './CardMenu'; diff --git a/web/console/src/modules/common/components/clip/Clip.tsx b/web/console/src/modules/common/components/clip/Clip.tsx index 280528596..e79aae379 100644 --- a/web/console/src/modules/common/components/clip/Clip.tsx +++ b/web/console/src/modules/common/components/clip/Clip.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as Clipboard from 'clipboard'; import * as React from 'react'; diff --git a/web/console/src/modules/common/components/clip/index.ts b/web/console/src/modules/common/components/clip/index.ts index c07061bd8..11feef6d5 100644 --- a/web/console/src/modules/common/components/clip/index.ts +++ b/web/console/src/modules/common/components/clip/index.ts @@ -1 +1,18 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export { Clip, ClipProps } from './Clip'; diff --git a/web/console/src/modules/common/components/codemirror/CodeMirrorEditor.tsx b/web/console/src/modules/common/components/codemirror/CodeMirrorEditor.tsx index 3bd5881fc..173a4d0e8 100644 --- a/web/console/src/modules/common/components/codemirror/CodeMirrorEditor.tsx +++ b/web/console/src/modules/common/components/codemirror/CodeMirrorEditor.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import * as CodeMirror from 'react-codemirror'; diff --git a/web/console/src/modules/common/components/codemirror/index.ts b/web/console/src/modules/common/components/codemirror/index.ts index 6842e0368..c19b54a76 100644 --- a/web/console/src/modules/common/components/codemirror/index.ts +++ b/web/console/src/modules/common/components/codemirror/index.ts @@ -1 +1,18 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export { CodeMirrorEditor, CodeMirrorEditorProps } from './CodeMirrorEditor'; diff --git a/web/console/src/modules/common/components/commonbar/CommonBar.tsx b/web/console/src/modules/common/components/commonbar/CommonBar.tsx index a2d4d393c..bcc3a91ff 100644 --- a/web/console/src/modules/common/components/commonbar/CommonBar.tsx +++ b/web/console/src/modules/common/components/commonbar/CommonBar.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { ButtonBar, ButtonBarItem, ButtonBarProps } from '../buttonbar'; diff --git a/web/console/src/modules/common/components/commonbar/index.ts b/web/console/src/modules/common/components/commonbar/index.ts index 15155bdde..7feafcce7 100644 --- a/web/console/src/modules/common/components/commonbar/index.ts +++ b/web/console/src/modules/common/components/commonbar/index.ts @@ -1 +1,18 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export { CommonBar, CommonBarItem, CommonBarProps } from './CommonBar'; diff --git a/web/console/src/modules/common/components/datepicker/DatePicker.tsx b/web/console/src/modules/common/components/datepicker/DatePicker.tsx index ea3427df8..86394c353 100644 --- a/web/console/src/modules/common/components/datepicker/DatePicker.tsx +++ b/web/console/src/modules/common/components/datepicker/DatePicker.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import * as ReactDom from 'react-dom'; diff --git a/web/console/src/modules/common/components/datepicker/defaultDatePickerTabs.ts b/web/console/src/modules/common/components/datepicker/defaultDatePickerTabs.ts index 7da12c67e..f45534d83 100644 --- a/web/console/src/modules/common/components/datepicker/defaultDatePickerTabs.ts +++ b/web/console/src/modules/common/components/datepicker/defaultDatePickerTabs.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { DatePickerProps } from './'; import { t, Trans } from '@tencent/tea-app/lib/i18n'; diff --git a/web/console/src/modules/common/components/datepicker/index.ts b/web/console/src/modules/common/components/datepicker/index.ts index 1111040d4..e4f3c8ec4 100644 --- a/web/console/src/modules/common/components/datepicker/index.ts +++ b/web/console/src/modules/common/components/datepicker/index.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export { DatePicker, DatePickerProps, diff --git a/web/console/src/modules/common/components/datetimepicker/DateTimePicker.tsx b/web/console/src/modules/common/components/datetimepicker/DateTimePicker.tsx index 06cda818a..7cf7e6236 100644 --- a/web/console/src/modules/common/components/datetimepicker/DateTimePicker.tsx +++ b/web/console/src/modules/common/components/datetimepicker/DateTimePicker.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ /* eslint-disable */ import * as classNames from 'classnames'; diff --git a/web/console/src/modules/common/components/datetimepicker/SingleDatePicker.tsx b/web/console/src/modules/common/components/datetimepicker/SingleDatePicker.tsx index 39c65ecad..d178f825a 100644 --- a/web/console/src/modules/common/components/datetimepicker/SingleDatePicker.tsx +++ b/web/console/src/modules/common/components/datetimepicker/SingleDatePicker.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as classNames from 'classnames'; import * as React from 'react'; diff --git a/web/console/src/modules/common/components/datetimepicker/index.ts b/web/console/src/modules/common/components/datetimepicker/index.ts index 66445e72d..d325b4f6a 100644 --- a/web/console/src/modules/common/components/datetimepicker/index.ts +++ b/web/console/src/modules/common/components/datetimepicker/index.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export { DateTimePicker, DateTimePickerProps, DateTimePickerValue } from './DateTimePicker'; export { diff --git a/web/console/src/modules/common/components/downMenu/DownMenu.tsx b/web/console/src/modules/common/components/downMenu/DownMenu.tsx index cd340b25b..ec6cee166 100644 --- a/web/console/src/modules/common/components/downMenu/DownMenu.tsx +++ b/web/console/src/modules/common/components/downMenu/DownMenu.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { BaseReactProps, insertCSS } from '@tencent/ff-redux'; diff --git a/web/console/src/modules/common/components/downMenu/index.ts b/web/console/src/modules/common/components/downMenu/index.ts index 8aa8937dc..aae436563 100644 --- a/web/console/src/modules/common/components/downMenu/index.ts +++ b/web/console/src/modules/common/components/downMenu/index.ts @@ -1 +1,18 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export { DownMenu, DownMenuItem } from '../downMenu/DownMenu'; diff --git a/web/console/src/modules/common/components/dropdown/Dropdown.tsx b/web/console/src/modules/common/components/dropdown/Dropdown.tsx index b472b6205..348a79af0 100644 --- a/web/console/src/modules/common/components/dropdown/Dropdown.tsx +++ b/web/console/src/modules/common/components/dropdown/Dropdown.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as classnames from 'classnames'; import * as React from 'react'; import * as TransitionGroup from 'react-addons-css-transition-group'; diff --git a/web/console/src/modules/common/components/dropdown/index.ts b/web/console/src/modules/common/components/dropdown/index.ts index 55332e2da..659d0599d 100644 --- a/web/console/src/modules/common/components/dropdown/index.ts +++ b/web/console/src/modules/common/components/dropdown/index.ts @@ -1 +1,18 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export { DropdownList, DropdownListItem, DropdownListProps } from './Dropdown'; diff --git a/web/console/src/modules/common/components/dropdownmenu/DropdownMenu.tsx b/web/console/src/modules/common/components/dropdownmenu/DropdownMenu.tsx index b68973662..a201eec3d 100644 --- a/web/console/src/modules/common/components/dropdownmenu/DropdownMenu.tsx +++ b/web/console/src/modules/common/components/dropdownmenu/DropdownMenu.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as classnames from 'classnames'; import * as React from 'react'; diff --git a/web/console/src/modules/common/components/dropdownmenu/index.ts b/web/console/src/modules/common/components/dropdownmenu/index.ts index 91b38dd8a..7de8dc1ff 100644 --- a/web/console/src/modules/common/components/dropdownmenu/index.ts +++ b/web/console/src/modules/common/components/dropdownmenu/index.ts @@ -1 +1,18 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export { DropdownMenu, DropdownMenuItem, DropdownMenuProps } from './DropdownMenu'; diff --git a/web/console/src/modules/common/components/empty/emptyTips.tsx b/web/console/src/modules/common/components/empty/emptyTips.tsx index d6e69f445..979026ad4 100644 --- a/web/console/src/modules/common/components/empty/emptyTips.tsx +++ b/web/console/src/modules/common/components/empty/emptyTips.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { Trans } from '@tencent/tea-app/lib/i18n'; export const emptyTips: JSX.Element = ( diff --git a/web/console/src/modules/common/components/empty/index.ts b/web/console/src/modules/common/components/empty/index.ts index 29dd6e6e6..45896dcf8 100644 --- a/web/console/src/modules/common/components/empty/index.ts +++ b/web/console/src/modules/common/components/empty/index.ts @@ -1 +1,18 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export { emptyTips } from './emptyTips'; diff --git a/web/console/src/modules/common/components/errortip/ErrorTip.tsx b/web/console/src/modules/common/components/errortip/ErrorTip.tsx index 01364989c..61406687d 100644 --- a/web/console/src/modules/common/components/errortip/ErrorTip.tsx +++ b/web/console/src/modules/common/components/errortip/ErrorTip.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { BaseReactProps, WorkflowState } from '@tencent/ff-redux'; diff --git a/web/console/src/modules/common/components/errortip/index.ts b/web/console/src/modules/common/components/errortip/index.ts index 749ee436f..11eb1af9a 100644 --- a/web/console/src/modules/common/components/errortip/index.ts +++ b/web/console/src/modules/common/components/errortip/index.ts @@ -1 +1,18 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export { ErrorGuide, ErrorTipProps, ErrorTip } from './ErrorTip'; diff --git a/web/console/src/modules/common/components/formitem/FormItem.tsx b/web/console/src/modules/common/components/formitem/FormItem.tsx index 352ca3c95..9b310112f 100644 --- a/web/console/src/modules/common/components/formitem/FormItem.tsx +++ b/web/console/src/modules/common/components/formitem/FormItem.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as classnames from 'classnames'; import * as React from 'react'; diff --git a/web/console/src/modules/common/components/formitem/index.ts b/web/console/src/modules/common/components/formitem/index.ts index 011895e34..30f1a1ae5 100644 --- a/web/console/src/modules/common/components/formitem/index.ts +++ b/web/console/src/modules/common/components/formitem/index.ts @@ -1 +1,18 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export { FormItem, FormItemProps } from './FormItem'; diff --git a/web/console/src/modules/common/components/gridtable/GridTable.tsx b/web/console/src/modules/common/components/gridtable/GridTable.tsx index 64180afaa..fb258ee86 100644 --- a/web/console/src/modules/common/components/gridtable/GridTable.tsx +++ b/web/console/src/modules/common/components/gridtable/GridTable.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { Card, Pagination, Table, TableProps } from '@tea/component'; diff --git a/web/console/src/modules/common/components/gridtable/index.ts b/web/console/src/modules/common/components/gridtable/index.ts index 42edf4b31..aab01ce96 100644 --- a/web/console/src/modules/common/components/gridtable/index.ts +++ b/web/console/src/modules/common/components/gridtable/index.ts @@ -1 +1,18 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export { GridTable } from './GridTable'; diff --git a/web/console/src/modules/common/components/headbubble/HeadBubble.tsx b/web/console/src/modules/common/components/headbubble/HeadBubble.tsx index 8400a9f95..971af03ca 100644 --- a/web/console/src/modules/common/components/headbubble/HeadBubble.tsx +++ b/web/console/src/modules/common/components/headbubble/HeadBubble.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { Bubble } from '@tea/component'; diff --git a/web/console/src/modules/common/components/headbubble/index.ts b/web/console/src/modules/common/components/headbubble/index.ts index 777e5fbe1..5c61a52bd 100644 --- a/web/console/src/modules/common/components/headbubble/index.ts +++ b/web/console/src/modules/common/components/headbubble/index.ts @@ -1 +1,18 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export { HeadBubble, HeadBubbleProps } from './HeadBubble'; diff --git a/web/console/src/modules/common/components/index.ts b/web/console/src/modules/common/components/index.ts index 9a8ac90ae..61c4f5d0f 100644 --- a/web/console/src/modules/common/components/index.ts +++ b/web/console/src/modules/common/components/index.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export { InputField, InputFieldProps } from './inputfield'; export { InputRange, InputRangeProps } from './inputrange'; export { SelectList, SelectListProps } from './select'; diff --git a/web/console/src/modules/common/components/inputfield/InputField.tsx b/web/console/src/modules/common/components/inputfield/InputField.tsx index c211329ed..fd7b422db 100644 --- a/web/console/src/modules/common/components/inputfield/InputField.tsx +++ b/web/console/src/modules/common/components/inputfield/InputField.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as classnames from 'classnames'; import * as React from 'react'; diff --git a/web/console/src/modules/common/components/inputfield/index.ts b/web/console/src/modules/common/components/inputfield/index.ts index ce2aaa61a..af0a18851 100644 --- a/web/console/src/modules/common/components/inputfield/index.ts +++ b/web/console/src/modules/common/components/inputfield/index.ts @@ -1 +1,18 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export { InputField, InputFieldProps } from './InputField'; diff --git a/web/console/src/modules/common/components/inputrange/InputRange.tsx b/web/console/src/modules/common/components/inputrange/InputRange.tsx index 296d87745..7cc74215c 100644 --- a/web/console/src/modules/common/components/inputrange/InputRange.tsx +++ b/web/console/src/modules/common/components/inputrange/InputRange.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as classnames from 'classnames'; import * as React from 'react'; diff --git a/web/console/src/modules/common/components/inputrange/index.ts b/web/console/src/modules/common/components/inputrange/index.ts index 707762332..6e8b93abe 100644 --- a/web/console/src/modules/common/components/inputrange/index.ts +++ b/web/console/src/modules/common/components/inputrange/index.ts @@ -1 +1,18 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export { InputRange, InputRangeProps } from './InputRange'; diff --git a/web/console/src/modules/common/components/linkbutton/LinkButton.tsx b/web/console/src/modules/common/components/linkbutton/LinkButton.tsx index 830e84908..48dda2413 100644 --- a/web/console/src/modules/common/components/linkbutton/LinkButton.tsx +++ b/web/console/src/modules/common/components/linkbutton/LinkButton.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as classnames from 'classnames'; import * as React from 'react'; diff --git a/web/console/src/modules/common/components/linkbutton/index.ts b/web/console/src/modules/common/components/linkbutton/index.ts index 361c709d3..620cb20e8 100644 --- a/web/console/src/modules/common/components/linkbutton/index.ts +++ b/web/console/src/modules/common/components/linkbutton/index.ts @@ -1 +1,18 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export { LinkButton, LinkButtonProps } from './LinkButton'; diff --git a/web/console/src/modules/common/components/listitem/ListItem.tsx b/web/console/src/modules/common/components/listitem/ListItem.tsx index b294f436c..4a40c3c4d 100644 --- a/web/console/src/modules/common/components/listitem/ListItem.tsx +++ b/web/console/src/modules/common/components/listitem/ListItem.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as classnames from 'classnames'; import * as React from 'react'; diff --git a/web/console/src/modules/common/components/listitem/index.ts b/web/console/src/modules/common/components/listitem/index.ts index 9954d9a75..1b5cac807 100644 --- a/web/console/src/modules/common/components/listitem/index.ts +++ b/web/console/src/modules/common/components/listitem/index.ts @@ -1 +1,18 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export { ListItem, ListItemProps } from './ListItem'; diff --git a/web/console/src/modules/common/components/logviewer/Panel.tsx b/web/console/src/modules/common/components/logviewer/Panel.tsx index baca039cc..1e2249024 100644 --- a/web/console/src/modules/common/components/logviewer/Panel.tsx +++ b/web/console/src/modules/common/components/logviewer/Panel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { findDOMNode } from 'react-dom'; diff --git a/web/console/src/modules/common/components/logviewer/index.ts b/web/console/src/modules/common/components/logviewer/index.ts index 8960d84f6..075a3a8c8 100644 --- a/web/console/src/modules/common/components/logviewer/index.ts +++ b/web/console/src/modules/common/components/logviewer/index.ts @@ -1 +1,18 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export * from './Panel'; diff --git a/web/console/src/modules/common/components/markdown/Markdown.tsx b/web/console/src/modules/common/components/markdown/Markdown.tsx index 2a29770bd..f0f64f623 100644 --- a/web/console/src/modules/common/components/markdown/Markdown.tsx +++ b/web/console/src/modules/common/components/markdown/Markdown.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as marked from 'marked'; import * as React from 'react'; diff --git a/web/console/src/modules/common/components/markdown/index.ts b/web/console/src/modules/common/components/markdown/index.ts index 9dae1f0f0..e960ff844 100644 --- a/web/console/src/modules/common/components/markdown/index.ts +++ b/web/console/src/modules/common/components/markdown/index.ts @@ -1 +1,18 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export { Markdown, MarkdownProps } from './Markdown'; diff --git a/web/console/src/modules/common/components/network/Network.tsx b/web/console/src/modules/common/components/network/Network.tsx index fa407c886..2863c5e29 100644 --- a/web/console/src/modules/common/components/network/Network.tsx +++ b/web/console/src/modules/common/components/network/Network.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { BaseReactProps } from '@tencent/ff-redux'; diff --git a/web/console/src/modules/common/components/network/VpcNetwork.tsx b/web/console/src/modules/common/components/network/VpcNetwork.tsx index fc5c3b148..e4cd3e739 100644 --- a/web/console/src/modules/common/components/network/VpcNetwork.tsx +++ b/web/console/src/modules/common/components/network/VpcNetwork.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { BaseReactProps } from '@tencent/ff-redux'; diff --git a/web/console/src/modules/common/components/network/index.ts b/web/console/src/modules/common/components/network/index.ts index 89933dec6..e01f63ea9 100644 --- a/web/console/src/modules/common/components/network/index.ts +++ b/web/console/src/modules/common/components/network/index.ts @@ -1,2 +1,19 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export { Network, NetworkProps } from '../network/Network'; export { VpcNetwork } from './VpcNetwork'; diff --git a/web/console/src/modules/common/components/regionbar/RegionBar.tsx b/web/console/src/modules/common/components/regionbar/RegionBar.tsx index 898301b74..1a47c739f 100644 --- a/web/console/src/modules/common/components/regionbar/RegionBar.tsx +++ b/web/console/src/modules/common/components/regionbar/RegionBar.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { FetcherState, FetchState, RecordSet } from '@tencent/ff-redux'; diff --git a/web/console/src/modules/common/components/regionbar/index.ts b/web/console/src/modules/common/components/regionbar/index.ts index 82db33520..dc6aad8a8 100644 --- a/web/console/src/modules/common/components/regionbar/index.ts +++ b/web/console/src/modules/common/components/regionbar/index.ts @@ -1 +1,18 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export { RegionBar, RegionBarProps } from './RegionBar'; \ No newline at end of file diff --git a/web/console/src/modules/common/components/resourcelist/ResourceList.tsx b/web/console/src/modules/common/components/resourcelist/ResourceList.tsx index 9cca0c97c..fe5689fa6 100644 --- a/web/console/src/modules/common/components/resourcelist/ResourceList.tsx +++ b/web/console/src/modules/common/components/resourcelist/ResourceList.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { Table, TableColumn, Text } from '@tea/component'; diff --git a/web/console/src/modules/common/components/resourcelist/index.ts b/web/console/src/modules/common/components/resourcelist/index.ts index 808f3ddca..97122b283 100644 --- a/web/console/src/modules/common/components/resourcelist/index.ts +++ b/web/console/src/modules/common/components/resourcelist/index.ts @@ -1 +1,18 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export { ResourceList } from './ResourceList'; diff --git a/web/console/src/modules/common/components/resourceselector/ResourceSelector.tsx b/web/console/src/modules/common/components/resourceselector/ResourceSelector.tsx index f4e38c3bb..456c7e85c 100644 --- a/web/console/src/modules/common/components/resourceselector/ResourceSelector.tsx +++ b/web/console/src/modules/common/components/resourceselector/ResourceSelector.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as classnames from 'classnames'; import * as React from 'react'; diff --git a/web/console/src/modules/common/components/resourceselector/index.ts b/web/console/src/modules/common/components/resourceselector/index.ts index 723b3248d..86dfe51cc 100644 --- a/web/console/src/modules/common/components/resourceselector/index.ts +++ b/web/console/src/modules/common/components/resourceselector/index.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export { ResourceSelectorGeneric, ResourceSelectorProps, diff --git a/web/console/src/modules/common/components/select/SelectList.tsx b/web/console/src/modules/common/components/select/SelectList.tsx index 3f8d07d4b..5daa8bad0 100644 --- a/web/console/src/modules/common/components/select/SelectList.tsx +++ b/web/console/src/modules/common/components/select/SelectList.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as classnames from 'classnames'; import * as React from 'react'; diff --git a/web/console/src/modules/common/components/select/index.ts b/web/console/src/modules/common/components/select/index.ts index e6169b7ba..b6772f85c 100644 --- a/web/console/src/modules/common/components/select/index.ts +++ b/web/console/src/modules/common/components/select/index.ts @@ -1 +1,18 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export { SelectList, SelectListProps } from './SelectList'; \ No newline at end of file diff --git a/web/console/src/modules/common/components/sidepanel/SidePanel.tsx b/web/console/src/modules/common/components/sidepanel/SidePanel.tsx index 45f909406..9fce0335f 100644 --- a/web/console/src/modules/common/components/sidepanel/SidePanel.tsx +++ b/web/console/src/modules/common/components/sidepanel/SidePanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { findDOMNode } from 'react-dom'; diff --git a/web/console/src/modules/common/components/sidepanel/index.ts b/web/console/src/modules/common/components/sidepanel/index.ts index 3ed301675..b360dc514 100644 --- a/web/console/src/modules/common/components/sidepanel/index.ts +++ b/web/console/src/modules/common/components/sidepanel/index.ts @@ -1 +1,18 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export { SidePanel, SidePanelProps } from './SidePanel'; \ No newline at end of file diff --git a/web/console/src/modules/common/components/stepTab/Step.tsx b/web/console/src/modules/common/components/stepTab/Step.tsx index 8e11e69a3..665d9a95f 100644 --- a/web/console/src/modules/common/components/stepTab/Step.tsx +++ b/web/console/src/modules/common/components/stepTab/Step.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { BaseReactProps } from '@tencent/ff-redux'; diff --git a/web/console/src/modules/common/components/stepTab/StepTab.tsx b/web/console/src/modules/common/components/stepTab/StepTab.tsx index c96d8aedf..03c3eddbc 100644 --- a/web/console/src/modules/common/components/stepTab/StepTab.tsx +++ b/web/console/src/modules/common/components/stepTab/StepTab.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import * as ReactCSSTransitionGroup from 'react-addons-css-transition-group'; diff --git a/web/console/src/modules/common/components/stepTab/index.ts b/web/console/src/modules/common/components/stepTab/index.ts index 3d4cdb5bd..7fd322a29 100644 --- a/web/console/src/modules/common/components/stepTab/index.ts +++ b/web/console/src/modules/common/components/stepTab/index.ts @@ -1,2 +1,19 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export { Step, StepProps } from './Step'; export { StepItem, StepTab, StepTabProps, StepTabBody, StepTabBodyProps } from './StepTab'; diff --git a/web/console/src/modules/common/components/tabselector/TabSelector.tsx b/web/console/src/modules/common/components/tabselector/TabSelector.tsx index 07e146885..771155b1e 100644 --- a/web/console/src/modules/common/components/tabselector/TabSelector.tsx +++ b/web/console/src/modules/common/components/tabselector/TabSelector.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as classnames from 'classnames'; import * as React from 'react'; diff --git a/web/console/src/modules/common/components/tabselector/index.ts b/web/console/src/modules/common/components/tabselector/index.ts index c00caba29..80769dfcb 100644 --- a/web/console/src/modules/common/components/tabselector/index.ts +++ b/web/console/src/modules/common/components/tabselector/index.ts @@ -1 +1,18 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export { TabSelector, TabSelectorProps, TabItem } from './TabSelector'; \ No newline at end of file diff --git a/web/console/src/modules/common/components/tagsearchbox/AttributeSelect.tsx b/web/console/src/modules/common/components/tagsearchbox/AttributeSelect.tsx index 84e489816..864039874 100644 --- a/web/console/src/modules/common/components/tagsearchbox/AttributeSelect.tsx +++ b/web/console/src/modules/common/components/tagsearchbox/AttributeSelect.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import * as classNames from 'classnames'; diff --git a/web/console/src/modules/common/components/tagsearchbox/Input.tsx b/web/console/src/modules/common/components/tagsearchbox/Input.tsx index 77bddd4ab..64864852e 100644 --- a/web/console/src/modules/common/components/tagsearchbox/Input.tsx +++ b/web/console/src/modules/common/components/tagsearchbox/Input.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import * as classNames from 'classnames'; import { AttributeSelect, AttributeValue } from './AttributeSelect'; diff --git a/web/console/src/modules/common/components/tagsearchbox/Tag.tsx b/web/console/src/modules/common/components/tagsearchbox/Tag.tsx index efb0903b4..109a2bc38 100644 --- a/web/console/src/modules/common/components/tagsearchbox/Tag.tsx +++ b/web/console/src/modules/common/components/tagsearchbox/Tag.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import * as classNames from 'classnames'; import { Input } from './Input'; diff --git a/web/console/src/modules/common/components/tagsearchbox/TagSearchBox.tsx b/web/console/src/modules/common/components/tagsearchbox/TagSearchBox.tsx index 37aa6d137..4d9f509b4 100644 --- a/web/console/src/modules/common/components/tagsearchbox/TagSearchBox.tsx +++ b/web/console/src/modules/common/components/tagsearchbox/TagSearchBox.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as classNames from 'classnames'; import * as React from 'react'; diff --git a/web/console/src/modules/common/components/tagsearchbox/index.ts b/web/console/src/modules/common/components/tagsearchbox/index.ts index 3ae63c51d..0297435db 100644 --- a/web/console/src/modules/common/components/tagsearchbox/index.ts +++ b/web/console/src/modules/common/components/tagsearchbox/index.ts @@ -1 +1,18 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export { TagSearchBox, TagSearchBoxProps } from './TagSearchBox'; diff --git a/web/console/src/modules/common/components/tagsearchbox/valueselect/Loading.tsx b/web/console/src/modules/common/components/tagsearchbox/valueselect/Loading.tsx index 25808926c..2afa80af7 100644 --- a/web/console/src/modules/common/components/tagsearchbox/valueselect/Loading.tsx +++ b/web/console/src/modules/common/components/tagsearchbox/valueselect/Loading.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { t, Trans } from '@tencent/tea-app/lib/i18n'; diff --git a/web/console/src/modules/common/components/tagsearchbox/valueselect/MultipleValueSelect.tsx b/web/console/src/modules/common/components/tagsearchbox/valueselect/MultipleValueSelect.tsx index dfa2854e7..2739bc655 100644 --- a/web/console/src/modules/common/components/tagsearchbox/valueselect/MultipleValueSelect.tsx +++ b/web/console/src/modules/common/components/tagsearchbox/valueselect/MultipleValueSelect.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import * as classNames from 'classnames'; import { t, Trans } from '@tencent/tea-app/lib/i18n'; diff --git a/web/console/src/modules/common/components/tagsearchbox/valueselect/PureInput.tsx b/web/console/src/modules/common/components/tagsearchbox/valueselect/PureInput.tsx index a873de1f3..004345962 100644 --- a/web/console/src/modules/common/components/tagsearchbox/valueselect/PureInput.tsx +++ b/web/console/src/modules/common/components/tagsearchbox/valueselect/PureInput.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import * as classNames from 'classnames'; diff --git a/web/console/src/modules/common/components/tagsearchbox/valueselect/SingleValueSelect.tsx b/web/console/src/modules/common/components/tagsearchbox/valueselect/SingleValueSelect.tsx index 19d1e14a3..bc9874b93 100644 --- a/web/console/src/modules/common/components/tagsearchbox/valueselect/SingleValueSelect.tsx +++ b/web/console/src/modules/common/components/tagsearchbox/valueselect/SingleValueSelect.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import * as classNames from 'classnames'; import { t, Trans } from '@tencent/tea-app/lib/i18n'; diff --git a/web/console/src/modules/common/components/tagsearchbox/valueselect/index.tsx b/web/console/src/modules/common/components/tagsearchbox/valueselect/index.tsx index 46ae2e2ab..71effd8fe 100644 --- a/web/console/src/modules/common/components/tagsearchbox/valueselect/index.tsx +++ b/web/console/src/modules/common/components/tagsearchbox/valueselect/index.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import * as classNames from 'classnames'; import { PureInput } from './PureInput'; diff --git a/web/console/src/modules/common/components/timepicker/Select.tsx b/web/console/src/modules/common/components/timepicker/Select.tsx index 53ee63a1a..586f35a2a 100644 --- a/web/console/src/modules/common/components/timepicker/Select.tsx +++ b/web/console/src/modules/common/components/timepicker/Select.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import * as classNames from 'classnames'; import * as ReactDOM from 'react-dom'; diff --git a/web/console/src/modules/common/components/timepicker/TimePicker.tsx b/web/console/src/modules/common/components/timepicker/TimePicker.tsx index 29a655f6c..a8943cdfe 100644 --- a/web/console/src/modules/common/components/timepicker/TimePicker.tsx +++ b/web/console/src/modules/common/components/timepicker/TimePicker.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as classNames from 'classnames'; /* eslint-disable */ import * as React from 'react'; diff --git a/web/console/src/modules/common/components/timepicker/index.ts b/web/console/src/modules/common/components/timepicker/index.ts index d9fffaa1a..33ccc3cf7 100644 --- a/web/console/src/modules/common/components/timepicker/index.ts +++ b/web/console/src/modules/common/components/timepicker/index.ts @@ -1 +1,18 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export { TimePicker, TimePickerProps, TimePickerValue, TimePickerRange } from './TimePicker'; diff --git a/web/console/src/modules/common/components/tipdialog/TipDialog.tsx b/web/console/src/modules/common/components/tipdialog/TipDialog.tsx index dfc3d35af..06ad014f6 100644 --- a/web/console/src/modules/common/components/tipdialog/TipDialog.tsx +++ b/web/console/src/modules/common/components/tipdialog/TipDialog.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { Button, Modal } from '@tea/component'; diff --git a/web/console/src/modules/common/components/tipdialog/index.ts b/web/console/src/modules/common/components/tipdialog/index.ts index db97c2bb2..eedb02f0c 100644 --- a/web/console/src/modules/common/components/tipdialog/index.ts +++ b/web/console/src/modules/common/components/tipdialog/index.ts @@ -1 +1,18 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export { TipDialog } from './TipDialog'; diff --git a/web/console/src/modules/common/components/tipinfo/TipInfo.tsx b/web/console/src/modules/common/components/tipinfo/TipInfo.tsx index bb79b892c..96353f205 100644 --- a/web/console/src/modules/common/components/tipinfo/TipInfo.tsx +++ b/web/console/src/modules/common/components/tipinfo/TipInfo.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { BaseReactProps } from '@tencent/ff-redux'; diff --git a/web/console/src/modules/common/components/tipinfo/index.ts b/web/console/src/modules/common/components/tipinfo/index.ts index f0015e5e5..678b5a6b4 100644 --- a/web/console/src/modules/common/components/tipinfo/index.ts +++ b/web/console/src/modules/common/components/tipinfo/index.ts @@ -1 +1,18 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export { TipInfo, TipInfoProps } from './TipInfo'; diff --git a/web/console/src/modules/common/components/tke-version/index.tsx b/web/console/src/modules/common/components/tke-version/index.tsx index b9682d65c..78af694ac 100644 --- a/web/console/src/modules/common/components/tke-version/index.tsx +++ b/web/console/src/modules/common/components/tke-version/index.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import React, { useEffect, useState } from 'react'; import { getTkeStackVersion } from '@/src/webApi/tkestack'; import { Text } from 'tea-component'; diff --git a/web/console/src/modules/common/components/transferTable/TransferTable.tsx b/web/console/src/modules/common/components/transferTable/TransferTable.tsx index 3b476bd2d..9f04be0df 100644 --- a/web/console/src/modules/common/components/transferTable/TransferTable.tsx +++ b/web/console/src/modules/common/components/transferTable/TransferTable.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { SearchBox } from '@tea/component/searchbox'; diff --git a/web/console/src/modules/common/components/transferTable/index.ts b/web/console/src/modules/common/components/transferTable/index.ts index 926a75f69..053a21bb5 100644 --- a/web/console/src/modules/common/components/transferTable/index.ts +++ b/web/console/src/modules/common/components/transferTable/index.ts @@ -1 +1,18 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export { TransferTable, TransferTableProps } from './TransferTable'; diff --git a/web/console/src/modules/common/components/workflowdialog/WorkflowDialog.tsx b/web/console/src/modules/common/components/workflowdialog/WorkflowDialog.tsx index 7fdd19f3a..264c59b12 100644 --- a/web/console/src/modules/common/components/workflowdialog/WorkflowDialog.tsx +++ b/web/console/src/modules/common/components/workflowdialog/WorkflowDialog.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { Button, Modal } from '@tea/component'; diff --git a/web/console/src/modules/common/components/workflowdialog/index.tsx b/web/console/src/modules/common/components/workflowdialog/index.tsx index 07e3e5f73..b8998d0bf 100644 --- a/web/console/src/modules/common/components/workflowdialog/index.tsx +++ b/web/console/src/modules/common/components/workflowdialog/index.tsx @@ -1 +1,18 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export { WorkflowDialog, WorkflowDialogProps } from './WorkflowDialog'; diff --git a/web/console/src/modules/common/components/yamleditor/YamlDialog.tsx b/web/console/src/modules/common/components/yamleditor/YamlDialog.tsx index 7d05eb2fa..94ff37156 100644 --- a/web/console/src/modules/common/components/yamleditor/YamlDialog.tsx +++ b/web/console/src/modules/common/components/yamleditor/YamlDialog.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as JsYAML from 'js-yaml'; import React, { useState } from 'react'; diff --git a/web/console/src/modules/common/components/yamleditor/YamlEditorPanel.tsx b/web/console/src/modules/common/components/yamleditor/YamlEditorPanel.tsx index 3bec81d8f..af8348348 100644 --- a/web/console/src/modules/common/components/yamleditor/YamlEditorPanel.tsx +++ b/web/console/src/modules/common/components/yamleditor/YamlEditorPanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { Controlled as CodeMirror } from 'react-codemirror2'; diff --git a/web/console/src/modules/common/components/yamleditor/YamlSearchHelperPanel.tsx b/web/console/src/modules/common/components/yamleditor/YamlSearchHelperPanel.tsx index 27a11d68b..b44da3187 100644 --- a/web/console/src/modules/common/components/yamleditor/YamlSearchHelperPanel.tsx +++ b/web/console/src/modules/common/components/yamleditor/YamlSearchHelperPanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as JsYAML from 'js-yaml'; import * as React from 'react'; diff --git a/web/console/src/modules/common/components/yamleditor/index.ts b/web/console/src/modules/common/components/yamleditor/index.ts index 9787f4c7a..ab1feb0c4 100644 --- a/web/console/src/modules/common/components/yamleditor/index.ts +++ b/web/console/src/modules/common/components/yamleditor/index.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export { YamlEditorPanel } from './YamlEditorPanel'; export { YamlDialog } from './YamlDialog'; export { YamlSearchHelperPanel } from './YamlSearchHelperPanel'; diff --git a/web/console/src/modules/common/index.ts b/web/console/src/modules/common/index.ts index fd2082c76..9c5966b2b 100644 --- a/web/console/src/modules/common/index.ts +++ b/web/console/src/modules/common/index.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export * from './components'; export * from './layouts'; export * from './models'; diff --git a/web/console/src/modules/common/layouts/AntdLayout.tsx b/web/console/src/modules/common/layouts/AntdLayout.tsx index e1ba8a341..fa28992b1 100644 --- a/web/console/src/modules/common/layouts/AntdLayout.tsx +++ b/web/console/src/modules/common/layouts/AntdLayout.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import React from 'react'; import { Card, Layout } from 'tea-component'; diff --git a/web/console/src/modules/common/layouts/DetailLayout.tsx b/web/console/src/modules/common/layouts/DetailLayout.tsx index 2560d3e0a..2554c5fe8 100644 --- a/web/console/src/modules/common/layouts/DetailLayout.tsx +++ b/web/console/src/modules/common/layouts/DetailLayout.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { BaseReactProps } from '@tencent/ff-redux'; diff --git a/web/console/src/modules/common/layouts/DialogBodyLayout.tsx b/web/console/src/modules/common/layouts/DialogBodyLayout.tsx index 735d29b3f..e4124cfa9 100644 --- a/web/console/src/modules/common/layouts/DialogBodyLayout.tsx +++ b/web/console/src/modules/common/layouts/DialogBodyLayout.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { BaseReactProps } from '@tencent/ff-redux'; diff --git a/web/console/src/modules/common/layouts/FixedFormLayout.tsx b/web/console/src/modules/common/layouts/FixedFormLayout.tsx index 87a52fb4b..23dbf0ac4 100644 --- a/web/console/src/modules/common/layouts/FixedFormLayout.tsx +++ b/web/console/src/modules/common/layouts/FixedFormLayout.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { BaseReactProps } from '@tencent/ff-redux'; diff --git a/web/console/src/modules/common/layouts/FormLayout.tsx b/web/console/src/modules/common/layouts/FormLayout.tsx index 1348df522..9b0187e71 100644 --- a/web/console/src/modules/common/layouts/FormLayout.tsx +++ b/web/console/src/modules/common/layouts/FormLayout.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { BaseReactProps } from '@tencent/ff-redux'; diff --git a/web/console/src/modules/common/layouts/MainBodyLayout.tsx b/web/console/src/modules/common/layouts/MainBodyLayout.tsx index 4409e196d..8c96f20b8 100644 --- a/web/console/src/modules/common/layouts/MainBodyLayout.tsx +++ b/web/console/src/modules/common/layouts/MainBodyLayout.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { BaseReactProps } from '@tencent/ff-redux'; diff --git a/web/console/src/modules/common/layouts/MainTitleLayout.tsx b/web/console/src/modules/common/layouts/MainTitleLayout.tsx index a07d9b69c..ada9c9be3 100644 --- a/web/console/src/modules/common/layouts/MainTitleLayout.tsx +++ b/web/console/src/modules/common/layouts/MainTitleLayout.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { BaseReactProps } from '@tencent/ff-redux'; diff --git a/web/console/src/modules/common/layouts/SubPageLayout.tsx b/web/console/src/modules/common/layouts/SubPageLayout.tsx index e69de29bb..16e981287 100644 --- a/web/console/src/modules/common/layouts/SubPageLayout.tsx +++ b/web/console/src/modules/common/layouts/SubPageLayout.tsx @@ -0,0 +1,17 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ diff --git a/web/console/src/modules/common/layouts/TableLayout.tsx b/web/console/src/modules/common/layouts/TableLayout.tsx index f45aa0362..2f33ae1e7 100644 --- a/web/console/src/modules/common/layouts/TableLayout.tsx +++ b/web/console/src/modules/common/layouts/TableLayout.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { BaseReactProps } from '@tencent/ff-redux'; diff --git a/web/console/src/modules/common/layouts/index.ts b/web/console/src/modules/common/layouts/index.ts index dad8c4ce7..a46930562 100644 --- a/web/console/src/modules/common/layouts/index.ts +++ b/web/console/src/modules/common/layouts/index.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export { MainTitleLayout } from './MainTitleLayout'; export { MainBodyLayout } from './MainBodyLayout'; export { TableLayout } from './TableLayout'; diff --git a/web/console/src/modules/common/models/BaseType.ts b/web/console/src/modules/common/models/BaseType.ts index 0d2a9e2e0..38f6bf463 100644 --- a/web/console/src/modules/common/models/BaseType.ts +++ b/web/console/src/modules/common/models/BaseType.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export interface BaseType { /**类型的值 */ value: string; diff --git a/web/console/src/modules/common/models/Cluster.ts b/web/console/src/modules/common/models/Cluster.ts index b53f0f0d7..44b508025 100644 --- a/web/console/src/modules/common/models/Cluster.ts +++ b/web/console/src/modules/common/models/Cluster.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { Identifiable } from '@tencent/ff-redux'; import { Resource } from './Resource'; diff --git a/web/console/src/modules/common/models/Config.ts b/web/console/src/modules/common/models/Config.ts index c11496318..f31363a0d 100644 --- a/web/console/src/modules/common/models/Config.ts +++ b/web/console/src/modules/common/models/Config.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { Identifiable } from '@tencent/ff-redux'; interface Base extends Identifiable { diff --git a/web/console/src/modules/common/models/Container.ts b/web/console/src/modules/common/models/Container.ts index 6b20bb742..c32823555 100644 --- a/web/console/src/modules/common/models/Container.ts +++ b/web/console/src/modules/common/models/Container.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { Identifiable } from '@tencent/ff-redux'; import { EnvItem, HealthCheck, MountItem, Validation } from './'; diff --git a/web/console/src/modules/common/models/CreateResource.ts b/web/console/src/modules/common/models/CreateResource.ts index c227bad7a..5d9d1047c 100644 --- a/web/console/src/modules/common/models/CreateResource.ts +++ b/web/console/src/modules/common/models/CreateResource.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { Identifiable } from '@tencent/ff-redux'; import { ResourceInfo } from './'; diff --git a/web/console/src/modules/common/models/Env.ts b/web/console/src/modules/common/models/Env.ts index 4bd909208..f88ed1ed7 100644 --- a/web/console/src/modules/common/models/Env.ts +++ b/web/console/src/modules/common/models/Env.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { Identifiable } from '@tencent/ff-redux'; import { Validation } from './'; diff --git a/web/console/src/modules/common/models/HealthCheck.ts b/web/console/src/modules/common/models/HealthCheck.ts index 6a4190fca..d2f27881b 100644 --- a/web/console/src/modules/common/models/HealthCheck.ts +++ b/web/console/src/modules/common/models/HealthCheck.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { Validation, EnvItem, BaseType } from './'; export interface HealthCheck { diff --git a/web/console/src/modules/common/models/K8sVersion.ts b/web/console/src/modules/common/models/K8sVersion.ts index d295c3d4e..41aa9606a 100644 --- a/web/console/src/modules/common/models/K8sVersion.ts +++ b/web/console/src/modules/common/models/K8sVersion.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { Identifiable } from '@tencent/ff-redux'; export interface K8sVersion extends Identifiable { diff --git a/web/console/src/modules/common/models/KeyValue.ts b/web/console/src/modules/common/models/KeyValue.ts index 38db7a1ae..c3524feff 100644 --- a/web/console/src/modules/common/models/KeyValue.ts +++ b/web/console/src/modules/common/models/KeyValue.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export interface KeyValue { key?: string; value?: string; diff --git a/web/console/src/modules/common/models/Kubectl.ts b/web/console/src/modules/common/models/Kubectl.ts index 1d08d90ba..3a26c8acc 100644 --- a/web/console/src/modules/common/models/Kubectl.ts +++ b/web/console/src/modules/common/models/Kubectl.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { Identifiable } from '@tencent/ff-redux'; export interface Kubectl extends Identifiable { diff --git a/web/console/src/modules/common/models/Label.ts b/web/console/src/modules/common/models/Label.ts index 7344aa8cc..767da10bc 100644 --- a/web/console/src/modules/common/models/Label.ts +++ b/web/console/src/modules/common/models/Label.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { Identifiable, uuid } from '@tencent/ff-redux'; import { initValidator, Validation } from './'; diff --git a/web/console/src/modules/common/models/Link.ts b/web/console/src/modules/common/models/Link.ts index 97bd15384..7ec849202 100644 --- a/web/console/src/modules/common/models/Link.ts +++ b/web/console/src/modules/common/models/Link.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export interface Link { /**链接名称 */ text?: string; diff --git a/web/console/src/modules/common/models/LogAgent.ts b/web/console/src/modules/common/models/LogAgent.ts index 134659166..352dfe1d5 100644 --- a/web/console/src/modules/common/models/LogAgent.ts +++ b/web/console/src/modules/common/models/LogAgent.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export interface LAMetadata { name?: string; diff --git a/web/console/src/modules/common/models/Mount.ts b/web/console/src/modules/common/models/Mount.ts index 428f6b7f4..0ef1f61b6 100644 --- a/web/console/src/modules/common/models/Mount.ts +++ b/web/console/src/modules/common/models/Mount.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { Identifiable } from '@tencent/ff-redux'; import { Validation } from './'; diff --git a/web/console/src/modules/common/models/Namespace.ts b/web/console/src/modules/common/models/Namespace.ts index 949e8f473..8526423ad 100644 --- a/web/console/src/modules/common/models/Namespace.ts +++ b/web/console/src/modules/common/models/Namespace.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { Identifiable } from '@tencent/ff-redux'; import { Cluster } from './Cluster'; diff --git a/web/console/src/modules/common/models/PortMap.ts b/web/console/src/modules/common/models/PortMap.ts index dca8d21bb..77945421f 100644 --- a/web/console/src/modules/common/models/PortMap.ts +++ b/web/console/src/modules/common/models/PortMap.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { Identifiable } from '@tencent/ff-redux'; import { BaseType, Validation } from './'; diff --git a/web/console/src/modules/common/models/Repository.ts b/web/console/src/modules/common/models/Repository.ts index 03fcb1257..d5ae99c73 100644 --- a/web/console/src/modules/common/models/Repository.ts +++ b/web/console/src/modules/common/models/Repository.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { Identifiable } from '@tencent/ff-redux'; export interface Repository extends Identifiable { diff --git a/web/console/src/modules/common/models/Resource.ts b/web/console/src/modules/common/models/Resource.ts index 4614a27d7..1054718e1 100644 --- a/web/console/src/modules/common/models/Resource.ts +++ b/web/console/src/modules/common/models/Resource.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { Identifiable } from '@tencent/ff-redux'; export interface Resource extends Identifiable { diff --git a/web/console/src/modules/common/models/ResourceInfo.ts b/web/console/src/modules/common/models/ResourceInfo.ts index 2899ed2cc..ecd80e6a6 100644 --- a/web/console/src/modules/common/models/ResourceInfo.ts +++ b/web/console/src/modules/common/models/ResourceInfo.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ /** resourceConfig当中所需要定义的字段 */ export interface ResourceInfo { k8sVersion?: string; diff --git a/web/console/src/modules/common/models/TableFilterOption.ts b/web/console/src/modules/common/models/TableFilterOption.ts index c5dcfbe3e..f508300a6 100644 --- a/web/console/src/modules/common/models/TableFilterOption.ts +++ b/web/console/src/modules/common/models/TableFilterOption.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { Identifiable } from '@tencent/ff-redux'; export interface TableFilterOption extends Identifiable { diff --git a/web/console/src/modules/common/models/Tag.ts b/web/console/src/modules/common/models/Tag.ts index b9efdf83e..8b6f8dca5 100644 --- a/web/console/src/modules/common/models/Tag.ts +++ b/web/console/src/modules/common/models/Tag.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { Identifiable } from '@tencent/ff-redux'; export interface Tag extends Identifiable { diff --git a/web/console/src/modules/common/models/Validation.ts b/web/console/src/modules/common/models/Validation.ts index 59c085b67..4508d52d0 100644 --- a/web/console/src/modules/common/models/Validation.ts +++ b/web/console/src/modules/common/models/Validation.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export interface Validation { /**验证状态 0: 初始状态;1:校验通过;2:校验不通过;*/ status?: number; diff --git a/web/console/src/modules/common/models/index.ts b/web/console/src/modules/common/models/index.ts index a2e67c4bc..0ac2e821d 100644 --- a/web/console/src/modules/common/models/index.ts +++ b/web/console/src/modules/common/models/index.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export { Link } from './Link'; export { Region, RegionFilter } from './region'; export { initValidator, Validation } from './Validation'; diff --git a/web/console/src/modules/common/models/region.ts b/web/console/src/modules/common/models/region.ts index 460ba0f3d..390df0604 100644 --- a/web/console/src/modules/common/models/region.ts +++ b/web/console/src/modules/common/models/region.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { Identifiable } from '@tencent/ff-redux'; export interface Region extends Identifiable { diff --git a/web/console/src/modules/common/models/requestParams.ts b/web/console/src/modules/common/models/requestParams.ts index fd1f6308a..a5042b4b6 100644 --- a/web/console/src/modules/common/models/requestParams.ts +++ b/web/console/src/modules/common/models/requestParams.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ /** 发起参数请求的数据格式 */ export interface RequestParams { /** 获取数据的方法,用于独立部署版 */ diff --git a/web/console/src/modules/common/utils/bytesTo.ts b/web/console/src/modules/common/utils/bytesTo.ts index 7e85a49d9..05b033a6f 100644 --- a/web/console/src/modules/common/utils/bytesTo.ts +++ b/web/console/src/modules/common/utils/bytesTo.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ /** * Bytes -> GB/MB/KB/Bytes */ diff --git a/web/console/src/modules/common/utils/cloneDeep.ts b/web/console/src/modules/common/utils/cloneDeep.ts index 205dd6958..16165c3ac 100644 --- a/web/console/src/modules/common/utils/cloneDeep.ts +++ b/web/console/src/modules/common/utils/cloneDeep.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ /* eslint-disable */ export const cloneDeep = function(item) { if (!item) { diff --git a/web/console/src/modules/common/utils/getWorkflowError.ts b/web/console/src/modules/common/utils/getWorkflowError.ts index fd9bcc403..22a801bf7 100644 --- a/web/console/src/modules/common/utils/getWorkflowError.ts +++ b/web/console/src/modules/common/utils/getWorkflowError.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { WorkflowState } from '@tencent/ff-redux'; export const getWorkflowError = (workflow: WorkflowState) => { diff --git a/web/console/src/modules/common/utils/includes.ts b/web/console/src/modules/common/utils/includes.ts index 7ae0b1ce8..6e16ee563 100644 --- a/web/console/src/modules/common/utils/includes.ts +++ b/web/console/src/modules/common/utils/includes.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { isEmpty } from './isEmpty'; /** 判断数组是否存在某个值 */ diff --git a/web/console/src/modules/common/utils/index.ts b/web/console/src/modules/common/utils/index.ts index a3fc04bcb..8d9f29151 100644 --- a/web/console/src/modules/common/utils/index.ts +++ b/web/console/src/modules/common/utils/index.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export { orderBy } from './orderBy'; export { uniq } from './uniq'; export { pluck } from './pluck'; diff --git a/web/console/src/modules/common/utils/isEmpty.ts b/web/console/src/modules/common/utils/isEmpty.ts index ede0cce71..7622500a6 100644 --- a/web/console/src/modules/common/utils/isEmpty.ts +++ b/web/console/src/modules/common/utils/isEmpty.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export const isEmpty = (value: any): boolean => { if (Array.isArray(value)) { //value为数组 diff --git a/web/console/src/modules/common/utils/orderBy.ts b/web/console/src/modules/common/utils/orderBy.ts index ffbfc7ecb..6a9020a36 100644 --- a/web/console/src/modules/common/utils/orderBy.ts +++ b/web/console/src/modules/common/utils/orderBy.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export const orderBy = (arr: Array, by: string, order?: string) => { let aa = arr.sort((a, b) => { //默认升序asc diff --git a/web/console/src/modules/common/utils/pluck.ts b/web/console/src/modules/common/utils/pluck.ts index 48d7591cb..cc8fc0beb 100644 --- a/web/console/src/modules/common/utils/pluck.ts +++ b/web/console/src/modules/common/utils/pluck.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export const pluck = (arr: Array, ckey: string) => { let res = []; if (Array.isArray(arr) && !!ckey) { diff --git a/web/console/src/modules/common/utils/remove.ts b/web/console/src/modules/common/utils/remove.ts index 146ae653b..c0d2907e4 100644 --- a/web/console/src/modules/common/utils/remove.ts +++ b/web/console/src/modules/common/utils/remove.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ /** * @returns 删除数据后的新数组,改变原数组 */ diff --git a/web/console/src/modules/common/utils/tHooks.ts b/web/console/src/modules/common/utils/tHooks.ts index 4b5b94826..e8a943636 100644 --- a/web/console/src/modules/common/utils/tHooks.ts +++ b/web/console/src/modules/common/utils/tHooks.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { useState, useEffect, useRef, useCallback } from 'react'; export const useModal = (isShowingParam = false) => { diff --git a/web/console/src/modules/common/utils/tea_adapter.ts b/web/console/src/modules/common/utils/tea_adapter.ts index d5965b049..11ee2b79d 100644 --- a/web/console/src/modules/common/utils/tea_adapter.ts +++ b/web/console/src/modules/common/utils/tea_adapter.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { TableColumn } from '@tea/component'; const execColumnWidth = (columns: TableColumn[], hasChecker: boolean = true) => { diff --git a/web/console/src/modules/common/utils/uniq.ts b/web/console/src/modules/common/utils/uniq.ts index f61cc1fbc..ccb07c15d 100644 --- a/web/console/src/modules/common/utils/uniq.ts +++ b/web/console/src/modules/common/utils/uniq.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ /** * 数组去重函数 * @param Array arr diff --git a/web/console/src/modules/common/validate/Action.ts b/web/console/src/modules/common/validate/Action.ts index 6b4d9d3a4..19a88b9ca 100644 --- a/web/console/src/modules/common/validate/Action.ts +++ b/web/console/src/modules/common/validate/Action.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { ValidateSchema, RuleTypeEnum, Rule, ValidationIns, FieldConfig, ValidatorStatusEnum } from './Model'; import { getValidationActionType } from './ActionType'; import { Validation, initValidator } from '../models'; diff --git a/web/console/src/modules/common/validate/ActionType.ts b/web/console/src/modules/common/validate/ActionType.ts index 2f364d772..734a34f81 100644 --- a/web/console/src/modules/common/validate/ActionType.ts +++ b/web/console/src/modules/common/validate/ActionType.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ /** * 获取ActionType * @param formKey: string 表单的名称 diff --git a/web/console/src/modules/common/validate/Form.ts b/web/console/src/modules/common/validate/Form.ts index 1898aa1b7..512f03618 100644 --- a/web/console/src/modules/common/validate/Form.ts +++ b/web/console/src/modules/common/validate/Form.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export function getStatus(meta, validating?: any) { if (meta.active && validating) { return 'validating'; diff --git a/web/console/src/modules/common/validate/Model.ts b/web/console/src/modules/common/validate/Model.ts index ed28e7d81..29f8c0a3a 100644 --- a/web/console/src/modules/common/validate/Model.ts +++ b/web/console/src/modules/common/validate/Model.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { Validation } from '../models'; export interface ValidateSchema { diff --git a/web/console/src/modules/common/validate/Reducer.ts b/web/console/src/modules/common/validate/Reducer.ts index 9ab71071e..2a98ef87f 100644 --- a/web/console/src/modules/common/validate/Reducer.ts +++ b/web/console/src/modules/common/validate/Reducer.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { combineReducers, Reducer } from 'redux'; import { reduceToPayload } from '@tencent/ff-redux'; diff --git a/web/console/src/modules/common/validate/index.ts b/web/console/src/modules/common/validate/index.ts index 869790776..0578cc2c6 100644 --- a/web/console/src/modules/common/validate/index.ts +++ b/web/console/src/modules/common/validate/index.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export { generateValidationIns, validateValue } from './Action'; export { ValidateSchema, diff --git a/web/console/src/modules/common/webapi/K8sResourceAPI.ts b/web/console/src/modules/common/webapi/K8sResourceAPI.ts index 708195bff..07a48d23b 100644 --- a/web/console/src/modules/common/webapi/K8sResourceAPI.ts +++ b/web/console/src/modules/common/webapi/K8sResourceAPI.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { QueryState, RecordSet, uuid } from '@tencent/ff-redux'; import { t } from '@tencent/tea-app/lib/i18n'; diff --git a/web/console/src/modules/common/webapi/LogAgentAPI.ts b/web/console/src/modules/common/webapi/LogAgentAPI.ts index 464a86787..8752f56ad 100644 --- a/web/console/src/modules/common/webapi/LogAgentAPI.ts +++ b/web/console/src/modules/common/webapi/LogAgentAPI.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { resourceConfig } from '@config'; import { RecordSet, uuid } from '@tencent/ff-redux'; import { diff --git a/web/console/src/modules/common/webapi/PromethusAPI.ts b/web/console/src/modules/common/webapi/PromethusAPI.ts index 3e63fc188..b3fe39995 100644 --- a/web/console/src/modules/common/webapi/PromethusAPI.ts +++ b/web/console/src/modules/common/webapi/PromethusAPI.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { QueryState, RecordSet, uuid } from '@tencent/ff-redux'; import { t } from '@tencent/tea-app/lib/i18n'; diff --git a/web/console/src/modules/common/webapi/RegionAPI.ts b/web/console/src/modules/common/webapi/RegionAPI.ts index 5d5552e6e..dd4e6f3fc 100644 --- a/web/console/src/modules/common/webapi/RegionAPI.ts +++ b/web/console/src/modules/common/webapi/RegionAPI.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { QueryState, RecordSet, uuid } from '@tencent/ff-redux'; import { Region, RegionFilter } from '../models'; diff --git a/web/console/src/modules/common/webapi/index.ts b/web/console/src/modules/common/webapi/index.ts index 3aed00c6c..efa9cf02c 100644 --- a/web/console/src/modules/common/webapi/index.ts +++ b/web/console/src/modules/common/webapi/index.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as RegionAPI from './RegionAPI'; import * as K8sResourceAPI from './K8sResourceAPI'; import * as LogAgentAPI from './LogAgentAPI'; diff --git a/web/console/src/modules/helm/WebAPI.ts b/web/console/src/modules/helm/WebAPI.ts index f2ee31faa..25005f212 100644 --- a/web/console/src/modules/helm/WebAPI.ts +++ b/web/console/src/modules/helm/WebAPI.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as JsYAML from 'js-yaml'; import { Resource, ResourceFilter } from '@src/modules/common'; diff --git a/web/console/src/modules/helm/actions/clusterActions.ts b/web/console/src/modules/helm/actions/clusterActions.ts index 76c83ea85..268f3a406 100644 --- a/web/console/src/modules/helm/actions/clusterActions.ts +++ b/web/console/src/modules/helm/actions/clusterActions.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { createFFListActions, extend } from '@tencent/ff-redux'; import { resourceConfig } from '../../../../config'; diff --git a/web/console/src/modules/helm/actions/createActions.ts b/web/console/src/modules/helm/actions/createActions.ts index 64cf86499..f455684d1 100644 --- a/web/console/src/modules/helm/actions/createActions.ts +++ b/web/console/src/modules/helm/actions/createActions.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { createFFListActions, extend, ReduxAction } from '@tencent/ff-redux'; import { generateFetcherActionCreator } from '@tencent/qcloud-redux-fetcher'; import { t } from '@tencent/tea-app/lib/i18n'; diff --git a/web/console/src/modules/helm/actions/detailActions.ts b/web/console/src/modules/helm/actions/detailActions.ts index 30f18d79d..62af11327 100644 --- a/web/console/src/modules/helm/actions/detailActions.ts +++ b/web/console/src/modules/helm/actions/detailActions.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as JsYAML from 'js-yaml'; import { ReduxAction } from '@tencent/ff-redux'; diff --git a/web/console/src/modules/helm/actions/helmActions.ts b/web/console/src/modules/helm/actions/helmActions.ts index bcf63ee90..edd1aab4a 100644 --- a/web/console/src/modules/helm/actions/helmActions.ts +++ b/web/console/src/modules/helm/actions/helmActions.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { extend } from '@tencent/ff-redux'; import { generateFetcherActionCreator } from '@tencent/qcloud-redux-fetcher'; import { generateQueryActionCreator } from '@tencent/qcloud-redux-query'; diff --git a/web/console/src/modules/helm/actions/index.ts b/web/console/src/modules/helm/actions/index.ts index 72db142fa..c74002e12 100644 --- a/web/console/src/modules/helm/actions/index.ts +++ b/web/console/src/modules/helm/actions/index.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { projectNamespaceActions } from './projectNamespaceActions.project'; import { namespaceActions } from './namespaceActions'; import { clusterActions } from './clusterActions'; diff --git a/web/console/src/modules/helm/actions/namespaceActions.project.ts b/web/console/src/modules/helm/actions/namespaceActions.project.ts index 7044c5808..ebfa89455 100644 --- a/web/console/src/modules/helm/actions/namespaceActions.project.ts +++ b/web/console/src/modules/helm/actions/namespaceActions.project.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { extend, FetchOptions, generateFetcherActionCreator, uuid } from '@tencent/ff-redux'; import { generateQueryActionCreator } from '@tencent/qcloud-redux-query'; diff --git a/web/console/src/modules/helm/actions/namespaceActions.ts b/web/console/src/modules/helm/actions/namespaceActions.ts index 68451bdc3..4b335218f 100644 --- a/web/console/src/modules/helm/actions/namespaceActions.ts +++ b/web/console/src/modules/helm/actions/namespaceActions.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { helmActions } from './helmActions'; import { resourceConfig } from '@config'; import { extend, FetchOptions, generateFetcherActionCreator, uuid } from '@tencent/ff-redux'; diff --git a/web/console/src/modules/helm/actions/projectNamespaceActions.project.ts b/web/console/src/modules/helm/actions/projectNamespaceActions.project.ts index 60a2564df..18cd80f11 100644 --- a/web/console/src/modules/helm/actions/projectNamespaceActions.project.ts +++ b/web/console/src/modules/helm/actions/projectNamespaceActions.project.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { setProjectName } from '@helper'; import { extend, FetchOptions, generateFetcherActionCreator, RecordSet } from '@tencent/ff-redux'; import { generateQueryActionCreator } from '@tencent/qcloud-redux-query'; diff --git a/web/console/src/modules/helm/actions/regionActions.ts b/web/console/src/modules/helm/actions/regionActions.ts index 13b84bece..130b7eb86 100644 --- a/web/console/src/modules/helm/actions/regionActions.ts +++ b/web/console/src/modules/helm/actions/regionActions.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { createFFListActions } from '@tencent/ff-redux'; import { assureRegion } from '../../../../helpers'; diff --git a/web/console/src/modules/helm/components/HelmApp.tsx b/web/console/src/modules/helm/components/HelmApp.tsx index 894aac85f..890871391 100644 --- a/web/console/src/modules/helm/components/HelmApp.tsx +++ b/web/console/src/modules/helm/components/HelmApp.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect, Provider } from 'react-redux'; diff --git a/web/console/src/modules/helm/components/helmManage/create/BaseInfoPanel.tsx b/web/console/src/modules/helm/components/helmManage/create/BaseInfoPanel.tsx index 4e849074f..cfce85202 100644 --- a/web/console/src/modules/helm/components/helmManage/create/BaseInfoPanel.tsx +++ b/web/console/src/modules/helm/components/helmManage/create/BaseInfoPanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { t } from '@tencent/tea-app/lib/i18n'; import classNames from 'classnames'; import * as React from 'react'; diff --git a/web/console/src/modules/helm/components/helmManage/create/HelmCreate.project.tsx b/web/console/src/modules/helm/components/helmManage/create/HelmCreate.project.tsx index a17ebbbe6..28aac8079 100644 --- a/web/console/src/modules/helm/components/helmManage/create/HelmCreate.project.tsx +++ b/web/console/src/modules/helm/components/helmManage/create/HelmCreate.project.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { Button } from '@tea/component/button'; import { t } from '@tencent/tea-app/lib/i18n'; import * as React from 'react'; diff --git a/web/console/src/modules/helm/components/helmManage/create/HelmCreate.tsx b/web/console/src/modules/helm/components/helmManage/create/HelmCreate.tsx index d4ab8a07b..930a5bcec 100644 --- a/web/console/src/modules/helm/components/helmManage/create/HelmCreate.tsx +++ b/web/console/src/modules/helm/components/helmManage/create/HelmCreate.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { Button } from '@tea/component/button'; import { t } from '@tencent/tea-app/lib/i18n'; import * as React from 'react'; diff --git a/web/console/src/modules/helm/components/helmManage/create/KeyValuesPanel.tsx b/web/console/src/modules/helm/components/helmManage/create/KeyValuesPanel.tsx index f142f3e74..f3d5d7ca1 100644 --- a/web/console/src/modules/helm/components/helmManage/create/KeyValuesPanel.tsx +++ b/web/console/src/modules/helm/components/helmManage/create/KeyValuesPanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import classNames from 'classnames'; import { FormItem, LinkButton } from '../../../../common/components'; diff --git a/web/console/src/modules/helm/components/helmManage/create/OtherChartPanel.tsx b/web/console/src/modules/helm/components/helmManage/create/OtherChartPanel.tsx index 19a76794b..b5583d151 100644 --- a/web/console/src/modules/helm/components/helmManage/create/OtherChartPanel.tsx +++ b/web/console/src/modules/helm/components/helmManage/create/OtherChartPanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { RootProps } from '../../HelmApp'; import classNames from 'classnames'; diff --git a/web/console/src/modules/helm/components/helmManage/create/TencentHubChartPanel.tsx b/web/console/src/modules/helm/components/helmManage/create/TencentHubChartPanel.tsx index 6c440bccd..01a3ac312 100644 --- a/web/console/src/modules/helm/components/helmManage/create/TencentHubChartPanel.tsx +++ b/web/console/src/modules/helm/components/helmManage/create/TencentHubChartPanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { RootProps } from '../../HelmApp'; import classNames from 'classnames'; diff --git a/web/console/src/modules/helm/components/helmManage/detail/HelmDetail.tsx b/web/console/src/modules/helm/components/helmManage/detail/HelmDetail.tsx index 7fd701f81..9188c0bf3 100644 --- a/web/console/src/modules/helm/components/helmManage/detail/HelmDetail.tsx +++ b/web/console/src/modules/helm/components/helmManage/detail/HelmDetail.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { TabPanel, Tabs } from '@tea/component/tabs'; diff --git a/web/console/src/modules/helm/components/helmManage/detail/HelmDetailBasicInfoPanel.tsx b/web/console/src/modules/helm/components/helmManage/detail/HelmDetailBasicInfoPanel.tsx index de5bf1613..cc5d09fab 100644 --- a/web/console/src/modules/helm/components/helmManage/detail/HelmDetailBasicInfoPanel.tsx +++ b/web/console/src/modules/helm/components/helmManage/detail/HelmDetailBasicInfoPanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { RootProps } from '../../HelmApp'; import { FormPanel } from '@tencent/ff-component'; diff --git a/web/console/src/modules/helm/components/helmManage/detail/HistoryTablePanel.tsx b/web/console/src/modules/helm/components/helmManage/detail/HistoryTablePanel.tsx index cbac6cc86..715b81519 100644 --- a/web/console/src/modules/helm/components/helmManage/detail/HistoryTablePanel.tsx +++ b/web/console/src/modules/helm/components/helmManage/detail/HistoryTablePanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import classNames from 'classnames'; import * as React from 'react'; import { connect } from 'react-redux'; diff --git a/web/console/src/modules/helm/components/helmManage/detail/ValueYamlPanel.tsx b/web/console/src/modules/helm/components/helmManage/detail/ValueYamlPanel.tsx index b25f29d8c..3b9aa088f 100644 --- a/web/console/src/modules/helm/components/helmManage/detail/ValueYamlPanel.tsx +++ b/web/console/src/modules/helm/components/helmManage/detail/ValueYamlPanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { RootProps } from '../../HelmApp'; import { UnControlled as CodeMirror } from 'react-codemirror2'; diff --git a/web/console/src/modules/helm/components/helmManage/list/HelmActionPanel.tsx b/web/console/src/modules/helm/components/helmManage/list/HelmActionPanel.tsx index c841e0ebd..afe02a138 100644 --- a/web/console/src/modules/helm/components/helmManage/list/HelmActionPanel.tsx +++ b/web/console/src/modules/helm/components/helmManage/list/HelmActionPanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect } from 'react-redux'; diff --git a/web/console/src/modules/helm/components/helmManage/list/HelmHeadPanel.project.tsx b/web/console/src/modules/helm/components/helmManage/list/HelmHeadPanel.project.tsx index 205e57bd8..ed9b83b26 100644 --- a/web/console/src/modules/helm/components/helmManage/list/HelmHeadPanel.project.tsx +++ b/web/console/src/modules/helm/components/helmManage/list/HelmHeadPanel.project.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect } from 'react-redux'; diff --git a/web/console/src/modules/helm/components/helmManage/list/HelmHeadPanel.tsx b/web/console/src/modules/helm/components/helmManage/list/HelmHeadPanel.tsx index de0e4d35c..88a93b9a6 100644 --- a/web/console/src/modules/helm/components/helmManage/list/HelmHeadPanel.tsx +++ b/web/console/src/modules/helm/components/helmManage/list/HelmHeadPanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect } from 'react-redux'; diff --git a/web/console/src/modules/helm/components/helmManage/list/HelmTablePanel.tsx b/web/console/src/modules/helm/components/helmManage/list/HelmTablePanel.tsx index eae237dd7..3e4cc9c26 100644 --- a/web/console/src/modules/helm/components/helmManage/list/HelmTablePanel.tsx +++ b/web/console/src/modules/helm/components/helmManage/list/HelmTablePanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import classNames from 'classnames'; import * as React from 'react'; import { connect } from 'react-redux'; diff --git a/web/console/src/modules/helm/components/helmManage/list/InlineOpenHelmDialog.tsx b/web/console/src/modules/helm/components/helmManage/list/InlineOpenHelmDialog.tsx index 9f98fe630..bd270418b 100644 --- a/web/console/src/modules/helm/components/helmManage/list/InlineOpenHelmDialog.tsx +++ b/web/console/src/modules/helm/components/helmManage/list/InlineOpenHelmDialog.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { RootProps } from '../../HelmApp'; import { Button, Modal } from '@tea/component'; diff --git a/web/console/src/modules/helm/components/helmManage/list/InstallingDialog.tsx b/web/console/src/modules/helm/components/helmManage/list/InstallingDialog.tsx index b0f274bcc..f0af997d8 100644 --- a/web/console/src/modules/helm/components/helmManage/list/InstallingDialog.tsx +++ b/web/console/src/modules/helm/components/helmManage/list/InstallingDialog.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { Table, TableColumn, Text } from '@tea/component'; import { LinkButton } from '../../../../common/components'; diff --git a/web/console/src/modules/helm/components/helmManage/list/UpdateHelmDialog.tsx b/web/console/src/modules/helm/components/helmManage/list/UpdateHelmDialog.tsx index add3fa5f8..1d341ac6a 100644 --- a/web/console/src/modules/helm/components/helmManage/list/UpdateHelmDialog.tsx +++ b/web/console/src/modules/helm/components/helmManage/list/UpdateHelmDialog.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { Button, Modal } from '@tea/component'; diff --git a/web/console/src/modules/helm/components/helmManage/list/UpdateHelmDialogOther.tsx b/web/console/src/modules/helm/components/helmManage/list/UpdateHelmDialogOther.tsx index 666b03b80..d6ad1c128 100644 --- a/web/console/src/modules/helm/components/helmManage/list/UpdateHelmDialogOther.tsx +++ b/web/console/src/modules/helm/components/helmManage/list/UpdateHelmDialogOther.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import classNames from 'classnames'; import * as React from 'react'; diff --git a/web/console/src/modules/helm/constants/ActionType.ts b/web/console/src/modules/helm/constants/ActionType.ts index b6223b130..62067edeb 100644 --- a/web/console/src/modules/helm/constants/ActionType.ts +++ b/web/console/src/modules/helm/constants/ActionType.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ /** 集群helm开通状态 */ export const ClusterHelmStatus = 'ClusterHelmStatus'; diff --git a/web/console/src/modules/helm/constants/Config.ts b/web/console/src/modules/helm/constants/Config.ts index 8224b82e3..7e0925804 100644 --- a/web/console/src/modules/helm/constants/Config.ts +++ b/web/console/src/modules/helm/constants/Config.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { t, Trans } from '@tencent/tea-app/lib/i18n'; /** ========================= start FFRedux的相关配置 ======================== */ diff --git a/web/console/src/modules/helm/index.tsx b/web/console/src/modules/helm/index.tsx index 998986f02..166105417 100644 --- a/web/console/src/modules/helm/index.tsx +++ b/web/console/src/modules/helm/index.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { HelmAppContainer } from './components/HelmApp'; diff --git a/web/console/src/modules/helm/models/DetailState.ts b/web/console/src/modules/helm/models/DetailState.ts index 43aace51a..17e5f7d8a 100644 --- a/web/console/src/modules/helm/models/DetailState.ts +++ b/web/console/src/modules/helm/models/DetailState.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { FetcherState, QueryState, RecordSet, WorkflowState } from '@tencent/ff-redux'; import { Helm, HelmHistory, HelmHistoryFilter } from './'; diff --git a/web/console/src/modules/helm/models/Helm.ts b/web/console/src/modules/helm/models/Helm.ts index 7fc44f52f..43c17d6a5 100644 --- a/web/console/src/modules/helm/models/Helm.ts +++ b/web/console/src/modules/helm/models/Helm.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { Identifiable } from '@tencent/ff-redux'; export interface ClusterHelmStatus { diff --git a/web/console/src/modules/helm/models/HelmCreation.ts b/web/console/src/modules/helm/models/HelmCreation.ts index 893b7433d..68399ac4c 100644 --- a/web/console/src/modules/helm/models/HelmCreation.ts +++ b/web/console/src/modules/helm/models/HelmCreation.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { FetcherState, FFListModel, RecordSet } from '@tencent/ff-redux'; import { Region, RegionFilter, Resource, ResourceFilter } from '../../common/models'; diff --git a/web/console/src/modules/helm/models/ListState.ts b/web/console/src/modules/helm/models/ListState.ts index 31cc6caad..3a0dfbe01 100644 --- a/web/console/src/modules/helm/models/ListState.ts +++ b/web/console/src/modules/helm/models/ListState.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { FetcherState, FFListModel, QueryState, RecordSet } from '@tencent/ff-redux'; import { Region, RegionFilter, Resource, ResourceFilter } from '../../common/models'; diff --git a/web/console/src/modules/helm/models/LogRow.ts b/web/console/src/modules/helm/models/LogRow.ts index f0c6dab52..a1d6a2401 100644 --- a/web/console/src/modules/helm/models/LogRow.ts +++ b/web/console/src/modules/helm/models/LogRow.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export interface LogRow { name?: string; time?: string; diff --git a/web/console/src/modules/helm/models/Namespace.ts b/web/console/src/modules/helm/models/Namespace.ts index 1c72a9764..7637985a0 100644 --- a/web/console/src/modules/helm/models/Namespace.ts +++ b/web/console/src/modules/helm/models/Namespace.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { Identifiable } from '@tencent/ff-redux'; import { Validation } from '../../common/models'; diff --git a/web/console/src/modules/helm/models/RootState.ts b/web/console/src/modules/helm/models/RootState.ts index 74e3a947b..1d88c698b 100644 --- a/web/console/src/modules/helm/models/RootState.ts +++ b/web/console/src/modules/helm/models/RootState.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { FetcherState, QueryState, RecordSet, WorkflowState } from '@tencent/ff-redux'; import { RouteState } from '../../../../helpers'; diff --git a/web/console/src/modules/helm/models/Tencenthub.ts b/web/console/src/modules/helm/models/Tencenthub.ts index 038c5fcd4..a2835b205 100644 --- a/web/console/src/modules/helm/models/Tencenthub.ts +++ b/web/console/src/modules/helm/models/Tencenthub.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export interface TencenthubNamespace { name?: string; } diff --git a/web/console/src/modules/helm/models/Zone.ts b/web/console/src/modules/helm/models/Zone.ts index caf424cb6..9537324db 100644 --- a/web/console/src/modules/helm/models/Zone.ts +++ b/web/console/src/modules/helm/models/Zone.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { Identifiable } from '@tencent/ff-redux'; export interface Zone extends Identifiable { diff --git a/web/console/src/modules/helm/models/index.ts b/web/console/src/modules/helm/models/index.ts index 8d339ae89..c0b280dc9 100644 --- a/web/console/src/modules/helm/models/index.ts +++ b/web/console/src/modules/helm/models/index.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export { RootState } from './RootState'; export { Zone, ZoneInfo, ZoneFilter, ZoneQuotaFilter } from './Zone'; export { DetailState } from './DetailState'; diff --git a/web/console/src/modules/helm/reducers/DetailReducer.ts b/web/console/src/modules/helm/reducers/DetailReducer.ts index 1d70d2ff6..dead4de27 100644 --- a/web/console/src/modules/helm/reducers/DetailReducer.ts +++ b/web/console/src/modules/helm/reducers/DetailReducer.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { combineReducers } from 'redux'; import { RecordSet, reduceToPayload } from '@tencent/ff-redux'; diff --git a/web/console/src/modules/helm/reducers/HelmCreationReducer.ts b/web/console/src/modules/helm/reducers/HelmCreationReducer.ts index 1eb5405e5..81ef474ee 100644 --- a/web/console/src/modules/helm/reducers/HelmCreationReducer.ts +++ b/web/console/src/modules/helm/reducers/HelmCreationReducer.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { combineReducers } from 'redux'; import { createFFListReducer, RecordSet, reduceToPayload } from '@tencent/ff-redux'; diff --git a/web/console/src/modules/helm/reducers/ListReducer.ts b/web/console/src/modules/helm/reducers/ListReducer.ts index 7620e4b54..192807dec 100644 --- a/web/console/src/modules/helm/reducers/ListReducer.ts +++ b/web/console/src/modules/helm/reducers/ListReducer.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { combineReducers } from 'redux'; import { createFFListReducer, RecordSet, reduceToPayload } from '@tencent/ff-redux'; diff --git a/web/console/src/modules/helm/reducers/RootReducer.project.ts b/web/console/src/modules/helm/reducers/RootReducer.project.ts index 8d3d98b25..4a1b78dd8 100644 --- a/web/console/src/modules/helm/reducers/RootReducer.project.ts +++ b/web/console/src/modules/helm/reducers/RootReducer.project.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { combineReducers } from 'redux'; import { RecordSet, reduceToPayload } from '@tencent/ff-redux'; diff --git a/web/console/src/modules/helm/reducers/RootReducer.ts b/web/console/src/modules/helm/reducers/RootReducer.ts index 7e8c28669..4437a7b55 100644 --- a/web/console/src/modules/helm/reducers/RootReducer.ts +++ b/web/console/src/modules/helm/reducers/RootReducer.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { combineReducers } from 'redux'; import { RecordSet, reduceToPayload } from '@tencent/ff-redux'; diff --git a/web/console/src/modules/helm/reducers/initState.ts b/web/console/src/modules/helm/reducers/initState.ts index 59249b688..abd8fb677 100644 --- a/web/console/src/modules/helm/reducers/initState.ts +++ b/web/console/src/modules/helm/reducers/initState.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { t, Trans } from '@tencent/tea-app/lib/i18n'; import { initValidator } from '../../common/models'; export const initRegionInfo = { diff --git a/web/console/src/modules/helm/router.project.ts b/web/console/src/modules/helm/router.project.ts index 9456b1c09..b252ff032 100644 --- a/web/console/src/modules/helm/router.project.ts +++ b/web/console/src/modules/helm/router.project.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { Router } from '../../../helpers/Router'; /** diff --git a/web/console/src/modules/helm/router.ts b/web/console/src/modules/helm/router.ts index f1dc4d2f3..9300ba132 100644 --- a/web/console/src/modules/helm/router.ts +++ b/web/console/src/modules/helm/router.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { Router } from '../../../helpers/Router'; /** diff --git a/web/console/src/modules/helm/stores/RootStore.ts b/web/console/src/modules/helm/stores/RootStore.ts index 528dcd48c..83ff139b0 100644 --- a/web/console/src/modules/helm/stores/RootStore.ts +++ b/web/console/src/modules/helm/stores/RootStore.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { createStore } from '@tencent/ff-redux'; import { generateResetableReducer } from '../../../../helpers'; diff --git a/web/console/src/modules/logStash/WebAPI.ts b/web/console/src/modules/logStash/WebAPI.ts index 4e96d020f..987794d23 100644 --- a/web/console/src/modules/logStash/WebAPI.ts +++ b/web/console/src/modules/logStash/WebAPI.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { QueryState, RecordSet, uuid } from '@tencent/ff-redux'; import { tip } from '@tencent/tea-app/lib/bridge'; import { t } from '@tencent/tea-app/lib/i18n'; diff --git a/web/console/src/modules/logStash/actions/clusterActions.ts b/web/console/src/modules/logStash/actions/clusterActions.ts index d9f30b599..fd7d6c49a 100644 --- a/web/console/src/modules/logStash/actions/clusterActions.ts +++ b/web/console/src/modules/logStash/actions/clusterActions.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { createFFListActions, extend, uuid } from '@tencent/ff-redux'; import { generateFetcherActionCreator } from '@tencent/qcloud-redux-fetcher'; import { generateQueryActionCreator } from '@tencent/qcloud-redux-query'; diff --git a/web/console/src/modules/logStash/actions/editLogStashActions.ts b/web/console/src/modules/logStash/actions/editLogStashActions.ts index 8c03acdfd..9a5e24e37 100644 --- a/web/console/src/modules/logStash/actions/editLogStashActions.ts +++ b/web/console/src/modules/logStash/actions/editLogStashActions.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { ReduxAction, uuid } from '@tencent/ff-redux'; import { initValidator, Namespace } from '../../common/models'; diff --git a/web/console/src/modules/logStash/actions/index.ts b/web/console/src/modules/logStash/actions/index.ts index 5d176a0b1..50adb2e19 100644 --- a/web/console/src/modules/logStash/actions/index.ts +++ b/web/console/src/modules/logStash/actions/index.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { regionActions } from './regionActions'; import { clusterActions } from './clusterActions'; import { logActions } from './logActions'; diff --git a/web/console/src/modules/logStash/actions/logActions.ts b/web/console/src/modules/logStash/actions/logActions.ts index 73f921ea2..7e29bd9b2 100644 --- a/web/console/src/modules/logStash/actions/logActions.ts +++ b/web/console/src/modules/logStash/actions/logActions.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { extend, generateQueryActionCreator, QueryState, RecordSet, ReduxAction, uuid } from '@tencent/ff-redux'; diff --git a/web/console/src/modules/logStash/actions/logDaemonsetActions.ts b/web/console/src/modules/logStash/actions/logDaemonsetActions.ts index 35770e43f..1d4dd31f7 100644 --- a/web/console/src/modules/logStash/actions/logDaemonsetActions.ts +++ b/web/console/src/modules/logStash/actions/logDaemonsetActions.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { extend } from '@tencent/ff-redux'; import { generateFetcherActionCreator } from '@tencent/qcloud-redux-fetcher'; import { generateQueryActionCreator } from '@tencent/qcloud-redux-query'; diff --git a/web/console/src/modules/logStash/actions/namespaceActions.ts b/web/console/src/modules/logStash/actions/namespaceActions.ts index 66690107f..a28ba8113 100644 --- a/web/console/src/modules/logStash/actions/namespaceActions.ts +++ b/web/console/src/modules/logStash/actions/namespaceActions.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { extend, ReduxAction } from '@tencent/ff-redux'; import { generateFetcherActionCreator } from '@tencent/qcloud-redux-fetcher'; import { generateQueryActionCreator } from '@tencent/qcloud-redux-query'; diff --git a/web/console/src/modules/logStash/actions/podActions.ts b/web/console/src/modules/logStash/actions/podActions.ts index cbf360274..499e0a7bc 100644 --- a/web/console/src/modules/logStash/actions/podActions.ts +++ b/web/console/src/modules/logStash/actions/podActions.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { extend } from '@tencent/ff-redux'; import { generateFetcherActionCreator } from '@tencent/qcloud-redux-fetcher'; import { generateQueryActionCreator } from '@tencent/qcloud-redux-query'; diff --git a/web/console/src/modules/logStash/actions/regionActions.ts b/web/console/src/modules/logStash/actions/regionActions.ts index 7bcd6f2e7..77be8e59c 100644 --- a/web/console/src/modules/logStash/actions/regionActions.ts +++ b/web/console/src/modules/logStash/actions/regionActions.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { extend, getRegionId } from '@tencent/ff-redux'; import { generateFetcherActionCreator } from '@tencent/qcloud-redux-fetcher'; import { generateQueryActionCreator } from '@tencent/qcloud-redux-query'; diff --git a/web/console/src/modules/logStash/actions/resourceActions.ts b/web/console/src/modules/logStash/actions/resourceActions.ts index 6f67e79ad..5db4b7e97 100644 --- a/web/console/src/modules/logStash/actions/resourceActions.ts +++ b/web/console/src/modules/logStash/actions/resourceActions.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { extend } from '@tencent/ff-redux'; import { generateFetcherActionCreator } from '@tencent/qcloud-redux-fetcher'; import { generateQueryActionCreator } from '@tencent/qcloud-redux-query'; diff --git a/web/console/src/modules/logStash/actions/validatorActions.ts b/web/console/src/modules/logStash/actions/validatorActions.ts index 48a05b788..666baedbb 100644 --- a/web/console/src/modules/logStash/actions/validatorActions.ts +++ b/web/console/src/modules/logStash/actions/validatorActions.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { RootState, ContainerLogs, MetadataItem, WorkloadType, LogStashEdit, ContainerFilePathItem } from '../models'; import * as ActionType from '../constants/ActionType'; import * as WebAPI from '../WebAPI'; diff --git a/web/console/src/modules/logStash/actions/workflowActions.ts b/web/console/src/modules/logStash/actions/workflowActions.ts index 379c55bcd..877f84f68 100644 --- a/web/console/src/modules/logStash/actions/workflowActions.ts +++ b/web/console/src/modules/logStash/actions/workflowActions.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { CreateResource } from 'src/modules/cluster/models'; import { diff --git a/web/console/src/modules/logStash/components/DeleteLogDialog.tsx b/web/console/src/modules/logStash/components/DeleteLogDialog.tsx index 8793cdb34..2129bdfd3 100644 --- a/web/console/src/modules/logStash/components/DeleteLogDialog.tsx +++ b/web/console/src/modules/logStash/components/DeleteLogDialog.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect } from 'react-redux'; diff --git a/web/console/src/modules/logStash/components/EditConsumerPanel.tsx b/web/console/src/modules/logStash/components/EditConsumerPanel.tsx index 2aa3aef53..1f779bdd6 100644 --- a/web/console/src/modules/logStash/components/EditConsumerPanel.tsx +++ b/web/console/src/modules/logStash/components/EditConsumerPanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect } from 'react-redux'; diff --git a/web/console/src/modules/logStash/components/EditLogStashPanel.tsx b/web/console/src/modules/logStash/components/EditLogStashPanel.tsx index 02d881049..b71d728db 100644 --- a/web/console/src/modules/logStash/components/EditLogStashPanel.tsx +++ b/web/console/src/modules/logStash/components/EditLogStashPanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect } from 'react-redux'; import { CreateResource } from 'src/modules/cluster/models'; diff --git a/web/console/src/modules/logStash/components/EditOriginContainerFilePanel.tsx b/web/console/src/modules/logStash/components/EditOriginContainerFilePanel.tsx index bba1c1422..e7125f328 100644 --- a/web/console/src/modules/logStash/components/EditOriginContainerFilePanel.tsx +++ b/web/console/src/modules/logStash/components/EditOriginContainerFilePanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import classnames from 'classnames'; import * as React from 'react'; import { connect } from 'react-redux'; diff --git a/web/console/src/modules/logStash/components/EditOriginContainerItemPanel.tsx b/web/console/src/modules/logStash/components/EditOriginContainerItemPanel.tsx index e1593a351..0ccd88977 100644 --- a/web/console/src/modules/logStash/components/EditOriginContainerItemPanel.tsx +++ b/web/console/src/modules/logStash/components/EditOriginContainerItemPanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import classnames from 'classnames'; import * as React from 'react'; import { connect } from 'react-redux'; diff --git a/web/console/src/modules/logStash/components/EditOriginContainerPanel.tsx b/web/console/src/modules/logStash/components/EditOriginContainerPanel.tsx index 604946a13..aecc55f86 100644 --- a/web/console/src/modules/logStash/components/EditOriginContainerPanel.tsx +++ b/web/console/src/modules/logStash/components/EditOriginContainerPanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ /** * 日志源 */ diff --git a/web/console/src/modules/logStash/components/EditOriginNodePanel.tsx b/web/console/src/modules/logStash/components/EditOriginNodePanel.tsx index 3c3baa05c..1a013ea20 100644 --- a/web/console/src/modules/logStash/components/EditOriginNodePanel.tsx +++ b/web/console/src/modules/logStash/components/EditOriginNodePanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import classnames from 'classnames'; import * as React from 'react'; import { connect } from 'react-redux'; diff --git a/web/console/src/modules/logStash/components/ListOriginContainerItemPanel.tsx b/web/console/src/modules/logStash/components/ListOriginContainerItemPanel.tsx index e1be7340f..f402dbf01 100644 --- a/web/console/src/modules/logStash/components/ListOriginContainerItemPanel.tsx +++ b/web/console/src/modules/logStash/components/ListOriginContainerItemPanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect } from 'react-redux'; diff --git a/web/console/src/modules/logStash/components/LogDetailPanel.tsx b/web/console/src/modules/logStash/components/LogDetailPanel.tsx index 108c8b6b1..45aafcea8 100644 --- a/web/console/src/modules/logStash/components/LogDetailPanel.tsx +++ b/web/console/src/modules/logStash/components/LogDetailPanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect } from 'react-redux'; diff --git a/web/console/src/modules/logStash/components/LogSettingTablePanel.tsx b/web/console/src/modules/logStash/components/LogSettingTablePanel.tsx index 5085c1ff0..cfc609c37 100644 --- a/web/console/src/modules/logStash/components/LogSettingTablePanel.tsx +++ b/web/console/src/modules/logStash/components/LogSettingTablePanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect } from 'react-redux'; import { Cluster } from 'src/modules/common/models'; diff --git a/web/console/src/modules/logStash/components/LogStashActionPanel.tsx b/web/console/src/modules/logStash/components/LogStashActionPanel.tsx index 3a1ab8718..fbb5759be 100644 --- a/web/console/src/modules/logStash/components/LogStashActionPanel.tsx +++ b/web/console/src/modules/logStash/components/LogStashActionPanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect } from 'react-redux'; diff --git a/web/console/src/modules/logStash/components/LogStashApp.tsx b/web/console/src/modules/logStash/components/LogStashApp.tsx index 2442c629c..5df54a835 100644 --- a/web/console/src/modules/logStash/components/LogStashApp.tsx +++ b/web/console/src/modules/logStash/components/LogStashApp.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect, Provider } from 'react-redux'; diff --git a/web/console/src/modules/logStash/components/LogStashHeadPanel.tsx b/web/console/src/modules/logStash/components/LogStashHeadPanel.tsx index 69c25950e..6bc790e38 100644 --- a/web/console/src/modules/logStash/components/LogStashHeadPanel.tsx +++ b/web/console/src/modules/logStash/components/LogStashHeadPanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect } from 'react-redux'; diff --git a/web/console/src/modules/logStash/components/LogStashSubHeadPanel.tsx b/web/console/src/modules/logStash/components/LogStashSubHeadPanel.tsx index 00e4ea190..df4d59efc 100644 --- a/web/console/src/modules/logStash/components/LogStashSubHeadPanel.tsx +++ b/web/console/src/modules/logStash/components/LogStashSubHeadPanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect } from 'react-redux'; diff --git a/web/console/src/modules/logStash/components/LogStashTablePanel.tsx b/web/console/src/modules/logStash/components/LogStashTablePanel.tsx index 574fdfb90..26ec0305e 100644 --- a/web/console/src/modules/logStash/components/LogStashTablePanel.tsx +++ b/web/console/src/modules/logStash/components/LogStashTablePanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import classnames from 'classnames'; import * as React from 'react'; import { connect } from 'react-redux'; diff --git a/web/console/src/modules/logStash/components/OpenLogStashDialog.tsx b/web/console/src/modules/logStash/components/OpenLogStashDialog.tsx index 3be399a2d..dfbd50c64 100644 --- a/web/console/src/modules/logStash/components/OpenLogStashDialog.tsx +++ b/web/console/src/modules/logStash/components/OpenLogStashDialog.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect } from 'react-redux'; import { CreateResource } from 'src/modules/cluster/models'; diff --git a/web/console/src/modules/logStash/constants/ActionType.ts b/web/console/src/modules/logStash/constants/ActionType.ts index beca17c1c..b79fca375 100644 --- a/web/console/src/modules/logStash/constants/ActionType.ts +++ b/web/console/src/modules/logStash/constants/ActionType.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ /** 地域的相关操作 */ export const QueryRegion = 'QueryRegion'; export const FetchRegion = 'FetchRegion'; diff --git a/web/console/src/modules/logStash/constants/Config.ts b/web/console/src/modules/logStash/constants/Config.ts index 87523d332..d85edb1b3 100644 --- a/web/console/src/modules/logStash/constants/Config.ts +++ b/web/console/src/modules/logStash/constants/Config.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ /** ========================= start FFRedux的相关配置 ======================== */ export const FFReduxActionName = { OPENADDON: 'openAddon', diff --git a/web/console/src/modules/logStash/constants/initState.ts b/web/console/src/modules/logStash/constants/initState.ts index 337e3c526..f7d17ab30 100644 --- a/web/console/src/modules/logStash/constants/initState.ts +++ b/web/console/src/modules/logStash/constants/initState.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { uuid } from '@tencent/ff-redux'; import { initValidator } from '../../common/models'; diff --git a/web/console/src/modules/logStash/index.tsx b/web/console/src/modules/logStash/index.tsx index 8a8cb161d..7a16af525 100644 --- a/web/console/src/modules/logStash/index.tsx +++ b/web/console/src/modules/logStash/index.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { LogStashAppContainer } from './components/LogStashApp'; diff --git a/web/console/src/modules/logStash/models/Ckafka.ts b/web/console/src/modules/logStash/models/Ckafka.ts index b34fbd85a..3e907008b 100644 --- a/web/console/src/modules/logStash/models/Ckafka.ts +++ b/web/console/src/modules/logStash/models/Ckafka.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { Identifiable } from '@tencent/ff-redux'; import { Cluster } from '../../common/models'; diff --git a/web/console/src/modules/logStash/models/Cls.ts b/web/console/src/modules/logStash/models/Cls.ts index be2aaddb8..fa8d86f4b 100644 --- a/web/console/src/modules/logStash/models/Cls.ts +++ b/web/console/src/modules/logStash/models/Cls.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { Identifiable } from '@tencent/ff-redux'; export interface Cls extends Identifiable { diff --git a/web/console/src/modules/logStash/models/ContainerFilePathItem.ts b/web/console/src/modules/logStash/models/ContainerFilePathItem.ts index 020e26ba2..543f1cce4 100644 --- a/web/console/src/modules/logStash/models/ContainerFilePathItem.ts +++ b/web/console/src/modules/logStash/models/ContainerFilePathItem.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { Identifiable } from '@tencent/ff-redux'; import { Validation } from '../../common/models'; diff --git a/web/console/src/modules/logStash/models/ContainerLogs.ts b/web/console/src/modules/logStash/models/ContainerLogs.ts index 4d12856fd..20821d305 100644 --- a/web/console/src/modules/logStash/models/ContainerLogs.ts +++ b/web/console/src/modules/logStash/models/ContainerLogs.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { Identifiable } from '@tencent/ff-redux'; import { Resource } from '../../cluster/models'; diff --git a/web/console/src/modules/logStash/models/LogDaemonset.ts b/web/console/src/modules/logStash/models/LogDaemonset.ts index 3bdc41a16..a06039e82 100644 --- a/web/console/src/modules/logStash/models/LogDaemonset.ts +++ b/web/console/src/modules/logStash/models/LogDaemonset.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { cluster } from 'config/resource/k8sConfig'; import { Identifiable } from '@tencent/ff-redux'; diff --git a/web/console/src/modules/logStash/models/LogStashEdit.ts b/web/console/src/modules/logStash/models/LogStashEdit.ts index 8586786f2..aedacd534 100644 --- a/web/console/src/modules/logStash/models/LogStashEdit.ts +++ b/web/console/src/modules/logStash/models/LogStashEdit.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { FetcherState, Identifiable, QueryState, RecordSet } from '@tencent/ff-redux'; import { Validation } from '../../common/models'; diff --git a/web/console/src/modules/logStash/models/LogStatsh.ts b/web/console/src/modules/logStash/models/LogStatsh.ts index 1168e8e4f..4417f847f 100644 --- a/web/console/src/modules/logStash/models/LogStatsh.ts +++ b/web/console/src/modules/logStash/models/LogStatsh.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { any } from 'prop-types'; import { Identifiable } from '@tencent/ff-redux'; diff --git a/web/console/src/modules/logStash/models/MetadataItem.ts b/web/console/src/modules/logStash/models/MetadataItem.ts index 45aaacbf0..fa211aa01 100644 --- a/web/console/src/modules/logStash/models/MetadataItem.ts +++ b/web/console/src/modules/logStash/models/MetadataItem.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { Identifiable } from '@tencent/ff-redux'; import { Validation } from '../../common/models'; diff --git a/web/console/src/modules/logStash/models/Resource.ts b/web/console/src/modules/logStash/models/Resource.ts index 586c313fe..7919b6412 100644 --- a/web/console/src/modules/logStash/models/Resource.ts +++ b/web/console/src/modules/logStash/models/Resource.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { Identifiable } from '@tencent/ff-redux'; export interface Resource extends Identifiable { diff --git a/web/console/src/modules/logStash/models/RootState.ts b/web/console/src/modules/logStash/models/RootState.ts index 970a0777b..1efe7c3bc 100644 --- a/web/console/src/modules/logStash/models/RootState.ts +++ b/web/console/src/modules/logStash/models/RootState.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { CreateResource } from 'src/modules/cluster/models'; import { FetcherState, FFListModel, QueryState, RecordSet, WorkflowState } from '@tencent/ff-redux'; diff --git a/web/console/src/modules/logStash/models/index.ts b/web/console/src/modules/logStash/models/index.ts index c09558f41..d077cff75 100644 --- a/web/console/src/modules/logStash/models/index.ts +++ b/web/console/src/modules/logStash/models/index.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export { RootState } from './RootState'; export { Log, LogFilter, LogOperator } from './LogStatsh'; export { LogStashEdit, LogStashEditOperator } from './LogStashEdit'; diff --git a/web/console/src/modules/logStash/models/pod.ts b/web/console/src/modules/logStash/models/pod.ts index d4c65616c..383c5bfae 100644 --- a/web/console/src/modules/logStash/models/pod.ts +++ b/web/console/src/modules/logStash/models/pod.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { Identifiable } from '@tencent/ff-redux'; export interface Pod extends Identifiable { diff --git a/web/console/src/modules/logStash/reducers/LogStashEditReducer.ts b/web/console/src/modules/logStash/reducers/LogStashEditReducer.ts index ade58926e..e93d31d0f 100644 --- a/web/console/src/modules/logStash/reducers/LogStashEditReducer.ts +++ b/web/console/src/modules/logStash/reducers/LogStashEditReducer.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { combineReducers } from 'redux'; import { RecordSet, reduceToPayload } from '@tencent/ff-redux'; diff --git a/web/console/src/modules/logStash/reducers/RootReducer.ts b/web/console/src/modules/logStash/reducers/RootReducer.ts index 997db42be..50552fd73 100644 --- a/web/console/src/modules/logStash/reducers/RootReducer.ts +++ b/web/console/src/modules/logStash/reducers/RootReducer.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { combineReducers } from 'redux'; import { createFFListReducer, generateWorkflowReducer, RecordSet, reduceToPayload } from '@tencent/ff-redux'; diff --git a/web/console/src/modules/logStash/router.ts b/web/console/src/modules/logStash/router.ts index c8fe0507a..1a270f7a0 100644 --- a/web/console/src/modules/logStash/router.ts +++ b/web/console/src/modules/logStash/router.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { Router } from '../../../helpers/Router'; /** diff --git a/web/console/src/modules/logStash/stores/RootStore.ts b/web/console/src/modules/logStash/stores/RootStore.ts index 528dcd48c..83ff139b0 100644 --- a/web/console/src/modules/logStash/stores/RootStore.ts +++ b/web/console/src/modules/logStash/stores/RootStore.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { createStore } from '@tencent/ff-redux'; import { generateResetableReducer } from '../../../../helpers'; diff --git a/web/console/src/modules/notify/WebAPI.ts b/web/console/src/modules/notify/WebAPI.ts index e3b5f38b5..47d3c9ca4 100644 --- a/web/console/src/modules/notify/WebAPI.ts +++ b/web/console/src/modules/notify/WebAPI.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { oc } from 'ts-optchain'; import { OperationResult, QueryState, RecordSet } from '@tencent/ff-redux'; diff --git a/web/console/src/modules/notify/actions/index.ts b/web/console/src/modules/notify/actions/index.ts index 3e1afb1e8..5d7198813 100644 --- a/web/console/src/modules/notify/actions/index.ts +++ b/web/console/src/modules/notify/actions/index.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { resourceActions } from './resourceActions'; import { workflowActions } from './workflowActions'; diff --git a/web/console/src/modules/notify/actions/resourceActions.ts b/web/console/src/modules/notify/actions/resourceActions.ts index 2d567b45c..3875e6876 100644 --- a/web/console/src/modules/notify/actions/resourceActions.ts +++ b/web/console/src/modules/notify/actions/resourceActions.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { createFFListActions } from '@tencent/ff-redux'; import { resourceConfig } from '../../../../config'; diff --git a/web/console/src/modules/notify/actions/workflowActions.ts b/web/console/src/modules/notify/actions/workflowActions.ts index ed8a5de8f..8ff43ff71 100644 --- a/web/console/src/modules/notify/actions/workflowActions.ts +++ b/web/console/src/modules/notify/actions/workflowActions.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { generateWorkflowActionCreator, isSuccessWorkflow, OperationTrigger } from '@tencent/ff-redux'; diff --git a/web/console/src/modules/notify/components/DeleteResourceDialog.tsx b/web/console/src/modules/notify/components/DeleteResourceDialog.tsx index a559dc38e..b83cce1d9 100644 --- a/web/console/src/modules/notify/components/DeleteResourceDialog.tsx +++ b/web/console/src/modules/notify/components/DeleteResourceDialog.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { RootProps } from './NotifyApp'; import { WorkflowDialog } from '../../common/components'; diff --git a/web/console/src/modules/notify/components/NotifyApp.tsx b/web/console/src/modules/notify/components/NotifyApp.tsx index 8d575e9be..7ac41b035 100644 --- a/web/console/src/modules/notify/components/NotifyApp.tsx +++ b/web/console/src/modules/notify/components/NotifyApp.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect, Provider } from 'react-redux'; diff --git a/web/console/src/modules/notify/components/NotifyHead.tsx b/web/console/src/modules/notify/components/NotifyHead.tsx index bab149660..941ba6d6f 100644 --- a/web/console/src/modules/notify/components/NotifyHead.tsx +++ b/web/console/src/modules/notify/components/NotifyHead.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { RootProps } from './NotifyApp'; import { t, Trans } from '@tencent/tea-app/lib/i18n'; diff --git a/web/console/src/modules/notify/components/ResourceSidebar.tsx b/web/console/src/modules/notify/components/ResourceSidebar.tsx index 6ae25b246..6d6e3cfde 100644 --- a/web/console/src/modules/notify/components/ResourceSidebar.tsx +++ b/web/console/src/modules/notify/components/ResourceSidebar.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { RootProps } from './NotifyApp'; import * as classnames from 'classnames'; diff --git a/web/console/src/modules/notify/components/resourceDetail/ResourceDetail.tsx b/web/console/src/modules/notify/components/resourceDetail/ResourceDetail.tsx index 3d5c7da61..e2b20bdb0 100644 --- a/web/console/src/modules/notify/components/resourceDetail/ResourceDetail.tsx +++ b/web/console/src/modules/notify/components/resourceDetail/ResourceDetail.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { RootProps } from '../NotifyApp'; import { LinkButton } from '../../../common/components'; diff --git a/web/console/src/modules/notify/components/resourceDetail/ResourceDetailChannel.tsx b/web/console/src/modules/notify/components/resourceDetail/ResourceDetailChannel.tsx index 1ede43b42..c45b1c629 100644 --- a/web/console/src/modules/notify/components/resourceDetail/ResourceDetailChannel.tsx +++ b/web/console/src/modules/notify/components/resourceDetail/ResourceDetailChannel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { ResourceDetail } from './ResourceDetail'; import { FormPanel } from '@tencent/ff-component'; diff --git a/web/console/src/modules/notify/components/resourceDetail/ResourceDetailReceiver.tsx b/web/console/src/modules/notify/components/resourceDetail/ResourceDetailReceiver.tsx index 960a3f5ad..eba149450 100644 --- a/web/console/src/modules/notify/components/resourceDetail/ResourceDetailReceiver.tsx +++ b/web/console/src/modules/notify/components/resourceDetail/ResourceDetailReceiver.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { ResourceDetail } from './ResourceDetail'; import { FormPanel } from '@tencent/ff-component'; diff --git a/web/console/src/modules/notify/components/resourceDetail/ResourceDetailReceiverGroup.tsx b/web/console/src/modules/notify/components/resourceDetail/ResourceDetailReceiverGroup.tsx index f58fe46c3..2eae9ee3a 100644 --- a/web/console/src/modules/notify/components/resourceDetail/ResourceDetailReceiverGroup.tsx +++ b/web/console/src/modules/notify/components/resourceDetail/ResourceDetailReceiverGroup.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { ResourceDetail } from './ResourceDetail'; import { FormPanel } from '@tencent/ff-component'; diff --git a/web/console/src/modules/notify/components/resourceDetail/ResourceDetailTemplate.tsx b/web/console/src/modules/notify/components/resourceDetail/ResourceDetailTemplate.tsx index 40f0904be..615837c96 100644 --- a/web/console/src/modules/notify/components/resourceDetail/ResourceDetailTemplate.tsx +++ b/web/console/src/modules/notify/components/resourceDetail/ResourceDetailTemplate.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { ResourceDetail } from './ResourceDetail'; import { LinkButton } from '../../../common/components'; diff --git a/web/console/src/modules/notify/components/resourceDetail/ResourceHeader.tsx b/web/console/src/modules/notify/components/resourceDetail/ResourceHeader.tsx index bc9d4c9fe..68306a734 100644 --- a/web/console/src/modules/notify/components/resourceDetail/ResourceHeader.tsx +++ b/web/console/src/modules/notify/components/resourceDetail/ResourceHeader.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { RootProps } from '../NotifyApp'; import { router } from '../../router'; diff --git a/web/console/src/modules/notify/components/resourceEdition/EditResource.tsx b/web/console/src/modules/notify/components/resourceEdition/EditResource.tsx index 1668437e6..db359fe05 100644 --- a/web/console/src/modules/notify/components/resourceEdition/EditResource.tsx +++ b/web/console/src/modules/notify/components/resourceEdition/EditResource.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { Button } from '@tea/component/button'; diff --git a/web/console/src/modules/notify/components/resourceEdition/EditResourceChannel.tsx b/web/console/src/modules/notify/components/resourceEdition/EditResourceChannel.tsx index 5ddd1fe69..6c1fd84fb 100644 --- a/web/console/src/modules/notify/components/resourceEdition/EditResourceChannel.tsx +++ b/web/console/src/modules/notify/components/resourceEdition/EditResourceChannel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { t } from '@tencent/tea-app/lib/i18n'; import { Form } from '@tea/component/form'; diff --git a/web/console/src/modules/notify/components/resourceEdition/EditResourceReceiver.tsx b/web/console/src/modules/notify/components/resourceEdition/EditResourceReceiver.tsx index 2d115a547..bf1909d98 100644 --- a/web/console/src/modules/notify/components/resourceEdition/EditResourceReceiver.tsx +++ b/web/console/src/modules/notify/components/resourceEdition/EditResourceReceiver.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { Form } from '@tea/component/form'; import { Input } from '@tea/component/input'; diff --git a/web/console/src/modules/notify/components/resourceEdition/EditResourceReceiverGroup.tsx b/web/console/src/modules/notify/components/resourceEdition/EditResourceReceiverGroup.tsx index 548502807..866b0b70b 100644 --- a/web/console/src/modules/notify/components/resourceEdition/EditResourceReceiverGroup.tsx +++ b/web/console/src/modules/notify/components/resourceEdition/EditResourceReceiverGroup.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { t, Trans } from '@tencent/tea-app/lib/i18n'; import { Form } from '@tea/component/form'; diff --git a/web/console/src/modules/notify/components/resourceEdition/EditResourceTemplate.tsx b/web/console/src/modules/notify/components/resourceEdition/EditResourceTemplate.tsx index efcc2a488..495ed58e0 100644 --- a/web/console/src/modules/notify/components/resourceEdition/EditResourceTemplate.tsx +++ b/web/console/src/modules/notify/components/resourceEdition/EditResourceTemplate.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { t } from '@tencent/tea-app/lib/i18n'; import { Form } from '@tea/component/form'; diff --git a/web/console/src/modules/notify/components/resourceIntro/BodyIntro.tsx b/web/console/src/modules/notify/components/resourceIntro/BodyIntro.tsx index 304fcb95a..b1bde274d 100644 --- a/web/console/src/modules/notify/components/resourceIntro/BodyIntro.tsx +++ b/web/console/src/modules/notify/components/resourceIntro/BodyIntro.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { RootProps } from '../NotifyApp'; import { insertCSS } from '@tencent/ff-redux'; diff --git a/web/console/src/modules/notify/components/resourceIntro/BodyIntroHeader.tsx b/web/console/src/modules/notify/components/resourceIntro/BodyIntroHeader.tsx index d313a654e..1e2f6a53d 100644 --- a/web/console/src/modules/notify/components/resourceIntro/BodyIntroHeader.tsx +++ b/web/console/src/modules/notify/components/resourceIntro/BodyIntroHeader.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { t, Trans } from '@tencent/tea-app/lib/i18n'; import { Justify } from '@tencent/tea-component'; diff --git a/web/console/src/modules/notify/components/resourceList/ResourceTable.tsx b/web/console/src/modules/notify/components/resourceList/ResourceTable.tsx index 30f4da03f..3144739c4 100644 --- a/web/console/src/modules/notify/components/resourceList/ResourceTable.tsx +++ b/web/console/src/modules/notify/components/resourceList/ResourceTable.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { Button, Text } from '@tea/component'; import { RootProps } from '../NotifyApp'; diff --git a/web/console/src/modules/notify/components/resourceList/ResourceTableChannel.tsx b/web/console/src/modules/notify/components/resourceList/ResourceTableChannel.tsx index 321898bc3..8c0cb81b8 100644 --- a/web/console/src/modules/notify/components/resourceList/ResourceTableChannel.tsx +++ b/web/console/src/modules/notify/components/resourceList/ResourceTableChannel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { ResourceTable } from './ResourceTable'; import { t, Trans } from '@tencent/tea-app/lib/i18n'; import { TablePanelColumnProps } from '@tencent/ff-component'; diff --git a/web/console/src/modules/notify/components/resourceList/ResourceTableReceiver.tsx b/web/console/src/modules/notify/components/resourceList/ResourceTableReceiver.tsx index bf7899d1c..9f3a493ef 100644 --- a/web/console/src/modules/notify/components/resourceList/ResourceTableReceiver.tsx +++ b/web/console/src/modules/notify/components/resourceList/ResourceTableReceiver.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { ResourceTable } from './ResourceTable'; import { t, Trans } from '@tencent/tea-app/lib/i18n'; import { TablePanelColumnProps } from '@tencent/ff-component'; diff --git a/web/console/src/modules/notify/components/resourceList/ResourceTableTemplate.tsx b/web/console/src/modules/notify/components/resourceList/ResourceTableTemplate.tsx index 745cc2960..3b6ca1b7d 100644 --- a/web/console/src/modules/notify/components/resourceList/ResourceTableTemplate.tsx +++ b/web/console/src/modules/notify/components/resourceList/ResourceTableTemplate.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { t } from '@tencent/tea-app/lib/i18n'; import { ResourceTableChannel } from './ResourceTableChannel'; diff --git a/web/console/src/modules/notify/constants/ActionType.ts b/web/console/src/modules/notify/constants/ActionType.ts index 306d58e52..2da6f564b 100644 --- a/web/console/src/modules/notify/constants/ActionType.ts +++ b/web/console/src/modules/notify/constants/ActionType.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export const isI18n = 'isI18n'; export const FetchRegion = 'FetchRegion'; export const QueryRegion = 'QueryRegion'; diff --git a/web/console/src/modules/notify/index.tsx b/web/console/src/modules/notify/index.tsx index c650dae58..4616a2abc 100644 --- a/web/console/src/modules/notify/index.tsx +++ b/web/console/src/modules/notify/index.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { NotifyAppContainer } from './components/NotifyApp'; diff --git a/web/console/src/modules/notify/models/ClusterFilter.ts b/web/console/src/modules/notify/models/ClusterFilter.ts index 83bb77782..29a5db065 100644 --- a/web/console/src/modules/notify/models/ClusterFilter.ts +++ b/web/console/src/modules/notify/models/ClusterFilter.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export interface ClusterFilter { regionId?: number; } diff --git a/web/console/src/modules/notify/models/Group.tsx b/web/console/src/modules/notify/models/Group.tsx index f65a4613d..4b1235603 100644 --- a/web/console/src/modules/notify/models/Group.tsx +++ b/web/console/src/modules/notify/models/Group.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { Identifiable } from '@tencent/ff-redux'; export interface Group extends Identifiable { diff --git a/web/console/src/modules/notify/models/Namespace.ts b/web/console/src/modules/notify/models/Namespace.ts index fe76f6e3b..7b571747c 100644 --- a/web/console/src/modules/notify/models/Namespace.ts +++ b/web/console/src/modules/notify/models/Namespace.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { Identifiable } from '@tencent/ff-redux'; export interface Namespace extends Identifiable { diff --git a/web/console/src/modules/notify/models/Region.ts b/web/console/src/modules/notify/models/Region.ts index 6b1123671..df092f5fb 100644 --- a/web/console/src/modules/notify/models/Region.ts +++ b/web/console/src/modules/notify/models/Region.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { Identifiable } from '@tencent/ff-redux'; export interface Region extends Identifiable { diff --git a/web/console/src/modules/notify/models/RegionFilter.ts b/web/console/src/modules/notify/models/RegionFilter.ts index 7c823fef6..745d06417 100644 --- a/web/console/src/modules/notify/models/RegionFilter.ts +++ b/web/console/src/modules/notify/models/RegionFilter.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export interface RegionFilter { /**默认 */ regionId?: string | number; diff --git a/web/console/src/modules/notify/models/Resource.ts b/web/console/src/modules/notify/models/Resource.ts index cd09879b9..743de58b7 100644 --- a/web/console/src/modules/notify/models/Resource.ts +++ b/web/console/src/modules/notify/models/Resource.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { Identifiable, RecordSet } from '@tencent/ff-redux'; export interface Resource extends Identifiable { diff --git a/web/console/src/modules/notify/models/RootState.ts b/web/console/src/modules/notify/models/RootState.ts index a8aaaae87..10a8369b6 100644 --- a/web/console/src/modules/notify/models/RootState.ts +++ b/web/console/src/modules/notify/models/RootState.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { FFListModel, WorkflowState } from '@tencent/ff-redux'; import { RouteState } from '../../../../helpers/Router'; diff --git a/web/console/src/modules/notify/models/index.ts b/web/console/src/modules/notify/models/index.ts index 18d848d33..844635e0f 100644 --- a/web/console/src/modules/notify/models/index.ts +++ b/web/console/src/modules/notify/models/index.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export { ResourceFilter, Resource } from './Resource'; export { RootState } from './RootState'; // export { RegionFilter } from './RegionFilter'; diff --git a/web/console/src/modules/notify/reducers/RootReducer.ts b/web/console/src/modules/notify/reducers/RootReducer.ts index b3b80bd56..3e4d9d938 100644 --- a/web/console/src/modules/notify/reducers/RootReducer.ts +++ b/web/console/src/modules/notify/reducers/RootReducer.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { combineReducers } from 'redux'; import { createFFListReducer, generateWorkflowReducer, reduceToPayload } from '@tencent/ff-redux'; diff --git a/web/console/src/modules/notify/router.project.ts b/web/console/src/modules/notify/router.project.ts index fc2dbcf97..c994dcc8c 100644 --- a/web/console/src/modules/notify/router.project.ts +++ b/web/console/src/modules/notify/router.project.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { Router } from '../../../helpers/Router'; export const router = new Router('/tkestack-project/notify(/:mode)(/:resourceName)(/:tab)', { diff --git a/web/console/src/modules/notify/router.ts b/web/console/src/modules/notify/router.ts index b5708095b..885d6b815 100644 --- a/web/console/src/modules/notify/router.ts +++ b/web/console/src/modules/notify/router.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { Router } from '../../../helpers/Router'; export const router = new Router('/tkestack/notify(/:mode)(/:resourceName)(/:tab)', { diff --git a/web/console/src/modules/notify/schema/channelSchema.ts b/web/console/src/modules/notify/schema/channelSchema.ts index bdadcc802..ec38fc849 100644 --- a/web/console/src/modules/notify/schema/channelSchema.ts +++ b/web/console/src/modules/notify/schema/channelSchema.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { TYPES } from './schemaUtil'; import { resourceConfig } from '@config'; import validatorjs from 'validator'; diff --git a/web/console/src/modules/notify/schema/receiverGroupSchema.ts b/web/console/src/modules/notify/schema/receiverGroupSchema.ts index f29a69841..ba40562aa 100644 --- a/web/console/src/modules/notify/schema/receiverGroupSchema.ts +++ b/web/console/src/modules/notify/schema/receiverGroupSchema.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { TYPES } from './schemaUtil'; import { resourceConfig } from '@config'; diff --git a/web/console/src/modules/notify/schema/receiverSchema.ts b/web/console/src/modules/notify/schema/receiverSchema.ts index 7dafbf8a6..731f46223 100644 --- a/web/console/src/modules/notify/schema/receiverSchema.ts +++ b/web/console/src/modules/notify/schema/receiverSchema.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { TYPES } from './schemaUtil'; import { t, Trans } from '@tencent/tea-app/lib/i18n'; import { resourceConfig } from '@config'; diff --git a/web/console/src/modules/notify/schema/schemaUtil.ts b/web/console/src/modules/notify/schema/schemaUtil.ts index 58c2fb140..cf0b33ba8 100644 --- a/web/console/src/modules/notify/schema/schemaUtil.ts +++ b/web/console/src/modules/notify/schema/schemaUtil.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export const TYPES = { string: { type: 'string', diff --git a/web/console/src/modules/notify/schema/templateSchema.ts b/web/console/src/modules/notify/schema/templateSchema.ts index 5007de37d..9375307ee 100644 --- a/web/console/src/modules/notify/schema/templateSchema.ts +++ b/web/console/src/modules/notify/schema/templateSchema.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { TYPES } from './schemaUtil'; import { resourceConfig } from '@config'; diff --git a/web/console/src/modules/notify/stores/RootStore.ts b/web/console/src/modules/notify/stores/RootStore.ts index 528dcd48c..83ff139b0 100644 --- a/web/console/src/modules/notify/stores/RootStore.ts +++ b/web/console/src/modules/notify/stores/RootStore.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { createStore } from '@tencent/ff-redux'; import { generateResetableReducer } from '../../../../helpers'; diff --git a/web/console/src/modules/overview/WebAPI.ts b/web/console/src/modules/overview/WebAPI.ts index f02b9c91c..3b6bc4ee9 100644 --- a/web/console/src/modules/overview/WebAPI.ts +++ b/web/console/src/modules/overview/WebAPI.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { RequestParams } from './../common/models/requestParams'; import { Method, reduceNetworkRequest } from '@helper/reduceNetwork'; import { OperationResult, RecordSet, uuid } from '@tencent/ff-redux'; diff --git a/web/console/src/modules/overview/actions/overviewActions.ts b/web/console/src/modules/overview/actions/overviewActions.ts index 9c13cb926..61e7c4aa2 100644 --- a/web/console/src/modules/overview/actions/overviewActions.ts +++ b/web/console/src/modules/overview/actions/overviewActions.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { RootState, ClusterOverview, ClusterOverviewFilter } from './../models/RootState'; import { Dispatch } from 'redux'; import * as ActionType from '../constants/ActionType'; diff --git a/web/console/src/modules/overview/components/ClusterDetailPanel.tsx b/web/console/src/modules/overview/components/ClusterDetailPanel.tsx index be1210451..e945cf404 100644 --- a/web/console/src/modules/overview/components/ClusterDetailPanel.tsx +++ b/web/console/src/modules/overview/components/ClusterDetailPanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { Card, Row, Col, MetricsBoard, Icon, Text, SearchBox, Button, Bubble, List } from '@tencent/tea-component'; import { ClusterOverview, ClusterDetail } from '../models/RootState'; diff --git a/web/console/src/modules/overview/components/ClusterOverview.tsx b/web/console/src/modules/overview/components/ClusterOverview.tsx index 91259bd6f..ca7da2d16 100644 --- a/web/console/src/modules/overview/components/ClusterOverview.tsx +++ b/web/console/src/modules/overview/components/ClusterOverview.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { Card, Row, Col, MetricsBoard, Icon, Text, Bubble } from '@tencent/tea-component'; import { ClusterOverview } from '../models/RootState'; diff --git a/web/console/src/modules/overview/components/OverviewApp.tsx b/web/console/src/modules/overview/components/OverviewApp.tsx index ca021e4e8..3f6f25945 100644 --- a/web/console/src/modules/overview/components/OverviewApp.tsx +++ b/web/console/src/modules/overview/components/OverviewApp.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect, Provider } from 'react-redux'; diff --git a/web/console/src/modules/overview/components/OverviewHeadPanel.tsx b/web/console/src/modules/overview/components/OverviewHeadPanel.tsx index 33930eee8..ec689de2d 100644 --- a/web/console/src/modules/overview/components/OverviewHeadPanel.tsx +++ b/web/console/src/modules/overview/components/OverviewHeadPanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { t } from '@tencent/tea-app/lib/i18n'; diff --git a/web/console/src/modules/overview/components/QuickHelpPanel.tsx b/web/console/src/modules/overview/components/QuickHelpPanel.tsx index 270c51025..36dccad20 100644 --- a/web/console/src/modules/overview/components/QuickHelpPanel.tsx +++ b/web/console/src/modules/overview/components/QuickHelpPanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { Card, List, Button } from '@tencent/tea-component'; export function QuickHelpPanel() { diff --git a/web/console/src/modules/overview/components/TipsPanel.tsx b/web/console/src/modules/overview/components/TipsPanel.tsx index 00b14a498..33c2b3929 100644 --- a/web/console/src/modules/overview/components/TipsPanel.tsx +++ b/web/console/src/modules/overview/components/TipsPanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { Card, List, Icon, Text, Button } from '@tencent/tea-component'; export function TipsPanel() { diff --git a/web/console/src/modules/overview/constants/ActionType.ts b/web/console/src/modules/overview/constants/ActionType.ts index 466d6b1db..b4b3e26dd 100644 --- a/web/console/src/modules/overview/constants/ActionType.ts +++ b/web/console/src/modules/overview/constants/ActionType.ts @@ -1 +1,18 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export const ClusterOverview = 'ClusterOverview'; diff --git a/web/console/src/modules/overview/constants/Config.ts b/web/console/src/modules/overview/constants/Config.ts index 8fd537ac1..f6fdb58c3 100644 --- a/web/console/src/modules/overview/constants/Config.ts +++ b/web/console/src/modules/overview/constants/Config.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { t } from '@tencent/tea-app/lib/i18n'; export const canNotOperateCluster = { diff --git a/web/console/src/modules/overview/index.tsx b/web/console/src/modules/overview/index.tsx index d5826d686..057bf4104 100644 --- a/web/console/src/modules/overview/index.tsx +++ b/web/console/src/modules/overview/index.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { OverviewAppContainer } from './components/OverviewApp'; diff --git a/web/console/src/modules/overview/models/RootState.ts b/web/console/src/modules/overview/models/RootState.ts index 3227dd5cb..c82e7998d 100644 --- a/web/console/src/modules/overview/models/RootState.ts +++ b/web/console/src/modules/overview/models/RootState.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { FFObjectModel } from './../../../../lib/ff-redux/src/object/Model'; import { FetcherState } from '@tencent/ff-redux'; diff --git a/web/console/src/modules/overview/reducers/RootReducer.ts b/web/console/src/modules/overview/reducers/RootReducer.ts index dcbe079f4..a02adef6e 100644 --- a/web/console/src/modules/overview/reducers/RootReducer.ts +++ b/web/console/src/modules/overview/reducers/RootReducer.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { ClusterOverview, ClusterOverviewFilter } from './../models/RootState'; import { combineReducers } from 'redux'; import * as ActionType from '../constants/ActionType'; diff --git a/web/console/src/modules/overview/router.ts b/web/console/src/modules/overview/router.ts index 9faeea2f6..51f6a8d20 100644 --- a/web/console/src/modules/overview/router.ts +++ b/web/console/src/modules/overview/router.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { Router } from '../../../helpers/Router'; /** diff --git a/web/console/src/modules/overview/stores/RootStore.ts b/web/console/src/modules/overview/stores/RootStore.ts index 528dcd48c..83ff139b0 100644 --- a/web/console/src/modules/overview/stores/RootStore.ts +++ b/web/console/src/modules/overview/stores/RootStore.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { createStore } from '@tencent/ff-redux'; import { generateResetableReducer } from '../../../../helpers'; diff --git a/web/console/src/modules/persistentEvent/WebAPI.ts b/web/console/src/modules/persistentEvent/WebAPI.ts index 9343feb1f..2cde02bc5 100644 --- a/web/console/src/modules/persistentEvent/WebAPI.ts +++ b/web/console/src/modules/persistentEvent/WebAPI.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { RequestParams, UserDefinedHeader } from '../common/models'; import { reduceNetworkRequest, diff --git a/web/console/src/modules/persistentEvent/actions/clusterActions.ts b/web/console/src/modules/persistentEvent/actions/clusterActions.ts index 7bc03e93e..84dce44c3 100644 --- a/web/console/src/modules/persistentEvent/actions/clusterActions.ts +++ b/web/console/src/modules/persistentEvent/actions/clusterActions.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { createFFListActions, extend, FetchOptions, ReduxAction } from '@tencent/ff-redux'; import { resourceConfig } from '../../../../config'; diff --git a/web/console/src/modules/persistentEvent/actions/index.ts b/web/console/src/modules/persistentEvent/actions/index.ts index 0194a8c32..9532a01ce 100644 --- a/web/console/src/modules/persistentEvent/actions/index.ts +++ b/web/console/src/modules/persistentEvent/actions/index.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { clusterActions } from './clusterActions'; import { peActions } from './peActions'; import { regionActions } from './regionActions'; diff --git a/web/console/src/modules/persistentEvent/actions/peActions.ts b/web/console/src/modules/persistentEvent/actions/peActions.ts index 6b9058d52..f23174b16 100644 --- a/web/console/src/modules/persistentEvent/actions/peActions.ts +++ b/web/console/src/modules/persistentEvent/actions/peActions.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { extend, FetchOptions, generateFetcherActionCreator, ReduxAction } from '@tencent/ff-redux'; import { generateQueryActionCreator } from '@tencent/qcloud-redux-query'; diff --git a/web/console/src/modules/persistentEvent/actions/peEditActions.ts b/web/console/src/modules/persistentEvent/actions/peEditActions.ts index dfd318890..d31f2abe7 100644 --- a/web/console/src/modules/persistentEvent/actions/peEditActions.ts +++ b/web/console/src/modules/persistentEvent/actions/peEditActions.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { FetchOptions, ReduxAction } from '@tencent/ff-redux'; import { Resource } from '../../common'; diff --git a/web/console/src/modules/persistentEvent/actions/regionActions.ts b/web/console/src/modules/persistentEvent/actions/regionActions.ts index 6edbe26d4..0dedff27f 100644 --- a/web/console/src/modules/persistentEvent/actions/regionActions.ts +++ b/web/console/src/modules/persistentEvent/actions/regionActions.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { createFFListActions, extend, FetchOptions, getRegionId } from '@tencent/ff-redux'; import { assureRegion, setRegionId } from '../../../../helpers'; diff --git a/web/console/src/modules/persistentEvent/actions/validatorActions.ts b/web/console/src/modules/persistentEvent/actions/validatorActions.ts index 859727dfe..1e2699400 100644 --- a/web/console/src/modules/persistentEvent/actions/validatorActions.ts +++ b/web/console/src/modules/persistentEvent/actions/validatorActions.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { RootState, PeEdit } from '../models'; import * as ActionType from '../constants//ActionType'; import { t, Trans } from '@tencent/tea-app/lib/i18n'; diff --git a/web/console/src/modules/persistentEvent/actions/workflowActions.ts b/web/console/src/modules/persistentEvent/actions/workflowActions.ts index 6b057640f..a8a2eded6 100644 --- a/web/console/src/modules/persistentEvent/actions/workflowActions.ts +++ b/web/console/src/modules/persistentEvent/actions/workflowActions.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { generateWorkflowActionCreator, isSuccessWorkflow, OperationTrigger } from '@tencent/ff-redux'; diff --git a/web/console/src/modules/persistentEvent/components/ClusterActionPanel.tsx b/web/console/src/modules/persistentEvent/components/ClusterActionPanel.tsx index 3317ca13d..2f58cd922 100644 --- a/web/console/src/modules/persistentEvent/components/ClusterActionPanel.tsx +++ b/web/console/src/modules/persistentEvent/components/ClusterActionPanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect } from 'react-redux'; diff --git a/web/console/src/modules/persistentEvent/components/ClusterTablePanel.tsx b/web/console/src/modules/persistentEvent/components/ClusterTablePanel.tsx index a1976dca6..1a46797fd 100644 --- a/web/console/src/modules/persistentEvent/components/ClusterTablePanel.tsx +++ b/web/console/src/modules/persistentEvent/components/ClusterTablePanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect } from 'react-redux'; diff --git a/web/console/src/modules/persistentEvent/components/EditPersistentEventPanel.tsx b/web/console/src/modules/persistentEvent/components/EditPersistentEventPanel.tsx index eb9fe3d38..0fba7f45d 100644 --- a/web/console/src/modules/persistentEvent/components/EditPersistentEventPanel.tsx +++ b/web/console/src/modules/persistentEvent/components/EditPersistentEventPanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect } from 'react-redux'; diff --git a/web/console/src/modules/persistentEvent/components/PersistentEventApp.tsx b/web/console/src/modules/persistentEvent/components/PersistentEventApp.tsx index d5a6c665c..72a3325a4 100644 --- a/web/console/src/modules/persistentEvent/components/PersistentEventApp.tsx +++ b/web/console/src/modules/persistentEvent/components/PersistentEventApp.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect, Provider } from 'react-redux'; diff --git a/web/console/src/modules/persistentEvent/components/PersistentEventDeleteDialog.tsx b/web/console/src/modules/persistentEvent/components/PersistentEventDeleteDialog.tsx index 54d58f804..e921ca857 100644 --- a/web/console/src/modules/persistentEvent/components/PersistentEventDeleteDialog.tsx +++ b/web/console/src/modules/persistentEvent/components/PersistentEventDeleteDialog.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect } from 'react-redux'; diff --git a/web/console/src/modules/persistentEvent/components/PersistentEventHeadPanel.tsx b/web/console/src/modules/persistentEvent/components/PersistentEventHeadPanel.tsx index faf7d4dc6..4b0b175ac 100644 --- a/web/console/src/modules/persistentEvent/components/PersistentEventHeadPanel.tsx +++ b/web/console/src/modules/persistentEvent/components/PersistentEventHeadPanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect } from 'react-redux'; diff --git a/web/console/src/modules/persistentEvent/constants/ActionType.ts b/web/console/src/modules/persistentEvent/constants/ActionType.ts index 1366fc29c..5fea1b26d 100644 --- a/web/console/src/modules/persistentEvent/constants/ActionType.ts +++ b/web/console/src/modules/persistentEvent/constants/ActionType.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ /** 是否为国际版 */ export const IsI18n = 'IsI18n'; diff --git a/web/console/src/modules/persistentEvent/constants/Config.ts b/web/console/src/modules/persistentEvent/constants/Config.ts index aea7a7277..654f3d256 100644 --- a/web/console/src/modules/persistentEvent/constants/Config.ts +++ b/web/console/src/modules/persistentEvent/constants/Config.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { t, Trans } from '@tencent/tea-app/lib/i18n'; /** ========================= start FFRedux的相关配置 ======================== */ diff --git a/web/console/src/modules/persistentEvent/constants/initState.ts b/web/console/src/modules/persistentEvent/constants/initState.ts index 182a24b21..5d6c1f728 100644 --- a/web/console/src/modules/persistentEvent/constants/initState.ts +++ b/web/console/src/modules/persistentEvent/constants/initState.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { t, Trans } from '@tencent/tea-app/lib/i18n'; export const initRegionInfo = { diff --git a/web/console/src/modules/persistentEvent/index.tsx b/web/console/src/modules/persistentEvent/index.tsx index 8f2b5b319..5bda97038 100644 --- a/web/console/src/modules/persistentEvent/index.tsx +++ b/web/console/src/modules/persistentEvent/index.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { PersistentEventAppContainer } from './components/PersistentEventApp'; diff --git a/web/console/src/modules/persistentEvent/models/PeEdit.ts b/web/console/src/modules/persistentEvent/models/PeEdit.ts index f7b5ad8c5..77a359653 100644 --- a/web/console/src/modules/persistentEvent/models/PeEdit.ts +++ b/web/console/src/modules/persistentEvent/models/PeEdit.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { Validation } from '../../common/models/Validation'; export interface PeEdit { diff --git a/web/console/src/modules/persistentEvent/models/RootState.ts b/web/console/src/modules/persistentEvent/models/RootState.ts index beec66f7f..acfc8cf7f 100644 --- a/web/console/src/modules/persistentEvent/models/RootState.ts +++ b/web/console/src/modules/persistentEvent/models/RootState.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { FetcherState, FFListModel, QueryState, RecordSet, WorkflowState } from '@tencent/ff-redux'; import { RouteState } from '../../../../helpers'; diff --git a/web/console/src/modules/persistentEvent/models/index.ts b/web/console/src/modules/persistentEvent/models/index.ts index 671b5d5c7..23221ce0a 100644 --- a/web/console/src/modules/persistentEvent/models/index.ts +++ b/web/console/src/modules/persistentEvent/models/index.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export { RootState, FetchPeList } from './RootState'; export { PeEdit, PeEditJSONYaml, EsInfo, PersistentBackEnd } from './PeEdit'; export { CreateResource } from '../../common/models'; diff --git a/web/console/src/modules/persistentEvent/reducers/PeEditReducer.ts b/web/console/src/modules/persistentEvent/reducers/PeEditReducer.ts index a55cb4612..7ff4087b3 100644 --- a/web/console/src/modules/persistentEvent/reducers/PeEditReducer.ts +++ b/web/console/src/modules/persistentEvent/reducers/PeEditReducer.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { combineReducers } from 'redux'; import { RecordSet, reduceToPayload } from '@tencent/ff-redux'; diff --git a/web/console/src/modules/persistentEvent/reducers/RootReducer.ts b/web/console/src/modules/persistentEvent/reducers/RootReducer.ts index c43a78dca..9a67ff7fc 100644 --- a/web/console/src/modules/persistentEvent/reducers/RootReducer.ts +++ b/web/console/src/modules/persistentEvent/reducers/RootReducer.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { combineReducers } from 'redux'; import { diff --git a/web/console/src/modules/persistentEvent/router.ts b/web/console/src/modules/persistentEvent/router.ts index b0d41a128..332dc9523 100644 --- a/web/console/src/modules/persistentEvent/router.ts +++ b/web/console/src/modules/persistentEvent/router.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { Router } from '../../../helpers/Router'; /** diff --git a/web/console/src/modules/persistentEvent/stores/RootStore.ts b/web/console/src/modules/persistentEvent/stores/RootStore.ts index 528dcd48c..83ff139b0 100644 --- a/web/console/src/modules/persistentEvent/stores/RootStore.ts +++ b/web/console/src/modules/persistentEvent/stores/RootStore.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { createStore } from '@tencent/ff-redux'; import { generateResetableReducer } from '../../../../helpers'; diff --git a/web/console/src/modules/project/UserManageWebAPI.ts b/web/console/src/modules/project/UserManageWebAPI.ts index af5ad37df..0e1f87c90 100644 --- a/web/console/src/modules/project/UserManageWebAPI.ts +++ b/web/console/src/modules/project/UserManageWebAPI.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { QueryState, RecordSet } from '@tencent/ff-redux'; import { Method, diff --git a/web/console/src/modules/project/WebAPI.ts b/web/console/src/modules/project/WebAPI.ts index 3542f2bea..c76cab619 100644 --- a/web/console/src/modules/project/WebAPI.ts +++ b/web/console/src/modules/project/WebAPI.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { collectionPaging, OperationResult, QueryState, RecordSet, uuid } from '@tencent/ff-redux'; import { resourceConfig } from '../../../config/resourceConfig'; diff --git a/web/console/src/modules/project/actions/bussinessActions.ts b/web/console/src/modules/project/actions/bussinessActions.ts index 634f68cef..1b55d2fa3 100644 --- a/web/console/src/modules/project/actions/bussinessActions.ts +++ b/web/console/src/modules/project/actions/bussinessActions.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { UserManagedProject, UserManagedProjectFilter } from './../models/Project'; import { User, UserFilter, UserInfo } from './../models/User'; import { FFReduxActionName } from './../constants/Config'; diff --git a/web/console/src/modules/project/actions/clusterActions.ts b/web/console/src/modules/project/actions/clusterActions.ts index 01822e74e..6ff1bfea8 100644 --- a/web/console/src/modules/project/actions/clusterActions.ts +++ b/web/console/src/modules/project/actions/clusterActions.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { createFFListActions, extend } from '@tencent/ff-redux'; import { Cluster, ClusterFilter, RootState } from '../models'; diff --git a/web/console/src/modules/project/actions/detailActions.ts b/web/console/src/modules/project/actions/detailActions.ts index 72efd1144..d8f7733d4 100644 --- a/web/console/src/modules/project/actions/detailActions.ts +++ b/web/console/src/modules/project/actions/detailActions.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { createFFListActions } from '@tencent/ff-redux'; import { Project, ProjectEdition, ProjectFilter, RootState } from '../models'; diff --git a/web/console/src/modules/project/actions/index.ts b/web/console/src/modules/project/actions/index.ts index 8d467e4e0..514a47cf8 100644 --- a/web/console/src/modules/project/actions/index.ts +++ b/web/console/src/modules/project/actions/index.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { bussinessActions } from './bussinessActions'; import { detailActions } from './detailActions'; import { projectActions } from './projectActions'; diff --git a/web/console/src/modules/project/actions/managerActions.ts b/web/console/src/modules/project/actions/managerActions.ts index 46705f925..7453bd835 100644 --- a/web/console/src/modules/project/actions/managerActions.ts +++ b/web/console/src/modules/project/actions/managerActions.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { createFFListActions, extend, diff --git a/web/console/src/modules/project/actions/namespaceActions.ts b/web/console/src/modules/project/actions/namespaceActions.ts index 9f3578d66..fb9f672f1 100644 --- a/web/console/src/modules/project/actions/namespaceActions.ts +++ b/web/console/src/modules/project/actions/namespaceActions.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { FFReduxActionName } from './../constants/Config'; import { K8SUNIT, valueLabels1000, valueLabels1024 } from '@helper/k8sUnitUtil'; import { diff --git a/web/console/src/modules/project/actions/policy/associateActions.ts b/web/console/src/modules/project/actions/policy/associateActions.ts index 0fdc7b85b..838421598 100644 --- a/web/console/src/modules/project/actions/policy/associateActions.ts +++ b/web/console/src/modules/project/actions/policy/associateActions.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { extend, generateWorkflowActionCreator, diff --git a/web/console/src/modules/project/actions/policy/index.ts b/web/console/src/modules/project/actions/policy/index.ts index acd10621f..8fc34d0be 100644 --- a/web/console/src/modules/project/actions/policy/index.ts +++ b/web/console/src/modules/project/actions/policy/index.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { associateActions } from './associateActions'; export const policyActions = { diff --git a/web/console/src/modules/project/actions/projectActions.ts b/web/console/src/modules/project/actions/projectActions.ts index 3d9f2059e..5c3ce2a8a 100644 --- a/web/console/src/modules/project/actions/projectActions.ts +++ b/web/console/src/modules/project/actions/projectActions.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { detailActions } from './detailActions'; import { ProjectUserMap } from './../models/Project'; import { FFReduxActionName } from './../constants/Config'; diff --git a/web/console/src/modules/project/actions/regionActions.ts b/web/console/src/modules/project/actions/regionActions.ts index 327bb40f4..2d31d43a6 100644 --- a/web/console/src/modules/project/actions/regionActions.ts +++ b/web/console/src/modules/project/actions/regionActions.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { createFFListActions, extend } from '@tencent/ff-redux'; import { Region, RegionFilter, RootState } from '../models'; diff --git a/web/console/src/modules/project/actions/userActions.ts b/web/console/src/modules/project/actions/userActions.ts index b76dc03fd..36de7f94f 100644 --- a/web/console/src/modules/project/actions/userActions.ts +++ b/web/console/src/modules/project/actions/userActions.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { resourceConfig } from '@config'; import { CommonAPI, ResourceFilter, ResourceInfo } from '@src/modules/common'; import { diff --git a/web/console/src/modules/project/components/CreateNamespacePanel.tsx b/web/console/src/modules/project/components/CreateNamespacePanel.tsx index 6f1dfb0a3..ec54dcb0f 100644 --- a/web/console/src/modules/project/components/CreateNamespacePanel.tsx +++ b/web/console/src/modules/project/components/CreateNamespacePanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect } from 'react-redux'; diff --git a/web/console/src/modules/project/components/CreateProjectPanel.tsx b/web/console/src/modules/project/components/CreateProjectPanel.tsx index 2a43ef98a..37efeaef8 100644 --- a/web/console/src/modules/project/components/CreateProjectPanel.tsx +++ b/web/console/src/modules/project/components/CreateProjectPanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect } from 'react-redux'; diff --git a/web/console/src/modules/project/components/CreateProjectResourceLimitPanel.tsx b/web/console/src/modules/project/components/CreateProjectResourceLimitPanel.tsx index d1b34c6a1..eea02ede7 100644 --- a/web/console/src/modules/project/components/CreateProjectResourceLimitPanel.tsx +++ b/web/console/src/modules/project/components/CreateProjectResourceLimitPanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { K8SUNIT, valueLabels1000, valueLabels1024 } from '@helper/k8sUnitUtil'; diff --git a/web/console/src/modules/project/components/DetailSubProjectActionPanel.tsx b/web/console/src/modules/project/components/DetailSubProjectActionPanel.tsx index 28380ff35..63a8170e2 100644 --- a/web/console/src/modules/project/components/DetailSubProjectActionPanel.tsx +++ b/web/console/src/modules/project/components/DetailSubProjectActionPanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect } from 'react-redux'; diff --git a/web/console/src/modules/project/components/DetailSubProjectPanel.tsx b/web/console/src/modules/project/components/DetailSubProjectPanel.tsx index 57595e7be..af37b1a1e 100644 --- a/web/console/src/modules/project/components/DetailSubProjectPanel.tsx +++ b/web/console/src/modules/project/components/DetailSubProjectPanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect } from 'react-redux'; diff --git a/web/console/src/modules/project/components/EditProjectManagerPanel.tsx b/web/console/src/modules/project/components/EditProjectManagerPanel.tsx index b531e044c..d87486ac2 100644 --- a/web/console/src/modules/project/components/EditProjectManagerPanel.tsx +++ b/web/console/src/modules/project/components/EditProjectManagerPanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { t } from '@tencent/tea-app/lib/i18n'; import * as React from 'react'; import { TransferTable, TransferTableProps } from '../../common/components'; diff --git a/web/console/src/modules/project/components/EditProjectNamePanel.tsx b/web/console/src/modules/project/components/EditProjectNamePanel.tsx index 8d9b6750a..0fd3233f6 100644 --- a/web/console/src/modules/project/components/EditProjectNamePanel.tsx +++ b/web/console/src/modules/project/components/EditProjectNamePanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { FormPanel } from '@tencent/ff-component'; import { t } from '@tencent/tea-app/lib/i18n'; import * as React from 'react'; diff --git a/web/console/src/modules/project/components/NamespaceActionPanel.tsx b/web/console/src/modules/project/components/NamespaceActionPanel.tsx index 7fdd1465c..f81111725 100644 --- a/web/console/src/modules/project/components/NamespaceActionPanel.tsx +++ b/web/console/src/modules/project/components/NamespaceActionPanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect } from 'react-redux'; diff --git a/web/console/src/modules/project/components/NamespaceTablePanel.tsx b/web/console/src/modules/project/components/NamespaceTablePanel.tsx index ff0f8a5cc..98887cab5 100644 --- a/web/console/src/modules/project/components/NamespaceTablePanel.tsx +++ b/web/console/src/modules/project/components/NamespaceTablePanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect } from 'react-redux'; diff --git a/web/console/src/modules/project/components/ProjectActionPanel.project.tsx b/web/console/src/modules/project/components/ProjectActionPanel.project.tsx index 3739db0a8..7965fdf9a 100644 --- a/web/console/src/modules/project/components/ProjectActionPanel.project.tsx +++ b/web/console/src/modules/project/components/ProjectActionPanel.project.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect } from 'react-redux'; diff --git a/web/console/src/modules/project/components/ProjectActionPanel.tsx b/web/console/src/modules/project/components/ProjectActionPanel.tsx index eff102722..2fd9442a9 100644 --- a/web/console/src/modules/project/components/ProjectActionPanel.tsx +++ b/web/console/src/modules/project/components/ProjectActionPanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect } from 'react-redux'; diff --git a/web/console/src/modules/project/components/ProjectApp.tsx b/web/console/src/modules/project/components/ProjectApp.tsx index da4912b00..716d377f9 100644 --- a/web/console/src/modules/project/components/ProjectApp.tsx +++ b/web/console/src/modules/project/components/ProjectApp.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect, Provider } from 'react-redux'; diff --git a/web/console/src/modules/project/components/ProjectDetail.tsx b/web/console/src/modules/project/components/ProjectDetail.tsx index 9f2bc0257..c69f9a4a9 100644 --- a/web/console/src/modules/project/components/ProjectDetail.tsx +++ b/web/console/src/modules/project/components/ProjectDetail.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect } from 'react-redux'; import { ContentView, TabPanel, Tabs } from '@tea/component'; diff --git a/web/console/src/modules/project/components/ProjectDetailPanel.tsx b/web/console/src/modules/project/components/ProjectDetailPanel.tsx index 87b914130..52faf5994 100644 --- a/web/console/src/modules/project/components/ProjectDetailPanel.tsx +++ b/web/console/src/modules/project/components/ProjectDetailPanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { K8SUNIT, valueLabels1000, valueLabels1024 } from '@helper/k8sUnitUtil'; diff --git a/web/console/src/modules/project/components/ProjectDetailResourcePanel.tsx b/web/console/src/modules/project/components/ProjectDetailResourcePanel.tsx index 18239432a..4eb3bd074 100644 --- a/web/console/src/modules/project/components/ProjectDetailResourcePanel.tsx +++ b/web/console/src/modules/project/components/ProjectDetailResourcePanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { K8SUNIT, valueLabels1000, valueLabels1024 } from '@helper/k8sUnitUtil'; diff --git a/web/console/src/modules/project/components/ProjectHeadPanel.tsx b/web/console/src/modules/project/components/ProjectHeadPanel.tsx index f4dba7065..c8e43f6fd 100644 --- a/web/console/src/modules/project/components/ProjectHeadPanel.tsx +++ b/web/console/src/modules/project/components/ProjectHeadPanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { RootProps } from './ProjectApp'; import { t, Trans } from '@tencent/tea-app/lib/i18n'; diff --git a/web/console/src/modules/project/components/ProjectTablePanel.tsx b/web/console/src/modules/project/components/ProjectTablePanel.tsx index a325b9c97..372f0f73f 100644 --- a/web/console/src/modules/project/components/ProjectTablePanel.tsx +++ b/web/console/src/modules/project/components/ProjectTablePanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect } from 'react-redux'; diff --git a/web/console/src/modules/project/components/SelectExistProjectDialog.tsx b/web/console/src/modules/project/components/SelectExistProjectDialog.tsx index f87a58f44..56da20f00 100644 --- a/web/console/src/modules/project/components/SelectExistProjectDialog.tsx +++ b/web/console/src/modules/project/components/SelectExistProjectDialog.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect } from 'react-redux'; diff --git a/web/console/src/modules/project/components/SubpageHeadPanel.tsx b/web/console/src/modules/project/components/SubpageHeadPanel.tsx index 36699b4cf..7bae754a5 100644 --- a/web/console/src/modules/project/components/SubpageHeadPanel.tsx +++ b/web/console/src/modules/project/components/SubpageHeadPanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect } from 'react-redux'; diff --git a/web/console/src/modules/project/components/user/UserPanel.tsx b/web/console/src/modules/project/components/user/UserPanel.tsx index cbe1fad0c..3802b68ef 100644 --- a/web/console/src/modules/project/components/user/UserPanel.tsx +++ b/web/console/src/modules/project/components/user/UserPanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { useDispatch, useSelector } from 'react-redux'; import { bindActionCreators } from '@tencent/ff-redux'; diff --git a/web/console/src/modules/project/components/user/create/UserCreate.tsx b/web/console/src/modules/project/components/user/create/UserCreate.tsx index 4e9c36711..2d322a25f 100644 --- a/web/console/src/modules/project/components/user/create/UserCreate.tsx +++ b/web/console/src/modules/project/components/user/create/UserCreate.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { useSelector, useDispatch } from 'react-redux'; import { t, Trans } from '@tencent/tea-app/lib/i18n'; diff --git a/web/console/src/modules/project/components/user/list/RoleModifyDialog.tsx b/web/console/src/modules/project/components/user/list/RoleModifyDialog.tsx index 2139bb395..782d262a1 100644 --- a/web/console/src/modules/project/components/user/list/RoleModifyDialog.tsx +++ b/web/console/src/modules/project/components/user/list/RoleModifyDialog.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { useSelector, useDispatch } from 'react-redux'; import { Button, Modal, Form, Text, Radio, Transfer, Table, SearchBox } from '@tea/component'; diff --git a/web/console/src/modules/project/components/user/list/UserActionPanel.tsx b/web/console/src/modules/project/components/user/list/UserActionPanel.tsx index 302cf4c34..fbc774978 100644 --- a/web/console/src/modules/project/components/user/list/UserActionPanel.tsx +++ b/web/console/src/modules/project/components/user/list/UserActionPanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { useDispatch, useSelector } from 'react-redux'; import { Justify, Icon, Table, Button, SearchBox } from '@tea/component'; diff --git a/web/console/src/modules/project/components/user/list/UserList.tsx b/web/console/src/modules/project/components/user/list/UserList.tsx index 880f189f8..4f959f6a0 100644 --- a/web/console/src/modules/project/components/user/list/UserList.tsx +++ b/web/console/src/modules/project/components/user/list/UserList.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { useDispatch, useSelector } from 'react-redux'; import { t, Trans } from '@tencent/tea-app/lib/i18n'; diff --git a/web/console/src/modules/project/components/user/list/UserTablePanel.tsx b/web/console/src/modules/project/components/user/list/UserTablePanel.tsx index f4275059c..a384c1de9 100644 --- a/web/console/src/modules/project/components/user/list/UserTablePanel.tsx +++ b/web/console/src/modules/project/components/user/list/UserTablePanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { useDispatch, useSelector } from 'react-redux'; diff --git a/web/console/src/modules/project/constants/ActionType.ts b/web/console/src/modules/project/constants/ActionType.ts index c0f08f211..4a03e8a40 100644 --- a/web/console/src/modules/project/constants/ActionType.ts +++ b/web/console/src/modules/project/constants/ActionType.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ /** 业务的相关操作 */ export const CreateProject = 'CreateProject'; export const EditProjectName = 'EditProjectName'; diff --git a/web/console/src/modules/project/constants/Config.ts b/web/console/src/modules/project/constants/Config.ts index 028187dd2..9f39565e1 100644 --- a/web/console/src/modules/project/constants/Config.ts +++ b/web/console/src/modules/project/constants/Config.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { uuid } from '@tencent/ff-redux'; import { t, Trans } from '@tencent/tea-app/lib/i18n'; diff --git a/web/console/src/modules/project/constants/initState.ts b/web/console/src/modules/project/constants/initState.ts index af2896d3f..eba97c142 100644 --- a/web/console/src/modules/project/constants/initState.ts +++ b/web/console/src/modules/project/constants/initState.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { initValidator } from '../../common/models'; import { uuid } from '@tencent/ff-redux'; diff --git a/web/console/src/modules/project/index.tsx b/web/console/src/modules/project/index.tsx index 35749fbeb..4e36d84d5 100644 --- a/web/console/src/modules/project/index.tsx +++ b/web/console/src/modules/project/index.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { ProjectAppContainer } from './components/ProjectApp'; diff --git a/web/console/src/modules/project/models/Cluster.ts b/web/console/src/modules/project/models/Cluster.ts index d388c1d3f..6ee80e781 100644 --- a/web/console/src/modules/project/models/Cluster.ts +++ b/web/console/src/modules/project/models/Cluster.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { Identifiable } from '@tencent/ff-redux'; export interface Cluster extends Identifiable { diff --git a/web/console/src/modules/project/models/Manager.ts b/web/console/src/modules/project/models/Manager.ts index 28c3a9a26..dc9bbc7e5 100644 --- a/web/console/src/modules/project/models/Manager.ts +++ b/web/console/src/modules/project/models/Manager.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { Identifiable } from '@tencent/ff-redux'; export interface Manager extends Identifiable { diff --git a/web/console/src/modules/project/models/Namespace.ts b/web/console/src/modules/project/models/Namespace.ts index 9c41854be..a47e9e321 100644 --- a/web/console/src/modules/project/models/Namespace.ts +++ b/web/console/src/modules/project/models/Namespace.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { Identifiable } from '@tencent/ff-redux'; import { Validation } from '../../common/models'; diff --git a/web/console/src/modules/project/models/Policy.ts b/web/console/src/modules/project/models/Policy.ts index d5c15c72c..d772d076d 100644 --- a/web/console/src/modules/project/models/Policy.ts +++ b/web/console/src/modules/project/models/Policy.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { Identifiable } from '@tencent/ff-redux'; import { Validation } from '../../common/models'; diff --git a/web/console/src/modules/project/models/Project.ts b/web/console/src/modules/project/models/Project.ts index 82cdf0a88..8723d113f 100644 --- a/web/console/src/modules/project/models/Project.ts +++ b/web/console/src/modules/project/models/Project.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { Identifiable } from '@tencent/ff-redux'; import { Validation } from '../../common/models'; diff --git a/web/console/src/modules/project/models/Region.ts b/web/console/src/modules/project/models/Region.ts index 460ba0f3d..390df0604 100644 --- a/web/console/src/modules/project/models/Region.ts +++ b/web/console/src/modules/project/models/Region.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { Identifiable } from '@tencent/ff-redux'; export interface Region extends Identifiable { diff --git a/web/console/src/modules/project/models/RootState.ts b/web/console/src/modules/project/models/RootState.ts index fd0128063..505623da9 100644 --- a/web/console/src/modules/project/models/RootState.ts +++ b/web/console/src/modules/project/models/RootState.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { FetcherState, FFListModel, OperationResult, RecordSet, WorkflowState } from '@tencent/ff-redux'; import { RouteState } from '../../../../helpers'; diff --git a/web/console/src/modules/project/models/Strategy.ts b/web/console/src/modules/project/models/Strategy.ts index 0b7fc4d3d..c09bdb379 100644 --- a/web/console/src/modules/project/models/Strategy.ts +++ b/web/console/src/modules/project/models/Strategy.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { Identifiable } from '@tencent/ff-redux'; export interface Strategy extends Identifiable { diff --git a/web/console/src/modules/project/models/User.ts b/web/console/src/modules/project/models/User.ts index 90e42d007..a17930548 100644 --- a/web/console/src/modules/project/models/User.ts +++ b/web/console/src/modules/project/models/User.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { Identifiable } from '@tencent/ff-redux'; export interface User extends Identifiable { diff --git a/web/console/src/modules/project/models/index.ts b/web/console/src/modules/project/models/index.ts index 13dae16c1..911066ffb 100644 --- a/web/console/src/modules/project/models/index.ts +++ b/web/console/src/modules/project/models/index.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export { RootState } from './RootState'; export { Project, ProjectFilter, ProjectEdition } from './Project'; export { Manager, ManagerFilter } from './Manager'; diff --git a/web/console/src/modules/project/reducers/RootReducer.ts b/web/console/src/modules/project/reducers/RootReducer.ts index f50c5afd4..86e06ccd2 100644 --- a/web/console/src/modules/project/reducers/RootReducer.ts +++ b/web/console/src/modules/project/reducers/RootReducer.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { combineReducers } from 'redux'; import { diff --git a/web/console/src/modules/project/router.project.ts b/web/console/src/modules/project/router.project.ts index cf57a2a96..eeae0c778 100644 --- a/web/console/src/modules/project/router.project.ts +++ b/web/console/src/modules/project/router.project.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { Router } from '../../../helpers/Router'; /** diff --git a/web/console/src/modules/project/router.ts b/web/console/src/modules/project/router.ts index c918740a3..2c8916bb4 100644 --- a/web/console/src/modules/project/router.ts +++ b/web/console/src/modules/project/router.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { Router } from '../../../helpers/Router'; /** diff --git a/web/console/src/modules/project/stores/RootStore.ts b/web/console/src/modules/project/stores/RootStore.ts index 528dcd48c..83ff139b0 100644 --- a/web/console/src/modules/project/stores/RootStore.ts +++ b/web/console/src/modules/project/stores/RootStore.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { createStore } from '@tencent/ff-redux'; import { generateResetableReducer } from '../../../../helpers'; diff --git a/web/console/src/modules/registry/WebAPI.ts b/web/console/src/modules/registry/WebAPI.ts index 8087c27e6..2fd21ff6a 100644 --- a/web/console/src/modules/registry/WebAPI.ts +++ b/web/console/src/modules/registry/WebAPI.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { OperationResult, QueryState, RecordSet } from '@tencent/ff-redux'; import { diff --git a/web/console/src/modules/registry/actions/apiKeyActions.ts b/web/console/src/modules/registry/actions/apiKeyActions.ts index d8701aca1..d761b6fa2 100644 --- a/web/console/src/modules/registry/actions/apiKeyActions.ts +++ b/web/console/src/modules/registry/actions/apiKeyActions.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { createFFListActions, extend, generateWorkflowActionCreator, isSuccessWorkflow, OperationTrigger } from '@tencent/ff-redux'; diff --git a/web/console/src/modules/registry/actions/app/createActions.ts b/web/console/src/modules/registry/actions/app/createActions.ts index eef714d53..2148d5a8c 100644 --- a/web/console/src/modules/registry/actions/app/createActions.ts +++ b/web/console/src/modules/registry/actions/app/createActions.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { ReduxAction, extend, diff --git a/web/console/src/modules/registry/actions/app/index.ts b/web/console/src/modules/registry/actions/app/index.ts index 18424a92c..44f5311d0 100644 --- a/web/console/src/modules/registry/actions/app/index.ts +++ b/web/console/src/modules/registry/actions/app/index.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { createActions } from './createActions'; export const appActions = { diff --git a/web/console/src/modules/registry/actions/chart/detailActions.ts b/web/console/src/modules/registry/actions/chart/detailActions.ts index 474d68d05..a8aa94aa2 100644 --- a/web/console/src/modules/registry/actions/chart/detailActions.ts +++ b/web/console/src/modules/registry/actions/chart/detailActions.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { ReduxAction, extend, diff --git a/web/console/src/modules/registry/actions/chart/index.ts b/web/console/src/modules/registry/actions/chart/index.ts index 460d4a87c..aae416194 100644 --- a/web/console/src/modules/registry/actions/chart/index.ts +++ b/web/console/src/modules/registry/actions/chart/index.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { listActions } from './listActions'; // import { createActions } from './createActions'; import { detailActions } from './detailActions'; diff --git a/web/console/src/modules/registry/actions/chart/listActions.ts b/web/console/src/modules/registry/actions/chart/listActions.ts index b811779ca..ed80c73de 100644 --- a/web/console/src/modules/registry/actions/chart/listActions.ts +++ b/web/console/src/modules/registry/actions/chart/listActions.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { extend, generateWorkflowActionCreator, diff --git a/web/console/src/modules/registry/actions/chartActions.ts b/web/console/src/modules/registry/actions/chartActions.ts index 449676d3b..f44364beb 100644 --- a/web/console/src/modules/registry/actions/chartActions.ts +++ b/web/console/src/modules/registry/actions/chartActions.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { initValidator } from './../../common/models/Validation'; import { extend, diff --git a/web/console/src/modules/registry/actions/chartGroup/createActions.ts b/web/console/src/modules/registry/actions/chartGroup/createActions.ts index a9f4d7d6b..a49b5e8f7 100644 --- a/web/console/src/modules/registry/actions/chartGroup/createActions.ts +++ b/web/console/src/modules/registry/actions/chartGroup/createActions.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { ReduxAction, extend, generateWorkflowActionCreator, OperationTrigger, isSuccessWorkflow } from '@tencent/ff-redux'; import { ChartGroup, RootState } from '../../models/index'; diff --git a/web/console/src/modules/registry/actions/chartGroup/detailActions.ts b/web/console/src/modules/registry/actions/chartGroup/detailActions.ts index 28a947702..57160a648 100644 --- a/web/console/src/modules/registry/actions/chartGroup/detailActions.ts +++ b/web/console/src/modules/registry/actions/chartGroup/detailActions.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { ReduxAction, extend, diff --git a/web/console/src/modules/registry/actions/chartGroup/index.ts b/web/console/src/modules/registry/actions/chartGroup/index.ts index 17fe37269..7eb558f1f 100644 --- a/web/console/src/modules/registry/actions/chartGroup/index.ts +++ b/web/console/src/modules/registry/actions/chartGroup/index.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { listActions } from './listActions'; import { createActions } from './createActions'; import { detailActions } from './detailActions'; diff --git a/web/console/src/modules/registry/actions/chartGroup/listActions.ts b/web/console/src/modules/registry/actions/chartGroup/listActions.ts index e027fb6a2..1ed512223 100644 --- a/web/console/src/modules/registry/actions/chartGroup/listActions.ts +++ b/web/console/src/modules/registry/actions/chartGroup/listActions.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { extend, generateWorkflowActionCreator, diff --git a/web/console/src/modules/registry/actions/chartInsActions.ts b/web/console/src/modules/registry/actions/chartInsActions.ts index e66420909..f17bb8837 100644 --- a/web/console/src/modules/registry/actions/chartInsActions.ts +++ b/web/console/src/modules/registry/actions/chartInsActions.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { extend, createFFListActions } from '@tencent/ff-redux'; import { RootState, ChartIns, ChartInsFilter } from '../models'; import * as ActionType from '../constants/ActionType'; diff --git a/web/console/src/modules/registry/actions/cluster/index.ts b/web/console/src/modules/registry/actions/cluster/index.ts index b7786fac0..d22d7590d 100644 --- a/web/console/src/modules/registry/actions/cluster/index.ts +++ b/web/console/src/modules/registry/actions/cluster/index.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { listActions } from './listActions'; export const clusterActions = { diff --git a/web/console/src/modules/registry/actions/cluster/listActions.ts b/web/console/src/modules/registry/actions/cluster/listActions.ts index cdbb7c628..4de0a49ea 100644 --- a/web/console/src/modules/registry/actions/cluster/listActions.ts +++ b/web/console/src/modules/registry/actions/cluster/listActions.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { extend, generateWorkflowActionCreator, diff --git a/web/console/src/modules/registry/actions/imageActions.ts b/web/console/src/modules/registry/actions/imageActions.ts index 71821a018..425c09bad 100644 --- a/web/console/src/modules/registry/actions/imageActions.ts +++ b/web/console/src/modules/registry/actions/imageActions.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { createFFListActions, extend, generateWorkflowActionCreator, isSuccessWorkflow, OperationTrigger } from '@tencent/ff-redux'; diff --git a/web/console/src/modules/registry/actions/index.ts b/web/console/src/modules/registry/actions/index.ts index b21e193b6..7c7ae87a3 100644 --- a/web/console/src/modules/registry/actions/index.ts +++ b/web/console/src/modules/registry/actions/index.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { apiKeyActions } from './apiKeyActions'; import { repoActions } from './repoActions'; import { imageActions } from './imageActions'; diff --git a/web/console/src/modules/registry/actions/namespace/index.ts b/web/console/src/modules/registry/actions/namespace/index.ts index 2032c5dfb..459589141 100644 --- a/web/console/src/modules/registry/actions/namespace/index.ts +++ b/web/console/src/modules/registry/actions/namespace/index.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { listActions } from './listActions'; import { projectNamespaceListActions } from './projectNamespaceListActions'; diff --git a/web/console/src/modules/registry/actions/namespace/listActions.ts b/web/console/src/modules/registry/actions/namespace/listActions.ts index e4841db3e..1bbafe17c 100644 --- a/web/console/src/modules/registry/actions/namespace/listActions.ts +++ b/web/console/src/modules/registry/actions/namespace/listActions.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { extend, generateWorkflowActionCreator, diff --git a/web/console/src/modules/registry/actions/namespace/projectNamespaceListActions.ts b/web/console/src/modules/registry/actions/namespace/projectNamespaceListActions.ts index 5e947b529..1f53851c3 100644 --- a/web/console/src/modules/registry/actions/namespace/projectNamespaceListActions.ts +++ b/web/console/src/modules/registry/actions/namespace/projectNamespaceListActions.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { extend, generateWorkflowActionCreator, diff --git a/web/console/src/modules/registry/actions/project/index.ts b/web/console/src/modules/registry/actions/project/index.ts index e0a240d9c..c82b305f5 100644 --- a/web/console/src/modules/registry/actions/project/index.ts +++ b/web/console/src/modules/registry/actions/project/index.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { listActions } from './listActions'; export const projectActions = { diff --git a/web/console/src/modules/registry/actions/project/listActions.ts b/web/console/src/modules/registry/actions/project/listActions.ts index f0b74cfc2..69fd9b6bb 100644 --- a/web/console/src/modules/registry/actions/project/listActions.ts +++ b/web/console/src/modules/registry/actions/project/listActions.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { extend, createFFListActions } from '@tencent/ff-redux'; import { RootState, Project, ChartInfoFilter, ProjectFilter } from '../../models'; import * as ActionTypes from '../../constants/ActionType'; diff --git a/web/console/src/modules/registry/actions/repoActions.ts b/web/console/src/modules/registry/actions/repoActions.ts index 158e82e7d..a1c639622 100644 --- a/web/console/src/modules/registry/actions/repoActions.ts +++ b/web/console/src/modules/registry/actions/repoActions.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { createFFListActions, extend, generateWorkflowActionCreator, isSuccessWorkflow, OperationTrigger } from '@tencent/ff-redux'; diff --git a/web/console/src/modules/registry/actions/user/associateActions.ts b/web/console/src/modules/registry/actions/user/associateActions.ts index 111e87489..7c10986c0 100644 --- a/web/console/src/modules/registry/actions/user/associateActions.ts +++ b/web/console/src/modules/registry/actions/user/associateActions.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { extend, generateWorkflowActionCreator, diff --git a/web/console/src/modules/registry/actions/user/detailActions.ts b/web/console/src/modules/registry/actions/user/detailActions.ts index 9a87671f8..4cd883f20 100644 --- a/web/console/src/modules/registry/actions/user/detailActions.ts +++ b/web/console/src/modules/registry/actions/user/detailActions.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { extend } from '@tencent/ff-redux'; import { RootState, UserInfo } from '../../models'; import * as ActionTypes from '../../constants/ActionType'; diff --git a/web/console/src/modules/registry/actions/user/index.ts b/web/console/src/modules/registry/actions/user/index.ts index a12e5a871..056fe6e99 100644 --- a/web/console/src/modules/registry/actions/user/index.ts +++ b/web/console/src/modules/registry/actions/user/index.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { detailActions } from './detailActions'; import { associateActions } from './associateActions'; diff --git a/web/console/src/modules/registry/components/AppCenter.tsx b/web/console/src/modules/registry/components/AppCenter.tsx index ea4994f1a..85906203e 100644 --- a/web/console/src/modules/registry/components/AppCenter.tsx +++ b/web/console/src/modules/registry/components/AppCenter.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect, Provider } from 'react-redux'; import { bindActionCreators } from '@tencent/ff-redux'; diff --git a/web/console/src/modules/registry/components/ChartUsageGuideDialog.tsx b/web/console/src/modules/registry/components/ChartUsageGuideDialog.tsx index b6e0a263c..252834d79 100644 --- a/web/console/src/modules/registry/components/ChartUsageGuideDialog.tsx +++ b/web/console/src/modules/registry/components/ChartUsageGuideDialog.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect, Provider } from 'react-redux'; import { bindActionCreators } from '@tencent/ff-redux'; diff --git a/web/console/src/modules/registry/components/RegistryApp.tsx b/web/console/src/modules/registry/components/RegistryApp.tsx index 9f51a8675..f370e0b15 100644 --- a/web/console/src/modules/registry/components/RegistryApp.tsx +++ b/web/console/src/modules/registry/components/RegistryApp.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect, Provider } from 'react-redux'; diff --git a/web/console/src/modules/registry/components/apikey/ApiKeyActionPanel.tsx b/web/console/src/modules/registry/components/apikey/ApiKeyActionPanel.tsx index d8b4b0c58..d39ec436c 100644 --- a/web/console/src/modules/registry/components/apikey/ApiKeyActionPanel.tsx +++ b/web/console/src/modules/registry/components/apikey/ApiKeyActionPanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect } from 'react-redux'; diff --git a/web/console/src/modules/registry/components/apikey/ApiKeyContainer.tsx b/web/console/src/modules/registry/components/apikey/ApiKeyContainer.tsx index 13dd997c7..c055821e7 100644 --- a/web/console/src/modules/registry/components/apikey/ApiKeyContainer.tsx +++ b/web/console/src/modules/registry/components/apikey/ApiKeyContainer.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { t, Trans } from '@tencent/tea-app/lib/i18n'; diff --git a/web/console/src/modules/registry/components/apikey/ApiKeyTablePanel.tsx b/web/console/src/modules/registry/components/apikey/ApiKeyTablePanel.tsx index bb0c0e775..5d403469e 100644 --- a/web/console/src/modules/registry/components/apikey/ApiKeyTablePanel.tsx +++ b/web/console/src/modules/registry/components/apikey/ApiKeyTablePanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { t, Trans } from '@tencent/tea-app/lib/i18n'; diff --git a/web/console/src/modules/registry/components/apikey/CreateApiKeyPanel.tsx b/web/console/src/modules/registry/components/apikey/CreateApiKeyPanel.tsx index b5f66ed12..a2705c6e5 100644 --- a/web/console/src/modules/registry/components/apikey/CreateApiKeyPanel.tsx +++ b/web/console/src/modules/registry/components/apikey/CreateApiKeyPanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { FormPanel } from '@tencent/ff-component'; diff --git a/web/console/src/modules/registry/components/chart/ChartApp.tsx b/web/console/src/modules/registry/components/chart/ChartApp.tsx index 80628d7e5..809060d99 100644 --- a/web/console/src/modules/registry/components/chart/ChartApp.tsx +++ b/web/console/src/modules/registry/components/chart/ChartApp.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect, Provider } from 'react-redux'; import { bindActionCreators } from '@tencent/ff-redux'; diff --git a/web/console/src/modules/registry/components/chart/ChartContainer.tsx b/web/console/src/modules/registry/components/chart/ChartContainer.tsx index 4d284d7c3..a94e46796 100644 --- a/web/console/src/modules/registry/components/chart/ChartContainer.tsx +++ b/web/console/src/modules/registry/components/chart/ChartContainer.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { t, Trans } from '@tencent/tea-app/lib/i18n'; diff --git a/web/console/src/modules/registry/components/chart/ChartDetailPanel.tsx b/web/console/src/modules/registry/components/chart/ChartDetailPanel.tsx index d3aa94f99..7aef73a4c 100644 --- a/web/console/src/modules/registry/components/chart/ChartDetailPanel.tsx +++ b/web/console/src/modules/registry/components/chart/ChartDetailPanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { t, Trans } from '@tencent/tea-app/lib/i18n'; diff --git a/web/console/src/modules/registry/components/chart/ChartGroupTablePanel.tsx b/web/console/src/modules/registry/components/chart/ChartGroupTablePanel.tsx index 7f41283d5..4212214b4 100644 --- a/web/console/src/modules/registry/components/chart/ChartGroupTablePanel.tsx +++ b/web/console/src/modules/registry/components/chart/ChartGroupTablePanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { t, Trans } from '@tencent/tea-app/lib/i18n'; diff --git a/web/console/src/modules/registry/components/chart/ChartTablePanel.tsx b/web/console/src/modules/registry/components/chart/ChartTablePanel.tsx index c6a054156..f16d8ad75 100644 --- a/web/console/src/modules/registry/components/chart/ChartTablePanel.tsx +++ b/web/console/src/modules/registry/components/chart/ChartTablePanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { t, Trans } from '@tencent/tea-app/lib/i18n'; diff --git a/web/console/src/modules/registry/components/chart/CreateChartPanel.tsx b/web/console/src/modules/registry/components/chart/CreateChartPanel.tsx index 8bae92cbb..fe2c460e4 100644 --- a/web/console/src/modules/registry/components/chart/CreateChartPanel.tsx +++ b/web/console/src/modules/registry/components/chart/CreateChartPanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { OperationState } from '@tencent/ff-redux'; diff --git a/web/console/src/modules/registry/components/chart/detail/BasicInfoPanel.tsx b/web/console/src/modules/registry/components/chart/detail/BasicInfoPanel.tsx index 48505125f..c0f87ec11 100644 --- a/web/console/src/modules/registry/components/chart/detail/BasicInfoPanel.tsx +++ b/web/console/src/modules/registry/components/chart/detail/BasicInfoPanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect } from 'react-redux'; import { RootProps } from '../ChartApp'; diff --git a/web/console/src/modules/registry/components/chart/detail/ChartDetail.tsx b/web/console/src/modules/registry/components/chart/detail/ChartDetail.tsx index 29501e839..05666a0d8 100644 --- a/web/console/src/modules/registry/components/chart/detail/ChartDetail.tsx +++ b/web/console/src/modules/registry/components/chart/detail/ChartDetail.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect } from 'react-redux'; import { bindActionCreators } from '@tencent/ff-redux'; diff --git a/web/console/src/modules/registry/components/chart/detail/DeployPanel.tsx b/web/console/src/modules/registry/components/chart/detail/DeployPanel.tsx index befe316c3..5d26b5812 100644 --- a/web/console/src/modules/registry/components/chart/detail/DeployPanel.tsx +++ b/web/console/src/modules/registry/components/chart/detail/DeployPanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import * as JsYAML from 'js-yaml'; import { connect } from 'react-redux'; diff --git a/web/console/src/modules/registry/components/chart/detail/FileTreePanel.tsx b/web/console/src/modules/registry/components/chart/detail/FileTreePanel.tsx index 36b363b6d..20b705140 100644 --- a/web/console/src/modules/registry/components/chart/detail/FileTreePanel.tsx +++ b/web/console/src/modules/registry/components/chart/detail/FileTreePanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect } from 'react-redux'; import { RootProps } from '../ChartApp'; diff --git a/web/console/src/modules/registry/components/chart/detail/HeaderPanel.tsx b/web/console/src/modules/registry/components/chart/detail/HeaderPanel.tsx index 260f26306..c57a65a7c 100644 --- a/web/console/src/modules/registry/components/chart/detail/HeaderPanel.tsx +++ b/web/console/src/modules/registry/components/chart/detail/HeaderPanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect } from 'react-redux'; import { RootProps } from '../ChartApp'; diff --git a/web/console/src/modules/registry/components/chart/detail/NamespacePanel.project.tsx b/web/console/src/modules/registry/components/chart/detail/NamespacePanel.project.tsx index 932d6db52..19c27a2eb 100644 --- a/web/console/src/modules/registry/components/chart/detail/NamespacePanel.project.tsx +++ b/web/console/src/modules/registry/components/chart/detail/NamespacePanel.project.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect } from 'react-redux'; import { t, Trans } from '@tencent/tea-app/lib/i18n'; diff --git a/web/console/src/modules/registry/components/chart/detail/NamespacePanel.tsx b/web/console/src/modules/registry/components/chart/detail/NamespacePanel.tsx index ed0c06ee0..17f2f4093 100644 --- a/web/console/src/modules/registry/components/chart/detail/NamespacePanel.tsx +++ b/web/console/src/modules/registry/components/chart/detail/NamespacePanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect } from 'react-redux'; import { t, Trans } from '@tencent/tea-app/lib/i18n'; diff --git a/web/console/src/modules/registry/components/chart/detail/VersionTablePanel.tsx b/web/console/src/modules/registry/components/chart/detail/VersionTablePanel.tsx index b775e081c..6ecf2b07b 100644 --- a/web/console/src/modules/registry/components/chart/detail/VersionTablePanel.tsx +++ b/web/console/src/modules/registry/components/chart/detail/VersionTablePanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect } from 'react-redux'; import { LinkButton, emptyTips } from '../../../../common/components'; diff --git a/web/console/src/modules/registry/components/chart/list/ActionPanel.tsx b/web/console/src/modules/registry/components/chart/list/ActionPanel.tsx index c312bd781..c5fbae5e3 100644 --- a/web/console/src/modules/registry/components/chart/list/ActionPanel.tsx +++ b/web/console/src/modules/registry/components/chart/list/ActionPanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect } from 'react-redux'; import { Justify, Icon, Table, Button, SearchBox, Segment, Select } from '@tea/component'; diff --git a/web/console/src/modules/registry/components/chart/list/ChartList.tsx b/web/console/src/modules/registry/components/chart/list/ChartList.tsx index 1d36480f2..27c68a5a7 100644 --- a/web/console/src/modules/registry/components/chart/list/ChartList.tsx +++ b/web/console/src/modules/registry/components/chart/list/ChartList.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect } from 'react-redux'; import { bindActionCreators } from '@tencent/ff-redux'; diff --git a/web/console/src/modules/registry/components/chart/list/HeaderPanel.tsx b/web/console/src/modules/registry/components/chart/list/HeaderPanel.tsx index a2bced807..1e63725a1 100644 --- a/web/console/src/modules/registry/components/chart/list/HeaderPanel.tsx +++ b/web/console/src/modules/registry/components/chart/list/HeaderPanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect } from 'react-redux'; import { Justify, Icon } from '@tea/component'; diff --git a/web/console/src/modules/registry/components/chart/list/TablePanel.tsx b/web/console/src/modules/registry/components/chart/list/TablePanel.tsx index 184599653..5ed84dd7f 100644 --- a/web/console/src/modules/registry/components/chart/list/TablePanel.tsx +++ b/web/console/src/modules/registry/components/chart/list/TablePanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect } from 'react-redux'; import { TablePanel as CTablePanel } from '@tencent/ff-component'; diff --git a/web/console/src/modules/registry/components/chartgroup/ChartGroupApp.tsx b/web/console/src/modules/registry/components/chartgroup/ChartGroupApp.tsx index 71ddc752f..7aeddfe23 100644 --- a/web/console/src/modules/registry/components/chartgroup/ChartGroupApp.tsx +++ b/web/console/src/modules/registry/components/chartgroup/ChartGroupApp.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect, Provider } from 'react-redux'; import { bindActionCreators } from '@tencent/ff-redux'; diff --git a/web/console/src/modules/registry/components/chartgroup/associate/UserAssociatePanel.tsx b/web/console/src/modules/registry/components/chartgroup/associate/UserAssociatePanel.tsx index 970e28232..cc4e74039 100644 --- a/web/console/src/modules/registry/components/chartgroup/associate/UserAssociatePanel.tsx +++ b/web/console/src/modules/registry/components/chartgroup/associate/UserAssociatePanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect } from 'react-redux'; import { RootProps } from '../ChartGroupApp'; diff --git a/web/console/src/modules/registry/components/chartgroup/create/BaseInfoPanel.tsx b/web/console/src/modules/registry/components/chartgroup/create/BaseInfoPanel.tsx index 4150b2bee..fda76b256 100644 --- a/web/console/src/modules/registry/components/chartgroup/create/BaseInfoPanel.tsx +++ b/web/console/src/modules/registry/components/chartgroup/create/BaseInfoPanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect } from 'react-redux'; import { t, Trans } from '@tencent/tea-app/lib/i18n'; diff --git a/web/console/src/modules/registry/components/chartgroup/create/ChartGroupCreate.tsx b/web/console/src/modules/registry/components/chartgroup/create/ChartGroupCreate.tsx index 7ad590b5c..e620fc9c6 100644 --- a/web/console/src/modules/registry/components/chartgroup/create/ChartGroupCreate.tsx +++ b/web/console/src/modules/registry/components/chartgroup/create/ChartGroupCreate.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect } from 'react-redux'; import { bindActionCreators } from '@tencent/ff-redux'; diff --git a/web/console/src/modules/registry/components/chartgroup/create/HeaderPanel.tsx b/web/console/src/modules/registry/components/chartgroup/create/HeaderPanel.tsx index 06cbe531a..ce244ffb5 100644 --- a/web/console/src/modules/registry/components/chartgroup/create/HeaderPanel.tsx +++ b/web/console/src/modules/registry/components/chartgroup/create/HeaderPanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { RootProps } from '../ChartGroupApp'; import { Justify, Icon } from '@tencent/tea-component'; diff --git a/web/console/src/modules/registry/components/chartgroup/detail/BaseInfoPanel.tsx b/web/console/src/modules/registry/components/chartgroup/detail/BaseInfoPanel.tsx index dfeca5bcb..d636524a2 100644 --- a/web/console/src/modules/registry/components/chartgroup/detail/BaseInfoPanel.tsx +++ b/web/console/src/modules/registry/components/chartgroup/detail/BaseInfoPanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect } from 'react-redux'; import { RootProps } from '../ChartGroupApp'; diff --git a/web/console/src/modules/registry/components/chartgroup/detail/ChartGroupDetail.tsx b/web/console/src/modules/registry/components/chartgroup/detail/ChartGroupDetail.tsx index 274eb6ddb..89fcbb10e 100644 --- a/web/console/src/modules/registry/components/chartgroup/detail/ChartGroupDetail.tsx +++ b/web/console/src/modules/registry/components/chartgroup/detail/ChartGroupDetail.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect } from 'react-redux'; import { bindActionCreators } from '@tencent/ff-redux'; diff --git a/web/console/src/modules/registry/components/chartgroup/detail/HeaderPanel.tsx b/web/console/src/modules/registry/components/chartgroup/detail/HeaderPanel.tsx index ff17ac07c..29b0ada27 100644 --- a/web/console/src/modules/registry/components/chartgroup/detail/HeaderPanel.tsx +++ b/web/console/src/modules/registry/components/chartgroup/detail/HeaderPanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect } from 'react-redux'; import { RootProps } from '../ChartGroupApp'; diff --git a/web/console/src/modules/registry/components/chartgroup/list/ActionPanel.tsx b/web/console/src/modules/registry/components/chartgroup/list/ActionPanel.tsx index 79ce4678b..83888aa27 100644 --- a/web/console/src/modules/registry/components/chartgroup/list/ActionPanel.tsx +++ b/web/console/src/modules/registry/components/chartgroup/list/ActionPanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect } from 'react-redux'; import { Justify, Icon, Table, Button, SearchBox } from '@tea/component'; diff --git a/web/console/src/modules/registry/components/chartgroup/list/ChartGroupList.tsx b/web/console/src/modules/registry/components/chartgroup/list/ChartGroupList.tsx index 88cc5114d..072383e98 100644 --- a/web/console/src/modules/registry/components/chartgroup/list/ChartGroupList.tsx +++ b/web/console/src/modules/registry/components/chartgroup/list/ChartGroupList.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect } from 'react-redux'; import { bindActionCreators } from '@tencent/ff-redux'; diff --git a/web/console/src/modules/registry/components/chartgroup/list/HeaderPanel.tsx b/web/console/src/modules/registry/components/chartgroup/list/HeaderPanel.tsx index ed0299407..caf6c59ab 100644 --- a/web/console/src/modules/registry/components/chartgroup/list/HeaderPanel.tsx +++ b/web/console/src/modules/registry/components/chartgroup/list/HeaderPanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect } from 'react-redux'; import { Justify, Icon } from '@tea/component'; diff --git a/web/console/src/modules/registry/components/chartgroup/list/TablePanel.tsx b/web/console/src/modules/registry/components/chartgroup/list/TablePanel.tsx index 4560fa66f..7007d27e2 100644 --- a/web/console/src/modules/registry/components/chartgroup/list/TablePanel.tsx +++ b/web/console/src/modules/registry/components/chartgroup/list/TablePanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect } from 'react-redux'; import { TablePanel as CTablePanel } from '@tencent/ff-component'; diff --git a/web/console/src/modules/registry/components/repo/CreateImagePanel.tsx b/web/console/src/modules/registry/components/repo/CreateImagePanel.tsx index 61e9811f4..f9c412fc1 100644 --- a/web/console/src/modules/registry/components/repo/CreateImagePanel.tsx +++ b/web/console/src/modules/registry/components/repo/CreateImagePanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { FormPanel } from '@tencent/ff-component'; diff --git a/web/console/src/modules/registry/components/repo/CreateRepoPanel.tsx b/web/console/src/modules/registry/components/repo/CreateRepoPanel.tsx index 7ab2a2d5d..534f61fdf 100644 --- a/web/console/src/modules/registry/components/repo/CreateRepoPanel.tsx +++ b/web/console/src/modules/registry/components/repo/CreateRepoPanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { FormPanel } from '@tencent/ff-component'; diff --git a/web/console/src/modules/registry/components/repo/ImageTablePanel.tsx b/web/console/src/modules/registry/components/repo/ImageTablePanel.tsx index 381092f7c..874daabd4 100644 --- a/web/console/src/modules/registry/components/repo/ImageTablePanel.tsx +++ b/web/console/src/modules/registry/components/repo/ImageTablePanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { t, Trans } from '@tencent/tea-app/lib/i18n'; diff --git a/web/console/src/modules/registry/components/repo/RepoContainer.tsx b/web/console/src/modules/registry/components/repo/RepoContainer.tsx index cf9b4b08c..c55f1bddf 100644 --- a/web/console/src/modules/registry/components/repo/RepoContainer.tsx +++ b/web/console/src/modules/registry/components/repo/RepoContainer.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { t, Trans } from '@tencent/tea-app/lib/i18n'; diff --git a/web/console/src/modules/registry/components/repo/RepoDetailPanel.tsx b/web/console/src/modules/registry/components/repo/RepoDetailPanel.tsx index 378ccddec..f32f41bdb 100644 --- a/web/console/src/modules/registry/components/repo/RepoDetailPanel.tsx +++ b/web/console/src/modules/registry/components/repo/RepoDetailPanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { t, Trans } from '@tencent/tea-app/lib/i18n'; diff --git a/web/console/src/modules/registry/components/repo/RepoTablePanel.tsx b/web/console/src/modules/registry/components/repo/RepoTablePanel.tsx index 79f45cc78..c62f8aa2c 100644 --- a/web/console/src/modules/registry/components/repo/RepoTablePanel.tsx +++ b/web/console/src/modules/registry/components/repo/RepoTablePanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { t, Trans } from '@tencent/tea-app/lib/i18n'; diff --git a/web/console/src/modules/registry/constants/ActionType.ts b/web/console/src/modules/registry/constants/ActionType.ts index 7ae6f0306..9064d3adc 100644 --- a/web/console/src/modules/registry/constants/ActionType.ts +++ b/web/console/src/modules/registry/constants/ActionType.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ /** ----- 访问凭证相关 ----- */ export const CreateApiKey = 'CreateApiKey'; export const C_ApiKeyDescription = 'C_ApiKeyDescription'; diff --git a/web/console/src/modules/registry/constants/AppValidateConfig.ts b/web/console/src/modules/registry/constants/AppValidateConfig.ts index 6eed4811b..39491d0bb 100644 --- a/web/console/src/modules/registry/constants/AppValidateConfig.ts +++ b/web/console/src/modules/registry/constants/AppValidateConfig.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { ModelTypeEnum, RuleTypeEnum, ValidateSchema, ValidatorStatusEnum } from '@tencent/ff-validator'; import { Validation } from '../../common/models'; diff --git a/web/console/src/modules/registry/constants/ChartGroupValidateConfig.ts b/web/console/src/modules/registry/constants/ChartGroupValidateConfig.ts index f5c2f41d4..93b4a987e 100644 --- a/web/console/src/modules/registry/constants/ChartGroupValidateConfig.ts +++ b/web/console/src/modules/registry/constants/ChartGroupValidateConfig.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { ModelTypeEnum, RuleTypeEnum, ValidateSchema, ValidatorStatusEnum } from '@tencent/ff-validator'; import { Validation } from '../../common/models'; import { UserInfo } from '../models'; diff --git a/web/console/src/modules/registry/constants/ChartValidateConfig.ts b/web/console/src/modules/registry/constants/ChartValidateConfig.ts index db64d3fb1..0a12e5a37 100644 --- a/web/console/src/modules/registry/constants/ChartValidateConfig.ts +++ b/web/console/src/modules/registry/constants/ChartValidateConfig.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { ModelTypeEnum, RuleTypeEnum, ValidateSchema, ValidatorStatusEnum } from '@tencent/ff-validator'; import { Validation } from '../../common/models'; import { UserInfo } from '../models'; diff --git a/web/console/src/modules/registry/constants/Config.ts b/web/console/src/modules/registry/constants/Config.ts index 1a145c1d8..302802f0e 100644 --- a/web/console/src/modules/registry/constants/Config.ts +++ b/web/console/src/modules/registry/constants/Config.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { initValidator } from '../../common/models/Validation'; export const REPO_URL = '/apis/registry.tkestack.io/v1/namespaces/'; diff --git a/web/console/src/modules/registry/constants/initState.ts b/web/console/src/modules/registry/constants/initState.ts index 3c90832e7..f1e12d084 100644 --- a/web/console/src/modules/registry/constants/initState.ts +++ b/web/console/src/modules/registry/constants/initState.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { uuid } from '@tencent/ff-redux'; export const initChartGroupCreationState = { diff --git a/web/console/src/modules/registry/index.tsx b/web/console/src/modules/registry/index.tsx index 2eef497ee..b6d32234a 100644 --- a/web/console/src/modules/registry/index.tsx +++ b/web/console/src/modules/registry/index.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { RegistryAppContainer } from './components/RegistryApp'; diff --git a/web/console/src/modules/registry/models/ApiKey.ts b/web/console/src/modules/registry/models/ApiKey.ts index ae936d94f..d919c3176 100644 --- a/web/console/src/modules/registry/models/ApiKey.ts +++ b/web/console/src/modules/registry/models/ApiKey.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { Identifiable } from '@tencent/ff-redux'; import { Validation } from '../../common/models'; diff --git a/web/console/src/modules/registry/models/App.ts b/web/console/src/modules/registry/models/App.ts index ead794f7f..179d4f8d4 100644 --- a/web/console/src/modules/registry/models/App.ts +++ b/web/console/src/modules/registry/models/App.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { Identifiable } from '@tencent/ff-redux'; import { Validation } from '../../common/models'; diff --git a/web/console/src/modules/registry/models/Chart.ts b/web/console/src/modules/registry/models/Chart.ts index 1397cc211..46503da5f 100644 --- a/web/console/src/modules/registry/models/Chart.ts +++ b/web/console/src/modules/registry/models/Chart.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { Identifiable } from '@tencent/ff-redux'; import { Validation } from '../../common/models'; diff --git a/web/console/src/modules/registry/models/ChartGroup.ts b/web/console/src/modules/registry/models/ChartGroup.ts index 908565baa..1d2a5f500 100644 --- a/web/console/src/modules/registry/models/ChartGroup.ts +++ b/web/console/src/modules/registry/models/ChartGroup.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { Identifiable } from '@tencent/ff-redux'; export interface ChartGroup extends Identifiable { diff --git a/web/console/src/modules/registry/models/Cluster.ts b/web/console/src/modules/registry/models/Cluster.ts index 85ff35e1a..abba191d9 100644 --- a/web/console/src/modules/registry/models/Cluster.ts +++ b/web/console/src/modules/registry/models/Cluster.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { Identifiable } from '@tencent/ff-redux'; import { Validation } from '../../common/models'; import { ChartInfoFilter } from './Chart'; diff --git a/web/console/src/modules/registry/models/CommonUser.ts b/web/console/src/modules/registry/models/CommonUser.ts index a0636aebc..3897e3994 100644 --- a/web/console/src/modules/registry/models/CommonUser.ts +++ b/web/console/src/modules/registry/models/CommonUser.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { Identifiable } from '@tencent/ff-redux'; /** 原有User在localidentities和user概念之间混用了,anyway,用于关联角色等 */ diff --git a/web/console/src/modules/registry/models/Image.ts b/web/console/src/modules/registry/models/Image.ts index 34a00a042..465a4d94e 100644 --- a/web/console/src/modules/registry/models/Image.ts +++ b/web/console/src/modules/registry/models/Image.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { Identifiable } from '@tencent/ff-redux'; import { Validation } from '../../common/models'; diff --git a/web/console/src/modules/registry/models/Namespace.ts b/web/console/src/modules/registry/models/Namespace.ts index 4e2e4a5a8..9bfae0215 100644 --- a/web/console/src/modules/registry/models/Namespace.ts +++ b/web/console/src/modules/registry/models/Namespace.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { Identifiable } from '@tencent/ff-redux'; import { Validation } from '../../common/models'; import { ChartInfoFilter } from './Chart'; diff --git a/web/console/src/modules/registry/models/Project.ts b/web/console/src/modules/registry/models/Project.ts index 239c380cf..8fc096439 100644 --- a/web/console/src/modules/registry/models/Project.ts +++ b/web/console/src/modules/registry/models/Project.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { Identifiable } from '@tencent/ff-redux'; import { ChartInfoFilter } from './Chart'; diff --git a/web/console/src/modules/registry/models/Repo.ts b/web/console/src/modules/registry/models/Repo.ts index 5f250d8db..628f954c4 100644 --- a/web/console/src/modules/registry/models/Repo.ts +++ b/web/console/src/modules/registry/models/Repo.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { Identifiable } from '@tencent/ff-redux'; import { Validation } from '../../common/models'; diff --git a/web/console/src/modules/registry/models/RootState.ts b/web/console/src/modules/registry/models/RootState.ts index f6f935f43..4f39afd15 100644 --- a/web/console/src/modules/registry/models/RootState.ts +++ b/web/console/src/modules/registry/models/RootState.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { WorkflowState, FetcherState, FFListModel, FFObjectModel } from '@tencent/ff-redux'; import { ApiKey, ApiKeyFilter, ApiKeyCreation } from './ApiKey'; import { Repo, RepoFilter, RepoCreation } from './Repo'; diff --git a/web/console/src/modules/registry/models/UserInfo.ts b/web/console/src/modules/registry/models/UserInfo.ts index 10b1ae6e7..2d73428d3 100644 --- a/web/console/src/modules/registry/models/UserInfo.ts +++ b/web/console/src/modules/registry/models/UserInfo.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { Identifiable } from '@tencent/ff-redux'; export interface UserInfo extends Identifiable { diff --git a/web/console/src/modules/registry/models/index.ts b/web/console/src/modules/registry/models/index.ts index 70e42a77a..68c688980 100644 --- a/web/console/src/modules/registry/models/index.ts +++ b/web/console/src/modules/registry/models/index.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export { ApiKey, ApiKeyFilter, ApiKeyCreation } from './ApiKey'; export { Repo, RepoFilter, RepoCreation } from './Repo'; export * from './Chart'; diff --git a/web/console/src/modules/registry/reducers/RootReducer.ts b/web/console/src/modules/registry/reducers/RootReducer.ts index 3b1d4a2cf..19ce58c07 100644 --- a/web/console/src/modules/registry/reducers/RootReducer.ts +++ b/web/console/src/modules/registry/reducers/RootReducer.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { combineReducers } from 'redux'; import { diff --git a/web/console/src/modules/registry/router.project.ts b/web/console/src/modules/registry/router.project.ts index 693bf9639..734b7d23a 100644 --- a/web/console/src/modules/registry/router.project.ts +++ b/web/console/src/modules/registry/router.project.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { Router } from '../../../helpers/Router'; /** diff --git a/web/console/src/modules/registry/router.ts b/web/console/src/modules/registry/router.ts index ba87ed961..4bdc841e4 100644 --- a/web/console/src/modules/registry/router.ts +++ b/web/console/src/modules/registry/router.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { Router } from '../../../helpers/Router'; /** diff --git a/web/console/src/modules/registry/stores/RootStore.ts b/web/console/src/modules/registry/stores/RootStore.ts index 528dcd48c..83ff139b0 100644 --- a/web/console/src/modules/registry/stores/RootStore.ts +++ b/web/console/src/modules/registry/stores/RootStore.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { createStore } from '@tencent/ff-redux'; import { generateResetableReducer } from '../../../../helpers'; diff --git a/web/console/src/modules/uam/WebAPI.ts b/web/console/src/modules/uam/WebAPI.ts index ca10bd238..4ae54733e 100644 --- a/web/console/src/modules/uam/WebAPI.ts +++ b/web/console/src/modules/uam/WebAPI.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { QueryState, RecordSet } from '@tencent/ff-redux'; import { Method, diff --git a/web/console/src/modules/uam/actions/associatedActions.ts b/web/console/src/modules/uam/actions/associatedActions.ts index 08ea08e25..e2b75ed1f 100644 --- a/web/console/src/modules/uam/actions/associatedActions.ts +++ b/web/console/src/modules/uam/actions/associatedActions.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { createFFListActions, extend, generateWorkflowActionCreator, OperationTrigger } from '@tencent/ff-redux'; diff --git a/web/console/src/modules/uam/actions/group/associateActions.ts b/web/console/src/modules/uam/actions/group/associateActions.ts index 3e09186b7..0254d07c6 100644 --- a/web/console/src/modules/uam/actions/group/associateActions.ts +++ b/web/console/src/modules/uam/actions/group/associateActions.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { extend, createFFListActions, isSuccessWorkflow, generateWorkflowActionCreator, OperationTrigger } from '@tencent/ff-redux'; import { RootState, GroupAssociation, GroupPlain, GroupFilter } from '../../models'; import * as ActionTypes from '../../constants/ActionTypes'; diff --git a/web/console/src/modules/uam/actions/group/createActions.ts b/web/console/src/modules/uam/actions/group/createActions.ts index 484acffdd..34e254d19 100644 --- a/web/console/src/modules/uam/actions/group/createActions.ts +++ b/web/console/src/modules/uam/actions/group/createActions.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { ReduxAction, extend, generateWorkflowActionCreator, OperationTrigger, isSuccessWorkflow } from '@tencent/ff-redux'; import { Group, RootState } from '../../models/index'; diff --git a/web/console/src/modules/uam/actions/group/detailActions.ts b/web/console/src/modules/uam/actions/group/detailActions.ts index 79fff5aed..15ac871c3 100644 --- a/web/console/src/modules/uam/actions/group/detailActions.ts +++ b/web/console/src/modules/uam/actions/group/detailActions.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { ReduxAction, extend, generateWorkflowActionCreator, OperationTrigger, isSuccessWorkflow } from '@tencent/ff-redux'; import { RootState, GroupInfoFilter, GroupEditor, Group } from '../../models'; import * as ActionTypes from '../../constants/ActionTypes'; diff --git a/web/console/src/modules/uam/actions/group/index.ts b/web/console/src/modules/uam/actions/group/index.ts index 7dedc3298..e69daf7b8 100644 --- a/web/console/src/modules/uam/actions/group/index.ts +++ b/web/console/src/modules/uam/actions/group/index.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { listActions } from './listActions'; import { createActions } from './createActions'; import { detailActions } from './detailActions'; diff --git a/web/console/src/modules/uam/actions/group/listActions.ts b/web/console/src/modules/uam/actions/group/listActions.ts index ed760ab4b..debb0af90 100644 --- a/web/console/src/modules/uam/actions/group/listActions.ts +++ b/web/console/src/modules/uam/actions/group/listActions.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { extend, generateWorkflowActionCreator, OperationResult, OperationTrigger, createFFListActions } from '@tencent/ff-redux'; import { RootState, Group, GroupFilter } from '../../models'; import * as ActionTypes from '../../constants/ActionTypes'; diff --git a/web/console/src/modules/uam/actions/index.ts b/web/console/src/modules/uam/actions/index.ts index 7e658291e..52aa854bf 100644 --- a/web/console/src/modules/uam/actions/index.ts +++ b/web/console/src/modules/uam/actions/index.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { userActions } from './userActions'; import { strategyActions } from './strategyActions'; import { associateActions } from './associatedActions'; diff --git a/web/console/src/modules/uam/actions/policy/associateActions.ts b/web/console/src/modules/uam/actions/policy/associateActions.ts index 4bf4be5a6..c163044f6 100644 --- a/web/console/src/modules/uam/actions/policy/associateActions.ts +++ b/web/console/src/modules/uam/actions/policy/associateActions.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { extend, generateWorkflowActionCreator, OperationTrigger, isSuccessWorkflow, createFFListActions } from '@tencent/ff-redux'; import { RootState, PolicyAssociation, PolicyPlain, PolicyFilter } from '../../models'; import * as ActionTypes from '../../constants/ActionTypes'; diff --git a/web/console/src/modules/uam/actions/policy/detailActions.ts b/web/console/src/modules/uam/actions/policy/detailActions.ts index ede25779d..dc8ec7930 100644 --- a/web/console/src/modules/uam/actions/policy/detailActions.ts +++ b/web/console/src/modules/uam/actions/policy/detailActions.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { ReduxAction, extend } from '@tencent/ff-redux'; import { RootState, PolicyInfoFilter, PolicyEditor, Policy } from '../../models'; import * as ActionTypes from '../../constants/ActionTypes'; diff --git a/web/console/src/modules/uam/actions/policy/index.ts b/web/console/src/modules/uam/actions/policy/index.ts index 55fa159fc..ac81b5bb4 100644 --- a/web/console/src/modules/uam/actions/policy/index.ts +++ b/web/console/src/modules/uam/actions/policy/index.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { listActions } from './listActions'; import { associateActions } from './associateActions'; import { detailActions } from './detailActions'; diff --git a/web/console/src/modules/uam/actions/policy/listActions.ts b/web/console/src/modules/uam/actions/policy/listActions.ts index 38f79615c..b106293a6 100644 --- a/web/console/src/modules/uam/actions/policy/listActions.ts +++ b/web/console/src/modules/uam/actions/policy/listActions.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { extend } from '@tencent/ff-redux'; import { RootState, Policy, PolicyFilter } from '../../models'; import * as ActionTypes from '../../constants/ActionTypes'; diff --git a/web/console/src/modules/uam/actions/role/associateActions.ts b/web/console/src/modules/uam/actions/role/associateActions.ts index e8fb2e9e6..d45a256a9 100644 --- a/web/console/src/modules/uam/actions/role/associateActions.ts +++ b/web/console/src/modules/uam/actions/role/associateActions.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { extend, generateWorkflowActionCreator, OperationTrigger, isSuccessWorkflow, createFFListActions } from '@tencent/ff-redux'; import { RootState, RoleAssociation, RolePlain, RoleFilter } from '../../models'; import * as ActionTypes from '../../constants/ActionTypes'; diff --git a/web/console/src/modules/uam/actions/role/createActions.ts b/web/console/src/modules/uam/actions/role/createActions.ts index 6ea56394a..f99176f80 100644 --- a/web/console/src/modules/uam/actions/role/createActions.ts +++ b/web/console/src/modules/uam/actions/role/createActions.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { ReduxAction, extend, generateWorkflowActionCreator, OperationTrigger, isSuccessWorkflow } from '@tencent/ff-redux'; import { Role, RootState } from '../../models/index'; diff --git a/web/console/src/modules/uam/actions/role/detailActions.ts b/web/console/src/modules/uam/actions/role/detailActions.ts index 3d2eb05e3..4a2ff88ae 100644 --- a/web/console/src/modules/uam/actions/role/detailActions.ts +++ b/web/console/src/modules/uam/actions/role/detailActions.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { ReduxAction, extend, generateWorkflowActionCreator, OperationTrigger, isSuccessWorkflow } from '@tencent/ff-redux'; import { RootState, RoleInfoFilter, RoleEditor, Role } from '../../models'; import * as ActionTypes from '../../constants/ActionTypes'; diff --git a/web/console/src/modules/uam/actions/role/index.ts b/web/console/src/modules/uam/actions/role/index.ts index 59cec1c1d..a49c03616 100644 --- a/web/console/src/modules/uam/actions/role/index.ts +++ b/web/console/src/modules/uam/actions/role/index.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { listActions } from './listActions'; import { createActions } from './createActions'; import { detailActions } from './detailActions'; diff --git a/web/console/src/modules/uam/actions/role/listActions.ts b/web/console/src/modules/uam/actions/role/listActions.ts index 7e1d19c90..8e7411813 100644 --- a/web/console/src/modules/uam/actions/role/listActions.ts +++ b/web/console/src/modules/uam/actions/role/listActions.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { extend, generateWorkflowActionCreator, OperationResult, OperationTrigger, createFFListActions } from '@tencent/ff-redux'; import { RootState, Role, RoleFilter } from '../../models'; import * as ActionTypes from '../../constants/ActionTypes'; diff --git a/web/console/src/modules/uam/actions/strategyActions.ts b/web/console/src/modules/uam/actions/strategyActions.ts index 12db4ddc5..67b3bd1f2 100644 --- a/web/console/src/modules/uam/actions/strategyActions.ts +++ b/web/console/src/modules/uam/actions/strategyActions.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { createFFListActions, extend, FetchOptions, generateFetcherActionCreator, generateWorkflowActionCreator, OperationTrigger diff --git a/web/console/src/modules/uam/actions/user/associateActions.ts b/web/console/src/modules/uam/actions/user/associateActions.ts index 16f329a7e..f1fe0b282 100644 --- a/web/console/src/modules/uam/actions/user/associateActions.ts +++ b/web/console/src/modules/uam/actions/user/associateActions.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { extend, generateWorkflowActionCreator, OperationTrigger, isSuccessWorkflow, createFFListActions } from '@tencent/ff-redux'; import { RootState, CommonUserAssociation, UserPlain, CommonUserFilter } from '../../models'; import * as ActionTypes from '../../constants/ActionTypes'; diff --git a/web/console/src/modules/uam/actions/user/index.ts b/web/console/src/modules/uam/actions/user/index.ts index 249a120f8..84500512b 100644 --- a/web/console/src/modules/uam/actions/user/index.ts +++ b/web/console/src/modules/uam/actions/user/index.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { listActions } from './listActions'; import { associateActions } from './associateActions'; diff --git a/web/console/src/modules/uam/actions/user/listActions.ts b/web/console/src/modules/uam/actions/user/listActions.ts index 0c8f0ee48..e8f414335 100644 --- a/web/console/src/modules/uam/actions/user/listActions.ts +++ b/web/console/src/modules/uam/actions/user/listActions.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { extend } from '@tencent/ff-redux'; import { RootState, UserPlain, CommonUserFilter } from '../../models'; import * as ActionTypes from '../../constants/ActionTypes'; diff --git a/web/console/src/modules/uam/actions/userActions.ts b/web/console/src/modules/uam/actions/userActions.ts index 6bab7b604..47250073c 100644 --- a/web/console/src/modules/uam/actions/userActions.ts +++ b/web/console/src/modules/uam/actions/userActions.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { resourceConfig } from '@config'; import { CommonAPI, ResourceFilter, ResourceInfo } from '@src/modules/common'; import { diff --git a/web/console/src/modules/uam/components/UamApp.tsx b/web/console/src/modules/uam/components/UamApp.tsx index c0d8482d1..e5201f620 100644 --- a/web/console/src/modules/uam/components/UamApp.tsx +++ b/web/console/src/modules/uam/components/UamApp.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect, Provider } from 'react-redux'; diff --git a/web/console/src/modules/uam/components/group/GroupPanel.tsx b/web/console/src/modules/uam/components/group/GroupPanel.tsx index 7d5343203..2932fe33e 100644 --- a/web/console/src/modules/uam/components/group/GroupPanel.tsx +++ b/web/console/src/modules/uam/components/group/GroupPanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect, Provider } from 'react-redux'; import { bindActionCreators } from '@tencent/ff-redux'; diff --git a/web/console/src/modules/uam/components/group/associate/PolicyAssociatePanel.tsx b/web/console/src/modules/uam/components/group/associate/PolicyAssociatePanel.tsx index e94d0b073..72dd45209 100644 --- a/web/console/src/modules/uam/components/group/associate/PolicyAssociatePanel.tsx +++ b/web/console/src/modules/uam/components/group/associate/PolicyAssociatePanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect } from 'react-redux'; import { RootProps } from '../GroupPanel'; diff --git a/web/console/src/modules/uam/components/group/associate/UserAssociatePanel.tsx b/web/console/src/modules/uam/components/group/associate/UserAssociatePanel.tsx index 1ec7fa904..e41ac5d4c 100644 --- a/web/console/src/modules/uam/components/group/associate/UserAssociatePanel.tsx +++ b/web/console/src/modules/uam/components/group/associate/UserAssociatePanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect } from 'react-redux'; import { RootProps } from '../GroupPanel'; diff --git a/web/console/src/modules/uam/components/group/associate/UserAssociateWorkflowDialog.tsx b/web/console/src/modules/uam/components/group/associate/UserAssociateWorkflowDialog.tsx index 5da46bc30..816f94c67 100644 --- a/web/console/src/modules/uam/components/group/associate/UserAssociateWorkflowDialog.tsx +++ b/web/console/src/modules/uam/components/group/associate/UserAssociateWorkflowDialog.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect } from 'react-redux'; import { t, Trans } from '@tencent/tea-app/lib/i18n'; diff --git a/web/console/src/modules/uam/components/group/create/BaseInfoPanel.tsx b/web/console/src/modules/uam/components/group/create/BaseInfoPanel.tsx index 10ffa1ee2..0e3dac461 100644 --- a/web/console/src/modules/uam/components/group/create/BaseInfoPanel.tsx +++ b/web/console/src/modules/uam/components/group/create/BaseInfoPanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { useSelector, useDispatch } from 'react-redux'; import { t, Trans } from '@tencent/tea-app/lib/i18n'; diff --git a/web/console/src/modules/uam/components/group/create/GroupCreate.tsx b/web/console/src/modules/uam/components/group/create/GroupCreate.tsx index 1676cd6d6..112fce8dc 100644 --- a/web/console/src/modules/uam/components/group/create/GroupCreate.tsx +++ b/web/console/src/modules/uam/components/group/create/GroupCreate.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect } from 'react-redux'; import { bindActionCreators } from '@tencent/ff-redux'; diff --git a/web/console/src/modules/uam/components/group/detail/BaseInfoPanel.tsx b/web/console/src/modules/uam/components/group/detail/BaseInfoPanel.tsx index 197b407ad..c6293afec 100644 --- a/web/console/src/modules/uam/components/group/detail/BaseInfoPanel.tsx +++ b/web/console/src/modules/uam/components/group/detail/BaseInfoPanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect } from 'react-redux'; import { RootProps } from '../GroupPanel'; diff --git a/web/console/src/modules/uam/components/group/detail/GroupDetail.tsx b/web/console/src/modules/uam/components/group/detail/GroupDetail.tsx index 716245511..99c63669a 100644 --- a/web/console/src/modules/uam/components/group/detail/GroupDetail.tsx +++ b/web/console/src/modules/uam/components/group/detail/GroupDetail.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect } from 'react-redux'; import { bindActionCreators } from '@tencent/ff-redux'; diff --git a/web/console/src/modules/uam/components/group/detail/HeaderPanel.tsx b/web/console/src/modules/uam/components/group/detail/HeaderPanel.tsx index 236490144..a98e410f2 100644 --- a/web/console/src/modules/uam/components/group/detail/HeaderPanel.tsx +++ b/web/console/src/modules/uam/components/group/detail/HeaderPanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect } from 'react-redux'; import { RootProps } from '../GroupPanel'; diff --git a/web/console/src/modules/uam/components/group/detail/PolicyActionPanel.tsx b/web/console/src/modules/uam/components/group/detail/PolicyActionPanel.tsx index 569d9f8d0..4b7582f6e 100644 --- a/web/console/src/modules/uam/components/group/detail/PolicyActionPanel.tsx +++ b/web/console/src/modules/uam/components/group/detail/PolicyActionPanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect } from 'react-redux'; import { Justify, Icon, Table, Button, SearchBox } from '@tea/component'; diff --git a/web/console/src/modules/uam/components/group/detail/PolicyTablePanel.tsx b/web/console/src/modules/uam/components/group/detail/PolicyTablePanel.tsx index 86dd1b503..14823ebd0 100644 --- a/web/console/src/modules/uam/components/group/detail/PolicyTablePanel.tsx +++ b/web/console/src/modules/uam/components/group/detail/PolicyTablePanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect } from 'react-redux'; import { LinkButton, emptyTips } from '../../../../common/components'; diff --git a/web/console/src/modules/uam/components/group/detail/RoleActionPanel.tsx b/web/console/src/modules/uam/components/group/detail/RoleActionPanel.tsx index 2312abc2b..449668e86 100644 --- a/web/console/src/modules/uam/components/group/detail/RoleActionPanel.tsx +++ b/web/console/src/modules/uam/components/group/detail/RoleActionPanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect } from 'react-redux'; import { Justify, Icon, Table, Button, SearchBox } from '@tea/component'; diff --git a/web/console/src/modules/uam/components/group/detail/RoleTablePanel.tsx b/web/console/src/modules/uam/components/group/detail/RoleTablePanel.tsx index d3b1d50d6..47c3321fb 100644 --- a/web/console/src/modules/uam/components/group/detail/RoleTablePanel.tsx +++ b/web/console/src/modules/uam/components/group/detail/RoleTablePanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect } from 'react-redux'; import { LinkButton, emptyTips } from '../../../../common/components'; diff --git a/web/console/src/modules/uam/components/group/detail/UserActionPanel.tsx b/web/console/src/modules/uam/components/group/detail/UserActionPanel.tsx index 36b1313c9..c13957372 100644 --- a/web/console/src/modules/uam/components/group/detail/UserActionPanel.tsx +++ b/web/console/src/modules/uam/components/group/detail/UserActionPanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect } from 'react-redux'; import { Justify, Icon, Table, Button, SearchBox } from '@tea/component'; diff --git a/web/console/src/modules/uam/components/group/detail/UserTablePanel.tsx b/web/console/src/modules/uam/components/group/detail/UserTablePanel.tsx index e93e46151..04f8f9625 100644 --- a/web/console/src/modules/uam/components/group/detail/UserTablePanel.tsx +++ b/web/console/src/modules/uam/components/group/detail/UserTablePanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect } from 'react-redux'; import { LinkButton, emptyTips } from '../../../../common/components'; diff --git a/web/console/src/modules/uam/components/group/list/ActionPanel.tsx b/web/console/src/modules/uam/components/group/list/ActionPanel.tsx index 6a21ab921..4c863af31 100644 --- a/web/console/src/modules/uam/components/group/list/ActionPanel.tsx +++ b/web/console/src/modules/uam/components/group/list/ActionPanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect } from 'react-redux'; import { Justify, Icon, Table, Button, SearchBox } from '@tea/component'; diff --git a/web/console/src/modules/uam/components/group/list/GroupList.tsx b/web/console/src/modules/uam/components/group/list/GroupList.tsx index fd6a0c8c5..7667c21fe 100644 --- a/web/console/src/modules/uam/components/group/list/GroupList.tsx +++ b/web/console/src/modules/uam/components/group/list/GroupList.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect } from 'react-redux'; import { bindActionCreators } from '@tencent/ff-redux'; diff --git a/web/console/src/modules/uam/components/group/list/HeaderPanel.tsx b/web/console/src/modules/uam/components/group/list/HeaderPanel.tsx index 1bdee471a..fa2c173cd 100644 --- a/web/console/src/modules/uam/components/group/list/HeaderPanel.tsx +++ b/web/console/src/modules/uam/components/group/list/HeaderPanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect } from 'react-redux'; import { Justify, Icon } from '@tea/component'; diff --git a/web/console/src/modules/uam/components/group/list/RoleModifyDialog.tsx b/web/console/src/modules/uam/components/group/list/RoleModifyDialog.tsx index 843178315..e9a1ce7c6 100644 --- a/web/console/src/modules/uam/components/group/list/RoleModifyDialog.tsx +++ b/web/console/src/modules/uam/components/group/list/RoleModifyDialog.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { useSelector, useDispatch } from 'react-redux'; import { Button, Modal, Form, Text, Radio, Transfer, Table, SearchBox } from '@tea/component'; diff --git a/web/console/src/modules/uam/components/group/list/TablePanel.tsx b/web/console/src/modules/uam/components/group/list/TablePanel.tsx index f2bbbf945..056c9fcf4 100644 --- a/web/console/src/modules/uam/components/group/list/TablePanel.tsx +++ b/web/console/src/modules/uam/components/group/list/TablePanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { useDispatch, useSelector } from 'react-redux'; import { TablePanel as CTablePanel } from '@tencent/ff-component'; diff --git a/web/console/src/modules/uam/components/role/RoleApp.tsx b/web/console/src/modules/uam/components/role/RoleApp.tsx index 1af5baedb..b0522f722 100644 --- a/web/console/src/modules/uam/components/role/RoleApp.tsx +++ b/web/console/src/modules/uam/components/role/RoleApp.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect, Provider } from 'react-redux'; import { bindActionCreators } from '@tencent/ff-redux'; diff --git a/web/console/src/modules/uam/components/role/associate/GroupAssociatePanel.tsx b/web/console/src/modules/uam/components/role/associate/GroupAssociatePanel.tsx index 0628eac82..68ddf2f2b 100644 --- a/web/console/src/modules/uam/components/role/associate/GroupAssociatePanel.tsx +++ b/web/console/src/modules/uam/components/role/associate/GroupAssociatePanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect } from 'react-redux'; import { RootProps } from '../RoleApp'; diff --git a/web/console/src/modules/uam/components/role/associate/GroupAssociateWorkflowDialog.tsx b/web/console/src/modules/uam/components/role/associate/GroupAssociateWorkflowDialog.tsx index 7feabaa60..931cafb26 100644 --- a/web/console/src/modules/uam/components/role/associate/GroupAssociateWorkflowDialog.tsx +++ b/web/console/src/modules/uam/components/role/associate/GroupAssociateWorkflowDialog.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect } from 'react-redux'; import { t, Trans } from '@tencent/tea-app/lib/i18n'; diff --git a/web/console/src/modules/uam/components/role/associate/PolicyAssociatePanel.tsx b/web/console/src/modules/uam/components/role/associate/PolicyAssociatePanel.tsx index 0e0db6622..0cc17c61c 100644 --- a/web/console/src/modules/uam/components/role/associate/PolicyAssociatePanel.tsx +++ b/web/console/src/modules/uam/components/role/associate/PolicyAssociatePanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect } from 'react-redux'; import { RootProps } from '../RoleApp'; diff --git a/web/console/src/modules/uam/components/role/associate/PolicyAssociateWorkflowDialog.tsx b/web/console/src/modules/uam/components/role/associate/PolicyAssociateWorkflowDialog.tsx index 307115616..63fcf046e 100644 --- a/web/console/src/modules/uam/components/role/associate/PolicyAssociateWorkflowDialog.tsx +++ b/web/console/src/modules/uam/components/role/associate/PolicyAssociateWorkflowDialog.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect } from 'react-redux'; import { t, Trans } from '@tencent/tea-app/lib/i18n'; diff --git a/web/console/src/modules/uam/components/role/associate/UserAssociatePanel.tsx b/web/console/src/modules/uam/components/role/associate/UserAssociatePanel.tsx index 82325b436..9abf1c86c 100644 --- a/web/console/src/modules/uam/components/role/associate/UserAssociatePanel.tsx +++ b/web/console/src/modules/uam/components/role/associate/UserAssociatePanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect } from 'react-redux'; import { RootProps } from '../RoleApp'; diff --git a/web/console/src/modules/uam/components/role/associate/UserAssociateWorkflowDialog.tsx b/web/console/src/modules/uam/components/role/associate/UserAssociateWorkflowDialog.tsx index 762cb0a59..b94c8ece0 100644 --- a/web/console/src/modules/uam/components/role/associate/UserAssociateWorkflowDialog.tsx +++ b/web/console/src/modules/uam/components/role/associate/UserAssociateWorkflowDialog.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect } from 'react-redux'; import { t, Trans } from '@tencent/tea-app/lib/i18n'; diff --git a/web/console/src/modules/uam/components/role/create/BaseInfoPanel.tsx b/web/console/src/modules/uam/components/role/create/BaseInfoPanel.tsx index 0a2423082..53a4e03e6 100644 --- a/web/console/src/modules/uam/components/role/create/BaseInfoPanel.tsx +++ b/web/console/src/modules/uam/components/role/create/BaseInfoPanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect } from 'react-redux'; import { t, Trans } from '@tencent/tea-app/lib/i18n'; diff --git a/web/console/src/modules/uam/components/role/create/HeaderPanel.tsx b/web/console/src/modules/uam/components/role/create/HeaderPanel.tsx index 70e3fb35b..3cb1a88e4 100644 --- a/web/console/src/modules/uam/components/role/create/HeaderPanel.tsx +++ b/web/console/src/modules/uam/components/role/create/HeaderPanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { RootProps } from '../RoleApp'; import { Justify, Icon } from '@tencent/tea-component'; diff --git a/web/console/src/modules/uam/components/role/create/RoleCreate.tsx b/web/console/src/modules/uam/components/role/create/RoleCreate.tsx index 07f05e9ba..7c108181b 100644 --- a/web/console/src/modules/uam/components/role/create/RoleCreate.tsx +++ b/web/console/src/modules/uam/components/role/create/RoleCreate.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect } from 'react-redux'; import { bindActionCreators } from '@tencent/ff-redux'; diff --git a/web/console/src/modules/uam/components/role/detail/BaseInfoPanel.tsx b/web/console/src/modules/uam/components/role/detail/BaseInfoPanel.tsx index a58a97e5e..d37f748aa 100644 --- a/web/console/src/modules/uam/components/role/detail/BaseInfoPanel.tsx +++ b/web/console/src/modules/uam/components/role/detail/BaseInfoPanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect } from 'react-redux'; import { RootProps } from '../RoleApp'; diff --git a/web/console/src/modules/uam/components/role/detail/GroupActionPanel.tsx b/web/console/src/modules/uam/components/role/detail/GroupActionPanel.tsx index 1de9a3790..62a4389a7 100644 --- a/web/console/src/modules/uam/components/role/detail/GroupActionPanel.tsx +++ b/web/console/src/modules/uam/components/role/detail/GroupActionPanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect } from 'react-redux'; import { Justify, Icon, Table, Button, SearchBox } from '@tea/component'; diff --git a/web/console/src/modules/uam/components/role/detail/GroupTablePanel.tsx b/web/console/src/modules/uam/components/role/detail/GroupTablePanel.tsx index 821e3285e..e784a87e4 100644 --- a/web/console/src/modules/uam/components/role/detail/GroupTablePanel.tsx +++ b/web/console/src/modules/uam/components/role/detail/GroupTablePanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect } from 'react-redux'; import { TablePanel } from '@tencent/ff-component'; diff --git a/web/console/src/modules/uam/components/role/detail/HeaderPanel.tsx b/web/console/src/modules/uam/components/role/detail/HeaderPanel.tsx index da485c6d5..28d101027 100644 --- a/web/console/src/modules/uam/components/role/detail/HeaderPanel.tsx +++ b/web/console/src/modules/uam/components/role/detail/HeaderPanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect } from 'react-redux'; import { RootProps } from '../RoleApp'; diff --git a/web/console/src/modules/uam/components/role/detail/PolicyActionPanel.tsx b/web/console/src/modules/uam/components/role/detail/PolicyActionPanel.tsx index ff21b0496..d1f791159 100644 --- a/web/console/src/modules/uam/components/role/detail/PolicyActionPanel.tsx +++ b/web/console/src/modules/uam/components/role/detail/PolicyActionPanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect } from 'react-redux'; import { Justify, Icon, Table, Button, SearchBox } from '@tea/component'; diff --git a/web/console/src/modules/uam/components/role/detail/PolicyTablePanel.tsx b/web/console/src/modules/uam/components/role/detail/PolicyTablePanel.tsx index e963ae174..3b6972aba 100644 --- a/web/console/src/modules/uam/components/role/detail/PolicyTablePanel.tsx +++ b/web/console/src/modules/uam/components/role/detail/PolicyTablePanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect } from 'react-redux'; import { TablePanel } from '@tencent/ff-component'; diff --git a/web/console/src/modules/uam/components/role/detail/RoleDetail.tsx b/web/console/src/modules/uam/components/role/detail/RoleDetail.tsx index dfcb3223f..7bf04f511 100644 --- a/web/console/src/modules/uam/components/role/detail/RoleDetail.tsx +++ b/web/console/src/modules/uam/components/role/detail/RoleDetail.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect } from 'react-redux'; import { bindActionCreators } from '@tencent/ff-redux'; diff --git a/web/console/src/modules/uam/components/role/detail/UserActionPanel.tsx b/web/console/src/modules/uam/components/role/detail/UserActionPanel.tsx index 5c77780f3..98ac2a0ed 100644 --- a/web/console/src/modules/uam/components/role/detail/UserActionPanel.tsx +++ b/web/console/src/modules/uam/components/role/detail/UserActionPanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect } from 'react-redux'; import { Justify, Icon, Table, Button, SearchBox } from '@tea/component'; diff --git a/web/console/src/modules/uam/components/role/detail/UserTablePanel.tsx b/web/console/src/modules/uam/components/role/detail/UserTablePanel.tsx index 5a7c78640..9486c245f 100644 --- a/web/console/src/modules/uam/components/role/detail/UserTablePanel.tsx +++ b/web/console/src/modules/uam/components/role/detail/UserTablePanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect } from 'react-redux'; import { TablePanel } from '@tencent/ff-component'; diff --git a/web/console/src/modules/uam/components/role/list/ActionPanel.tsx b/web/console/src/modules/uam/components/role/list/ActionPanel.tsx index 895876d64..41e3e0bb3 100644 --- a/web/console/src/modules/uam/components/role/list/ActionPanel.tsx +++ b/web/console/src/modules/uam/components/role/list/ActionPanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect } from 'react-redux'; import { Justify, Icon, Table, Button, SearchBox } from '@tea/component'; diff --git a/web/console/src/modules/uam/components/role/list/HeaderPanel.tsx b/web/console/src/modules/uam/components/role/list/HeaderPanel.tsx index deb634d31..099f451c5 100644 --- a/web/console/src/modules/uam/components/role/list/HeaderPanel.tsx +++ b/web/console/src/modules/uam/components/role/list/HeaderPanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect } from 'react-redux'; import { Justify, Icon } from '@tea/component'; diff --git a/web/console/src/modules/uam/components/role/list/RoleList.tsx b/web/console/src/modules/uam/components/role/list/RoleList.tsx index b0542ae1b..7500d5213 100644 --- a/web/console/src/modules/uam/components/role/list/RoleList.tsx +++ b/web/console/src/modules/uam/components/role/list/RoleList.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect } from 'react-redux'; import { bindActionCreators } from '@tencent/ff-redux'; diff --git a/web/console/src/modules/uam/components/role/list/TablePanel.tsx b/web/console/src/modules/uam/components/role/list/TablePanel.tsx index a79a9ebe1..54608ca4d 100644 --- a/web/console/src/modules/uam/components/role/list/TablePanel.tsx +++ b/web/console/src/modules/uam/components/role/list/TablePanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect } from 'react-redux'; import { TablePanel as CTablePanel } from '@tencent/ff-component'; diff --git a/web/console/src/modules/uam/components/strategy/StrategyActionPanel.tsx b/web/console/src/modules/uam/components/strategy/StrategyActionPanel.tsx index f6a6b2f5f..bad89923a 100644 --- a/web/console/src/modules/uam/components/strategy/StrategyActionPanel.tsx +++ b/web/console/src/modules/uam/components/strategy/StrategyActionPanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { useDispatch, useSelector } from 'react-redux'; diff --git a/web/console/src/modules/uam/components/strategy/StrategyApp.tsx b/web/console/src/modules/uam/components/strategy/StrategyApp.tsx index 4f7784ceb..d03d9dfaf 100644 --- a/web/console/src/modules/uam/components/strategy/StrategyApp.tsx +++ b/web/console/src/modules/uam/components/strategy/StrategyApp.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { useDispatch, useSelector } from 'react-redux'; diff --git a/web/console/src/modules/uam/components/strategy/StrategyDetailsPanel.tsx b/web/console/src/modules/uam/components/strategy/StrategyDetailsPanel.tsx index 7f7d66363..4b5f762f0 100644 --- a/web/console/src/modules/uam/components/strategy/StrategyDetailsPanel.tsx +++ b/web/console/src/modules/uam/components/strategy/StrategyDetailsPanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { useDispatch, useSelector } from 'react-redux'; diff --git a/web/console/src/modules/uam/components/strategy/StrategyHeadPanel.tsx b/web/console/src/modules/uam/components/strategy/StrategyHeadPanel.tsx index 3f3d3abd7..34306a2fa 100644 --- a/web/console/src/modules/uam/components/strategy/StrategyHeadPanel.tsx +++ b/web/console/src/modules/uam/components/strategy/StrategyHeadPanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { useSelector, useDispatch } from 'react-redux'; import { Justify, Icon } from '@tea/component'; diff --git a/web/console/src/modules/uam/components/strategy/StrategyTablePanel.tsx b/web/console/src/modules/uam/components/strategy/StrategyTablePanel.tsx index 7e990e400..b87f46d06 100644 --- a/web/console/src/modules/uam/components/strategy/StrategyTablePanel.tsx +++ b/web/console/src/modules/uam/components/strategy/StrategyTablePanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { useDispatch, useSelector } from 'react-redux'; diff --git a/web/console/src/modules/uam/components/strategy/associate/GroupAssociatePanel.tsx b/web/console/src/modules/uam/components/strategy/associate/GroupAssociatePanel.tsx index 4ad52de88..5caf84b00 100644 --- a/web/console/src/modules/uam/components/strategy/associate/GroupAssociatePanel.tsx +++ b/web/console/src/modules/uam/components/strategy/associate/GroupAssociatePanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect } from 'react-redux'; import { RootProps } from '../StrategyApp'; diff --git a/web/console/src/modules/uam/components/strategy/associate/GroupAssociateWorkflowDialog.tsx b/web/console/src/modules/uam/components/strategy/associate/GroupAssociateWorkflowDialog.tsx index ed9d074e7..69913656b 100644 --- a/web/console/src/modules/uam/components/strategy/associate/GroupAssociateWorkflowDialog.tsx +++ b/web/console/src/modules/uam/components/strategy/associate/GroupAssociateWorkflowDialog.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect } from 'react-redux'; import { t, Trans } from '@tencent/tea-app/lib/i18n'; diff --git a/web/console/src/modules/uam/components/strategy/detail/GroupActionPanel.tsx b/web/console/src/modules/uam/components/strategy/detail/GroupActionPanel.tsx index 6798680f0..30b64a9f4 100644 --- a/web/console/src/modules/uam/components/strategy/detail/GroupActionPanel.tsx +++ b/web/console/src/modules/uam/components/strategy/detail/GroupActionPanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect } from 'react-redux'; import { Justify, Icon, Table, Button, SearchBox } from '@tea/component'; diff --git a/web/console/src/modules/uam/components/strategy/detail/GroupTablePanel.tsx b/web/console/src/modules/uam/components/strategy/detail/GroupTablePanel.tsx index b4a82e035..b101f1c85 100644 --- a/web/console/src/modules/uam/components/strategy/detail/GroupTablePanel.tsx +++ b/web/console/src/modules/uam/components/strategy/detail/GroupTablePanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect } from 'react-redux'; import { TablePanel } from '@tencent/ff-component'; diff --git a/web/console/src/modules/uam/components/strategy/detail/RoleActionPanel.tsx b/web/console/src/modules/uam/components/strategy/detail/RoleActionPanel.tsx index 686a6a501..5c70beb51 100644 --- a/web/console/src/modules/uam/components/strategy/detail/RoleActionPanel.tsx +++ b/web/console/src/modules/uam/components/strategy/detail/RoleActionPanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect } from 'react-redux'; import { Justify, Icon, Table, Button, SearchBox } from '@tea/component'; diff --git a/web/console/src/modules/uam/components/strategy/detail/RoleTablePanel.tsx b/web/console/src/modules/uam/components/strategy/detail/RoleTablePanel.tsx index a6fb4ff06..dde2f2255 100644 --- a/web/console/src/modules/uam/components/strategy/detail/RoleTablePanel.tsx +++ b/web/console/src/modules/uam/components/strategy/detail/RoleTablePanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect } from 'react-redux'; import { TablePanel } from '@tencent/ff-component'; diff --git a/web/console/src/modules/uam/components/user/UserApp.tsx b/web/console/src/modules/uam/components/user/UserApp.tsx index 670387da9..dfcc5c7df 100644 --- a/web/console/src/modules/uam/components/user/UserApp.tsx +++ b/web/console/src/modules/uam/components/user/UserApp.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { useDispatch, useSelector } from 'react-redux'; import { Layout, Tabs, TabPanel } from '@tencent/tea-component'; diff --git a/web/console/src/modules/uam/components/user/UserPanel.tsx b/web/console/src/modules/uam/components/user/UserPanel.tsx index 24dc71c16..04890f51d 100644 --- a/web/console/src/modules/uam/components/user/UserPanel.tsx +++ b/web/console/src/modules/uam/components/user/UserPanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { useDispatch, useSelector } from 'react-redux'; import { bindActionCreators } from '@tencent/ff-redux'; diff --git a/web/console/src/modules/uam/components/user/create/UserCreate.tsx b/web/console/src/modules/uam/components/user/create/UserCreate.tsx index acc5923ff..e70b0d9bc 100644 --- a/web/console/src/modules/uam/components/user/create/UserCreate.tsx +++ b/web/console/src/modules/uam/components/user/create/UserCreate.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { useSelector, useDispatch } from 'react-redux'; import { t, Trans } from '@tencent/tea-app/lib/i18n'; diff --git a/web/console/src/modules/uam/components/user/detail/GroupActionPanel.tsx b/web/console/src/modules/uam/components/user/detail/GroupActionPanel.tsx index cbb7f4ed8..cde669362 100644 --- a/web/console/src/modules/uam/components/user/detail/GroupActionPanel.tsx +++ b/web/console/src/modules/uam/components/user/detail/GroupActionPanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect } from 'react-redux'; import { Justify, Icon, Table, Button, SearchBox } from '@tea/component'; diff --git a/web/console/src/modules/uam/components/user/detail/GroupTablePanel.tsx b/web/console/src/modules/uam/components/user/detail/GroupTablePanel.tsx index 786eaf8ca..cb85a3ab8 100644 --- a/web/console/src/modules/uam/components/user/detail/GroupTablePanel.tsx +++ b/web/console/src/modules/uam/components/user/detail/GroupTablePanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect } from 'react-redux'; import { TablePanel } from '@tencent/ff-component'; diff --git a/web/console/src/modules/uam/components/user/detail/RoleActionPanel.tsx b/web/console/src/modules/uam/components/user/detail/RoleActionPanel.tsx index cfa29d270..44bdd7b5c 100644 --- a/web/console/src/modules/uam/components/user/detail/RoleActionPanel.tsx +++ b/web/console/src/modules/uam/components/user/detail/RoleActionPanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect } from 'react-redux'; import { Justify, Icon, Table, Button, SearchBox } from '@tea/component'; diff --git a/web/console/src/modules/uam/components/user/detail/RoleTablePanel.tsx b/web/console/src/modules/uam/components/user/detail/RoleTablePanel.tsx index 1be724910..7f4427d6b 100644 --- a/web/console/src/modules/uam/components/user/detail/RoleTablePanel.tsx +++ b/web/console/src/modules/uam/components/user/detail/RoleTablePanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect } from 'react-redux'; import { TablePanel } from '@tencent/ff-component'; diff --git a/web/console/src/modules/uam/components/user/detail/UserDetail.tsx b/web/console/src/modules/uam/components/user/detail/UserDetail.tsx index eab4ddee7..10f48c390 100644 --- a/web/console/src/modules/uam/components/user/detail/UserDetail.tsx +++ b/web/console/src/modules/uam/components/user/detail/UserDetail.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { useDispatch, useSelector } from 'react-redux'; diff --git a/web/console/src/modules/uam/components/user/list/PasswordModifyDialog.tsx b/web/console/src/modules/uam/components/user/list/PasswordModifyDialog.tsx index 3bb18e74e..567165ebd 100644 --- a/web/console/src/modules/uam/components/user/list/PasswordModifyDialog.tsx +++ b/web/console/src/modules/uam/components/user/list/PasswordModifyDialog.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { useSelector, useDispatch } from 'react-redux'; import { Button, Modal, Form, Input, Table } from '@tea/component'; diff --git a/web/console/src/modules/uam/components/user/list/RoleModifyDialog.tsx b/web/console/src/modules/uam/components/user/list/RoleModifyDialog.tsx index 16805f698..dc2c07e9e 100644 --- a/web/console/src/modules/uam/components/user/list/RoleModifyDialog.tsx +++ b/web/console/src/modules/uam/components/user/list/RoleModifyDialog.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { useSelector, useDispatch } from 'react-redux'; import { Button, Modal, Form, Text, Radio, Transfer, Table, SearchBox } from '@tea/component'; diff --git a/web/console/src/modules/uam/components/user/list/UserActionPanel.tsx b/web/console/src/modules/uam/components/user/list/UserActionPanel.tsx index db09fd08c..424ea2815 100644 --- a/web/console/src/modules/uam/components/user/list/UserActionPanel.tsx +++ b/web/console/src/modules/uam/components/user/list/UserActionPanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { useDispatch, useSelector } from 'react-redux'; import { Justify, Icon, Table, Button, SearchBox } from '@tea/component'; diff --git a/web/console/src/modules/uam/components/user/list/UserList.tsx b/web/console/src/modules/uam/components/user/list/UserList.tsx index 7deeb1e9c..2295394d3 100644 --- a/web/console/src/modules/uam/components/user/list/UserList.tsx +++ b/web/console/src/modules/uam/components/user/list/UserList.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { useDispatch, useSelector } from 'react-redux'; import { Layout } from '@tencent/tea-component'; diff --git a/web/console/src/modules/uam/components/user/list/UserTablePanel.tsx b/web/console/src/modules/uam/components/user/list/UserTablePanel.tsx index 3b41eed06..306b8a2f6 100644 --- a/web/console/src/modules/uam/components/user/list/UserTablePanel.tsx +++ b/web/console/src/modules/uam/components/user/list/UserTablePanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { useDispatch, useSelector } from 'react-redux'; diff --git a/web/console/src/modules/uam/constants/ActionTypes.ts b/web/console/src/modules/uam/constants/ActionTypes.ts index cacd750cd..8b5042815 100644 --- a/web/console/src/modules/uam/constants/ActionTypes.ts +++ b/web/console/src/modules/uam/constants/ActionTypes.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export const UserList = 'UserList'; export const FetchUserList = 'FetchUserList'; export const AddUser = 'AddUser'; diff --git a/web/console/src/modules/uam/constants/Config.ts b/web/console/src/modules/uam/constants/Config.ts index cd148b2ec..0799f56d0 100644 --- a/web/console/src/modules/uam/constants/Config.ts +++ b/web/console/src/modules/uam/constants/Config.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { t, Trans } from '@tencent/tea-app/lib/i18n'; export const VALIDATE_PASSWORD_RULE = { diff --git a/web/console/src/modules/uam/constants/GroupValidateConfig.ts b/web/console/src/modules/uam/constants/GroupValidateConfig.ts index d4707a092..a39c40f0a 100644 --- a/web/console/src/modules/uam/constants/GroupValidateConfig.ts +++ b/web/console/src/modules/uam/constants/GroupValidateConfig.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { ModelTypeEnum, RuleTypeEnum, ValidateSchema, ValidatorStatusEnum } from '@tencent/ff-validator'; import { t } from '@tencent/tea-app/lib/i18n'; diff --git a/web/console/src/modules/uam/constants/RoleValidateConfig.ts b/web/console/src/modules/uam/constants/RoleValidateConfig.ts index d7e6ffaf1..8a1aee30d 100644 --- a/web/console/src/modules/uam/constants/RoleValidateConfig.ts +++ b/web/console/src/modules/uam/constants/RoleValidateConfig.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { ModelTypeEnum, RuleTypeEnum, ValidateSchema, ValidatorStatusEnum } from '@tencent/ff-validator'; import { t } from '@tencent/tea-app/lib/i18n'; diff --git a/web/console/src/modules/uam/constants/initState.ts b/web/console/src/modules/uam/constants/initState.ts index 0a2361cfc..1b7f18926 100644 --- a/web/console/src/modules/uam/constants/initState.ts +++ b/web/console/src/modules/uam/constants/initState.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { initValidator } from '../../common/models'; import { uuid } from '@tencent/ff-redux'; diff --git a/web/console/src/modules/uam/index.tsx b/web/console/src/modules/uam/index.tsx index 007fee651..ac0c97cc5 100644 --- a/web/console/src/modules/uam/index.tsx +++ b/web/console/src/modules/uam/index.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { UamAppContainer } from './components/UamApp'; diff --git a/web/console/src/modules/uam/models/Cagtegory.ts b/web/console/src/modules/uam/models/Cagtegory.ts index 90886e061..2cb0f33ce 100644 --- a/web/console/src/modules/uam/models/Cagtegory.ts +++ b/web/console/src/modules/uam/models/Cagtegory.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { Identifiable } from '@tencent/ff-redux'; export interface Category extends Identifiable { diff --git a/web/console/src/modules/uam/models/CommonUser.ts b/web/console/src/modules/uam/models/CommonUser.ts index bda3d6d3e..cbdd74119 100644 --- a/web/console/src/modules/uam/models/CommonUser.ts +++ b/web/console/src/modules/uam/models/CommonUser.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { Identifiable } from '@tencent/ff-redux'; /** 原有User在localidentities和user概念之间混用了,anyway,用于关联角色等 */ diff --git a/web/console/src/modules/uam/models/Group.ts b/web/console/src/modules/uam/models/Group.ts index 3f43380fd..d82bd427a 100644 --- a/web/console/src/modules/uam/models/Group.ts +++ b/web/console/src/modules/uam/models/Group.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { Identifiable } from '@tencent/ff-redux'; import { Validation } from '@tencent/ff-validator'; diff --git a/web/console/src/modules/uam/models/Policy.ts b/web/console/src/modules/uam/models/Policy.ts index ad016732f..024f76335 100644 --- a/web/console/src/modules/uam/models/Policy.ts +++ b/web/console/src/modules/uam/models/Policy.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { Identifiable } from '@tencent/ff-redux'; import { Validation } from '../../common/models'; diff --git a/web/console/src/modules/uam/models/Role.ts b/web/console/src/modules/uam/models/Role.ts index 6841ee075..e73cb6c41 100644 --- a/web/console/src/modules/uam/models/Role.ts +++ b/web/console/src/modules/uam/models/Role.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { Identifiable } from '@tencent/ff-redux'; import { Validation } from '../../common/models'; diff --git a/web/console/src/modules/uam/models/RootState.ts b/web/console/src/modules/uam/models/RootState.ts index 939c3ff14..f3ceaaa74 100644 --- a/web/console/src/modules/uam/models/RootState.ts +++ b/web/console/src/modules/uam/models/RootState.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { User, UserFilter, diff --git a/web/console/src/modules/uam/models/Strategy.ts b/web/console/src/modules/uam/models/Strategy.ts index d16a53f67..ac1fcdd1a 100644 --- a/web/console/src/modules/uam/models/Strategy.ts +++ b/web/console/src/modules/uam/models/Strategy.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { Identifiable } from '@tencent/ff-redux'; export interface Strategy extends Identifiable { diff --git a/web/console/src/modules/uam/models/StrategyFilter.ts b/web/console/src/modules/uam/models/StrategyFilter.ts index 90ab7a5e3..5631cd548 100644 --- a/web/console/src/modules/uam/models/StrategyFilter.ts +++ b/web/console/src/modules/uam/models/StrategyFilter.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export interface StrategyFilter { /** 策略名称 */ name?: string; diff --git a/web/console/src/modules/uam/models/User.ts b/web/console/src/modules/uam/models/User.ts index 3c022d355..a946d8086 100644 --- a/web/console/src/modules/uam/models/User.ts +++ b/web/console/src/modules/uam/models/User.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { Identifiable } from '@tencent/ff-redux'; export interface User extends Identifiable { diff --git a/web/console/src/modules/uam/models/UserFilter.ts b/web/console/src/modules/uam/models/UserFilter.ts index 7883cfd70..87e58fa62 100644 --- a/web/console/src/modules/uam/models/UserFilter.ts +++ b/web/console/src/modules/uam/models/UserFilter.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export interface UserFilter { /** 用户名(唯一) */ name?: string; diff --git a/web/console/src/modules/uam/models/index.ts b/web/console/src/modules/uam/models/index.ts index 417a5b0df..cf579b586 100644 --- a/web/console/src/modules/uam/models/index.ts +++ b/web/console/src/modules/uam/models/index.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export { RootState } from './RootState'; export { User } from './User'; export { UserFilter } from './UserFilter'; diff --git a/web/console/src/modules/uam/reducers/RootReducer.ts b/web/console/src/modules/uam/reducers/RootReducer.ts index edc908dbe..9ea3d2546 100644 --- a/web/console/src/modules/uam/reducers/RootReducer.ts +++ b/web/console/src/modules/uam/reducers/RootReducer.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { combineReducers } from 'redux'; import { diff --git a/web/console/src/modules/uam/router.ts b/web/console/src/modules/uam/router.ts index 42c78bc6c..f7aaa4102 100644 --- a/web/console/src/modules/uam/router.ts +++ b/web/console/src/modules/uam/router.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { Router } from '../../../helpers/Router'; /** diff --git a/web/console/src/modules/uam/stores/RootStore.ts b/web/console/src/modules/uam/stores/RootStore.ts index 528dcd48c..83ff139b0 100644 --- a/web/console/src/modules/uam/stores/RootStore.ts +++ b/web/console/src/modules/uam/stores/RootStore.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { createStore } from '@tencent/ff-redux'; import { generateResetableReducer } from '../../../../helpers'; diff --git a/web/console/src/webApi/cluster.ts b/web/console/src/webApi/cluster.ts index d254c70d2..fafaa30b6 100644 --- a/web/console/src/webApi/cluster.ts +++ b/web/console/src/webApi/cluster.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import Request from './request'; import { compareVersion } from '@helper/version'; diff --git a/web/console/src/webApi/promethus.ts b/web/console/src/webApi/promethus.ts index 214f1fa9f..0b3746999 100644 --- a/web/console/src/webApi/promethus.ts +++ b/web/console/src/webApi/promethus.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import Request from './request'; export interface EnablePromethusParams { diff --git a/web/console/src/webApi/request.ts b/web/console/src/webApi/request.ts index b25140e61..808732b77 100644 --- a/web/console/src/webApi/request.ts +++ b/web/console/src/webApi/request.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { changeForbiddentConfig } from '@/index.tke'; import { Method } from '@helper'; import Axios from 'axios'; diff --git a/web/console/src/webApi/tkestack.ts b/web/console/src/webApi/tkestack.ts index 497336592..78d66a60f 100644 --- a/web/console/src/webApi/tkestack.ts +++ b/web/console/src/webApi/tkestack.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import Request from './request'; export const getTkeStackVersion = async () => { diff --git a/web/console/webpack/loaders/ifelse-loader.js b/web/console/webpack/loaders/ifelse-loader.js index 72add9cd1..1847f38d2 100644 --- a/web/console/webpack/loaders/ifelse-loader.js +++ b/web/console/webpack/loaders/ifelse-loader.js @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ const parse = require('./lib/parse'); module.exports = function (source) { diff --git a/web/console/webpack/loaders/iffile-loader.js b/web/console/webpack/loaders/iffile-loader.js index d2f847184..bef91f094 100644 --- a/web/console/webpack/loaders/iffile-loader.js +++ b/web/console/webpack/loaders/iffile-loader.js @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ const fs = require('fs'); const currentEntry = ''; diff --git a/web/console/webpack/loaders/lib/parse.js b/web/console/webpack/loaders/lib/parse.js index b0beceb30..6fdf39987 100644 --- a/web/console/webpack/loaders/lib/parse.js +++ b/web/console/webpack/loaders/lib/parse.js @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ function parse(source, defs, verbose) { let lines = source.split('\n'); lines = lines.map(function (line) { diff --git a/web/console/webpack/webpack.base.js b/web/console/webpack/webpack.base.js index 9caee8be7..607830a69 100644 --- a/web/console/webpack/webpack.base.js +++ b/web/console/webpack/webpack.base.js @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ const path = require('path'); const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin; const webpack = require('webpack'); diff --git a/web/console/webpack/webpack.dev.js b/web/console/webpack/webpack.dev.js index f66f032af..450debdb8 100644 --- a/web/console/webpack/webpack.dev.js +++ b/web/console/webpack/webpack.dev.js @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ const baseConfig = require('./webpack.base'); const SpeedMeasurePlugin = require('speed-measure-webpack-plugin'); const smp = new SpeedMeasurePlugin(); diff --git a/web/console/webpack/webpack.prod.js b/web/console/webpack/webpack.prod.js index 5b2bdb5e8..1ded9ea0a 100644 --- a/web/console/webpack/webpack.prod.js +++ b/web/console/webpack/webpack.prod.js @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ const baseConfig = require('./webpack.base'); module.exports = ({ version }) => baseConfig({ version, mode: 'production' }); diff --git a/web/installer/ambient/appUtil.d.ts b/web/installer/ambient/appUtil.d.ts index a3f37c4fd..8d8f88ad5 100644 --- a/web/installer/ambient/appUtil.d.ts +++ b/web/installer/ambient/appUtil.d.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ declare namespace nmc { interface AppUtil{ getRegionId: ()=>RegionId; diff --git a/web/installer/ambient/clipboard.ts b/web/installer/ambient/clipboard.ts index 659c088a7..867770da4 100644 --- a/web/installer/ambient/clipboard.ts +++ b/web/installer/ambient/clipboard.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ declare var __clipboard; declare module "clipboard" { diff --git a/web/installer/ambient/index.d.ts b/web/installer/ambient/index.d.ts index 00a25716c..6414df46e 100644 --- a/web/installer/ambient/index.d.ts +++ b/web/installer/ambient/index.d.ts @@ -1 +1,18 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ /// \ No newline at end of file diff --git a/web/installer/ambient/redux.d.ts b/web/installer/ambient/redux.d.ts index 4bd89b8ef..3f6186195 100644 --- a/web/installer/ambient/redux.d.ts +++ b/web/installer/ambient/redux.d.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ declare module Redux { interface ActionCreator extends Function { (...args: any[]): any; diff --git a/web/installer/develop/index.ts b/web/installer/develop/index.ts index 14cdcf687..9b47cb189 100644 --- a/web/installer/develop/index.ts +++ b/web/installer/develop/index.ts @@ -1,2 +1,19 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ require('ts-node/register'); require('./server/index.ts'); diff --git a/web/installer/develop/server/index.ts b/web/installer/develop/server/index.ts index 464be287c..dd58bc453 100644 --- a/web/installer/develop/server/index.ts +++ b/web/installer/develop/server/index.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { serve } from './server'; serve(8088); diff --git a/web/installer/develop/server/server.ts b/web/installer/develop/server/server.ts index 43ca9fbc9..f9d851432 100644 --- a/web/installer/develop/server/server.ts +++ b/web/installer/develop/server/server.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as express from 'express'; import * as path from 'path'; import * as webpack from 'webpack'; diff --git a/web/installer/helpers/Validator.ts b/web/installer/helpers/Validator.ts index 229ed2f5c..f7442c4ce 100644 --- a/web/installer/helpers/Validator.ts +++ b/web/installer/helpers/Validator.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export interface Validation { /**验证状态 0: 初始状态;1:校验通过;2:校验不通过 */ status?: number; diff --git a/web/installer/helpers/downloadCrt.ts b/web/installer/helpers/downloadCrt.ts index 8d19e4de0..31bdcd3db 100644 --- a/web/installer/helpers/downloadCrt.ts +++ b/web/installer/helpers/downloadCrt.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ const tips = seajs.require('tips'); export function downloadCrt(crtText, filename = 'cluster-ca.crt') { diff --git a/web/installer/helpers/index.ts b/web/installer/helpers/index.ts index 23043df4a..764544e16 100644 --- a/web/installer/helpers/index.ts +++ b/web/installer/helpers/index.ts @@ -1,2 +1,19 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export { ResetStoreAction, generateResetableReducer } from './reduxStore'; export { downloadCrt } from './downloadCrt'; diff --git a/web/installer/helpers/reduxAction.ts b/web/installer/helpers/reduxAction.ts index 9fa6efe4e..95cd11a58 100644 --- a/web/installer/helpers/reduxAction.ts +++ b/web/installer/helpers/reduxAction.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { Dispatch } from 'redux'; import { FetcherPayload, FetcherTrigger, FetchOptions, ReduxAction } from '@tencent/ff-redux'; diff --git a/web/installer/helpers/reduxReducer.ts b/web/installer/helpers/reduxReducer.ts index 8ec009d74..a9d326b7c 100644 --- a/web/installer/helpers/reduxReducer.ts +++ b/web/installer/helpers/reduxReducer.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { generateFetcherReducer } from '@tencent/ff-redux'; export const createFetcherReducer = generateFetcherReducer; diff --git a/web/installer/helpers/reduxStore.ts b/web/installer/helpers/reduxStore.ts index 07e61d566..7bc8adf22 100644 --- a/web/installer/helpers/reduxStore.ts +++ b/web/installer/helpers/reduxStore.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { Reducer } from 'redux'; /** diff --git a/web/installer/index.tsx b/web/installer/index.tsx index 815dc2bf3..60043b9c7 100644 --- a/web/installer/index.tsx +++ b/web/installer/index.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from './node_modules/react'; window['React16'] = React; import * as ReactDOM from './node_modules/react-dom'; diff --git a/web/installer/lib/ff-component/index.ts b/web/installer/lib/ff-component/index.ts index 8420b1093..a0d03e4f1 100644 --- a/web/installer/lib/ff-component/index.ts +++ b/web/installer/lib/ff-component/index.ts @@ -1 +1,18 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export * from './src'; diff --git a/web/installer/lib/ff-component/src/cam/Cam.tsx b/web/installer/lib/ff-component/src/cam/Cam.tsx index 04fa4aa6b..a7fd1d294 100644 --- a/web/installer/lib/ff-component/src/cam/Cam.tsx +++ b/web/installer/lib/ff-component/src/cam/Cam.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { BaseReactProps } from '@tencent/ff-redux'; diff --git a/web/installer/lib/ff-component/src/cam/index.ts b/web/installer/lib/ff-component/src/cam/index.ts index a4d0f0f61..39e441d2a 100644 --- a/web/installer/lib/ff-component/src/cam/index.ts +++ b/web/installer/lib/ff-component/src/cam/index.ts @@ -1 +1,18 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export { CamBox, CamTips, CamPanel, isCamRefused } from './Cam'; diff --git a/web/installer/lib/ff-component/src/formpanel/Checkbox.tsx b/web/installer/lib/ff-component/src/formpanel/Checkbox.tsx index 845d584a7..5e008103e 100644 --- a/web/installer/lib/ff-component/src/formpanel/Checkbox.tsx +++ b/web/installer/lib/ff-component/src/formpanel/Checkbox.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { Checkbox, CheckboxProps } from '@tencent/tea-component'; diff --git a/web/installer/lib/ff-component/src/formpanel/Checkboxs.tsx b/web/installer/lib/ff-component/src/formpanel/Checkboxs.tsx index f5ababda0..5e4fb1cf6 100644 --- a/web/installer/lib/ff-component/src/formpanel/Checkboxs.tsx +++ b/web/installer/lib/ff-component/src/formpanel/Checkboxs.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { FetchState, FFListAction, FFListModel } from '@tencent/ff-redux'; diff --git a/web/installer/lib/ff-component/src/formpanel/Footer.tsx b/web/installer/lib/ff-component/src/formpanel/Footer.tsx index 82bfe1e32..a0eccea5c 100644 --- a/web/installer/lib/ff-component/src/formpanel/Footer.tsx +++ b/web/installer/lib/ff-component/src/formpanel/Footer.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { insertCSS } from '@tencent/ff-redux'; diff --git a/web/installer/lib/ff-component/src/formpanel/FormPanel.tsx b/web/installer/lib/ff-component/src/formpanel/FormPanel.tsx index bec68e883..70a230420 100644 --- a/web/installer/lib/ff-component/src/formpanel/FormPanel.tsx +++ b/web/installer/lib/ff-component/src/formpanel/FormPanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { t, Trans } from '@tencent/tea-app/lib/i18n'; diff --git a/web/installer/lib/ff-component/src/formpanel/HelpText.tsx b/web/installer/lib/ff-component/src/formpanel/HelpText.tsx index 8db4751c5..76858c6c3 100644 --- a/web/installer/lib/ff-component/src/formpanel/HelpText.tsx +++ b/web/installer/lib/ff-component/src/formpanel/HelpText.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { Text } from '@tencent/tea-component'; diff --git a/web/installer/lib/ff-component/src/formpanel/InlineText.tsx b/web/installer/lib/ff-component/src/formpanel/InlineText.tsx index 7faf9720f..6afdd6cb5 100644 --- a/web/installer/lib/ff-component/src/formpanel/InlineText.tsx +++ b/web/installer/lib/ff-component/src/formpanel/InlineText.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { Text } from '@tencent/tea-component'; diff --git a/web/installer/lib/ff-component/src/formpanel/Input.tsx b/web/installer/lib/ff-component/src/formpanel/Input.tsx index b3aa3c10e..aaab6cc9c 100644 --- a/web/installer/lib/ff-component/src/formpanel/Input.tsx +++ b/web/installer/lib/ff-component/src/formpanel/Input.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { t, Trans } from '@tencent/tea-app/lib/i18n'; diff --git a/web/installer/lib/ff-component/src/formpanel/InputNumber.tsx b/web/installer/lib/ff-component/src/formpanel/InputNumber.tsx index 1ddeb14c7..9042ce626 100644 --- a/web/installer/lib/ff-component/src/formpanel/InputNumber.tsx +++ b/web/installer/lib/ff-component/src/formpanel/InputNumber.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { t, Trans } from '@tencent/tea-app/lib/i18n'; diff --git a/web/installer/lib/ff-component/src/formpanel/Item.tsx b/web/installer/lib/ff-component/src/formpanel/Item.tsx index e9a3d8696..4ea785fbd 100644 --- a/web/installer/lib/ff-component/src/formpanel/Item.tsx +++ b/web/installer/lib/ff-component/src/formpanel/Item.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { insertCSS } from '@tencent/ff-redux'; diff --git a/web/installer/lib/ff-component/src/formpanel/KeyValuePanel.tsx b/web/installer/lib/ff-component/src/formpanel/KeyValuePanel.tsx index ffe636138..264c37611 100644 --- a/web/installer/lib/ff-component/src/formpanel/KeyValuePanel.tsx +++ b/web/installer/lib/ff-component/src/formpanel/KeyValuePanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { t, Trans } from '@tencent/tea-app/lib/i18n'; diff --git a/web/installer/lib/ff-component/src/formpanel/Radios.tsx b/web/installer/lib/ff-component/src/formpanel/Radios.tsx index ef1e79c7f..5fcca6e4b 100644 --- a/web/installer/lib/ff-component/src/formpanel/Radios.tsx +++ b/web/installer/lib/ff-component/src/formpanel/Radios.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { FetchState, FFListAction, FFListModel } from '@tencent/ff-redux'; diff --git a/web/installer/lib/ff-component/src/formpanel/Segment.tsx b/web/installer/lib/ff-component/src/formpanel/Segment.tsx index 230532b8c..78a6ab484 100644 --- a/web/installer/lib/ff-component/src/formpanel/Segment.tsx +++ b/web/installer/lib/ff-component/src/formpanel/Segment.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { FetchState, FFListAction, FFListModel, insertCSS } from '@tencent/ff-redux'; diff --git a/web/installer/lib/ff-component/src/formpanel/Select.tsx b/web/installer/lib/ff-component/src/formpanel/Select.tsx index 0ee2a1341..d5550757e 100644 --- a/web/installer/lib/ff-component/src/formpanel/Select.tsx +++ b/web/installer/lib/ff-component/src/formpanel/Select.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { FetchState, FFListAction, FFListModel } from '@tencent/ff-redux'; diff --git a/web/installer/lib/ff-component/src/formpanel/Switch.tsx b/web/installer/lib/ff-component/src/formpanel/Switch.tsx index d6a94f899..cbf5157be 100644 --- a/web/installer/lib/ff-component/src/formpanel/Switch.tsx +++ b/web/installer/lib/ff-component/src/formpanel/Switch.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { Switch, SwitchProps } from '@tencent/tea-component'; diff --git a/web/installer/lib/ff-component/src/formpanel/Text.tsx b/web/installer/lib/ff-component/src/formpanel/Text.tsx index f4b070f7b..71440fa25 100644 --- a/web/installer/lib/ff-component/src/formpanel/Text.tsx +++ b/web/installer/lib/ff-component/src/formpanel/Text.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { FormText, Icon } from '@tencent/tea-component'; diff --git a/web/installer/lib/ff-component/src/formpanel/TransferTable.tsx b/web/installer/lib/ff-component/src/formpanel/TransferTable.tsx index ef11fc19b..a4161aa00 100644 --- a/web/installer/lib/ff-component/src/formpanel/TransferTable.tsx +++ b/web/installer/lib/ff-component/src/formpanel/TransferTable.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { FetcherState, FetchState, FFListAction, FFListModel, RecordSet } from '@tencent/ff-redux'; diff --git a/web/installer/lib/ff-component/src/formpanel/Validatable.tsx b/web/installer/lib/ff-component/src/formpanel/Validatable.tsx index f070ab281..217c3b33c 100644 --- a/web/installer/lib/ff-component/src/formpanel/Validatable.tsx +++ b/web/installer/lib/ff-component/src/formpanel/Validatable.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { Placement } from 'popper.js'; import * as React from 'react'; diff --git a/web/installer/lib/ff-component/src/formpanel/index.ts b/web/installer/lib/ff-component/src/formpanel/index.ts index a7023dbad..16387a80a 100644 --- a/web/installer/lib/ff-component/src/formpanel/index.ts +++ b/web/installer/lib/ff-component/src/formpanel/index.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export * from './Checkbox'; export * from './Checkboxs'; export * from './Footer'; diff --git a/web/installer/lib/ff-component/src/index.ts b/web/installer/lib/ff-component/src/index.ts index fdb9cb61d..dacdf5e98 100644 --- a/web/installer/lib/ff-component/src/index.ts +++ b/web/installer/lib/ff-component/src/index.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export * from './formpanel'; export * from './tablepanel'; export * from './cam'; diff --git a/web/installer/lib/ff-component/src/lib/classname.ts b/web/installer/lib/ff-component/src/lib/classname.ts index 290bae2a8..394a66c97 100644 --- a/web/installer/lib/ff-component/src/lib/classname.ts +++ b/web/installer/lib/ff-component/src/lib/classname.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ let hasOwn = {}.hasOwnProperty; export function classNames(...args) { diff --git a/web/installer/lib/ff-component/src/lib/index.ts b/web/installer/lib/ff-component/src/lib/index.ts index 683888032..fa8a52285 100644 --- a/web/installer/lib/ff-component/src/lib/index.ts +++ b/web/installer/lib/ff-component/src/lib/index.ts @@ -1 +1,18 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export * from './classname'; diff --git a/web/installer/lib/ff-component/src/tablepanel/TablePanel.tsx b/web/installer/lib/ff-component/src/tablepanel/TablePanel.tsx index d15be4d07..7a59d0d32 100644 --- a/web/installer/lib/ff-component/src/tablepanel/TablePanel.tsx +++ b/web/installer/lib/ff-component/src/tablepanel/TablePanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { FetchState, FFListAction, FFListModel, insertCSS, uuid } from '@tencent/ff-redux'; diff --git a/web/installer/lib/ff-component/src/tablepanel/TagSearch.tsx b/web/installer/lib/ff-component/src/tablepanel/TagSearch.tsx index 398ad3f0d..8808fede6 100644 --- a/web/installer/lib/ff-component/src/tablepanel/TagSearch.tsx +++ b/web/installer/lib/ff-component/src/tablepanel/TagSearch.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { FFListAction, FFListModel } from '@tencent/ff-redux'; diff --git a/web/installer/lib/ff-component/src/tablepanel/index.ts b/web/installer/lib/ff-component/src/tablepanel/index.ts index 1da35a4ba..bc02d886a 100644 --- a/web/installer/lib/ff-component/src/tablepanel/index.ts +++ b/web/installer/lib/ff-component/src/tablepanel/index.ts @@ -1,2 +1,19 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export { TablePanel, TablePanelColumnProps } from './TablePanel'; export { TablePanelTagSearchBox, TablePanelTagSearchProps } from './TagSearch'; diff --git a/web/installer/lib/ff-redux/index.ts b/web/installer/lib/ff-redux/index.ts index 52b6c25af..91aceb716 100644 --- a/web/installer/lib/ff-redux/index.ts +++ b/web/installer/lib/ff-redux/index.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export * from './src'; export * from './libs/qcloud-lib'; export * from './libs/qcloud-redux-fetcher'; diff --git a/web/installer/lib/ff-redux/libs/qcloud-lib/decorators/OnOuterClick.ts b/web/installer/lib/ff-redux/libs/qcloud-lib/decorators/OnOuterClick.ts index 196098a02..62bbfe3f4 100644 --- a/web/installer/lib/ff-redux/libs/qcloud-lib/decorators/OnOuterClick.ts +++ b/web/installer/lib/ff-redux/libs/qcloud-lib/decorators/OnOuterClick.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import * as ReactDom from 'react-dom'; diff --git a/web/installer/lib/ff-redux/libs/qcloud-lib/decorators/OnResize.ts b/web/installer/lib/ff-redux/libs/qcloud-lib/decorators/OnResize.ts index 44c55bfc7..42c393845 100644 --- a/web/installer/lib/ff-redux/libs/qcloud-lib/decorators/OnResize.ts +++ b/web/installer/lib/ff-redux/libs/qcloud-lib/decorators/OnResize.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { appendFunction } from '../helpers/appendFunction'; diff --git a/web/installer/lib/ff-redux/libs/qcloud-lib/helpers/addComma.ts b/web/installer/lib/ff-redux/libs/qcloud-lib/helpers/addComma.ts index 34899d49a..93c0515c6 100644 --- a/web/installer/lib/ff-redux/libs/qcloud-lib/helpers/addComma.ts +++ b/web/installer/lib/ff-redux/libs/qcloud-lib/helpers/addComma.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ /** * 位数字添加逗号分隔 * diff --git a/web/installer/lib/ff-redux/libs/qcloud-lib/helpers/appendFunction.ts b/web/installer/lib/ff-redux/libs/qcloud-lib/helpers/appendFunction.ts index f1f8b1a85..b446d6687 100644 --- a/web/installer/lib/ff-redux/libs/qcloud-lib/helpers/appendFunction.ts +++ b/web/installer/lib/ff-redux/libs/qcloud-lib/helpers/appendFunction.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ /** * 在指定函数后面追加一个函数 */ diff --git a/web/installer/lib/ff-redux/libs/qcloud-lib/helpers/bindActionCreators.ts b/web/installer/lib/ff-redux/libs/qcloud-lib/helpers/bindActionCreators.ts index 2b347440d..ddcf1df8a 100644 --- a/web/installer/lib/ff-redux/libs/qcloud-lib/helpers/bindActionCreators.ts +++ b/web/installer/lib/ff-redux/libs/qcloud-lib/helpers/bindActionCreators.ts @@ -1,4 +1,21 @@ -/** +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ +/** * like redux.bindActionCreators but do it recurisivly * */ export function bindActionCreators(actions: T, dispatch: Redux.Dispatch): T { diff --git a/web/installer/lib/ff-redux/libs/qcloud-lib/helpers/collectionPaging.ts b/web/installer/lib/ff-redux/libs/qcloud-lib/helpers/collectionPaging.ts index dbcfa0ec5..60f9c0607 100644 --- a/web/installer/lib/ff-redux/libs/qcloud-lib/helpers/collectionPaging.ts +++ b/web/installer/lib/ff-redux/libs/qcloud-lib/helpers/collectionPaging.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { PagingQuery } from '../../../'; // 集合分页 diff --git a/web/installer/lib/ff-redux/libs/qcloud-lib/helpers/collectionWhere.ts b/web/installer/lib/ff-redux/libs/qcloud-lib/helpers/collectionWhere.ts index 4e20323ef..f486f49db 100644 --- a/web/installer/lib/ff-redux/libs/qcloud-lib/helpers/collectionWhere.ts +++ b/web/installer/lib/ff-redux/libs/qcloud-lib/helpers/collectionWhere.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ /** * 集合筛选 * */ diff --git a/web/installer/lib/ff-redux/libs/qcloud-lib/helpers/createConstant.ts b/web/installer/lib/ff-redux/libs/qcloud-lib/helpers/createConstant.ts index 102575f90..ed3893feb 100644 --- a/web/installer/lib/ff-redux/libs/qcloud-lib/helpers/createConstant.ts +++ b/web/installer/lib/ff-redux/libs/qcloud-lib/helpers/createConstant.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ /** 从枚举类型创建 key-value 一样的常量 */ export function createConstant(enumType: T): T { let constant = {}; diff --git a/web/installer/lib/ff-redux/libs/qcloud-lib/helpers/createStore.ts b/web/installer/lib/ff-redux/libs/qcloud-lib/helpers/createStore.ts index c684419f9..58e9a9ba4 100644 --- a/web/installer/lib/ff-redux/libs/qcloud-lib/helpers/createStore.ts +++ b/web/installer/lib/ff-redux/libs/qcloud-lib/helpers/createStore.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { applyMiddleware, createStore as createReduxStore } from 'redux'; import { createLogger } from 'redux-logger'; import thunk from 'redux-thunk'; diff --git a/web/installer/lib/ff-redux/libs/qcloud-lib/helpers/deepClone.ts b/web/installer/lib/ff-redux/libs/qcloud-lib/helpers/deepClone.ts index b08f8db91..c99b802a3 100644 --- a/web/installer/lib/ff-redux/libs/qcloud-lib/helpers/deepClone.ts +++ b/web/installer/lib/ff-redux/libs/qcloud-lib/helpers/deepClone.ts @@ -1,4 +1,21 @@ -/** +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ +/** * 深度拷贝值 */ export function deepClone(source: T): T { diff --git a/web/installer/lib/ff-redux/libs/qcloud-lib/helpers/findByCondition.ts b/web/installer/lib/ff-redux/libs/qcloud-lib/helpers/findByCondition.ts index 94d6b9007..eff564af8 100644 --- a/web/installer/lib/ff-redux/libs/qcloud-lib/helpers/findByCondition.ts +++ b/web/installer/lib/ff-redux/libs/qcloud-lib/helpers/findByCondition.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ /** * 查找集合中满足给定条件的记录 */ diff --git a/web/installer/lib/ff-redux/libs/qcloud-lib/helpers/findById.ts b/web/installer/lib/ff-redux/libs/qcloud-lib/helpers/findById.ts index b0ca36a12..e1f5ec941 100644 --- a/web/installer/lib/ff-redux/libs/qcloud-lib/helpers/findById.ts +++ b/web/installer/lib/ff-redux/libs/qcloud-lib/helpers/findById.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { Identifiable } from '../types/Identifiable'; export function findById(collection: T[], id: string | number): T { diff --git a/web/installer/lib/ff-redux/libs/qcloud-lib/helpers/getDateDelta.ts b/web/installer/lib/ff-redux/libs/qcloud-lib/helpers/getDateDelta.ts index e07e0534b..d334cba7d 100644 --- a/web/installer/lib/ff-redux/libs/qcloud-lib/helpers/getDateDelta.ts +++ b/web/installer/lib/ff-redux/libs/qcloud-lib/helpers/getDateDelta.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ /**Parses string formatted as YYYY-MM-DD to a Date object. * If the supplied string does not match the format, an * invalid Date (value NaN) is returned. diff --git a/web/installer/lib/ff-redux/libs/qcloud-lib/helpers/getDateStride.ts b/web/installer/lib/ff-redux/libs/qcloud-lib/helpers/getDateStride.ts index 1ac21fb3e..84c8293b9 100644 --- a/web/installer/lib/ff-redux/libs/qcloud-lib/helpers/getDateStride.ts +++ b/web/installer/lib/ff-redux/libs/qcloud-lib/helpers/getDateStride.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { getDateDelta } from './getDateDelta'; function rangeLength(from: string, to: string) { diff --git a/web/installer/lib/ff-redux/libs/qcloud-lib/helpers/getDateString.ts b/web/installer/lib/ff-redux/libs/qcloud-lib/helpers/getDateString.ts index 859c5883c..11b858711 100644 --- a/web/installer/lib/ff-redux/libs/qcloud-lib/helpers/getDateString.ts +++ b/web/installer/lib/ff-redux/libs/qcloud-lib/helpers/getDateString.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ function pad(num: number) { let r = String(num); if (r.length === 1) { diff --git a/web/installer/lib/ff-redux/libs/qcloud-lib/helpers/getDateUTC.ts b/web/installer/lib/ff-redux/libs/qcloud-lib/helpers/getDateUTC.ts index 2758f2090..437c8e21a 100644 --- a/web/installer/lib/ff-redux/libs/qcloud-lib/helpers/getDateUTC.ts +++ b/web/installer/lib/ff-redux/libs/qcloud-lib/helpers/getDateUTC.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ function parseDate(dateStr) { if (/^(\d{4})[-\s\.,\/]*(\d+)[-\s\.,\/]*(\d+)(?:\s*(\d+)\:(\d+):(\d+))?$/.test(dateStr)) { let year = +RegExp.$1; diff --git a/web/installer/lib/ff-redux/libs/qcloud-lib/helpers/getOffsetDate.ts b/web/installer/lib/ff-redux/libs/qcloud-lib/helpers/getOffsetDate.ts index 84f5a862f..0458da97f 100644 --- a/web/installer/lib/ff-redux/libs/qcloud-lib/helpers/getOffsetDate.ts +++ b/web/installer/lib/ff-redux/libs/qcloud-lib/helpers/getOffsetDate.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export function getOffsetDate(date: Date, day: number) { let newDate = new Date(date.valueOf()); newDate.setDate(date.getDate() + day); diff --git a/web/installer/lib/ff-redux/libs/qcloud-lib/helpers/hashObject.ts b/web/installer/lib/ff-redux/libs/qcloud-lib/helpers/hashObject.ts index 40a63813a..cad885b31 100644 --- a/web/installer/lib/ff-redux/libs/qcloud-lib/helpers/hashObject.ts +++ b/web/installer/lib/ff-redux/libs/qcloud-lib/helpers/hashObject.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { hashString } from './hashString'; export function hashObject(obj: any) { diff --git a/web/installer/lib/ff-redux/libs/qcloud-lib/helpers/hashString.ts b/web/installer/lib/ff-redux/libs/qcloud-lib/helpers/hashString.ts index 92fd378b8..77ed25955 100644 --- a/web/installer/lib/ff-redux/libs/qcloud-lib/helpers/hashString.ts +++ b/web/installer/lib/ff-redux/libs/qcloud-lib/helpers/hashString.ts @@ -1,4 +1,21 @@ -export function hashString(str: string) { +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ +export function hashString(str: string) { let hash = 0, i, chr, diff --git a/web/installer/lib/ff-redux/libs/qcloud-lib/helpers/insertCSS.ts b/web/installer/lib/ff-redux/libs/qcloud-lib/helpers/insertCSS.ts index bcf463c7a..0a8e26627 100644 --- a/web/installer/lib/ff-redux/libs/qcloud-lib/helpers/insertCSS.ts +++ b/web/installer/lib/ff-redux/libs/qcloud-lib/helpers/insertCSS.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ const prefix = 'dynamic-inserted-css-'; /** diff --git a/web/installer/lib/ff-redux/libs/qcloud-lib/helpers/isComponentOfType.ts b/web/installer/lib/ff-redux/libs/qcloud-lib/helpers/isComponentOfType.ts index fdd0d06da..093f2fafd 100644 --- a/web/installer/lib/ff-redux/libs/qcloud-lib/helpers/isComponentOfType.ts +++ b/web/installer/lib/ff-redux/libs/qcloud-lib/helpers/isComponentOfType.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; export type ComponentType = diff --git a/web/installer/lib/ff-redux/libs/qcloud-lib/helpers/isValidDomain.ts b/web/installer/lib/ff-redux/libs/qcloud-lib/helpers/isValidDomain.ts index c36fb8aa3..1afff6a83 100644 --- a/web/installer/lib/ff-redux/libs/qcloud-lib/helpers/isValidDomain.ts +++ b/web/installer/lib/ff-redux/libs/qcloud-lib/helpers/isValidDomain.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export function isValidDomain(domain: string) { // regex from https://github.com/johnotander/domain-regex/blob/master/index.js return /^((?=[a-z0-9-]{1,63}\.)(xn--)?[a-z0-9]+(-[a-z0-9]+)*\.)+[a-z]{2,63}$/.test(domain); diff --git a/web/installer/lib/ff-redux/libs/qcloud-lib/helpers/isValidIPAddress.ts b/web/installer/lib/ff-redux/libs/qcloud-lib/helpers/isValidIPAddress.ts index ff37aa9f9..bbece54cb 100644 --- a/web/installer/lib/ff-redux/libs/qcloud-lib/helpers/isValidIPAddress.ts +++ b/web/installer/lib/ff-redux/libs/qcloud-lib/helpers/isValidIPAddress.ts @@ -1,4 +1,21 @@ -/** +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ +/** * 检查一个 IP 地址是否为合法的 IP 地址 * */ export function isValidIPAddress(ipAddress: string) { diff --git a/web/installer/lib/ff-redux/libs/qcloud-lib/helpers/objectExtend.ts b/web/installer/lib/ff-redux/libs/qcloud-lib/helpers/objectExtend.ts index 2fa4fa1c3..d25ca9ecf 100644 --- a/web/installer/lib/ff-redux/libs/qcloud-lib/helpers/objectExtend.ts +++ b/web/installer/lib/ff-redux/libs/qcloud-lib/helpers/objectExtend.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export function extend(target: T, source: S): T & S; export function extend(target: T, source1: S1, source2: S2): T & S1 & S2; export function extend(target: T, source1: S1, source2: S2): T & S1 & S2; diff --git a/web/installer/lib/ff-redux/libs/qcloud-lib/helpers/objectFetch.ts b/web/installer/lib/ff-redux/libs/qcloud-lib/helpers/objectFetch.ts index 039266986..4e32289fd 100644 --- a/web/installer/lib/ff-redux/libs/qcloud-lib/helpers/objectFetch.ts +++ b/web/installer/lib/ff-redux/libs/qcloud-lib/helpers/objectFetch.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ /** * 从 source 抓取 target 中定义的值 * diff --git a/web/installer/lib/ff-redux/libs/qcloud-lib/helpers/objectMerge.ts b/web/installer/lib/ff-redux/libs/qcloud-lib/helpers/objectMerge.ts index 84612e312..37f47c058 100644 --- a/web/installer/lib/ff-redux/libs/qcloud-lib/helpers/objectMerge.ts +++ b/web/installer/lib/ff-redux/libs/qcloud-lib/helpers/objectMerge.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ const deepExtend = require('deep-extend'); export function merge(target: T, source: S): T & S; diff --git a/web/installer/lib/ff-redux/libs/qcloud-lib/helpers/otherMember.ts b/web/installer/lib/ff-redux/libs/qcloud-lib/helpers/otherMember.ts index a30214409..e4a7cad7b 100644 --- a/web/installer/lib/ff-redux/libs/qcloud-lib/helpers/otherMember.ts +++ b/web/installer/lib/ff-redux/libs/qcloud-lib/helpers/otherMember.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ /** * 查找一个集合中不再排除集合里的部分 * diff --git a/web/installer/lib/ff-redux/libs/qcloud-lib/helpers/pageList.ts b/web/installer/lib/ff-redux/libs/qcloud-lib/helpers/pageList.ts index b889b47da..b1634b40a 100644 --- a/web/installer/lib/ff-redux/libs/qcloud-lib/helpers/pageList.ts +++ b/web/installer/lib/ff-redux/libs/qcloud-lib/helpers/pageList.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { PagingQuery } from '../../..'; export function pageList(list: T[], paging: PagingQuery): T[] { diff --git a/web/installer/lib/ff-redux/libs/qcloud-lib/helpers/reduceToPayload.ts b/web/installer/lib/ff-redux/libs/qcloud-lib/helpers/reduceToPayload.ts index 268ea1cf6..655b79fa2 100644 --- a/web/installer/lib/ff-redux/libs/qcloud-lib/helpers/reduceToPayload.ts +++ b/web/installer/lib/ff-redux/libs/qcloud-lib/helpers/reduceToPayload.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { ReduxAction } from '../../../'; export function reduceToPayload(actionType: string | number, initialState: T) { diff --git a/web/installer/lib/ff-redux/libs/qcloud-lib/helpers/searchList.ts b/web/installer/lib/ff-redux/libs/qcloud-lib/helpers/searchList.ts index 6ecc5832d..2d0b1ba65 100644 --- a/web/installer/lib/ff-redux/libs/qcloud-lib/helpers/searchList.ts +++ b/web/installer/lib/ff-redux/libs/qcloud-lib/helpers/searchList.ts @@ -1,4 +1,21 @@ -export function searchList(list: T[], search: string, ...fields: string[]): T[] { +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ +export function searchList(list: T[], search: string, ...fields: string[]): T[] { if (!search) { return list; } diff --git a/web/installer/lib/ff-redux/libs/qcloud-lib/helpers/serialReducer.ts b/web/installer/lib/ff-redux/libs/qcloud-lib/helpers/serialReducer.ts index 07bf59f02..452107f07 100644 --- a/web/installer/lib/ff-redux/libs/qcloud-lib/helpers/serialReducer.ts +++ b/web/installer/lib/ff-redux/libs/qcloud-lib/helpers/serialReducer.ts @@ -1,4 +1,21 @@ -export type Reducer = (state: TState, action: TAction) => TState; +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ +export type Reducer = (state: TState, action: TAction) => TState; export function serialReducer( first: Reducer, diff --git a/web/installer/lib/ff-redux/libs/qcloud-lib/helpers/uuid.ts b/web/installer/lib/ff-redux/libs/qcloud-lib/helpers/uuid.ts index ba121f7d9..27f0a4d24 100644 --- a/web/installer/lib/ff-redux/libs/qcloud-lib/helpers/uuid.ts +++ b/web/installer/lib/ff-redux/libs/qcloud-lib/helpers/uuid.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ let index = 10000; const timeLead = 1e12; export function uuid() { diff --git a/web/installer/lib/ff-redux/libs/qcloud-lib/index.ts b/web/installer/lib/ff-redux/libs/qcloud-lib/index.ts index f66b5f612..2e5c27101 100644 --- a/web/installer/lib/ff-redux/libs/qcloud-lib/index.ts +++ b/web/installer/lib/ff-redux/libs/qcloud-lib/index.ts @@ -1,4 +1,21 @@ -// export all helpers +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ +// export all helpers // export * from "./helpers/addComma"; export * from './helpers/appendFunction'; export * from './helpers/bindActionCreators'; diff --git a/web/installer/lib/ff-redux/libs/qcloud-lib/types/BaseReactProps.ts b/web/installer/lib/ff-redux/libs/qcloud-lib/types/BaseReactProps.ts index fd16ac51e..4b7bba920 100644 --- a/web/installer/lib/ff-redux/libs/qcloud-lib/types/BaseReactProps.ts +++ b/web/installer/lib/ff-redux/libs/qcloud-lib/types/BaseReactProps.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; /** diff --git a/web/installer/lib/ff-redux/libs/qcloud-lib/types/DateQuery.ts b/web/installer/lib/ff-redux/libs/qcloud-lib/types/DateQuery.ts index 310ac1a28..5eb6997e5 100644 --- a/web/installer/lib/ff-redux/libs/qcloud-lib/types/DateQuery.ts +++ b/web/installer/lib/ff-redux/libs/qcloud-lib/types/DateQuery.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export interface DateQuery { /** * 查询的起始日期 diff --git a/web/installer/lib/ff-redux/libs/qcloud-lib/types/Identifiable.ts b/web/installer/lib/ff-redux/libs/qcloud-lib/types/Identifiable.ts index 7944abaa6..96cc19101 100644 --- a/web/installer/lib/ff-redux/libs/qcloud-lib/types/Identifiable.ts +++ b/web/installer/lib/ff-redux/libs/qcloud-lib/types/Identifiable.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ /** * 要求主键的数据,一般用于数组 */ diff --git a/web/installer/lib/ff-redux/libs/qcloud-lib/types/PagingQuery.ts b/web/installer/lib/ff-redux/libs/qcloud-lib/types/PagingQuery.ts index 36cc0f9eb..5c907bdcf 100644 --- a/web/installer/lib/ff-redux/libs/qcloud-lib/types/PagingQuery.ts +++ b/web/installer/lib/ff-redux/libs/qcloud-lib/types/PagingQuery.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ /** 表示一次分页请求 */ export interface PagingQuery { /** 请求的页码,从 1 开始索引 */ diff --git a/web/installer/lib/ff-redux/libs/qcloud-lib/types/RecordSet.ts b/web/installer/lib/ff-redux/libs/qcloud-lib/types/RecordSet.ts index 7b4d7ae11..b9d18fd82 100644 --- a/web/installer/lib/ff-redux/libs/qcloud-lib/types/RecordSet.ts +++ b/web/installer/lib/ff-redux/libs/qcloud-lib/types/RecordSet.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export interface RecordSet { data?: ExtendParamsT; recordCount: number; diff --git a/web/installer/lib/ff-redux/libs/qcloud-lib/types/ReduxAction.ts b/web/installer/lib/ff-redux/libs/qcloud-lib/types/ReduxAction.ts index fed63fd6f..e96fc33af 100644 --- a/web/installer/lib/ff-redux/libs/qcloud-lib/types/ReduxAction.ts +++ b/web/installer/lib/ff-redux/libs/qcloud-lib/types/ReduxAction.ts @@ -1,4 +1,21 @@ -/** +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ +/** * FSA (https://github.com/acdlite/flux-standard-action) with generic type * */ export interface ReduxAction { diff --git a/web/installer/lib/ff-redux/libs/qcloud-lib/types/ReduxConnectedProps.ts b/web/installer/lib/ff-redux/libs/qcloud-lib/types/ReduxConnectedProps.ts index edf55fbf4..f3dd270d6 100644 --- a/web/installer/lib/ff-redux/libs/qcloud-lib/types/ReduxConnectedProps.ts +++ b/web/installer/lib/ff-redux/libs/qcloud-lib/types/ReduxConnectedProps.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export declare interface ReduxConnectedProps { dispatch?: Redux.Dispatch; } diff --git a/web/installer/lib/ff-redux/libs/qcloud-lib/types/SortQuery.ts b/web/installer/lib/ff-redux/libs/qcloud-lib/types/SortQuery.ts index 0ef71be08..423e4bfed 100644 --- a/web/installer/lib/ff-redux/libs/qcloud-lib/types/SortQuery.ts +++ b/web/installer/lib/ff-redux/libs/qcloud-lib/types/SortQuery.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export interface SortQuery { by?: string; desc?: boolean; diff --git a/web/installer/lib/ff-redux/libs/qcloud-lib/utils/Children.ts b/web/installer/lib/ff-redux/libs/qcloud-lib/utils/Children.ts index e463d8d89..52d8be29a 100644 --- a/web/installer/lib/ff-redux/libs/qcloud-lib/utils/Children.ts +++ b/web/installer/lib/ff-redux/libs/qcloud-lib/utils/Children.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { isComponentOfType } from '../helpers/isComponentOfType'; diff --git a/web/installer/lib/ff-redux/libs/qcloud-lib/utils/Selection.ts b/web/installer/lib/ff-redux/libs/qcloud-lib/utils/Selection.ts index d422bc8ad..b459ae6c8 100644 --- a/web/installer/lib/ff-redux/libs/qcloud-lib/utils/Selection.ts +++ b/web/installer/lib/ff-redux/libs/qcloud-lib/utils/Selection.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ /** * @fileOverview * diff --git a/web/installer/lib/ff-redux/libs/qcloud-lib/utils/Transition.ts b/web/installer/lib/ff-redux/libs/qcloud-lib/utils/Transition.ts index 999704c99..b6b5b4e52 100644 --- a/web/installer/lib/ff-redux/libs/qcloud-lib/utils/Transition.ts +++ b/web/installer/lib/ff-redux/libs/qcloud-lib/utils/Transition.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { hashObject } from '../helpers/hashObject'; import { insertCSS } from '../helpers/insertCSS'; diff --git a/web/installer/lib/ff-redux/libs/qcloud-redux-fetcher/index.ts b/web/installer/lib/ff-redux/libs/qcloud-redux-fetcher/index.ts index 6d753e864..02ed26983 100644 --- a/web/installer/lib/ff-redux/libs/qcloud-redux-fetcher/index.ts +++ b/web/installer/lib/ff-redux/libs/qcloud-redux-fetcher/index.ts @@ -1 +1,18 @@ -export * from './lib/Fetcher'; +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ +export * from './lib/Fetcher'; diff --git a/web/installer/lib/ff-redux/libs/qcloud-redux-fetcher/lib/Fetcher.ts b/web/installer/lib/ff-redux/libs/qcloud-redux-fetcher/lib/Fetcher.ts index 238a1a54c..47303e2f8 100644 --- a/web/installer/lib/ff-redux/libs/qcloud-redux-fetcher/lib/Fetcher.ts +++ b/web/installer/lib/ff-redux/libs/qcloud-redux-fetcher/lib/Fetcher.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { Dispatch } from 'redux'; import { ReduxAction } from '../../../'; diff --git a/web/installer/lib/ff-redux/libs/qcloud-redux-query/index.ts b/web/installer/lib/ff-redux/libs/qcloud-redux-query/index.ts index 1c45417b6..f50b06ac3 100644 --- a/web/installer/lib/ff-redux/libs/qcloud-redux-query/index.ts +++ b/web/installer/lib/ff-redux/libs/qcloud-redux-query/index.ts @@ -1 +1,18 @@ -export * from './lib/Query'; +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ +export * from './lib/Query'; diff --git a/web/installer/lib/ff-redux/libs/qcloud-redux-query/lib/Query.ts b/web/installer/lib/ff-redux/libs/qcloud-redux-query/lib/Query.ts index 2f9e1b635..e72dcf6c7 100644 --- a/web/installer/lib/ff-redux/libs/qcloud-redux-query/lib/Query.ts +++ b/web/installer/lib/ff-redux/libs/qcloud-redux-query/lib/Query.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { Dispatch } from 'redux'; import { ActionTypesEnum, PagingQuery, QueryState, ReduxAction } from '../../../src/base'; diff --git a/web/installer/lib/ff-redux/libs/qcloud-redux-workflow/index.ts b/web/installer/lib/ff-redux/libs/qcloud-redux-workflow/index.ts index fd4e95479..ebc5dff13 100644 --- a/web/installer/lib/ff-redux/libs/qcloud-redux-workflow/index.ts +++ b/web/installer/lib/ff-redux/libs/qcloud-redux-workflow/index.ts @@ -1 +1,18 @@ -export * from './lib/Workflow'; +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ +export * from './lib/Workflow'; diff --git a/web/installer/lib/ff-redux/libs/qcloud-redux-workflow/lib/Workflow.ts b/web/installer/lib/ff-redux/libs/qcloud-redux-workflow/lib/Workflow.ts index 20c0d722f..d6ca7cb64 100644 --- a/web/installer/lib/ff-redux/libs/qcloud-redux-workflow/lib/Workflow.ts +++ b/web/installer/lib/ff-redux/libs/qcloud-redux-workflow/lib/Workflow.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ /** * @author techirdliu@tencent.com * diff --git a/web/installer/lib/ff-redux/src/base/Action.ts b/web/installer/lib/ff-redux/src/base/Action.ts index 354c0f25a..5f4fe6ef0 100644 --- a/web/installer/lib/ff-redux/src/base/Action.ts +++ b/web/installer/lib/ff-redux/src/base/Action.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { Dispatch } from 'redux'; import { diff --git a/web/installer/lib/ff-redux/src/base/Model/ActionTypesEnum.ts b/web/installer/lib/ff-redux/src/base/Model/ActionTypesEnum.ts index f78141d4d..de3b0f3c6 100644 --- a/web/installer/lib/ff-redux/src/base/Model/ActionTypesEnum.ts +++ b/web/installer/lib/ff-redux/src/base/Model/ActionTypesEnum.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export enum ActionTypesEnum { ChangeKeyword = 'ChangeKeyword', PerformSearch = 'PerformSearch', diff --git a/web/installer/lib/ff-redux/src/base/Model/DataType.ts b/web/installer/lib/ff-redux/src/base/Model/DataType.ts index 1985b5852..426ac22f1 100644 --- a/web/installer/lib/ff-redux/src/base/Model/DataType.ts +++ b/web/installer/lib/ff-redux/src/base/Model/DataType.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export enum DataType { List = 'List', Object = 'Object' diff --git a/web/installer/lib/ff-redux/src/base/Model/FetchOptions.ts b/web/installer/lib/ff-redux/src/base/Model/FetchOptions.ts index 0d9a61f99..4986030db 100644 --- a/web/installer/lib/ff-redux/src/base/Model/FetchOptions.ts +++ b/web/installer/lib/ff-redux/src/base/Model/FetchOptions.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export interface FetchOptions { /** * 是否要求强制无缓存拉取 diff --git a/web/installer/lib/ff-redux/src/base/Model/FetchState.ts b/web/installer/lib/ff-redux/src/base/Model/FetchState.ts index 0fb4f7a48..bb1349fbc 100644 --- a/web/installer/lib/ff-redux/src/base/Model/FetchState.ts +++ b/web/installer/lib/ff-redux/src/base/Model/FetchState.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export enum FetchState { /** indicates the data is up to date and ready to use */ Ready = 'Ready', diff --git a/web/installer/lib/ff-redux/src/base/Model/FetcherPayload.ts b/web/installer/lib/ff-redux/src/base/Model/FetcherPayload.ts index 86230f0fd..eafb0b799 100644 --- a/web/installer/lib/ff-redux/src/base/Model/FetcherPayload.ts +++ b/web/installer/lib/ff-redux/src/base/Model/FetcherPayload.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { FetcherTrigger } from './FetcherTrigger'; import { ReduxAction } from './ReduxAction'; diff --git a/web/installer/lib/ff-redux/src/base/Model/FetcherState.ts b/web/installer/lib/ff-redux/src/base/Model/FetcherState.ts index 9781b605e..6bc808c06 100644 --- a/web/installer/lib/ff-redux/src/base/Model/FetcherState.ts +++ b/web/installer/lib/ff-redux/src/base/Model/FetcherState.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { FetchState } from './FetchState'; import { RecordSet } from './RecordSet'; diff --git a/web/installer/lib/ff-redux/src/base/Model/FetcherTrigger.ts b/web/installer/lib/ff-redux/src/base/Model/FetcherTrigger.ts index 54600dbdb..c866b37f9 100644 --- a/web/installer/lib/ff-redux/src/base/Model/FetcherTrigger.ts +++ b/web/installer/lib/ff-redux/src/base/Model/FetcherTrigger.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export enum FetcherTrigger { /** * trigger a load operation diff --git a/web/installer/lib/ff-redux/src/base/Model/Identifiable.ts b/web/installer/lib/ff-redux/src/base/Model/Identifiable.ts index 7944abaa6..96cc19101 100644 --- a/web/installer/lib/ff-redux/src/base/Model/Identifiable.ts +++ b/web/installer/lib/ff-redux/src/base/Model/Identifiable.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ /** * 要求主键的数据,一般用于数组 */ diff --git a/web/installer/lib/ff-redux/src/base/Model/PagingQuery.ts b/web/installer/lib/ff-redux/src/base/Model/PagingQuery.ts index 276ee682b..c5352053b 100644 --- a/web/installer/lib/ff-redux/src/base/Model/PagingQuery.ts +++ b/web/installer/lib/ff-redux/src/base/Model/PagingQuery.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ /** 表示一次分页请求 */ export interface PagingQuery { /** 请求的页码,从 1 开始索引 */ diff --git a/web/installer/lib/ff-redux/src/base/Model/QueryState.ts b/web/installer/lib/ff-redux/src/base/Model/QueryState.ts index fa0571889..b6a261468 100644 --- a/web/installer/lib/ff-redux/src/base/Model/QueryState.ts +++ b/web/installer/lib/ff-redux/src/base/Model/QueryState.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { PagingQuery } from './PagingQuery'; import { SortQuery } from './SortQuery'; diff --git a/web/installer/lib/ff-redux/src/base/Model/RecordSet.ts b/web/installer/lib/ff-redux/src/base/Model/RecordSet.ts index 2a0cdac2c..48ff51409 100644 --- a/web/installer/lib/ff-redux/src/base/Model/RecordSet.ts +++ b/web/installer/lib/ff-redux/src/base/Model/RecordSet.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export interface RecordSet { data?: ExtendParamsT; recordCount: number; diff --git a/web/installer/lib/ff-redux/src/base/Model/ReduxAction.ts b/web/installer/lib/ff-redux/src/base/Model/ReduxAction.ts index fed63fd6f..e96fc33af 100644 --- a/web/installer/lib/ff-redux/src/base/Model/ReduxAction.ts +++ b/web/installer/lib/ff-redux/src/base/Model/ReduxAction.ts @@ -1,4 +1,21 @@ -/** +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ +/** * FSA (https://github.com/acdlite/flux-standard-action) with generic type * */ export interface ReduxAction { diff --git a/web/installer/lib/ff-redux/src/base/Model/SortQuery.ts b/web/installer/lib/ff-redux/src/base/Model/SortQuery.ts index 0ef71be08..423e4bfed 100644 --- a/web/installer/lib/ff-redux/src/base/Model/SortQuery.ts +++ b/web/installer/lib/ff-redux/src/base/Model/SortQuery.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export interface SortQuery { by?: string; desc?: boolean; diff --git a/web/installer/lib/ff-redux/src/base/Model/index.ts b/web/installer/lib/ff-redux/src/base/Model/index.ts index 7a97a1636..404f04be5 100644 --- a/web/installer/lib/ff-redux/src/base/Model/index.ts +++ b/web/installer/lib/ff-redux/src/base/Model/index.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export * from './ActionTypesEnum'; export * from './DataType'; export * from './FetcherPayload'; diff --git a/web/installer/lib/ff-redux/src/base/Reducer.ts b/web/installer/lib/ff-redux/src/base/Reducer.ts index 3fda72e26..d22c73cad 100644 --- a/web/installer/lib/ff-redux/src/base/Reducer.ts +++ b/web/installer/lib/ff-redux/src/base/Reducer.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { extend, merge } from '../../libs/qcloud-lib'; import { ActionTypesEnum, DataType, FetcherAction, FetcherState, FetcherTrigger, FetchState, PagingQuery, diff --git a/web/installer/lib/ff-redux/src/base/index.ts b/web/installer/lib/ff-redux/src/base/index.ts index f78f2830a..5eff9cac6 100644 --- a/web/installer/lib/ff-redux/src/base/index.ts +++ b/web/installer/lib/ff-redux/src/base/index.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export * from './Reducer'; export * from './Action'; export * from './Model'; diff --git a/web/installer/lib/ff-redux/src/index.ts b/web/installer/lib/ff-redux/src/index.ts index 3cb68ba18..b697083c1 100644 --- a/web/installer/lib/ff-redux/src/index.ts +++ b/web/installer/lib/ff-redux/src/index.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export * from './base'; export * from './list'; export * from './object'; diff --git a/web/installer/lib/ff-redux/src/list/Action.ts b/web/installer/lib/ff-redux/src/list/Action.ts index 16d230449..c4ca56d36 100644 --- a/web/installer/lib/ff-redux/src/list/Action.ts +++ b/web/installer/lib/ff-redux/src/list/Action.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { extend } from '../../libs/qcloud-lib'; import { BaseAction, createBaseAction, FetcherState, FetchOptions, FetchState, QueryState, RecordSet } from '../base'; import { createFFListActionType } from './ActionType'; diff --git a/web/installer/lib/ff-redux/src/list/ActionType.ts b/web/installer/lib/ff-redux/src/list/ActionType.ts index e989f8fc0..8dbf3e5cb 100644 --- a/web/installer/lib/ff-redux/src/list/ActionType.ts +++ b/web/installer/lib/ff-redux/src/list/ActionType.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export enum FFListType { Base = 'Base', Fetch = 'Fetch', diff --git a/web/installer/lib/ff-redux/src/list/Model.ts b/web/installer/lib/ff-redux/src/list/Model.ts index cfabc0b63..b5951e7a1 100644 --- a/web/installer/lib/ff-redux/src/list/Model.ts +++ b/web/installer/lib/ff-redux/src/list/Model.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { FetcherState, QueryState, RecordSet } from '../base/Model'; export type FFListModel = { diff --git a/web/installer/lib/ff-redux/src/list/Reducer.ts b/web/installer/lib/ff-redux/src/list/Reducer.ts index 5851ece1f..cabec1818 100644 --- a/web/installer/lib/ff-redux/src/list/Reducer.ts +++ b/web/installer/lib/ff-redux/src/list/Reducer.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { combineReducers } from 'redux'; import { reduceToPayload } from '../../libs/qcloud-lib'; diff --git a/web/installer/lib/ff-redux/src/list/index.ts b/web/installer/lib/ff-redux/src/list/index.ts index 04430516d..149dcb46b 100644 --- a/web/installer/lib/ff-redux/src/list/index.ts +++ b/web/installer/lib/ff-redux/src/list/index.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export * from './ActionType'; export * from './Model'; export * from './Reducer'; diff --git a/web/installer/lib/ff-redux/src/object/Action.ts b/web/installer/lib/ff-redux/src/object/Action.ts index be5c5401a..b7b271c0f 100644 --- a/web/installer/lib/ff-redux/src/object/Action.ts +++ b/web/installer/lib/ff-redux/src/object/Action.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { FetcherState, FetchOptions, QueryState } from '../../'; import { extend } from '../../libs/qcloud-lib'; import { BaseAction, createBaseAction, DataType, RecordSet } from '../base'; diff --git a/web/installer/lib/ff-redux/src/object/ActionType.ts b/web/installer/lib/ff-redux/src/object/ActionType.ts index 4f016a2f3..a02439078 100644 --- a/web/installer/lib/ff-redux/src/object/ActionType.ts +++ b/web/installer/lib/ff-redux/src/object/ActionType.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export enum FFObjectType { Base = 'Base', Fetch = 'Fetch', diff --git a/web/installer/lib/ff-redux/src/object/Model.ts b/web/installer/lib/ff-redux/src/object/Model.ts index 9b5b195ed..94f90d19b 100644 --- a/web/installer/lib/ff-redux/src/object/Model.ts +++ b/web/installer/lib/ff-redux/src/object/Model.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { FetcherState, QueryState } from '../base/Model'; export type FFObjectModel = { diff --git a/web/installer/lib/ff-redux/src/object/Reducer.ts b/web/installer/lib/ff-redux/src/object/Reducer.ts index 8aaa876be..e2cfc84a3 100644 --- a/web/installer/lib/ff-redux/src/object/Reducer.ts +++ b/web/installer/lib/ff-redux/src/object/Reducer.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { combineReducers } from 'redux'; import { createBaseReducer, QueryState } from '../base'; diff --git a/web/installer/lib/ff-redux/src/object/index.ts b/web/installer/lib/ff-redux/src/object/index.ts index 04430516d..149dcb46b 100644 --- a/web/installer/lib/ff-redux/src/object/index.ts +++ b/web/installer/lib/ff-redux/src/object/index.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export * from './ActionType'; export * from './Model'; export * from './Reducer'; diff --git a/web/installer/lib/ff-redux/utils/extend.ts b/web/installer/lib/ff-redux/utils/extend.ts index 2fa4fa1c3..d25ca9ecf 100644 --- a/web/installer/lib/ff-redux/utils/extend.ts +++ b/web/installer/lib/ff-redux/utils/extend.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export function extend(target: T, source: S): T & S; export function extend(target: T, source1: S1, source2: S2): T & S1 & S2; export function extend(target: T, source1: S1, source2: S2): T & S1 & S2; diff --git a/web/installer/lib/ff-redux/utils/index.ts b/web/installer/lib/ff-redux/utils/index.ts index 3852acb7e..eae45d8fc 100644 --- a/web/installer/lib/ff-redux/utils/index.ts +++ b/web/installer/lib/ff-redux/utils/index.ts @@ -1,2 +1,19 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export { extend } from './extend'; export { reduceToPayload, ReduxAction } from './reduceToPayload'; diff --git a/web/installer/lib/ff-redux/utils/reduceToPayload.ts b/web/installer/lib/ff-redux/utils/reduceToPayload.ts index 42ef9f76e..bc75975c0 100644 --- a/web/installer/lib/ff-redux/utils/reduceToPayload.ts +++ b/web/installer/lib/ff-redux/utils/reduceToPayload.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export interface ReduxAction { /** * The action type, the `number` type is to support enum. diff --git a/web/installer/lib/ff-validator/index.ts b/web/installer/lib/ff-validator/index.ts index d26f663d0..d7bf85afc 100644 --- a/web/installer/lib/ff-validator/index.ts +++ b/web/installer/lib/ff-validator/index.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export { ValidateSchema, ValidatorStatusEnum, diff --git a/web/installer/lib/ff-validator/src/Action.ts b/web/installer/lib/ff-validator/src/Action.ts index d29c9bd2c..ee7d043b6 100644 --- a/web/installer/lib/ff-validator/src/Action.ts +++ b/web/installer/lib/ff-validator/src/Action.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { t, Trans } from '@tencent/tea-app/lib/i18n'; import { getValidatorActionType } from './ActionType'; diff --git a/web/installer/lib/ff-validator/src/ActionType.ts b/web/installer/lib/ff-validator/src/ActionType.ts index cc58f7d75..b5347bc6a 100644 --- a/web/installer/lib/ff-validator/src/ActionType.ts +++ b/web/installer/lib/ff-validator/src/ActionType.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ /** * 获取ActionType * @param formKey: string 表单的名称 diff --git a/web/installer/lib/ff-validator/src/Model.ts b/web/installer/lib/ff-validator/src/Model.ts index 149923170..15ac4b907 100644 --- a/web/installer/lib/ff-validator/src/Model.ts +++ b/web/installer/lib/ff-validator/src/Model.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { Validation } from './Validation'; export interface ValidatorModel { diff --git a/web/installer/lib/ff-validator/src/Reducer.ts b/web/installer/lib/ff-validator/src/Reducer.ts index d8fdbb6e2..71637665a 100644 --- a/web/installer/lib/ff-validator/src/Reducer.ts +++ b/web/installer/lib/ff-validator/src/Reducer.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { Reducer } from 'redux'; import { getValidatorActionType } from './ActionType'; diff --git a/web/installer/lib/ff-validator/src/Validation.ts b/web/installer/lib/ff-validator/src/Validation.ts index 59c085b67..4508d52d0 100644 --- a/web/installer/lib/ff-validator/src/Validation.ts +++ b/web/installer/lib/ff-validator/src/Validation.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export interface Validation { /**验证状态 0: 初始状态;1:校验通过;2:校验不通过;*/ status?: number; diff --git a/web/installer/lib/ff-validator/src/utils/cloneDeep.ts b/web/installer/lib/ff-validator/src/utils/cloneDeep.ts index 205dd6958..16165c3ac 100644 --- a/web/installer/lib/ff-validator/src/utils/cloneDeep.ts +++ b/web/installer/lib/ff-validator/src/utils/cloneDeep.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ /* eslint-disable */ export const cloneDeep = function(item) { if (!item) { diff --git a/web/installer/lib/ff-validator/src/utils/getFirstBracketName.ts b/web/installer/lib/ff-validator/src/utils/getFirstBracketName.ts index beaaf7c52..ed25402a9 100644 --- a/web/installer/lib/ff-validator/src/utils/getFirstBracketName.ts +++ b/web/installer/lib/ff-validator/src/utils/getFirstBracketName.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ /** * 获取bracket的名称 * @return string diff --git a/web/installer/lib/ff-validator/src/utils/getMessage.ts b/web/installer/lib/ff-validator/src/utils/getMessage.ts index 0080a7c71..9bbdac436 100644 --- a/web/installer/lib/ff-validator/src/utils/getMessage.ts +++ b/web/installer/lib/ff-validator/src/utils/getMessage.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { ValidatorModel } from '../Model'; /** diff --git a/web/installer/lib/ff-validator/src/utils/getValue.ts b/web/installer/lib/ff-validator/src/utils/getValue.ts index 29202c76d..4f98cbc47 100644 --- a/web/installer/lib/ff-validator/src/utils/getValue.ts +++ b/web/installer/lib/ff-validator/src/utils/getValue.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { ValidatorModel, ValidatorStatusEnum } from '../Model'; import { Validation } from '../Validation'; diff --git a/web/installer/lib/ff-validator/src/utils/index.ts b/web/installer/lib/ff-validator/src/utils/index.ts index b4f25c6e4..bc6f207a3 100644 --- a/web/installer/lib/ff-validator/src/utils/index.ts +++ b/web/installer/lib/ff-validator/src/utils/index.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export { getValue } from './getValue'; export { isValid } from './isValid'; export { reduceToPayload } from './reduceToPayload'; diff --git a/web/installer/lib/ff-validator/src/utils/isContainBracket.ts b/web/installer/lib/ff-validator/src/utils/isContainBracket.ts index 3fb05c223..9479c5eb7 100644 --- a/web/installer/lib/ff-validator/src/utils/isContainBracket.ts +++ b/web/installer/lib/ff-validator/src/utils/isContainBracket.ts @@ -1,2 +1,19 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ /** 格式化传入的vkey,将方括号当中的数字去除 */ export const formatVkeyRegExp: RegExp = /\[(\d*)\]/g; diff --git a/web/installer/lib/ff-validator/src/utils/isValid.ts b/web/installer/lib/ff-validator/src/utils/isValid.ts index 4c4692498..882b2d5e3 100644 --- a/web/installer/lib/ff-validator/src/utils/isValid.ts +++ b/web/installer/lib/ff-validator/src/utils/isValid.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { ValidatorModel, ValidatorStatusEnum } from '../Model'; /** diff --git a/web/installer/lib/ff-validator/src/utils/reduceToPayload.ts b/web/installer/lib/ff-validator/src/utils/reduceToPayload.ts index b34edf70b..3f98b7eb9 100644 --- a/web/installer/lib/ff-validator/src/utils/reduceToPayload.ts +++ b/web/installer/lib/ff-validator/src/utils/reduceToPayload.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export interface ReduxAction { /** * The action type, the `number` type is to support enum. diff --git a/web/installer/loader/ifelse-loader.js b/web/installer/loader/ifelse-loader.js index fc70cf5b7..006e57b2e 100644 --- a/web/installer/loader/ifelse-loader.js +++ b/web/installer/loader/ifelse-loader.js @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ // let loaderUtils = require('loader-utils'); let parse = require('./lib/parse'); let fs = require('fs'); diff --git a/web/installer/loader/iffile-loader.js b/web/installer/loader/iffile-loader.js index 159423892..08ae3d592 100644 --- a/web/installer/loader/iffile-loader.js +++ b/web/installer/loader/iffile-loader.js @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ // let loaderUtils = require('loader-utils'); // let parse = require('./lib/parse'); let fs = require('fs'); diff --git a/web/installer/loader/lib/parse.js b/web/installer/loader/lib/parse.js index 866809a8a..e7abc6f0b 100644 --- a/web/installer/loader/lib/parse.js +++ b/web/installer/loader/lib/parse.js @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ function parse(source, defs, verbose) { let lines = source.split('\n'); diff --git a/web/installer/src/modules/common/components/clip/Clip.tsx b/web/installer/src/modules/common/components/clip/Clip.tsx index da2d81873..4b05b1b50 100644 --- a/web/installer/src/modules/common/components/clip/Clip.tsx +++ b/web/installer/src/modules/common/components/clip/Clip.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as Clipboard from 'clipboard'; import * as React from 'react'; diff --git a/web/installer/src/modules/common/components/clip/index.ts b/web/installer/src/modules/common/components/clip/index.ts index c07061bd8..11feef6d5 100644 --- a/web/installer/src/modules/common/components/clip/index.ts +++ b/web/installer/src/modules/common/components/clip/index.ts @@ -1 +1,18 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export { Clip, ClipProps } from './Clip'; diff --git a/web/installer/src/modules/common/components/codemirror/CodeMirrorEditor.tsx b/web/installer/src/modules/common/components/codemirror/CodeMirrorEditor.tsx index 303bcf444..3b56ffb8a 100644 --- a/web/installer/src/modules/common/components/codemirror/CodeMirrorEditor.tsx +++ b/web/installer/src/modules/common/components/codemirror/CodeMirrorEditor.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { Controlled as CodeMirror } from 'react-codemirror2'; diff --git a/web/installer/src/modules/common/components/codemirror/index.ts b/web/installer/src/modules/common/components/codemirror/index.ts index 6842e0368..c19b54a76 100644 --- a/web/installer/src/modules/common/components/codemirror/index.ts +++ b/web/installer/src/modules/common/components/codemirror/index.ts @@ -1 +1,18 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export { CodeMirrorEditor, CodeMirrorEditorProps } from './CodeMirrorEditor'; diff --git a/web/installer/src/modules/common/components/errortip/ErrorTip.tsx b/web/installer/src/modules/common/components/errortip/ErrorTip.tsx index 4b90e45f8..219b94726 100644 --- a/web/installer/src/modules/common/components/errortip/ErrorTip.tsx +++ b/web/installer/src/modules/common/components/errortip/ErrorTip.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { BaseReactProps, WorkflowState } from '@tencent/ff-redux'; diff --git a/web/installer/src/modules/common/components/errortip/index.ts b/web/installer/src/modules/common/components/errortip/index.ts index 749ee436f..11eb1af9a 100644 --- a/web/installer/src/modules/common/components/errortip/index.ts +++ b/web/installer/src/modules/common/components/errortip/index.ts @@ -1 +1,18 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export { ErrorGuide, ErrorTipProps, ErrorTip } from './ErrorTip'; diff --git a/web/installer/src/modules/common/components/headbubble/HeadBubble.tsx b/web/installer/src/modules/common/components/headbubble/HeadBubble.tsx index b3a68e7bd..f70640310 100644 --- a/web/installer/src/modules/common/components/headbubble/HeadBubble.tsx +++ b/web/installer/src/modules/common/components/headbubble/HeadBubble.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { BaseReactProps } from '@tencent/ff-redux'; diff --git a/web/installer/src/modules/common/components/headbubble/index.ts b/web/installer/src/modules/common/components/headbubble/index.ts index d14087546..ebe5d50da 100644 --- a/web/installer/src/modules/common/components/headbubble/index.ts +++ b/web/installer/src/modules/common/components/headbubble/index.ts @@ -1 +1,18 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export { HeadBubble, HeadBubbleProps } from './HeadBubble'; \ No newline at end of file diff --git a/web/installer/src/modules/common/components/index.ts b/web/installer/src/modules/common/components/index.ts index 9c77ebdc0..1ea97c334 100644 --- a/web/installer/src/modules/common/components/index.ts +++ b/web/installer/src/modules/common/components/index.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export { Clip } from './clip'; export { HeadBubble } from './headbubble'; export { ErrorGuide, ErrorTip } from './errortip'; diff --git a/web/installer/src/modules/common/components/logviewer/Panel.tsx b/web/installer/src/modules/common/components/logviewer/Panel.tsx index f811d6ab1..cfd7a63df 100644 --- a/web/installer/src/modules/common/components/logviewer/Panel.tsx +++ b/web/installer/src/modules/common/components/logviewer/Panel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { findDOMNode } from 'react-dom'; diff --git a/web/installer/src/modules/common/components/logviewer/index.ts b/web/installer/src/modules/common/components/logviewer/index.ts index c9401816c..1630454d4 100644 --- a/web/installer/src/modules/common/components/logviewer/index.ts +++ b/web/installer/src/modules/common/components/logviewer/index.ts @@ -1 +1,18 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export * from "./Panel"; diff --git a/web/installer/src/modules/common/components/toptips/TopTips.tsx b/web/installer/src/modules/common/components/toptips/TopTips.tsx index 3915482e6..5c8ebc103 100644 --- a/web/installer/src/modules/common/components/toptips/TopTips.tsx +++ b/web/installer/src/modules/common/components/toptips/TopTips.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as classnames from 'classnames'; import * as React from 'react'; import * as ReactDom from 'react-dom'; diff --git a/web/installer/src/modules/common/components/toptips/index.ts b/web/installer/src/modules/common/components/toptips/index.ts index df2e7d5b8..a4571ed64 100644 --- a/web/installer/src/modules/common/components/toptips/index.ts +++ b/web/installer/src/modules/common/components/toptips/index.ts @@ -1 +1,18 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export { TopTips, TopTipsProps } from './TopTips'; diff --git a/web/installer/src/modules/common/configs/menuConfig.ts b/web/installer/src/modules/common/configs/menuConfig.ts index cd27978cf..70e578fc2 100644 --- a/web/installer/src/modules/common/configs/menuConfig.ts +++ b/web/installer/src/modules/common/configs/menuConfig.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export const businessKey = 'oss'; export const defaultMenu = `/${businessKey}/userinfo`; diff --git a/web/installer/src/modules/common/libs/Validator.ts b/web/installer/src/modules/common/libs/Validator.ts index 384565f7e..188044d8a 100644 --- a/web/installer/src/modules/common/libs/Validator.ts +++ b/web/installer/src/modules/common/libs/Validator.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ // import { Validation } from '../models'; // import { isEmpty } from '../utils'; // import { ReduxAction } from '@tencent/ff-redux'; diff --git a/web/installer/src/modules/common/models/Record.ts b/web/installer/src/modules/common/models/Record.ts index 134314e23..a4a067748 100644 --- a/web/installer/src/modules/common/models/Record.ts +++ b/web/installer/src/modules/common/models/Record.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export interface Record { record: T; auth?: { diff --git a/web/installer/src/modules/common/models/Validation.ts b/web/installer/src/modules/common/models/Validation.ts index 40cb36012..d145822e5 100644 --- a/web/installer/src/modules/common/models/Validation.ts +++ b/web/installer/src/modules/common/models/Validation.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export interface Validation { /**验证状态 0: 初始状态;1:校验通过;2:校验不通过;*/ status?: number; diff --git a/web/installer/src/modules/common/models/index.ts b/web/installer/src/modules/common/models/index.ts index baeb1802c..762731ed5 100644 --- a/web/installer/src/modules/common/models/index.ts +++ b/web/installer/src/modules/common/models/index.ts @@ -1,2 +1,19 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export { initValidation, Validation } from './Validation'; export { Record } from './Record'; diff --git a/web/installer/src/modules/common/utils/bytesTo.ts b/web/installer/src/modules/common/utils/bytesTo.ts index 7e85a49d9..05b033a6f 100644 --- a/web/installer/src/modules/common/utils/bytesTo.ts +++ b/web/installer/src/modules/common/utils/bytesTo.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ /** * Bytes -> GB/MB/KB/Bytes */ diff --git a/web/installer/src/modules/common/utils/cloneDeep.ts b/web/installer/src/modules/common/utils/cloneDeep.ts index 205dd6958..16165c3ac 100644 --- a/web/installer/src/modules/common/utils/cloneDeep.ts +++ b/web/installer/src/modules/common/utils/cloneDeep.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ /* eslint-disable */ export const cloneDeep = function(item) { if (!item) { diff --git a/web/installer/src/modules/common/utils/flatten.ts b/web/installer/src/modules/common/utils/flatten.ts index 14d028c53..b02cc7124 100644 --- a/web/installer/src/modules/common/utils/flatten.ts +++ b/web/installer/src/modules/common/utils/flatten.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ const flat = (arr: Array) => { return arr.reduce((prev, cur) => prev.concat(cur), []); }; diff --git a/web/installer/src/modules/common/utils/formatRequestResult.ts b/web/installer/src/modules/common/utils/formatRequestResult.ts index 5280f0088..b20ac866b 100644 --- a/web/installer/src/modules/common/utils/formatRequestResult.ts +++ b/web/installer/src/modules/common/utils/formatRequestResult.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export const formatRequestRequest = (rsp: any) => { let dataList = [], data = null, diff --git a/web/installer/src/modules/common/utils/formatTime.ts b/web/installer/src/modules/common/utils/formatTime.ts index 491bb31eb..6a2d65cdb 100644 --- a/web/installer/src/modules/common/utils/formatTime.ts +++ b/web/installer/src/modules/common/utils/formatTime.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export const formatTime = (time: string) => { let re = time; if (time.includes('.')) { diff --git a/web/installer/src/modules/common/utils/getCidrMask.ts b/web/installer/src/modules/common/utils/getCidrMask.ts index be524e995..b02d00621 100644 --- a/web/installer/src/modules/common/utils/getCidrMask.ts +++ b/web/installer/src/modules/common/utils/getCidrMask.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export const getCidrMask = (cidr: string): string => { if (!cidr) { return ''; diff --git a/web/installer/src/modules/common/utils/getCidrPeriod.ts b/web/installer/src/modules/common/utils/getCidrPeriod.ts index c8940d80a..c79854e36 100644 --- a/web/installer/src/modules/common/utils/getCidrPeriod.ts +++ b/web/installer/src/modules/common/utils/getCidrPeriod.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export const getCidrPeriod = (cidr: string): string => { if (!cidr) { return ''; diff --git a/web/installer/src/modules/common/utils/getCookie.ts b/web/installer/src/modules/common/utils/getCookie.ts index d4b119983..25243af11 100644 --- a/web/installer/src/modules/common/utils/getCookie.ts +++ b/web/installer/src/modules/common/utils/getCookie.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export const getCookie = (name: string) => { let arr,reg=new RegExp("(^| )"+name+"=([^;]*)(;|$)"); diff --git a/web/installer/src/modules/common/utils/getQueryStatus.ts b/web/installer/src/modules/common/utils/getQueryStatus.ts index dbbf21cf0..98faa7616 100644 --- a/web/installer/src/modules/common/utils/getQueryStatus.ts +++ b/web/installer/src/modules/common/utils/getQueryStatus.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { FetcherState, FetchState, RecordSet } from '@tencent/ff-redux'; export const getQueryStatus = (fetcher: FetcherState>, search?: any) => { diff --git a/web/installer/src/modules/common/utils/getRangeSliderSection.ts b/web/installer/src/modules/common/utils/getRangeSliderSection.ts index f91ca56a1..d99ddd690 100644 --- a/web/installer/src/modules/common/utils/getRangeSliderSection.ts +++ b/web/installer/src/modules/common/utils/getRangeSliderSection.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ // 计算数据盘条 之间的 距离 和数值,主要取四个点: 开始、1/5、1/2、结束 export const getRangeSliderSection = function(diskMaxSize: number, rangeWidth: number = 600) { return [ diff --git a/web/installer/src/modules/common/utils/getScrollBarWidth.ts b/web/installer/src/modules/common/utils/getScrollBarWidth.ts index b2c369044..30d8fa504 100644 --- a/web/installer/src/modules/common/utils/getScrollBarWidth.ts +++ b/web/installer/src/modules/common/utils/getScrollBarWidth.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ //计算滚动条宽度 export const getScrollBarSize = (className?: string) => { let inner = document.createElement('p'); diff --git a/web/installer/src/modules/common/utils/getValidateStatus.ts b/web/installer/src/modules/common/utils/getValidateStatus.ts index 68d79e58b..9d5308eff 100644 --- a/web/installer/src/modules/common/utils/getValidateStatus.ts +++ b/web/installer/src/modules/common/utils/getValidateStatus.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { Validation } from '../models/Validation'; export const getValidateStatus = (validate: Validation) => { diff --git a/web/installer/src/modules/common/utils/getWorkflowError.ts b/web/installer/src/modules/common/utils/getWorkflowError.ts index dd420008b..dd57564c2 100644 --- a/web/installer/src/modules/common/utils/getWorkflowError.ts +++ b/web/installer/src/modules/common/utils/getWorkflowError.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { WorkflowState } from '@tencent/ff-redux'; import { t, Trans } from '@tencent/tea-app/lib/i18n'; diff --git a/web/installer/src/modules/common/utils/hasScrolled.ts b/web/installer/src/modules/common/utils/hasScrolled.ts index 23d2d8e06..be972b395 100644 --- a/web/installer/src/modules/common/utils/hasScrolled.ts +++ b/web/installer/src/modules/common/utils/hasScrolled.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ /** * 判断目标元素是否出现了滚动条 */ diff --git a/web/installer/src/modules/common/utils/includes.ts b/web/installer/src/modules/common/utils/includes.ts index 7ae0b1ce8..6e16ee563 100644 --- a/web/installer/src/modules/common/utils/includes.ts +++ b/web/installer/src/modules/common/utils/includes.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { isEmpty } from './isEmpty'; /** 判断数组是否存在某个值 */ diff --git a/web/installer/src/modules/common/utils/index.ts b/web/installer/src/modules/common/utils/index.ts index 5bd19d1a2..559922bc9 100644 --- a/web/installer/src/modules/common/utils/index.ts +++ b/web/installer/src/modules/common/utils/index.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export { stringSizeOf } from './stringSizeOf'; export { orderBy } from './orderBy'; export { uniq } from './uniq'; diff --git a/web/installer/src/modules/common/utils/isEmpty.ts b/web/installer/src/modules/common/utils/isEmpty.ts index ede0cce71..7622500a6 100644 --- a/web/installer/src/modules/common/utils/isEmpty.ts +++ b/web/installer/src/modules/common/utils/isEmpty.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export const isEmpty = (value: any): boolean => { if (Array.isArray(value)) { //value为数组 diff --git a/web/installer/src/modules/common/utils/operationResult.ts b/web/installer/src/modules/common/utils/operationResult.ts index 4c847c28b..46055cb34 100644 --- a/web/installer/src/modules/common/utils/operationResult.ts +++ b/web/installer/src/modules/common/utils/operationResult.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { OperationResult } from '@tencent/ff-redux'; // 返回标准操作结果 diff --git a/web/installer/src/modules/common/utils/orderBy.ts b/web/installer/src/modules/common/utils/orderBy.ts index ffbfc7ecb..6a9020a36 100644 --- a/web/installer/src/modules/common/utils/orderBy.ts +++ b/web/installer/src/modules/common/utils/orderBy.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export const orderBy = (arr: Array, by: string, order?: string) => { let aa = arr.sort((a, b) => { //默认升序asc diff --git a/web/installer/src/modules/common/utils/pluck.ts b/web/installer/src/modules/common/utils/pluck.ts index 48d7591cb..cc8fc0beb 100644 --- a/web/installer/src/modules/common/utils/pluck.ts +++ b/web/installer/src/modules/common/utils/pluck.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export const pluck = (arr: Array, ckey: string) => { let res = []; if (Array.isArray(arr) && !!ckey) { diff --git a/web/installer/src/modules/common/utils/remove.ts b/web/installer/src/modules/common/utils/remove.ts index 146ae653b..c0d2907e4 100644 --- a/web/installer/src/modules/common/utils/remove.ts +++ b/web/installer/src/modules/common/utils/remove.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ /** * @returns 删除数据后的新数组,改变原数组 */ diff --git a/web/installer/src/modules/common/utils/stringSizeOf.ts b/web/installer/src/modules/common/utils/stringSizeOf.ts index e9873c470..3e14d9e8c 100644 --- a/web/installer/src/modules/common/utils/stringSizeOf.ts +++ b/web/installer/src/modules/common/utils/stringSizeOf.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ /** * 计算字符串所占的内存字节数,默认使用 utf-8的形式进行编码 * @param userScript:string diff --git a/web/installer/src/modules/common/utils/tea_adapter.ts b/web/installer/src/modules/common/utils/tea_adapter.ts index 4ed298ca3..9a23e5983 100644 --- a/web/installer/src/modules/common/utils/tea_adapter.ts +++ b/web/installer/src/modules/common/utils/tea_adapter.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { TableColumn } from '@tencent/qcloud-component'; const execColumnWidth = (columns: TableColumn[], hasChecker: boolean = true) => { diff --git a/web/installer/src/modules/common/utils/uniq.ts b/web/installer/src/modules/common/utils/uniq.ts index f61cc1fbc..ccb07c15d 100644 --- a/web/installer/src/modules/common/utils/uniq.ts +++ b/web/installer/src/modules/common/utils/uniq.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ /** * 数组去重函数 * @param Array arr diff --git a/web/installer/src/modules/installer/WebAPI.ts b/web/installer/src/modules/installer/WebAPI.ts index a195f5562..dd25a7b03 100644 --- a/web/installer/src/modules/installer/WebAPI.ts +++ b/web/installer/src/modules/installer/WebAPI.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import axios from 'axios'; import { Base64 } from 'js-base64'; diff --git a/web/installer/src/modules/installer/actions/index.ts b/web/installer/src/modules/installer/actions/index.ts index 1f4dd52f1..a9ea35f49 100644 --- a/web/installer/src/modules/installer/actions/index.ts +++ b/web/installer/src/modules/installer/actions/index.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { installerActions } from './installerActions'; import { validateActions } from './validateActions'; diff --git a/web/installer/src/modules/installer/actions/installerActions.ts b/web/installer/src/modules/installer/actions/installerActions.ts index c1212afb6..d6129d884 100644 --- a/web/installer/src/modules/installer/actions/installerActions.ts +++ b/web/installer/src/modules/installer/actions/installerActions.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { Base64 } from 'js-base64'; import { diff --git a/web/installer/src/modules/installer/actions/validateActions.ts b/web/installer/src/modules/installer/actions/validateActions.ts index a74013bc9..68e375a0f 100644 --- a/web/installer/src/modules/installer/actions/validateActions.ts +++ b/web/installer/src/modules/installer/actions/validateActions.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as ActionType from '../constants/ActionType'; import { EditState, Machine, RootState } from '../models'; import { installerActions } from './installerActions'; diff --git a/web/installer/src/modules/installer/components/CIDR.tsx b/web/installer/src/modules/installer/components/CIDR.tsx index a9ec5d770..86c156756 100644 --- a/web/installer/src/modules/installer/components/CIDR.tsx +++ b/web/installer/src/modules/installer/components/CIDR.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { Bubble } from '@tencent/tea-component'; diff --git a/web/installer/src/modules/installer/components/EditingItem.tsx b/web/installer/src/modules/installer/components/EditingItem.tsx index 484d649e4..757c656d0 100644 --- a/web/installer/src/modules/installer/components/EditingItem.tsx +++ b/web/installer/src/modules/installer/components/EditingItem.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { Button, Form, Input, Justify, Segment, Text } from '@tencent/tea-component'; diff --git a/web/installer/src/modules/installer/components/InstallerApp.tsx b/web/installer/src/modules/installer/components/InstallerApp.tsx index 70bcbf304..c5485f574 100644 --- a/web/installer/src/modules/installer/components/InstallerApp.tsx +++ b/web/installer/src/modules/installer/components/InstallerApp.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { connect, Provider } from 'react-redux'; diff --git a/web/installer/src/modules/installer/components/InstallerHeadPanel.tsx b/web/installer/src/modules/installer/components/InstallerHeadPanel.tsx index cfef50984..f394b38e1 100644 --- a/web/installer/src/modules/installer/components/InstallerHeadPanel.tsx +++ b/web/installer/src/modules/installer/components/InstallerHeadPanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { RootProps } from './InstallerApp'; diff --git a/web/installer/src/modules/installer/components/ListItem.tsx b/web/installer/src/modules/installer/components/ListItem.tsx index 40209f347..3c31cd79f 100644 --- a/web/installer/src/modules/installer/components/ListItem.tsx +++ b/web/installer/src/modules/installer/components/ListItem.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as classnames from 'classnames'; import * as React from 'react'; diff --git a/web/installer/src/modules/installer/components/ResultPanel.tsx b/web/installer/src/modules/installer/components/ResultPanel.tsx index 41c6f1be7..e50cb1f38 100644 --- a/web/installer/src/modules/installer/components/ResultPanel.tsx +++ b/web/installer/src/modules/installer/components/ResultPanel.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { Base64 } from 'js-base64'; import * as React from 'react'; diff --git a/web/installer/src/modules/installer/components/Step1.tsx b/web/installer/src/modules/installer/components/Step1.tsx index d84ec0896..e7671e37a 100644 --- a/web/installer/src/modules/installer/components/Step1.tsx +++ b/web/installer/src/modules/installer/components/Step1.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { Button, ExternalLink, Form } from '@tencent/tea-component'; diff --git a/web/installer/src/modules/installer/components/Step10.tsx b/web/installer/src/modules/installer/components/Step10.tsx index 4ed41c08d..54b8f8d78 100644 --- a/web/installer/src/modules/installer/components/Step10.tsx +++ b/web/installer/src/modules/installer/components/Step10.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { Base64 } from 'js-base64'; import * as React from 'react'; diff --git a/web/installer/src/modules/installer/components/Step2.tsx b/web/installer/src/modules/installer/components/Step2.tsx index 1945251c6..8ccd7a098 100644 --- a/web/installer/src/modules/installer/components/Step2.tsx +++ b/web/installer/src/modules/installer/components/Step2.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { Button, Form, Input, Segment, Text, Bubble, Icon } from '@tencent/tea-component'; diff --git a/web/installer/src/modules/installer/components/Step3.tsx b/web/installer/src/modules/installer/components/Step3.tsx index be57fe1cd..c1670bc15 100644 --- a/web/installer/src/modules/installer/components/Step3.tsx +++ b/web/installer/src/modules/installer/components/Step3.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { Button, ExternalLink, Form, Input, Segment, Switch, Text } from '@tencent/tea-component'; diff --git a/web/installer/src/modules/installer/components/Step4.tsx b/web/installer/src/modules/installer/components/Step4.tsx index 929973909..efb21ad49 100644 --- a/web/installer/src/modules/installer/components/Step4.tsx +++ b/web/installer/src/modules/installer/components/Step4.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { Button, Form, Input, Segment } from '@tencent/tea-component'; diff --git a/web/installer/src/modules/installer/components/Step5.tsx b/web/installer/src/modules/installer/components/Step5.tsx index ebeea5658..8952c58f2 100644 --- a/web/installer/src/modules/installer/components/Step5.tsx +++ b/web/installer/src/modules/installer/components/Step5.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { Button, Form, Input, Segment, Switch } from '@tencent/tea-component'; diff --git a/web/installer/src/modules/installer/components/Step6.tsx b/web/installer/src/modules/installer/components/Step6.tsx index 020a70ea5..cc72f3763 100644 --- a/web/installer/src/modules/installer/components/Step6.tsx +++ b/web/installer/src/modules/installer/components/Step6.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { Button, Form, Switch, Input, InputNumber, InputAdorment } from '@tencent/tea-component'; diff --git a/web/installer/src/modules/installer/components/Step7.tsx b/web/installer/src/modules/installer/components/Step7.tsx index ec8bc3f7e..acebf8007 100644 --- a/web/installer/src/modules/installer/components/Step7.tsx +++ b/web/installer/src/modules/installer/components/Step7.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { Button, Form, Input, Segment } from '@tencent/tea-component'; diff --git a/web/installer/src/modules/installer/components/Step8.tsx b/web/installer/src/modules/installer/components/Step8.tsx index 031da3aa7..701c4cb7a 100644 --- a/web/installer/src/modules/installer/components/Step8.tsx +++ b/web/installer/src/modules/installer/components/Step8.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { Button, Form, Input, Segment, Switch } from '@tencent/tea-component'; diff --git a/web/installer/src/modules/installer/components/Step9.tsx b/web/installer/src/modules/installer/components/Step9.tsx index 8624400e8..33c053c1b 100644 --- a/web/installer/src/modules/installer/components/Step9.tsx +++ b/web/installer/src/modules/installer/components/Step9.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { isSuccessWorkflow, OperationState } from '@tencent/ff-redux'; diff --git a/web/installer/src/modules/installer/constants/ActionType.ts b/web/installer/src/modules/installer/constants/ActionType.ts index bc7a7fe6a..4eb081bb1 100644 --- a/web/installer/src/modules/installer/constants/ActionType.ts +++ b/web/installer/src/modules/installer/constants/ActionType.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export const FetchCluster = 'FetchCluster'; export const FetchProgress = 'FetchProgress'; export const StepNext = 'StepNext'; diff --git a/web/installer/src/modules/installer/index.tsx b/web/installer/src/modules/installer/index.tsx index dcce1aec8..0f2bb7338 100644 --- a/web/installer/src/modules/installer/index.tsx +++ b/web/installer/src/modules/installer/index.tsx @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import * as React from 'react'; import { insertCSS } from '@tencent/ff-redux'; diff --git a/web/installer/src/modules/installer/models/RootState.ts b/web/installer/src/modules/installer/models/RootState.ts index 17a5858dd..119a3f159 100644 --- a/web/installer/src/modules/installer/models/RootState.ts +++ b/web/installer/src/modules/installer/models/RootState.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { FetcherState, Identifiable, WorkflowState } from '@tencent/ff-redux'; import { Record, Validation } from '../../common/models'; diff --git a/web/installer/src/modules/installer/models/index.ts b/web/installer/src/modules/installer/models/index.ts index fbb0bd82e..6d46475bb 100644 --- a/web/installer/src/modules/installer/models/index.ts +++ b/web/installer/src/modules/installer/models/index.ts @@ -1 +1,18 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ export { RootState, EditState, Machine } from './RootState'; diff --git a/web/installer/src/modules/installer/reducers/RootReducer.ts b/web/installer/src/modules/installer/reducers/RootReducer.ts index 2e1f567a5..323ab6d73 100644 --- a/web/installer/src/modules/installer/reducers/RootReducer.ts +++ b/web/installer/src/modules/installer/reducers/RootReducer.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { combineReducers } from 'redux'; import { generateFetcherReducer, generateWorkflowReducer, reduceToPayload, ReduxAction, uuid } from '@tencent/ff-redux'; diff --git a/web/installer/src/modules/installer/reducers/initState.ts b/web/installer/src/modules/installer/reducers/initState.ts index 72ea3b98a..a000fc562 100644 --- a/web/installer/src/modules/installer/reducers/initState.ts +++ b/web/installer/src/modules/installer/reducers/initState.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { uuid } from '@tencent/ff-redux'; import { initValidation } from '../../common/models'; diff --git a/web/installer/src/modules/installer/stores/RootStore.ts b/web/installer/src/modules/installer/stores/RootStore.ts index 528dcd48c..83ff139b0 100644 --- a/web/installer/src/modules/installer/stores/RootStore.ts +++ b/web/installer/src/modules/installer/stores/RootStore.ts @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ import { createStore } from '@tencent/ff-redux'; import { generateResetableReducer } from '../../../../helpers'; diff --git a/web/installer/webpack/webpack.config.js b/web/installer/webpack/webpack.config.js index 0c8e91dfa..f1ab3d36a 100644 --- a/web/installer/webpack/webpack.config.js +++ b/web/installer/webpack/webpack.config.js @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ 'use stricy'; module.exports = process.env.NODE_ENV === 'procudtion' ? require('./webpack.prod.js') : require('./webpack.dev.js'); diff --git a/web/installer/webpack/webpack.dev.js b/web/installer/webpack/webpack.dev.js index c91cc47ab..cee820ce3 100644 --- a/web/installer/webpack/webpack.dev.js +++ b/web/installer/webpack/webpack.dev.js @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ const path = require('path'); const webpack = require('webpack'); const HtmlWebpackPlugin = require('html-webpack-plugin'); diff --git a/web/installer/webpack/webpack.prod.js b/web/installer/webpack/webpack.prod.js index 4bf3c3978..06178ac19 100644 --- a/web/installer/webpack/webpack.prod.js +++ b/web/installer/webpack/webpack.prod.js @@ -1,3 +1,20 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ const path = require('path'); const webpack = require('webpack'); const HappyPack = require('happypack'); From 6ec4ad53de6e96871be7cb54765f86bf5f89364e Mon Sep 17 00:00:00 2001 From: Leo Ryu Date: Mon, 30 Aug 2021 12:06:25 +0800 Subject: [PATCH 29/62] fix(installer): set docker as global cls runtime (#1521) --- cmd/tke-installer/app/installer/installer.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/cmd/tke-installer/app/installer/installer.go b/cmd/tke-installer/app/installer/installer.go index 0fdbe8d5f..288376261 100644 --- a/cmd/tke-installer/app/installer/installer.go +++ b/cmd/tke-installer/app/installer/installer.go @@ -1188,6 +1188,9 @@ func (t *TKE) createGlobalCluster(ctx context.Context) error { return err } t.completeWithProvider() + if len(t.Cluster.Spec.Features.ContainerRuntime) == 0 { + t.Cluster.Spec.Features.ContainerRuntime = platformv1.Docker + } if t.Cluster.Spec.ClusterCredentialRef == nil { credential := &platformv1.ClusterCredential{ From 07504a7a5d78e93f573b2114125ff1535b09962e Mon Sep 17 00:00:00 2001 From: Lis Date: Tue, 31 Aug 2021 14:37:51 +0800 Subject: [PATCH 30/62] feat(platform): remove containerd volume mount (#1522) --- build/docker/tools/provider-res/Dockerfile | 3 +-- build/docker/tools/provider-res/Makefile | 1 - .../tke-platform-controller/tke-platform-controller.yaml | 8 +------- .../provider/baremetal/phases/containerd/containerd.go | 4 ++-- .../tke-platform-controller/tke-platform-controller.yaml | 8 +------- 5 files changed, 5 insertions(+), 19 deletions(-) diff --git a/build/docker/tools/provider-res/Dockerfile b/build/docker/tools/provider-res/Dockerfile index 8ba0755ee..dd3d54415 100644 --- a/build/docker/tools/provider-res/Dockerfile +++ b/build/docker/tools/provider-res/Dockerfile @@ -42,7 +42,6 @@ COPY linux-amd64/NVIDIA-*.tar.gz res/linux-amd64/ COPY linux-amd64/nvidia-container-*.tar.gz res/linux-amd64/ -COPY containerd conf/containerd -COPY kubeadm conf/kubeadm +COPY containerd/* res/containerd/ ENTRYPOINT ["sh"] diff --git a/build/docker/tools/provider-res/Makefile b/build/docker/tools/provider-res/Makefile index 9c4bca43b..c71562a2b 100644 --- a/build/docker/tools/provider-res/Makefile +++ b/build/docker/tools/provider-res/Makefile @@ -35,7 +35,6 @@ include $(ROOT_DIR)/build/lib/docker-buildx.mk per.build: download @cp "$(ROOT_DIR)/build/docker/tools/$(IMAGE)/Dockerfile" "$(WORK_DIR)/Dockerfile" @cp -r "$(ROOT_DIR)/pkg/platform/provider/baremetal/conf/containerd" "$(WORK_DIR)/containerd" - @cp -r "$(ROOT_DIR)/pkg/platform/provider/baremetal/conf/kubeadm" "$(WORK_DIR)/kubeadm" .PHONY: download download: diff --git a/cmd/tke-installer/app/installer/manifests/tke-platform-controller/tke-platform-controller.yaml b/cmd/tke-installer/app/installer/manifests/tke-platform-controller/tke-platform-controller.yaml index bbec0b9f1..29da4a242 100644 --- a/cmd/tke-installer/app/installer/manifests/tke-platform-controller/tke-platform-controller.yaml +++ b/cmd/tke-installer/app/installer/manifests/tke-platform-controller/tke-platform-controller.yaml @@ -30,14 +30,12 @@ spec: - command: - sh - -c - - cp -r /data/res /app/provider/baremetal/ && cp -r /data/conf/* /app/provider/baremetal/conf/ + - cp -r /data/res /app/provider/baremetal/ image: {{ .ProviderResImage }} name: provider-res volumeMounts: - mountPath: /app/provider/baremetal name: provider-volume - - mountPath: /app/provider/baremetal/conf/containerd - name: containerd-volume containers: - name: tke-platform-controller image: {{ .Image }} @@ -50,8 +48,6 @@ spec: mountPath: /app/conf - name: provider-volume mountPath: /app/provider/baremetal - - name: containerd-volume - mountPath: /app/provider/baremetal/conf/containerd/ - name: provider-config-volume mountPath: /app/provider/baremetal/conf/ - name: docker-volume @@ -95,8 +91,6 @@ spec: name: tke-platform-controller - name: provider-volume emptyDir: {} - - name: containerd-volume - emptyDir: {} - name: provider-config-volume configMap: name: provider-config diff --git a/pkg/platform/provider/baremetal/phases/containerd/containerd.go b/pkg/platform/provider/baremetal/phases/containerd/containerd.go index d2be676f1..c381146d8 100644 --- a/pkg/platform/provider/baremetal/phases/containerd/containerd.go +++ b/pkg/platform/provider/baremetal/phases/containerd/containerd.go @@ -66,7 +66,7 @@ func Install(s ssh.Interface, option *Option) error { return fmt.Errorf("exec %q failed:exit %d:stderr %s:error %s", cmd, exit, stderr, err) } - data, err := template.ParseFile(path.Join(constants.ConfDir, "containerd/config.toml"), option) + data, err := template.ParseFile(path.Join(constants.SrcDir, "containerd/config.toml"), option) if err != nil { return err } @@ -75,7 +75,7 @@ func Install(s ssh.Interface, option *Option) error { return errors.Wrapf(err, "write %s error", containerdConfigFile) } - data, err = template.ParseFile(path.Join(constants.ConfDir, "containerd/containerd.service"), option) + data, err = template.ParseFile(path.Join(constants.SrcDir, "containerd/containerd.service"), option) if err != nil { return err } diff --git a/test/e2e/manifests/tke-platform-controller/tke-platform-controller.yaml b/test/e2e/manifests/tke-platform-controller/tke-platform-controller.yaml index fc52fac19..c68041948 100644 --- a/test/e2e/manifests/tke-platform-controller/tke-platform-controller.yaml +++ b/test/e2e/manifests/tke-platform-controller/tke-platform-controller.yaml @@ -10,14 +10,12 @@ spec: - command: - sh - -c - - cp -r /data/res /app/provider/baremetal/ && cp -r /data/conf/* /app/provider/baremetal/conf/ + - cp -r /data/res /app/provider/baremetal/ image: {{ .ProviderResImage }} name: provider-res volumeMounts: - mountPath: /app/provider/baremetal name: provider-volume - - mountPath: /app/provider/baremetal/conf/containerd - name: containerd-volume containers: - name: tke-platform-controller image: {{ .Image }} @@ -30,8 +28,6 @@ spec: mountPath: /app/conf - name: provider-volume mountPath: /app/provider/baremetal - - name: containerd-volume - mountPath: /app/provider/baremetal/conf/containerd/ - name: provider-config-volume mountPath: /app/provider/baremetal/conf/ - name: docker-volume @@ -58,8 +54,6 @@ spec: name: tke-platform-controller - name: provider-volume emptyDir: {} - - name: containerd-volume - emptyDir: {} - name: provider-config-volume configMap: name: provider-config From 906a087fc741d9c39bb0645f428fa39e8d8cb2c9 Mon Sep 17 00:00:00 2001 From: Leo Ryu Date: Tue, 31 Aug 2021 16:42:06 +0800 Subject: [PATCH 31/62] Revert "ci(makefile): generate asset before build (#1421)" (#1527) This reverts commit ce1ce0b3e3748e2f72914c9f761abbc7b5dcabe4. --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index b90157e47..3e1169b21 100644 --- a/Makefile +++ b/Makefile @@ -15,7 +15,7 @@ # specific language governing permissions and limitations under the License. .PHONY: all -all: asset lint test build +all: lint test build # ============================================================================== # Build options From d0e106ddd6bd70332e97c4b58062b5033a82bc1e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=88=98=E7=A5=9E=E8=A5=BF=E7=BA=A2=E6=9F=BF?= <34213033+TomatoAres@users.noreply.github.com> Date: Tue, 31 Aug 2021 16:43:47 +0800 Subject: [PATCH 32/62] ci: release lack of asset (#1524) Co-authored-by: Cui Shuaijie --- Makefile | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 3e1169b21..7dcdf9768 100644 --- a/Makefile +++ b/Makefile @@ -123,6 +123,7 @@ deploy: .PHONY: clean clean: @$(MAKE) go.clean + git restore pkg/platform/registry/clusteraddontype/assets/assets.go ## lint: Check syntax and styling of go sources. .PHONY: lint @@ -139,7 +140,7 @@ release.build: ifeq ($(NEED_BUILD_PROVIDER),true) cd build/docker/tools/provider-res && make all endif - make push.multiarch + make asset && make push.multiarch ## release: Release tke .PHONY: release From b7f400cb2b66a09c99255a91a6604c47f9d4765f Mon Sep 17 00:00:00 2001 From: GaoXiaodong <13814823514@163.com> Date: Wed, 1 Sep 2021 17:03:12 +0800 Subject: [PATCH 33/62] fix(platform): add apiresources options (#1531) Co-authored-by: xdonggao --- api/openapi/zz_generated.openapi.go | 28 + api/platform/register.go | 1 + api/platform/types.go | 9 +- api/platform/v1/generated.pb.go | 751 ++++++++++-------- api/platform/v1/generated.proto | 4 + api/platform/v1/register.go | 1 + api/platform/v1/types.go | 7 + .../v1/types_swagger_doc_generated.go | 8 + api/platform/v1/zz_generated.conversion.go | 28 + api/platform/v1/zz_generated.deepcopy.go | 25 + api/platform/zz_generated.deepcopy.go | 25 + .../registry/cluster/storage/api_resources.go | 4 + 12 files changed, 576 insertions(+), 315 deletions(-) diff --git a/api/openapi/zz_generated.openapi.go b/api/openapi/zz_generated.openapi.go index 471a0c9d9..80d0976e4 100644 --- a/api/openapi/zz_generated.openapi.go +++ b/api/openapi/zz_generated.openapi.go @@ -980,6 +980,7 @@ func GetOpenAPIDefinitions(ref common.ReferenceCallback) map[string]common.OpenA "tkestack.io/tke/api/platform/v1.ClusterGroupAPIResourceItem": schema_tke_api_platform_v1_ClusterGroupAPIResourceItem(ref), "tkestack.io/tke/api/platform/v1.ClusterGroupAPIResourceItems": schema_tke_api_platform_v1_ClusterGroupAPIResourceItems(ref), "tkestack.io/tke/api/platform/v1.ClusterGroupAPIResourceItemsList": schema_tke_api_platform_v1_ClusterGroupAPIResourceItemsList(ref), + "tkestack.io/tke/api/platform/v1.ClusterGroupAPIResourceOptions": schema_tke_api_platform_v1_ClusterGroupAPIResourceOptions(ref), "tkestack.io/tke/api/platform/v1.ClusterList": schema_tke_api_platform_v1_ClusterList(ref), "tkestack.io/tke/api/platform/v1.ClusterMachine": schema_tke_api_platform_v1_ClusterMachine(ref), "tkestack.io/tke/api/platform/v1.ClusterProperty": schema_tke_api_platform_v1_ClusterProperty(ref), @@ -47242,6 +47243,33 @@ func schema_tke_api_platform_v1_ClusterGroupAPIResourceItemsList(ref common.Refe } } +func schema_tke_api_platform_v1_ClusterGroupAPIResourceOptions(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "ClusterGroupAPIResourceOptions is the query options.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + } +} + func schema_tke_api_platform_v1_ClusterList(ref common.ReferenceCallback) common.OpenAPIDefinition { return common.OpenAPIDefinition{ Schema: spec.Schema{ diff --git a/api/platform/register.go b/api/platform/register.go index 4f8c6b644..960ef1508 100644 --- a/api/platform/register.go +++ b/api/platform/register.go @@ -121,6 +121,7 @@ func addKnownTypes(scheme *runtime.Scheme) error { &ClusterGroupAPIResourceItems{}, &ClusterGroupAPIResourceItemsList{}, + &ClusterGroupAPIResourceOptions{}, ) return nil } diff --git a/api/platform/types.go b/api/platform/types.go index 4426bade7..746ae30ec 100644 --- a/api/platform/types.go +++ b/api/platform/types.go @@ -235,7 +235,7 @@ type ContainerRuntimeType = string const ( Containerd ContainerRuntimeType = "containerd" - Docker ContainerRuntimeType = "docker" + Docker ContainerRuntimeType = "docker" ) // ClusterPhase defines the phase of cluster constructor. @@ -1752,3 +1752,10 @@ type ClusterGroupAPIResourceItem struct { // categories is a list of the grouped resources this resource belongs to (e.g. 'all') Categories []string } + +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// ClusterGroupAPIResourceOptions is the query options. +type ClusterGroupAPIResourceOptions struct { + metav1.TypeMeta +} diff --git a/api/platform/v1/generated.pb.go b/api/platform/v1/generated.pb.go index 04b0d3f41..2dfc1d809 100644 --- a/api/platform/v1/generated.pb.go +++ b/api/platform/v1/generated.pb.go @@ -861,10 +861,38 @@ func (m *ClusterGroupAPIResourceItemsList) XXX_DiscardUnknown() { var xxx_messageInfo_ClusterGroupAPIResourceItemsList proto.InternalMessageInfo +func (m *ClusterGroupAPIResourceOptions) Reset() { *m = ClusterGroupAPIResourceOptions{} } +func (*ClusterGroupAPIResourceOptions) ProtoMessage() {} +func (*ClusterGroupAPIResourceOptions) Descriptor() ([]byte, []int) { + return fileDescriptor_6e12a3c1f6fbf61e, []int{29} +} +func (m *ClusterGroupAPIResourceOptions) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ClusterGroupAPIResourceOptions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ClusterGroupAPIResourceOptions) XXX_Merge(src proto.Message) { + xxx_messageInfo_ClusterGroupAPIResourceOptions.Merge(m, src) +} +func (m *ClusterGroupAPIResourceOptions) XXX_Size() int { + return m.Size() +} +func (m *ClusterGroupAPIResourceOptions) XXX_DiscardUnknown() { + xxx_messageInfo_ClusterGroupAPIResourceOptions.DiscardUnknown(m) +} + +var xxx_messageInfo_ClusterGroupAPIResourceOptions proto.InternalMessageInfo + func (m *ClusterList) Reset() { *m = ClusterList{} } func (*ClusterList) ProtoMessage() {} func (*ClusterList) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{29} + return fileDescriptor_6e12a3c1f6fbf61e, []int{30} } func (m *ClusterList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -892,7 +920,7 @@ var xxx_messageInfo_ClusterList proto.InternalMessageInfo func (m *ClusterMachine) Reset() { *m = ClusterMachine{} } func (*ClusterMachine) ProtoMessage() {} func (*ClusterMachine) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{30} + return fileDescriptor_6e12a3c1f6fbf61e, []int{31} } func (m *ClusterMachine) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -920,7 +948,7 @@ var xxx_messageInfo_ClusterMachine proto.InternalMessageInfo func (m *ClusterProperty) Reset() { *m = ClusterProperty{} } func (*ClusterProperty) ProtoMessage() {} func (*ClusterProperty) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{31} + return fileDescriptor_6e12a3c1f6fbf61e, []int{32} } func (m *ClusterProperty) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -948,7 +976,7 @@ var xxx_messageInfo_ClusterProperty proto.InternalMessageInfo func (m *ClusterResource) Reset() { *m = ClusterResource{} } func (*ClusterResource) ProtoMessage() {} func (*ClusterResource) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{32} + return fileDescriptor_6e12a3c1f6fbf61e, []int{33} } func (m *ClusterResource) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -976,7 +1004,7 @@ var xxx_messageInfo_ClusterResource proto.InternalMessageInfo func (m *ClusterSpec) Reset() { *m = ClusterSpec{} } func (*ClusterSpec) ProtoMessage() {} func (*ClusterSpec) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{33} + return fileDescriptor_6e12a3c1f6fbf61e, []int{34} } func (m *ClusterSpec) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1004,7 +1032,7 @@ var xxx_messageInfo_ClusterSpec proto.InternalMessageInfo func (m *ClusterStatus) Reset() { *m = ClusterStatus{} } func (*ClusterStatus) ProtoMessage() {} func (*ClusterStatus) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{34} + return fileDescriptor_6e12a3c1f6fbf61e, []int{35} } func (m *ClusterStatus) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1032,7 +1060,7 @@ var xxx_messageInfo_ClusterStatus proto.InternalMessageInfo func (m *ConfigMap) Reset() { *m = ConfigMap{} } func (*ConfigMap) ProtoMessage() {} func (*ConfigMap) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{35} + return fileDescriptor_6e12a3c1f6fbf61e, []int{36} } func (m *ConfigMap) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1060,7 +1088,7 @@ var xxx_messageInfo_ConfigMap proto.InternalMessageInfo func (m *ConfigMapList) Reset() { *m = ConfigMapList{} } func (*ConfigMapList) ProtoMessage() {} func (*ConfigMapList) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{36} + return fileDescriptor_6e12a3c1f6fbf61e, []int{37} } func (m *ConfigMapList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1088,7 +1116,7 @@ var xxx_messageInfo_ConfigMapList proto.InternalMessageInfo func (m *CronHPA) Reset() { *m = CronHPA{} } func (*CronHPA) ProtoMessage() {} func (*CronHPA) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{37} + return fileDescriptor_6e12a3c1f6fbf61e, []int{38} } func (m *CronHPA) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1116,7 +1144,7 @@ var xxx_messageInfo_CronHPA proto.InternalMessageInfo func (m *CronHPAList) Reset() { *m = CronHPAList{} } func (*CronHPAList) ProtoMessage() {} func (*CronHPAList) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{38} + return fileDescriptor_6e12a3c1f6fbf61e, []int{39} } func (m *CronHPAList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1144,7 +1172,7 @@ var xxx_messageInfo_CronHPAList proto.InternalMessageInfo func (m *CronHPAProxyOptions) Reset() { *m = CronHPAProxyOptions{} } func (*CronHPAProxyOptions) ProtoMessage() {} func (*CronHPAProxyOptions) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{39} + return fileDescriptor_6e12a3c1f6fbf61e, []int{40} } func (m *CronHPAProxyOptions) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1172,7 +1200,7 @@ var xxx_messageInfo_CronHPAProxyOptions proto.InternalMessageInfo func (m *CronHPASpec) Reset() { *m = CronHPASpec{} } func (*CronHPASpec) ProtoMessage() {} func (*CronHPASpec) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{40} + return fileDescriptor_6e12a3c1f6fbf61e, []int{41} } func (m *CronHPASpec) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1200,7 +1228,7 @@ var xxx_messageInfo_CronHPASpec proto.InternalMessageInfo func (m *CronHPAStatus) Reset() { *m = CronHPAStatus{} } func (*CronHPAStatus) ProtoMessage() {} func (*CronHPAStatus) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{41} + return fileDescriptor_6e12a3c1f6fbf61e, []int{42} } func (m *CronHPAStatus) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1228,7 +1256,7 @@ var xxx_messageInfo_CronHPAStatus proto.InternalMessageInfo func (m *Etcd) Reset() { *m = Etcd{} } func (*Etcd) ProtoMessage() {} func (*Etcd) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{42} + return fileDescriptor_6e12a3c1f6fbf61e, []int{43} } func (m *Etcd) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1256,7 +1284,7 @@ var xxx_messageInfo_Etcd proto.InternalMessageInfo func (m *ExternalAuthzWebhookAddr) Reset() { *m = ExternalAuthzWebhookAddr{} } func (*ExternalAuthzWebhookAddr) ProtoMessage() {} func (*ExternalAuthzWebhookAddr) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{43} + return fileDescriptor_6e12a3c1f6fbf61e, []int{44} } func (m *ExternalAuthzWebhookAddr) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1284,7 +1312,7 @@ var xxx_messageInfo_ExternalAuthzWebhookAddr proto.InternalMessageInfo func (m *ExternalEtcd) Reset() { *m = ExternalEtcd{} } func (*ExternalEtcd) ProtoMessage() {} func (*ExternalEtcd) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{44} + return fileDescriptor_6e12a3c1f6fbf61e, []int{45} } func (m *ExternalEtcd) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1312,7 +1340,7 @@ var xxx_messageInfo_ExternalEtcd proto.InternalMessageInfo func (m *File) Reset() { *m = File{} } func (*File) ProtoMessage() {} func (*File) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{45} + return fileDescriptor_6e12a3c1f6fbf61e, []int{46} } func (m *File) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1340,7 +1368,7 @@ var xxx_messageInfo_File proto.InternalMessageInfo func (m *HA) Reset() { *m = HA{} } func (*HA) ProtoMessage() {} func (*HA) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{46} + return fileDescriptor_6e12a3c1f6fbf61e, []int{47} } func (m *HA) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1368,7 +1396,7 @@ var xxx_messageInfo_HA proto.InternalMessageInfo func (m *Helm) Reset() { *m = Helm{} } func (*Helm) ProtoMessage() {} func (*Helm) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{47} + return fileDescriptor_6e12a3c1f6fbf61e, []int{48} } func (m *Helm) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1396,7 +1424,7 @@ var xxx_messageInfo_Helm proto.InternalMessageInfo func (m *HelmList) Reset() { *m = HelmList{} } func (*HelmList) ProtoMessage() {} func (*HelmList) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{48} + return fileDescriptor_6e12a3c1f6fbf61e, []int{49} } func (m *HelmList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1424,7 +1452,7 @@ var xxx_messageInfo_HelmList proto.InternalMessageInfo func (m *HelmProxyOptions) Reset() { *m = HelmProxyOptions{} } func (*HelmProxyOptions) ProtoMessage() {} func (*HelmProxyOptions) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{49} + return fileDescriptor_6e12a3c1f6fbf61e, []int{50} } func (m *HelmProxyOptions) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1452,7 +1480,7 @@ var xxx_messageInfo_HelmProxyOptions proto.InternalMessageInfo func (m *HelmSpec) Reset() { *m = HelmSpec{} } func (*HelmSpec) ProtoMessage() {} func (*HelmSpec) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{50} + return fileDescriptor_6e12a3c1f6fbf61e, []int{51} } func (m *HelmSpec) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1480,7 +1508,7 @@ var xxx_messageInfo_HelmSpec proto.InternalMessageInfo func (m *HelmStatus) Reset() { *m = HelmStatus{} } func (*HelmStatus) ProtoMessage() {} func (*HelmStatus) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{51} + return fileDescriptor_6e12a3c1f6fbf61e, []int{52} } func (m *HelmStatus) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1508,7 +1536,7 @@ var xxx_messageInfo_HelmStatus proto.InternalMessageInfo func (m *IPAM) Reset() { *m = IPAM{} } func (*IPAM) ProtoMessage() {} func (*IPAM) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{52} + return fileDescriptor_6e12a3c1f6fbf61e, []int{53} } func (m *IPAM) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1536,7 +1564,7 @@ var xxx_messageInfo_IPAM proto.InternalMessageInfo func (m *IPAMList) Reset() { *m = IPAMList{} } func (*IPAMList) ProtoMessage() {} func (*IPAMList) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{53} + return fileDescriptor_6e12a3c1f6fbf61e, []int{54} } func (m *IPAMList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1564,7 +1592,7 @@ var xxx_messageInfo_IPAMList proto.InternalMessageInfo func (m *IPAMProxyOptions) Reset() { *m = IPAMProxyOptions{} } func (*IPAMProxyOptions) ProtoMessage() {} func (*IPAMProxyOptions) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{54} + return fileDescriptor_6e12a3c1f6fbf61e, []int{55} } func (m *IPAMProxyOptions) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1592,7 +1620,7 @@ var xxx_messageInfo_IPAMProxyOptions proto.InternalMessageInfo func (m *IPAMSpec) Reset() { *m = IPAMSpec{} } func (*IPAMSpec) ProtoMessage() {} func (*IPAMSpec) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{55} + return fileDescriptor_6e12a3c1f6fbf61e, []int{56} } func (m *IPAMSpec) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1620,7 +1648,7 @@ var xxx_messageInfo_IPAMSpec proto.InternalMessageInfo func (m *IPAMStatus) Reset() { *m = IPAMStatus{} } func (*IPAMStatus) ProtoMessage() {} func (*IPAMStatus) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{56} + return fileDescriptor_6e12a3c1f6fbf61e, []int{57} } func (m *IPAMStatus) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1648,7 +1676,7 @@ var xxx_messageInfo_IPAMStatus proto.InternalMessageInfo func (m *LBCF) Reset() { *m = LBCF{} } func (*LBCF) ProtoMessage() {} func (*LBCF) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{57} + return fileDescriptor_6e12a3c1f6fbf61e, []int{58} } func (m *LBCF) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1676,7 +1704,7 @@ var xxx_messageInfo_LBCF proto.InternalMessageInfo func (m *LBCFList) Reset() { *m = LBCFList{} } func (*LBCFList) ProtoMessage() {} func (*LBCFList) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{58} + return fileDescriptor_6e12a3c1f6fbf61e, []int{59} } func (m *LBCFList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1704,7 +1732,7 @@ var xxx_messageInfo_LBCFList proto.InternalMessageInfo func (m *LBCFProxyOptions) Reset() { *m = LBCFProxyOptions{} } func (*LBCFProxyOptions) ProtoMessage() {} func (*LBCFProxyOptions) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{59} + return fileDescriptor_6e12a3c1f6fbf61e, []int{60} } func (m *LBCFProxyOptions) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1732,7 +1760,7 @@ var xxx_messageInfo_LBCFProxyOptions proto.InternalMessageInfo func (m *LBCFSpec) Reset() { *m = LBCFSpec{} } func (*LBCFSpec) ProtoMessage() {} func (*LBCFSpec) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{60} + return fileDescriptor_6e12a3c1f6fbf61e, []int{61} } func (m *LBCFSpec) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1760,7 +1788,7 @@ var xxx_messageInfo_LBCFSpec proto.InternalMessageInfo func (m *LBCFStatus) Reset() { *m = LBCFStatus{} } func (*LBCFStatus) ProtoMessage() {} func (*LBCFStatus) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{61} + return fileDescriptor_6e12a3c1f6fbf61e, []int{62} } func (m *LBCFStatus) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1788,7 +1816,7 @@ var xxx_messageInfo_LBCFStatus proto.InternalMessageInfo func (m *LocalEtcd) Reset() { *m = LocalEtcd{} } func (*LocalEtcd) ProtoMessage() {} func (*LocalEtcd) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{62} + return fileDescriptor_6e12a3c1f6fbf61e, []int{63} } func (m *LocalEtcd) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1816,7 +1844,7 @@ var xxx_messageInfo_LocalEtcd proto.InternalMessageInfo func (m *LogCollector) Reset() { *m = LogCollector{} } func (*LogCollector) ProtoMessage() {} func (*LogCollector) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{63} + return fileDescriptor_6e12a3c1f6fbf61e, []int{64} } func (m *LogCollector) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1844,7 +1872,7 @@ var xxx_messageInfo_LogCollector proto.InternalMessageInfo func (m *LogCollectorList) Reset() { *m = LogCollectorList{} } func (*LogCollectorList) ProtoMessage() {} func (*LogCollectorList) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{64} + return fileDescriptor_6e12a3c1f6fbf61e, []int{65} } func (m *LogCollectorList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1872,7 +1900,7 @@ var xxx_messageInfo_LogCollectorList proto.InternalMessageInfo func (m *LogCollectorProxyOptions) Reset() { *m = LogCollectorProxyOptions{} } func (*LogCollectorProxyOptions) ProtoMessage() {} func (*LogCollectorProxyOptions) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{65} + return fileDescriptor_6e12a3c1f6fbf61e, []int{66} } func (m *LogCollectorProxyOptions) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1900,7 +1928,7 @@ var xxx_messageInfo_LogCollectorProxyOptions proto.InternalMessageInfo func (m *LogCollectorSpec) Reset() { *m = LogCollectorSpec{} } func (*LogCollectorSpec) ProtoMessage() {} func (*LogCollectorSpec) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{66} + return fileDescriptor_6e12a3c1f6fbf61e, []int{67} } func (m *LogCollectorSpec) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1928,7 +1956,7 @@ var xxx_messageInfo_LogCollectorSpec proto.InternalMessageInfo func (m *LogCollectorStatus) Reset() { *m = LogCollectorStatus{} } func (*LogCollectorStatus) ProtoMessage() {} func (*LogCollectorStatus) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{67} + return fileDescriptor_6e12a3c1f6fbf61e, []int{68} } func (m *LogCollectorStatus) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1956,7 +1984,7 @@ var xxx_messageInfo_LogCollectorStatus proto.InternalMessageInfo func (m *Machine) Reset() { *m = Machine{} } func (*Machine) ProtoMessage() {} func (*Machine) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{68} + return fileDescriptor_6e12a3c1f6fbf61e, []int{69} } func (m *Machine) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1984,7 +2012,7 @@ var xxx_messageInfo_Machine proto.InternalMessageInfo func (m *MachineAddress) Reset() { *m = MachineAddress{} } func (*MachineAddress) ProtoMessage() {} func (*MachineAddress) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{69} + return fileDescriptor_6e12a3c1f6fbf61e, []int{70} } func (m *MachineAddress) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2012,7 +2040,7 @@ var xxx_messageInfo_MachineAddress proto.InternalMessageInfo func (m *MachineCondition) Reset() { *m = MachineCondition{} } func (*MachineCondition) ProtoMessage() {} func (*MachineCondition) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{70} + return fileDescriptor_6e12a3c1f6fbf61e, []int{71} } func (m *MachineCondition) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2040,7 +2068,7 @@ var xxx_messageInfo_MachineCondition proto.InternalMessageInfo func (m *MachineList) Reset() { *m = MachineList{} } func (*MachineList) ProtoMessage() {} func (*MachineList) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{71} + return fileDescriptor_6e12a3c1f6fbf61e, []int{72} } func (m *MachineList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2068,7 +2096,7 @@ var xxx_messageInfo_MachineList proto.InternalMessageInfo func (m *MachineSpec) Reset() { *m = MachineSpec{} } func (*MachineSpec) ProtoMessage() {} func (*MachineSpec) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{72} + return fileDescriptor_6e12a3c1f6fbf61e, []int{73} } func (m *MachineSpec) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2096,7 +2124,7 @@ var xxx_messageInfo_MachineSpec proto.InternalMessageInfo func (m *MachineStatus) Reset() { *m = MachineStatus{} } func (*MachineStatus) ProtoMessage() {} func (*MachineStatus) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{73} + return fileDescriptor_6e12a3c1f6fbf61e, []int{74} } func (m *MachineStatus) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2124,7 +2152,7 @@ var xxx_messageInfo_MachineStatus proto.InternalMessageInfo func (m *MachineSystemInfo) Reset() { *m = MachineSystemInfo{} } func (*MachineSystemInfo) ProtoMessage() {} func (*MachineSystemInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{74} + return fileDescriptor_6e12a3c1f6fbf61e, []int{75} } func (m *MachineSystemInfo) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2152,7 +2180,7 @@ var xxx_messageInfo_MachineSystemInfo proto.InternalMessageInfo func (m *PVCRProxyOptions) Reset() { *m = PVCRProxyOptions{} } func (*PVCRProxyOptions) ProtoMessage() {} func (*PVCRProxyOptions) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{75} + return fileDescriptor_6e12a3c1f6fbf61e, []int{76} } func (m *PVCRProxyOptions) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2180,7 +2208,7 @@ var xxx_messageInfo_PVCRProxyOptions proto.InternalMessageInfo func (m *PersistentBackEnd) Reset() { *m = PersistentBackEnd{} } func (*PersistentBackEnd) ProtoMessage() {} func (*PersistentBackEnd) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{76} + return fileDescriptor_6e12a3c1f6fbf61e, []int{77} } func (m *PersistentBackEnd) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2208,7 +2236,7 @@ var xxx_messageInfo_PersistentBackEnd proto.InternalMessageInfo func (m *PersistentEvent) Reset() { *m = PersistentEvent{} } func (*PersistentEvent) ProtoMessage() {} func (*PersistentEvent) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{77} + return fileDescriptor_6e12a3c1f6fbf61e, []int{78} } func (m *PersistentEvent) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2236,7 +2264,7 @@ var xxx_messageInfo_PersistentEvent proto.InternalMessageInfo func (m *PersistentEventList) Reset() { *m = PersistentEventList{} } func (*PersistentEventList) ProtoMessage() {} func (*PersistentEventList) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{78} + return fileDescriptor_6e12a3c1f6fbf61e, []int{79} } func (m *PersistentEventList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2264,7 +2292,7 @@ var xxx_messageInfo_PersistentEventList proto.InternalMessageInfo func (m *PersistentEventSpec) Reset() { *m = PersistentEventSpec{} } func (*PersistentEventSpec) ProtoMessage() {} func (*PersistentEventSpec) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{79} + return fileDescriptor_6e12a3c1f6fbf61e, []int{80} } func (m *PersistentEventSpec) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2292,7 +2320,7 @@ var xxx_messageInfo_PersistentEventSpec proto.InternalMessageInfo func (m *PersistentEventStatus) Reset() { *m = PersistentEventStatus{} } func (*PersistentEventStatus) ProtoMessage() {} func (*PersistentEventStatus) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{80} + return fileDescriptor_6e12a3c1f6fbf61e, []int{81} } func (m *PersistentEventStatus) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2320,7 +2348,7 @@ var xxx_messageInfo_PersistentEventStatus proto.InternalMessageInfo func (m *Prometheus) Reset() { *m = Prometheus{} } func (*Prometheus) ProtoMessage() {} func (*Prometheus) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{81} + return fileDescriptor_6e12a3c1f6fbf61e, []int{82} } func (m *Prometheus) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2348,7 +2376,7 @@ var xxx_messageInfo_Prometheus proto.InternalMessageInfo func (m *PrometheusList) Reset() { *m = PrometheusList{} } func (*PrometheusList) ProtoMessage() {} func (*PrometheusList) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{82} + return fileDescriptor_6e12a3c1f6fbf61e, []int{83} } func (m *PrometheusList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2376,7 +2404,7 @@ var xxx_messageInfo_PrometheusList proto.InternalMessageInfo func (m *PrometheusRemoteAddr) Reset() { *m = PrometheusRemoteAddr{} } func (*PrometheusRemoteAddr) ProtoMessage() {} func (*PrometheusRemoteAddr) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{83} + return fileDescriptor_6e12a3c1f6fbf61e, []int{84} } func (m *PrometheusRemoteAddr) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2404,7 +2432,7 @@ var xxx_messageInfo_PrometheusRemoteAddr proto.InternalMessageInfo func (m *PrometheusSpec) Reset() { *m = PrometheusSpec{} } func (*PrometheusSpec) ProtoMessage() {} func (*PrometheusSpec) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{84} + return fileDescriptor_6e12a3c1f6fbf61e, []int{85} } func (m *PrometheusSpec) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2432,7 +2460,7 @@ var xxx_messageInfo_PrometheusSpec proto.InternalMessageInfo func (m *PrometheusStatus) Reset() { *m = PrometheusStatus{} } func (*PrometheusStatus) ProtoMessage() {} func (*PrometheusStatus) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{85} + return fileDescriptor_6e12a3c1f6fbf61e, []int{86} } func (m *PrometheusStatus) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2460,7 +2488,7 @@ var xxx_messageInfo_PrometheusStatus proto.InternalMessageInfo func (m *Registry) Reset() { *m = Registry{} } func (*Registry) ProtoMessage() {} func (*Registry) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{86} + return fileDescriptor_6e12a3c1f6fbf61e, []int{87} } func (m *Registry) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2488,7 +2516,7 @@ var xxx_messageInfo_Registry proto.InternalMessageInfo func (m *RegistryList) Reset() { *m = RegistryList{} } func (*RegistryList) ProtoMessage() {} func (*RegistryList) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{87} + return fileDescriptor_6e12a3c1f6fbf61e, []int{88} } func (m *RegistryList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2516,7 +2544,7 @@ var xxx_messageInfo_RegistryList proto.InternalMessageInfo func (m *RegistrySpec) Reset() { *m = RegistrySpec{} } func (*RegistrySpec) ProtoMessage() {} func (*RegistrySpec) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{88} + return fileDescriptor_6e12a3c1f6fbf61e, []int{89} } func (m *RegistrySpec) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2544,7 +2572,7 @@ var xxx_messageInfo_RegistrySpec proto.InternalMessageInfo func (m *ResourceRequirements) Reset() { *m = ResourceRequirements{} } func (*ResourceRequirements) ProtoMessage() {} func (*ResourceRequirements) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{89} + return fileDescriptor_6e12a3c1f6fbf61e, []int{90} } func (m *ResourceRequirements) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2572,7 +2600,7 @@ var xxx_messageInfo_ResourceRequirements proto.InternalMessageInfo func (m *StorageBackEndCLS) Reset() { *m = StorageBackEndCLS{} } func (*StorageBackEndCLS) ProtoMessage() {} func (*StorageBackEndCLS) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{90} + return fileDescriptor_6e12a3c1f6fbf61e, []int{91} } func (m *StorageBackEndCLS) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2600,7 +2628,7 @@ var xxx_messageInfo_StorageBackEndCLS proto.InternalMessageInfo func (m *StorageBackEndES) Reset() { *m = StorageBackEndES{} } func (*StorageBackEndES) ProtoMessage() {} func (*StorageBackEndES) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{91} + return fileDescriptor_6e12a3c1f6fbf61e, []int{92} } func (m *StorageBackEndES) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2628,7 +2656,7 @@ var xxx_messageInfo_StorageBackEndES proto.InternalMessageInfo func (m *TKEHA) Reset() { *m = TKEHA{} } func (*TKEHA) ProtoMessage() {} func (*TKEHA) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{92} + return fileDescriptor_6e12a3c1f6fbf61e, []int{93} } func (m *TKEHA) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2656,7 +2684,7 @@ var xxx_messageInfo_TKEHA proto.InternalMessageInfo func (m *TappController) Reset() { *m = TappController{} } func (*TappController) ProtoMessage() {} func (*TappController) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{93} + return fileDescriptor_6e12a3c1f6fbf61e, []int{94} } func (m *TappController) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2684,7 +2712,7 @@ var xxx_messageInfo_TappController proto.InternalMessageInfo func (m *TappControllerList) Reset() { *m = TappControllerList{} } func (*TappControllerList) ProtoMessage() {} func (*TappControllerList) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{94} + return fileDescriptor_6e12a3c1f6fbf61e, []int{95} } func (m *TappControllerList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2712,7 +2740,7 @@ var xxx_messageInfo_TappControllerList proto.InternalMessageInfo func (m *TappControllerProxyOptions) Reset() { *m = TappControllerProxyOptions{} } func (*TappControllerProxyOptions) ProtoMessage() {} func (*TappControllerProxyOptions) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{95} + return fileDescriptor_6e12a3c1f6fbf61e, []int{96} } func (m *TappControllerProxyOptions) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2740,7 +2768,7 @@ var xxx_messageInfo_TappControllerProxyOptions proto.InternalMessageInfo func (m *TappControllerSpec) Reset() { *m = TappControllerSpec{} } func (*TappControllerSpec) ProtoMessage() {} func (*TappControllerSpec) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{96} + return fileDescriptor_6e12a3c1f6fbf61e, []int{97} } func (m *TappControllerSpec) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2768,7 +2796,7 @@ var xxx_messageInfo_TappControllerSpec proto.InternalMessageInfo func (m *TappControllerStatus) Reset() { *m = TappControllerStatus{} } func (*TappControllerStatus) ProtoMessage() {} func (*TappControllerStatus) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{97} + return fileDescriptor_6e12a3c1f6fbf61e, []int{98} } func (m *TappControllerStatus) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2796,7 +2824,7 @@ var xxx_messageInfo_TappControllerStatus proto.InternalMessageInfo func (m *ThirdPartyHA) Reset() { *m = ThirdPartyHA{} } func (*ThirdPartyHA) ProtoMessage() {} func (*ThirdPartyHA) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{98} + return fileDescriptor_6e12a3c1f6fbf61e, []int{99} } func (m *ThirdPartyHA) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2824,7 +2852,7 @@ var xxx_messageInfo_ThirdPartyHA proto.InternalMessageInfo func (m *Upgrade) Reset() { *m = Upgrade{} } func (*Upgrade) ProtoMessage() {} func (*Upgrade) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{99} + return fileDescriptor_6e12a3c1f6fbf61e, []int{100} } func (m *Upgrade) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2852,7 +2880,7 @@ var xxx_messageInfo_Upgrade proto.InternalMessageInfo func (m *UpgradeStrategy) Reset() { *m = UpgradeStrategy{} } func (*UpgradeStrategy) ProtoMessage() {} func (*UpgradeStrategy) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{100} + return fileDescriptor_6e12a3c1f6fbf61e, []int{101} } func (m *UpgradeStrategy) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2880,7 +2908,7 @@ var xxx_messageInfo_UpgradeStrategy proto.InternalMessageInfo func (m *VolumeDecorator) Reset() { *m = VolumeDecorator{} } func (*VolumeDecorator) ProtoMessage() {} func (*VolumeDecorator) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{101} + return fileDescriptor_6e12a3c1f6fbf61e, []int{102} } func (m *VolumeDecorator) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2908,7 +2936,7 @@ var xxx_messageInfo_VolumeDecorator proto.InternalMessageInfo func (m *VolumeDecoratorList) Reset() { *m = VolumeDecoratorList{} } func (*VolumeDecoratorList) ProtoMessage() {} func (*VolumeDecoratorList) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{102} + return fileDescriptor_6e12a3c1f6fbf61e, []int{103} } func (m *VolumeDecoratorList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2936,7 +2964,7 @@ var xxx_messageInfo_VolumeDecoratorList proto.InternalMessageInfo func (m *VolumeDecoratorSpec) Reset() { *m = VolumeDecoratorSpec{} } func (*VolumeDecoratorSpec) ProtoMessage() {} func (*VolumeDecoratorSpec) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{103} + return fileDescriptor_6e12a3c1f6fbf61e, []int{104} } func (m *VolumeDecoratorSpec) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2964,7 +2992,7 @@ var xxx_messageInfo_VolumeDecoratorSpec proto.InternalMessageInfo func (m *VolumeDecoratorStatus) Reset() { *m = VolumeDecoratorStatus{} } func (*VolumeDecoratorStatus) ProtoMessage() {} func (*VolumeDecoratorStatus) Descriptor() ([]byte, []int) { - return fileDescriptor_6e12a3c1f6fbf61e, []int{104} + return fileDescriptor_6e12a3c1f6fbf61e, []int{105} } func (m *VolumeDecoratorStatus) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3020,6 +3048,7 @@ func init() { proto.RegisterType((*ClusterGroupAPIResourceItem)(nil), "tkestack.io.tke.api.platform.v1.ClusterGroupAPIResourceItem") proto.RegisterType((*ClusterGroupAPIResourceItems)(nil), "tkestack.io.tke.api.platform.v1.ClusterGroupAPIResourceItems") proto.RegisterType((*ClusterGroupAPIResourceItemsList)(nil), "tkestack.io.tke.api.platform.v1.ClusterGroupAPIResourceItemsList") + proto.RegisterType((*ClusterGroupAPIResourceOptions)(nil), "tkestack.io.tke.api.platform.v1.ClusterGroupAPIResourceOptions") proto.RegisterType((*ClusterList)(nil), "tkestack.io.tke.api.platform.v1.ClusterList") proto.RegisterType((*ClusterMachine)(nil), "tkestack.io.tke.api.platform.v1.ClusterMachine") proto.RegisterMapType((map[string]string)(nil), "tkestack.io.tke.api.platform.v1.ClusterMachine.LabelsEntry") @@ -3122,7 +3151,7 @@ func init() { } var fileDescriptor_6e12a3c1f6fbf61e = []byte{ - // 6162 bytes of a gzipped FileDescriptorProto + // 6169 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x7d, 0x5b, 0x6c, 0x24, 0xc7, 0x75, 0xa8, 0xe6, 0x45, 0x0e, 0x0f, 0xdf, 0xb5, 0x5c, 0x69, 0x44, 0xc9, 0xcb, 0xf5, 0xc8, 0x36, 0x56, 0x96, 0x34, 0xd4, 0xae, 0xe4, 0xf5, 0xca, 0xf2, 0x6b, 0x1e, 0x94, 0x96, 0x5e, 0x92, 0x3b, @@ -3272,243 +3301,243 @@ var fileDescriptor_6e12a3c1f6fbf61e = []byte{ 0x55, 0x1f, 0xbf, 0xae, 0xe1, 0x70, 0x8c, 0x12, 0x1d, 0xc2, 0x8c, 0xe1, 0x59, 0xa1, 0xbe, 0x41, 0x29, 0xc7, 0x6d, 0xe9, 0x47, 0x47, 0xb5, 0xa5, 0xfd, 0x2a, 0x1c, 0x95, 0xab, 0x21, 0x02, 0x1c, 0x2b, 0xa7, 0xfc, 0x93, 0x0c, 0x5c, 0x3e, 0xad, 0xd1, 0x7a, 0x82, 0x8d, 0xdc, 0x99, 0x07, 0x1b, - 0x3b, 0xf1, 0x60, 0xe3, 0x63, 0xef, 0xa6, 0xce, 0xc1, 0x80, 0xb8, 0xe3, 0x7b, 0x19, 0x08, 0x83, - 0xf0, 0x31, 0x84, 0x4f, 0x9b, 0xf1, 0x1a, 0x5d, 0x19, 0xb5, 0x46, 0x03, 0x94, 0xff, 0xcf, 0x9c, - 0x0a, 0x9a, 0x36, 0x85, 0x66, 0x68, 0x19, 0xb2, 0x96, 0x27, 0x8d, 0x0d, 0x48, 0xa6, 0xec, 0x7a, - 0x13, 0x67, 0x2d, 0x4f, 0xa5, 0x3b, 0xb2, 0x03, 0xd3, 0x1d, 0xcf, 0x43, 0xb1, 0x1b, 0xb0, 0x38, - 0x48, 0xad, 0x54, 0x54, 0x6d, 0xee, 0x4a, 0x38, 0x56, 0x14, 0x3c, 0x04, 0x33, 0x82, 0xe0, 0x2d, - 0xd7, 0x6f, 0xcb, 0x15, 0x8a, 0x08, 0xc1, 0x24, 0x0c, 0x2b, 0x2c, 0x9b, 0xb1, 0x9e, 0x6f, 0x1d, - 0xca, 0x30, 0xb7, 0x10, 0x05, 0xe9, 0x4d, 0x05, 0xc5, 0x1a, 0x05, 0xa7, 0x37, 0x82, 0xa0, 0xb9, - 0xef, 0x1b, 0x01, 0x91, 0x2b, 0x13, 0x41, 0xaf, 0xa0, 0x58, 0xa3, 0x40, 0x26, 0x4c, 0xd8, 0xc6, - 0x0e, 0xb1, 0x85, 0x8d, 0x99, 0xbe, 0xf6, 0xea, 0xa8, 0x0d, 0x2b, 0x9b, 0xad, 0xb2, 0xc1, 0xb9, - 0x45, 0xac, 0xa1, 0x96, 0xa6, 0x02, 0x88, 0xa5, 0x68, 0x54, 0x85, 0x09, 0xe6, 0x89, 0x68, 0x18, - 0x1b, 0x3d, 0xa9, 0x0d, 0x8c, 0x8a, 0xe9, 0xfa, 0x84, 0x2f, 0x8e, 0x19, 0x45, 0x24, 0x82, 0x7f, - 0x06, 0x58, 0x32, 0x2e, 0xbf, 0x02, 0xd3, 0x5a, 0x49, 0xa9, 0xfc, 0xcc, 0x8f, 0xb2, 0x30, 0x2f, - 0x95, 0x6e, 0xfa, 0xae, 0x47, 0x7c, 0x7a, 0x84, 0x36, 0x60, 0xa9, 0x63, 0xdc, 0x0b, 0x77, 0x30, - 0x88, 0x7f, 0x68, 0x99, 0x64, 0xab, 0xdb, 0x91, 0x69, 0x96, 0x12, 0x8b, 0x39, 0x37, 0xfb, 0xe0, - 0x71, 0x5f, 0x2e, 0xf4, 0x61, 0x98, 0xed, 0x18, 0xf7, 0xb6, 0xdc, 0x36, 0x69, 0xba, 0x6d, 0x26, - 0x46, 0x8c, 0x93, 0x45, 0x16, 0x11, 0x6c, 0xea, 0x08, 0x1c, 0xa7, 0x43, 0x5f, 0xca, 0xc0, 0xac, - 0xcb, 0xfc, 0x81, 0x6b, 0xb7, 0xb1, 0x41, 0x2d, 0x57, 0x1a, 0xa9, 0xfa, 0xa8, 0xbd, 0x10, 0x56, - 0xa8, 0x72, 0x5b, 0x97, 0x22, 0x7a, 0x43, 0x05, 0x25, 0x31, 0x1c, 0x8e, 0x17, 0xb8, 0xfc, 0x49, - 0x40, 0xbd, 0xbc, 0xa9, 0xda, 0xf7, 0x3f, 0x0a, 0xaa, 0x7d, 0x43, 0xbb, 0x81, 0x7e, 0x16, 0x8a, - 0xa6, 0xe1, 0x19, 0xa6, 0x45, 0x99, 0x10, 0x56, 0xa5, 0x8f, 0x8f, 0x5a, 0xa5, 0x50, 0x46, 0xa5, - 0x2e, 0x05, 0x88, 0xda, 0x5c, 0x0e, 0xa7, 0x53, 0x08, 0xbe, 0x7f, 0xbc, 0x32, 0x13, 0xd2, 0x32, - 0x83, 0x81, 0x55, 0x89, 0xe8, 0x97, 0x32, 0x30, 0x6d, 0xd8, 0xb6, 0x6b, 0x1a, 0x94, 0x27, 0xb9, - 0x84, 0xcd, 0xa8, 0xa6, 0xd6, 0xa0, 0x1a, 0xc9, 0x10, 0x4a, 0x84, 0x5b, 0x91, 0xd3, 0x1a, 0xa6, - 0x47, 0x0f, 0xbd, 0x68, 0xd6, 0xc3, 0x53, 0xf2, 0x9b, 0x07, 0x1a, 0x4c, 0x91, 0x4f, 0x3c, 0xa8, - 0x22, 0xa4, 0x2d, 0xd4, 0x78, 0xaf, 0x4a, 0xd7, 0x85, 0xf0, 0x1e, 0x25, 0xa2, 0x42, 0x97, 0x0f, - 0x60, 0x36, 0xd6, 0x94, 0x7d, 0x3a, 0xb7, 0xa1, 0x77, 0xee, 0x10, 0xc3, 0x5d, 0x09, 0x8f, 0x64, - 0x55, 0x3e, 0xdd, 0x35, 0x1c, 0x6a, 0xd1, 0x23, 0x6d, 0x30, 0x2c, 0x3b, 0xb0, 0x90, 0x6c, 0xb5, - 0x87, 0x5a, 0x9e, 0x0d, 0x73, 0xf1, 0xc6, 0x79, 0x98, 0xa5, 0x95, 0xbf, 0x75, 0x51, 0xf9, 0x3c, - 0xbe, 0xb7, 0xf5, 0x09, 0x80, 0x5d, 0xcb, 0x31, 0x6c, 0xeb, 0x6d, 0xe2, 0x07, 0x7c, 0xa0, 0x4f, - 0xd5, 0x56, 0x98, 0xb5, 0x7d, 0x4d, 0x41, 0xef, 0x1f, 0xaf, 0xcc, 0xaa, 0x2f, 0x1e, 0x89, 0x6a, - 0x2c, 0xe9, 0x33, 0x62, 0x6d, 0x2b, 0xf0, 0x6c, 0xe3, 0xa8, 0x5f, 0x46, 0xac, 0x11, 0xa1, 0xb0, - 0x4e, 0xa7, 0xf2, 0xaf, 0xf9, 0x81, 0xf9, 0xd7, 0x14, 0x51, 0x6b, 0x03, 0xa6, 0x1d, 0x42, 0xdf, - 0x72, 0xfd, 0x03, 0xb9, 0xeb, 0xc2, 0xc8, 0xcb, 0xa1, 0x0e, 0x5b, 0x11, 0xea, 0x7e, 0xfc, 0x13, - 0xeb, 0x6c, 0x6c, 0x1d, 0x25, 0x3f, 0x1b, 0x84, 0x59, 0x51, 0x9e, 0xff, 0xd2, 0x76, 0x8e, 0xb6, - 0x74, 0x24, 0x8e, 0xd3, 0x6a, 0x89, 0xc1, 0xfa, 0x7a, 0x03, 0xf3, 0x14, 0x58, 0x6f, 0x62, 0x90, - 0xa1, 0xb0, 0x4e, 0x87, 0xae, 0xc2, 0x74, 0x20, 0x6c, 0x36, 0x67, 0xbb, 0x20, 0x2a, 0xca, 0x58, - 0x5a, 0x11, 0x18, 0xeb, 0x34, 0x68, 0x15, 0xa6, 0xda, 0x4e, 0xd0, 0x70, 0x3b, 0x86, 0xe5, 0xf0, - 0x3c, 0x9a, 0x76, 0x4a, 0xa0, 0xb1, 0xd5, 0x12, 0x08, 0x1c, 0xd1, 0x20, 0x0c, 0x8f, 0x8b, 0xec, - 0x49, 0xd5, 0xe6, 0x59, 0x11, 0x6a, 0x1d, 0x12, 0x11, 0x9c, 0x03, 0x1f, 0x1c, 0xcb, 0x27, 0xc7, - 0x2b, 0x8f, 0x37, 0xfb, 0x52, 0xe0, 0x01, 0x9c, 0xc8, 0x85, 0xe2, 0xae, 0x58, 0x60, 0x07, 0x72, - 0xbd, 0xbc, 0x9a, 0x32, 0x1f, 0xa0, 0xfa, 0xa7, 0x28, 0x01, 0x6c, 0x54, 0x26, 0x92, 0x46, 0x58, - 0x15, 0x82, 0xde, 0x62, 0x31, 0x07, 0xf7, 0x2b, 0x6c, 0x95, 0x30, 0x33, 0xea, 0x21, 0xaa, 0xb8, - 0x47, 0xaa, 0xbd, 0x3f, 0x0c, 0xeb, 0x9b, 0x4a, 0x16, 0xcf, 0xe3, 0xc7, 0xc9, 0xb0, 0x56, 0x14, - 0xfa, 0x3c, 0x4c, 0x19, 0x62, 0x33, 0x8a, 0x04, 0xa5, 0x59, 0x6e, 0x2b, 0x57, 0x53, 0xc6, 0x23, - 0xd1, 0xfc, 0x91, 0x80, 0x00, 0x47, 0x32, 0xd1, 0x2f, 0x66, 0x60, 0xbe, 0xed, 0x9a, 0x07, 0xc4, - 0x5f, 0xbb, 0x47, 0x7d, 0xa3, 0xea, 0xef, 0x05, 0xa5, 0xb9, 0x74, 0xce, 0x81, 0xcd, 0xfb, 0x4a, - 0x23, 0x2e, 0x43, 0x58, 0xe5, 0x27, 0x64, 0xc9, 0xf3, 0x09, 0x2c, 0x4e, 0x16, 0xc9, 0xfc, 0xd3, - 0xc2, 0x41, 0x77, 0x87, 0xd8, 0x84, 0x46, 0x7a, 0xcc, 0x73, 0x3d, 0x6a, 0xa9, 0xf4, 0xb8, 0x95, - 0x10, 0x22, 0x14, 0x51, 0x39, 0x81, 0x24, 0x1a, 0xf7, 0x94, 0x8a, 0xbe, 0x9c, 0x01, 0x64, 0x78, - 0x96, 0x48, 0x6f, 0x44, 0xca, 0x2c, 0x70, 0x65, 0x1a, 0xa9, 0x94, 0xa9, 0xf6, 0x88, 0x11, 0xea, - 0xa8, 0x0d, 0x8f, 0x6a, 0x73, 0x3d, 0x41, 0x80, 0xfb, 0x94, 0x8d, 0xbe, 0x9d, 0x81, 0x65, 0xd3, - 0x75, 0xa8, 0xef, 0xda, 0x36, 0xeb, 0x57, 0xc7, 0xd8, 0xd3, 0x55, 0x5b, 0xe4, 0xaa, 0x6d, 0xa4, - 0x52, 0xad, 0x3e, 0x50, 0x9c, 0x50, 0x31, 0x9c, 0x1f, 0xcb, 0x83, 0x09, 0xf1, 0x29, 0x3a, 0xf1, - 0x56, 0x0c, 0x64, 0x06, 0x52, 0x53, 0x15, 0x3d, 0x40, 0x2b, 0xb6, 0x7a, 0xc4, 0x24, 0x5a, 0xb1, - 0x97, 0x00, 0xf7, 0x29, 0x1b, 0x1d, 0xc2, 0x92, 0x99, 0xcc, 0x20, 0x63, 0xb2, 0x5b, 0x5a, 0x92, - 0x99, 0x9f, 0x3e, 0x11, 0xf8, 0x86, 0x6b, 0x1a, 0xb6, 0x58, 0x84, 0x63, 0xb2, 0x4b, 0x7c, 0xe2, - 0x98, 0x44, 0xc4, 0xc2, 0xf5, 0x3e, 0x92, 0x70, 0x5f, 0xf9, 0xa8, 0x0e, 0x79, 0x42, 0xcd, 0x76, - 0xe9, 0x22, 0x2f, 0x67, 0x78, 0x16, 0x74, 0x8d, 0x9a, 0x6d, 0x91, 0xa2, 0x66, 0xbf, 0x30, 0x67, - 0x46, 0x9f, 0x02, 0xb4, 0xef, 0x06, 0x94, 0xad, 0x95, 0xaa, 0x01, 0x8b, 0x97, 0xf9, 0xba, 0xea, - 0x09, 0x9e, 0xa6, 0x51, 0x0d, 0x71, 0xb3, 0x87, 0x02, 0xf7, 0xe1, 0x42, 0x54, 0x39, 0x2c, 0xde, - 0x27, 0xa5, 0x74, 0x2b, 0x62, 0xde, 0x27, 0x5b, 0x11, 0xbf, 0xe8, 0x8c, 0x0b, 0x09, 0x7f, 0xc7, - 0x7b, 0x41, 0x2f, 0x06, 0xf9, 0x30, 0x1f, 0x98, 0x86, 0x6d, 0x39, 0x7b, 0xa1, 0x1d, 0x2a, 0x3d, - 0xf9, 0x60, 0x06, 0x4d, 0x99, 0x95, 0x56, 0x5c, 0x1e, 0x4e, 0x16, 0x80, 0xbe, 0x00, 0xb3, 0x3b, - 0xda, 0xc1, 0xde, 0xa0, 0xb4, 0x3c, 0xe2, 0xd1, 0x1e, 0xfd, 0x38, 0x70, 0xe4, 0x83, 0x75, 0x68, - 0x80, 0xe3, 0xa2, 0x97, 0x6b, 0xb0, 0xd4, 0xcf, 0x08, 0xa6, 0x59, 0x38, 0x2c, 0xd7, 0xe1, 0x62, - 0x5f, 0x03, 0x96, 0x4a, 0xc8, 0x1a, 0x3c, 0x31, 0xc0, 0xf0, 0xa4, 0x12, 0xb3, 0x09, 0x2b, 0x43, - 0x8c, 0x44, 0x5a, 0xad, 0x06, 0x4c, 0xe4, 0x54, 0x62, 0x3e, 0x0e, 0x0b, 0xc9, 0xb1, 0x97, 0x6a, - 0x69, 0xf6, 0x0d, 0x80, 0xd9, 0xd8, 0x31, 0x3d, 0x54, 0x86, 0x09, 0x9b, 0xf5, 0x5b, 0x5b, 0x6e, - 0x0e, 0xf1, 0x9d, 0xc3, 0x0d, 0x0e, 0xc1, 0x12, 0xa3, 0x47, 0x83, 0xd9, 0x21, 0xd1, 0xe0, 0x4b, - 0xf1, 0xc3, 0xa7, 0xef, 0x49, 0x1e, 0x3e, 0x0d, 0x8f, 0xfe, 0xc5, 0x8e, 0x4a, 0x11, 0x00, 0x33, - 0xda, 0x61, 0xc9, 0xa7, 0x3b, 0xff, 0xa2, 0x76, 0x5c, 0xa2, 0xbc, 0xa1, 0xb6, 0x29, 0xa3, 0x09, - 0xd6, 0x37, 0xc4, 0x0b, 0xa7, 0x6f, 0x88, 0x6b, 0x7b, 0xec, 0x13, 0xa7, 0xee, 0xb1, 0xbf, 0xa9, - 0x07, 0x28, 0x93, 0xe9, 0xe6, 0xb3, 0x3c, 0x66, 0xa3, 0x9d, 0xb5, 0x08, 0x25, 0xe9, 0x11, 0xca, - 0x17, 0xa1, 0x18, 0xae, 0x40, 0x78, 0xc0, 0x99, 0x22, 0xf2, 0x0a, 0xd7, 0x7f, 0x6a, 0x95, 0x5a, - 0x0c, 0x21, 0x5a, 0xdc, 0x15, 0x82, 0xb0, 0x2a, 0x46, 0x74, 0x87, 0x3c, 0x7a, 0x22, 0xe2, 0xd4, - 0x54, 0xdd, 0x21, 0x39, 0xf5, 0xee, 0x08, 0x85, 0x61, 0x4d, 0x30, 0x8b, 0xda, 0xf5, 0xf0, 0x7b, - 0x3a, 0x1e, 0xb5, 0x0f, 0x0c, 0xc1, 0x1b, 0xb0, 0xe0, 0xb8, 0x6d, 0xfe, 0x7b, 0xd3, 0x08, 0x0e, - 0x5a, 0xd6, 0xdb, 0x84, 0x87, 0xa4, 0x85, 0x28, 0xcc, 0xd9, 0x4a, 0xe0, 0x71, 0x0f, 0x07, 0x7a, - 0x06, 0x0a, 0x6d, 0x27, 0x58, 0x6f, 0xca, 0x4d, 0x66, 0x95, 0x14, 0x6c, 0x6c, 0xb5, 0xd6, 0x9b, - 0x58, 0xe0, 0xd8, 0x02, 0xc1, 0x27, 0x7b, 0x56, 0x40, 0xfd, 0xa3, 0xf5, 0xa6, 0x08, 0x0c, 0xe5, - 0x02, 0x01, 0x47, 0x60, 0xac, 0xd3, 0xf0, 0xe3, 0xdc, 0x84, 0x8d, 0x39, 0xc3, 0x3f, 0xd2, 0xaa, - 0x20, 0x37, 0x67, 0xa2, 0xe3, 0xdc, 0x7d, 0x68, 0x70, 0x5f, 0xce, 0xe4, 0xe2, 0x66, 0x61, 0xc4, - 0xc5, 0x8d, 0xae, 0x88, 0x46, 0x54, 0x5a, 0x1c, 0xa0, 0x88, 0x2e, 0xa8, 0x2f, 0x27, 0x93, 0x98, - 0x6c, 0xc6, 0xf5, 0xe6, 0xe1, 0xcb, 0x25, 0xc4, 0x1b, 0x5f, 0x49, 0xdc, 0xea, 0x43, 0x83, 0xfb, - 0x72, 0x0e, 0x90, 0x78, 0x9d, 0xaf, 0xc4, 0x4e, 0x97, 0x78, 0xbd, 0xaf, 0xc4, 0xeb, 0xa8, 0x01, - 0xc0, 0x22, 0x5a, 0x71, 0x20, 0x9e, 0x87, 0x36, 0x53, 0xb5, 0xf7, 0x85, 0xe3, 0xf0, 0x96, 0xc2, - 0xb0, 0xd5, 0x4e, 0xf4, 0xc5, 0x57, 0xa3, 0x1a, 0x5f, 0xf9, 0x5b, 0x39, 0x98, 0xaa, 0xbb, 0xce, - 0xae, 0xb5, 0xb7, 0x69, 0x8c, 0xe3, 0xaa, 0xd2, 0x36, 0xe4, 0xb9, 0x74, 0x91, 0x96, 0x7a, 0x79, - 0xf8, 0x54, 0x0b, 0x75, 0xab, 0x34, 0x0c, 0x6a, 0x88, 0x08, 0x44, 0xad, 0xe2, 0x19, 0x08, 0x73, - 0x79, 0xc8, 0x01, 0xd8, 0xb1, 0x1c, 0xc3, 0x3f, 0x6a, 0x88, 0x5d, 0x85, 0x11, 0xb7, 0x8e, 0x95, - 0xf4, 0x9a, 0x62, 0x16, 0x65, 0xa8, 0x5a, 0x44, 0x08, 0xac, 0x95, 0xb0, 0xfc, 0x61, 0x98, 0x52, - 0xc4, 0xa9, 0xdc, 0xda, 0xc7, 0x60, 0x3e, 0x51, 0xd6, 0x30, 0xf6, 0x19, 0xdd, 0xab, 0xfd, 0x65, - 0x06, 0x66, 0x95, 0xd6, 0x63, 0xd8, 0x7b, 0xb8, 0x1d, 0xdf, 0x7b, 0xf8, 0xe0, 0xe8, 0x4d, 0x3a, - 0x60, 0xf7, 0x81, 0xdf, 0x14, 0xf0, 0x5d, 0xe7, 0x66, 0xb3, 0x7a, 0x1e, 0x6f, 0x0a, 0x08, 0xcd, - 0xce, 0xf2, 0xa6, 0x80, 0x94, 0x78, 0xfa, 0x21, 0x78, 0xbe, 0xa1, 0x24, 0x28, 0xcf, 0xe5, 0x86, - 0x92, 0x50, 0x6d, 0x40, 0x97, 0xee, 0xc3, 0x05, 0x49, 0xf0, 0xb0, 0xaf, 0x99, 0x7c, 0x2d, 0x6a, - 0xa6, 0x73, 0x79, 0x45, 0xea, 0x47, 0x59, 0x98, 0x8d, 0x75, 0x78, 0x9a, 0xa3, 0xf6, 0x57, 0xe3, - 0x47, 0xed, 0xd3, 0x5d, 0x66, 0xca, 0xa5, 0xb8, 0xcc, 0x94, 0x3f, 0x93, 0xcb, 0x4c, 0x85, 0x9f, - 0xc2, 0x65, 0xa6, 0x3f, 0xcd, 0x00, 0x5f, 0x2a, 0xa3, 0x5b, 0x50, 0xb0, 0xd9, 0x8a, 0x5d, 0x4e, - 0x8e, 0xe1, 0x66, 0x89, 0xaf, 0xef, 0xf9, 0x7a, 0x9b, 0x9f, 0x24, 0xe0, 0x9f, 0x58, 0xc8, 0x40, - 0x6f, 0xf4, 0xdc, 0x3c, 0x7d, 0x61, 0xe4, 0x9b, 0xa7, 0x5c, 0xe4, 0xa0, 0xdb, 0xa6, 0xff, 0x07, - 0x4a, 0x83, 0x6e, 0xa8, 0xbe, 0xbb, 0x2d, 0xd7, 0xf2, 0xf7, 0x33, 0x30, 0xa3, 0xab, 0xc0, 0x4f, - 0x72, 0x3a, 0x6d, 0xcf, 0xe5, 0x3b, 0x8d, 0x22, 0x19, 0x2f, 0x4e, 0x72, 0x86, 0x40, 0x1c, 0xe1, - 0xd9, 0xb0, 0x31, 0x8d, 0xd7, 0x2c, 0x3b, 0x1c, 0x6a, 0x6a, 0xd8, 0xd4, 0xab, 0x0c, 0x8a, 0x25, - 0x96, 0x4d, 0x2f, 0x93, 0xf8, 0x94, 0x53, 0x26, 0x36, 0x76, 0xeb, 0x12, 0x8e, 0x15, 0x05, 0x1b, - 0xea, 0x07, 0xe4, 0x88, 0x13, 0xe7, 0xe3, 0x43, 0xfd, 0x96, 0x00, 0xe3, 0x10, 0x5f, 0x6e, 0x40, - 0x9e, 0xb3, 0xbc, 0x07, 0x72, 0x81, 0x6f, 0xca, 0x56, 0x50, 0x17, 0x6b, 0x5b, 0xbe, 0x89, 0x19, - 0x9c, 0xa1, 0xdb, 0xea, 0x28, 0xbe, 0x42, 0x37, 0x02, 0x8a, 0x19, 0xbc, 0xfc, 0x27, 0x19, 0xc8, - 0xde, 0xac, 0xa2, 0x3a, 0xe4, 0xe8, 0x01, 0x91, 0x23, 0xe1, 0x03, 0x43, 0x7b, 0xee, 0xce, 0xad, - 0xb5, 0x9b, 0x55, 0x79, 0x28, 0x93, 0xfd, 0xc4, 0x8c, 0x1b, 0x7d, 0x1e, 0x80, 0xee, 0x5b, 0x7e, - 0xbb, 0x69, 0xf8, 0xf4, 0x68, 0xe4, 0x51, 0x70, 0x47, 0xb1, 0xdc, 0xac, 0xd6, 0x16, 0x4e, 0x8e, - 0x57, 0x66, 0x74, 0x08, 0xd6, 0x44, 0x96, 0x7f, 0x39, 0x0b, 0xf9, 0x9b, 0xc4, 0xee, 0x8c, 0xc1, - 0xe9, 0xdd, 0x8a, 0x39, 0xbd, 0x67, 0x87, 0x1f, 0x04, 0x24, 0x76, 0x67, 0xa0, 0xc7, 0x6b, 0x25, - 0x3c, 0xde, 0x73, 0xa3, 0x89, 0x3b, 0xdd, 0xdd, 0xfd, 0x79, 0x06, 0x8a, 0x8c, 0x6c, 0x0c, 0xbe, - 0xee, 0x53, 0x71, 0x5f, 0xf7, 0xfe, 0x91, 0xd4, 0x1f, 0xe0, 0xe8, 0x5e, 0x86, 0x05, 0x86, 0x8d, - 0x79, 0xb9, 0xf0, 0xae, 0x47, 0x66, 0xe0, 0x5d, 0x8f, 0xaf, 0xca, 0xca, 0x9e, 0x4b, 0x8f, 0xf5, - 0x4f, 0x59, 0x80, 0xa8, 0xc3, 0x1e, 0xb9, 0xab, 0x33, 0x75, 0x57, 0x6c, 0xce, 0xaf, 0x37, 0xab, - 0x9b, 0xe7, 0x70, 0xce, 0x33, 0xb5, 0xce, 0x70, 0xce, 0x73, 0x71, 0xc3, 0xe7, 0x3c, 0x23, 0x3b, - 0x8f, 0x73, 0x9e, 0xe9, 0x35, 0x78, 0xce, 0x33, 0xec, 0x03, 0xcc, 0xf9, 0xb0, 0x89, 0xcf, 0xe5, - 0x9c, 0x8f, 0x3a, 0xec, 0xd1, 0x9c, 0x3f, 0xf3, 0x39, 0xbf, 0x51, 0xab, 0xbf, 0x76, 0x0e, 0xe7, - 0x3c, 0x53, 0xeb, 0x0c, 0xe7, 0x3c, 0x17, 0x37, 0x7c, 0xce, 0x33, 0xb2, 0xf3, 0x38, 0xe7, 0x99, - 0x5e, 0x03, 0xe6, 0xfc, 0xaf, 0x66, 0x60, 0x81, 0xa1, 0x1f, 0xf2, 0x72, 0x96, 0xcd, 0x0d, 0xc3, - 0xa4, 0x56, 0xef, 0xdc, 0xa8, 0x72, 0x28, 0x96, 0x58, 0x6e, 0x4d, 0xc2, 0xce, 0x3b, 0x97, 0xd6, - 0x24, 0x1a, 0x0a, 0x8f, 0xac, 0xc9, 0x99, 0x5a, 0x93, 0x7f, 0xcc, 0xc2, 0x94, 0x5a, 0xba, 0xf2, - 0x3b, 0xb1, 0x06, 0x35, 0x1a, 0x96, 0x9f, 0x6c, 0xdb, 0x86, 0x00, 0xe3, 0x10, 0x8f, 0xbe, 0x00, - 0x53, 0x44, 0xed, 0xc5, 0x8b, 0x29, 0xf1, 0xca, 0xe8, 0x8b, 0xe4, 0x4a, 0x62, 0x03, 0x5e, 0x0d, - 0xf4, 0x68, 0xdf, 0x3d, 0x12, 0xcf, 0x6f, 0x0e, 0xf1, 0x3d, 0x48, 0xb6, 0x28, 0x6c, 0x55, 0xb7, - 0xc4, 0x71, 0xf3, 0xf0, 0xe6, 0x50, 0x0c, 0x83, 0x13, 0x94, 0xe8, 0x65, 0x98, 0xf1, 0x88, 0xc6, - 0x99, 0xe7, 0x9c, 0x7c, 0x29, 0xd5, 0xd4, 0xe0, 0x38, 0x46, 0xb5, 0xfc, 0x51, 0x98, 0x7b, 0xf0, - 0x9d, 0x45, 0xfe, 0x2c, 0xc7, 0x86, 0xbb, 0x57, 0x77, 0x6d, 0x9b, 0x98, 0xe3, 0x79, 0x95, 0x29, - 0xed, 0xb3, 0x1c, 0xba, 0x7a, 0x67, 0xf8, 0x2c, 0x47, 0x4c, 0xec, 0xf0, 0x67, 0x39, 0x74, 0xf2, - 0xf3, 0xf8, 0x2c, 0x87, 0xae, 0xdf, 0x00, 0x53, 0xde, 0x81, 0x92, 0x4e, 0xf5, 0xb0, 0x13, 0x94, - 0x5f, 0x4f, 0xb4, 0xda, 0xb9, 0xb4, 0xd8, 0x27, 0x59, 0x40, 0xbd, 0x23, 0xe1, 0x91, 0xe5, 0x3e, - 0x53, 0xcb, 0xfd, 0x95, 0x2c, 0x4c, 0x86, 0xd7, 0x2b, 0xce, 0xdf, 0x3e, 0x87, 0xd4, 0xec, 0x0c, - 0xf7, 0x39, 0x42, 0x89, 0xa7, 0x5b, 0x95, 0x00, 0xe6, 0x24, 0x61, 0xf8, 0x40, 0xc7, 0xf5, 0xd8, - 0x03, 0x09, 0xe5, 0xc4, 0x03, 0x1d, 0x28, 0x4e, 0x1d, 0x3f, 0xb6, 0x2b, 0x4f, 0x0e, 0x24, 0x0f, - 0x6a, 0x48, 0x5a, 0x1c, 0xe2, 0xf9, 0xc3, 0x0c, 0x52, 0xce, 0xa3, 0x87, 0x19, 0xce, 0xed, 0xc3, - 0x0c, 0xdf, 0xcb, 0xc0, 0xb4, 0xec, 0xa5, 0xf3, 0xb8, 0x05, 0x16, 0x1e, 0x49, 0xeb, 0xef, 0x66, - 0xbe, 0x59, 0x50, 0xca, 0xff, 0x94, 0x0e, 0xc7, 0x3f, 0xc8, 0x73, 0x11, 0xc3, 0x0f, 0xc7, 0x8b, - 0x5d, 0x8a, 0xc2, 0xa9, 0xbb, 0x14, 0x13, 0x23, 0x5d, 0x0c, 0x9b, 0x4c, 0x75, 0x31, 0xac, 0x98, - 0xe2, 0x62, 0xd8, 0x54, 0xca, 0x8b, 0x61, 0x30, 0xf4, 0x62, 0xd8, 0x9b, 0xea, 0x62, 0xd8, 0x34, - 0x1f, 0x1d, 0x37, 0xd2, 0xd8, 0xd3, 0x94, 0xb7, 0xc2, 0x66, 0x7e, 0x0a, 0xb7, 0xc2, 0xfe, 0x3b, - 0x07, 0xb3, 0x31, 0x7b, 0x3d, 0xd2, 0xd1, 0xb8, 0x97, 0xe2, 0x4e, 0xbf, 0xf7, 0xbc, 0x9b, 0x14, - 0x79, 0xca, 0x79, 0xb7, 0xdc, 0x88, 0x07, 0xac, 0x92, 0xd6, 0x3a, 0xcd, 0x79, 0xb7, 0xfc, 0xc8, - 0xe7, 0xdd, 0x0a, 0xa3, 0x9f, 0x77, 0x9b, 0x18, 0xf1, 0xbc, 0x5b, 0xdc, 0x5d, 0x0d, 0x39, 0xef, - 0x66, 0xc1, 0xb4, 0x34, 0x63, 0xeb, 0xce, 0xae, 0xcb, 0x67, 0xc8, 0x28, 0x8f, 0x63, 0x84, 0x3d, - 0x77, 0x14, 0x50, 0xd2, 0x61, 0x9c, 0xd1, 0x4c, 0xdf, 0x8c, 0xc4, 0x61, 0x5d, 0x76, 0xf9, 0xdf, - 0xf3, 0xb0, 0xd8, 0xc3, 0xc7, 0x02, 0xe0, 0x90, 0xa8, 0x91, 0x0c, 0x80, 0x43, 0x51, 0x0d, 0x1c, - 0xd1, 0xb0, 0xe0, 0x2c, 0xe0, 0xec, 0x77, 0xef, 0x2a, 0xbb, 0xa4, 0xba, 0xa6, 0xa5, 0x30, 0x58, - 0xa3, 0x62, 0xed, 0xbd, 0xe3, 0xba, 0xcc, 0x8e, 0x25, 0x02, 0xbf, 0x1a, 0x87, 0x62, 0x89, 0x45, - 0xaf, 0xc2, 0xec, 0x01, 0xf1, 0x1d, 0x62, 0x0f, 0x78, 0x50, 0xed, 0x96, 0x8e, 0xc4, 0x71, 0x5a, - 0xd6, 0xff, 0x6e, 0xb0, 0xde, 0xe9, 0x73, 0xde, 0xf1, 0x76, 0x8b, 0x83, 0x71, 0x88, 0x47, 0x9f, - 0x81, 0x27, 0x92, 0xaf, 0x03, 0x84, 0x25, 0x0a, 0x17, 0xb5, 0x22, 0x59, 0x9f, 0xa8, 0xf7, 0x27, - 0xc3, 0x83, 0xf8, 0xd1, 0xc7, 0x61, 0x4e, 0x5e, 0x32, 0x08, 0x25, 0x0a, 0xab, 0xf7, 0xb8, 0x94, - 0x38, 0x77, 0x2b, 0x86, 0xc5, 0x09, 0x6a, 0xd4, 0x10, 0x57, 0x23, 0xf8, 0x22, 0x25, 0x94, 0x50, - 0x8c, 0x3f, 0x75, 0x70, 0x2b, 0x81, 0xc7, 0x3d, 0x1c, 0xa8, 0x0a, 0xf3, 0x2e, 0x7f, 0x77, 0xc2, - 0x72, 0xf6, 0x44, 0x9f, 0xc8, 0xeb, 0x3b, 0xea, 0x34, 0xf5, 0xed, 0x38, 0x1a, 0x27, 0xe9, 0xd1, - 0x0d, 0x98, 0x31, 0x7c, 0x73, 0xdf, 0xa2, 0xc4, 0xa4, 0x5d, 0x5f, 0x98, 0x4c, 0xed, 0xe2, 0x79, - 0x55, 0xc3, 0xe1, 0x18, 0x65, 0x99, 0xc0, 0x42, 0x73, 0xbb, 0x8e, 0x1f, 0xf6, 0x3a, 0xeb, 0x5b, - 0x19, 0x58, 0x6c, 0xb2, 0xfa, 0x06, 0x94, 0x38, 0xb4, 0x66, 0x98, 0x07, 0x6b, 0x4e, 0x1b, 0x6d, - 0x42, 0xce, 0xb4, 0x03, 0x19, 0x2d, 0x0c, 0x9f, 0x48, 0xf2, 0xa1, 0x59, 0xc9, 0x5d, 0xdf, 0x68, - 0xd5, 0x26, 0x4f, 0x8e, 0x57, 0x72, 0xf5, 0x8d, 0x16, 0x66, 0x72, 0xd0, 0x3a, 0x64, 0x49, 0x30, - 0xf2, 0x92, 0x3d, 0x2e, 0x6d, 0xad, 0x25, 0x1e, 0x57, 0x59, 0x6b, 0xe1, 0x2c, 0x09, 0xca, 0xdf, - 0xcc, 0xc2, 0x7c, 0xa4, 0xef, 0xda, 0x21, 0x71, 0xe8, 0x78, 0x0e, 0xdb, 0x69, 0xab, 0x82, 0xe1, - 0x87, 0xed, 0x12, 0x1a, 0x0e, 0x5c, 0x1d, 0x7c, 0x2e, 0xb1, 0x3a, 0xb8, 0x9e, 0x5a, 0xf2, 0xe9, - 0xab, 0x84, 0xbf, 0xcb, 0xc0, 0x85, 0x04, 0xc7, 0x18, 0x42, 0xc2, 0xbb, 0xf1, 0x90, 0xf0, 0xc5, - 0xb4, 0x95, 0x1a, 0x10, 0x1a, 0x7e, 0x3d, 0xdb, 0x53, 0x99, 0xf1, 0x65, 0x05, 0x7e, 0x06, 0x16, - 0xbd, 0xe4, 0x34, 0x19, 0xf9, 0x11, 0xef, 0x9e, 0x09, 0xa6, 0x1e, 0xd4, 0xe9, 0x9d, 0x7b, 0xb8, - 0xb7, 0x1c, 0x3d, 0xa1, 0x90, 0x1f, 0x92, 0x92, 0xf8, 0xb7, 0x2c, 0x5c, 0xec, 0x3b, 0x46, 0x1e, - 0x65, 0x25, 0xce, 0x34, 0x2b, 0xf1, 0x3b, 0x59, 0x80, 0xa6, 0xef, 0x76, 0x08, 0xdd, 0x27, 0xdd, - 0x71, 0x3c, 0x61, 0xf2, 0xe9, 0x98, 0x09, 0x1a, 0x1e, 0x40, 0x45, 0xca, 0x0d, 0xb4, 0x3e, 0x9f, - 0x49, 0x58, 0x9f, 0xab, 0x69, 0x84, 0x9e, 0x6e, 0x78, 0xfe, 0x2a, 0x03, 0x73, 0x11, 0xf1, 0x18, - 0x6c, 0x4e, 0x33, 0x6e, 0x73, 0x9e, 0x4b, 0x51, 0x95, 0x81, 0x09, 0xcf, 0xa5, 0x88, 0x06, 0x93, - 0x8e, 0x4b, 0x79, 0x34, 0x8a, 0x9e, 0x83, 0xa9, 0xb7, 0x7c, 0x4b, 0x7c, 0xe8, 0x07, 0xc4, 0xde, - 0x08, 0x81, 0x38, 0xc2, 0xb3, 0xa5, 0x98, 0x4f, 0x8c, 0x36, 0xa7, 0xcd, 0x72, 0xda, 0x19, 0x71, - 0xa7, 0x42, 0xc0, 0xb0, 0xc2, 0x96, 0x7f, 0x77, 0x42, 0x6f, 0xb1, 0xf3, 0x98, 0xee, 0x44, 0x01, - 0x40, 0xd0, 0xdd, 0x89, 0xa2, 0xca, 0xd1, 0x9e, 0x21, 0x88, 0x57, 0xaa, 0xd2, 0x52, 0x12, 0x12, - 0xe7, 0xc3, 0x23, 0x04, 0xd6, 0x8a, 0x41, 0x3e, 0xcc, 0xfa, 0xaa, 0xf1, 0x49, 0x10, 0xc8, 0xd9, - 0xfe, 0xa1, 0x14, 0xe5, 0x46, 0x9d, 0x17, 0x05, 0xc1, 0x58, 0x97, 0x89, 0xe3, 0x45, 0xf0, 0x8b, - 0xe5, 0x2e, 0xb5, 0x76, 0x8f, 0xe4, 0x39, 0x43, 0x19, 0xcf, 0x46, 0x17, 0xcb, 0x75, 0x24, 0x8e, - 0xd3, 0xa2, 0x5d, 0x98, 0xf2, 0xd5, 0x73, 0x41, 0x93, 0x23, 0x2a, 0xab, 0x6e, 0xd4, 0x90, 0x2f, - 0x76, 0x2d, 0x9f, 0x74, 0x88, 0x43, 0xb5, 0x45, 0x4f, 0xf4, 0x48, 0x50, 0x24, 0x9a, 0xf5, 0xb7, - 0xdf, 0x75, 0x6e, 0x3b, 0xe2, 0xe9, 0x3a, 0x1e, 0xde, 0x16, 0xa3, 0xfe, 0xc6, 0x11, 0x0a, 0xeb, - 0x74, 0x68, 0x13, 0x2e, 0x18, 0x36, 0xf1, 0x29, 0x26, 0x1e, 0x31, 0x28, 0x7f, 0x83, 0xef, 0xd0, - 0xb0, 0x65, 0x60, 0xab, 0xde, 0x32, 0xab, 0xf6, 0x92, 0xe0, 0x7e, 0x7c, 0x6c, 0xf8, 0xbc, 0x65, - 0xd1, 0xfd, 0xad, 0x66, 0x83, 0xc7, 0xb6, 0xc5, 0x68, 0xf8, 0xbc, 0x21, 0xc0, 0x38, 0xc4, 0x2f, - 0x7f, 0x0c, 0xe6, 0x13, 0x9d, 0x9f, 0x6a, 0xad, 0xfd, 0x9b, 0x79, 0x58, 0x48, 0xda, 0x9f, 0x47, - 0x4e, 0xed, 0x2c, 0x9d, 0x1a, 0xea, 0xc6, 0x26, 0xf8, 0xc4, 0x88, 0x77, 0xda, 0x93, 0x9d, 0x92, - 0x76, 0x8a, 0xbf, 0xdb, 0x81, 0xf1, 0x17, 0x19, 0x28, 0x86, 0x77, 0xab, 0xc6, 0xe0, 0x88, 0x6f, - 0xc7, 0x1c, 0xf1, 0x0b, 0x23, 0x4c, 0x6d, 0xa1, 0xda, 0xc0, 0x7f, 0x09, 0xfa, 0x7e, 0x06, 0x66, - 0x42, 0xa2, 0x31, 0x78, 0xca, 0xad, 0xb8, 0xa7, 0x7c, 0x76, 0xe4, 0x0a, 0x0c, 0xf0, 0x93, 0x5f, - 0xcb, 0x46, 0xea, 0x3f, 0x98, 0xdb, 0xd2, 0x9f, 0x23, 0xc9, 0x8e, 0xf8, 0x1c, 0xc9, 0x03, 0x26, - 0x6a, 0xdf, 0x03, 0xb9, 0xae, 0x6f, 0xcb, 0x28, 0x5a, 0x1d, 0x84, 0xbe, 0x8b, 0x37, 0x30, 0x83, - 0x33, 0x77, 0xdd, 0x0d, 0xa4, 0x48, 0x91, 0xfe, 0x98, 0x09, 0x73, 0xac, 0x5b, 0x2a, 0xc7, 0xba, - 0x95, 0xcc, 0xb1, 0x4e, 0x44, 0x94, 0xbd, 0x39, 0xd6, 0xf2, 0x7f, 0xe5, 0x60, 0xa9, 0x9f, 0x79, - 0x47, 0x47, 0x30, 0x61, 0x5b, 0x1d, 0x4b, 0x1e, 0x33, 0x1f, 0x65, 0xa6, 0xf5, 0x13, 0x53, 0xd9, - 0xe0, 0x32, 0xc4, 0x4c, 0xbb, 0xa4, 0xb2, 0xa4, 0x1c, 0xd8, 0xf3, 0xa0, 0x8f, 0x2c, 0x10, 0xfd, - 0x1c, 0x7f, 0xb6, 0xfc, 0x8b, 0x5d, 0x12, 0xd0, 0x70, 0x1c, 0xd4, 0x1f, 0xac, 0x74, 0x2c, 0xa5, - 0x24, 0xde, 0x57, 0x0a, 0xc1, 0xbd, 0xef, 0x2b, 0x85, 0xc5, 0x2e, 0x5b, 0x30, 0xad, 0xa9, 0xfe, - 0x50, 0xdf, 0xf7, 0x39, 0x80, 0xd9, 0x98, 0x9e, 0x0f, 0xf5, 0x79, 0x1f, 0x1b, 0x16, 0x7b, 0xf2, - 0x21, 0x6c, 0x4e, 0xd8, 0xee, 0x5e, 0x8b, 0xf4, 0x99, 0x13, 0x1b, 0x12, 0x8e, 0x15, 0x05, 0xf3, - 0x6a, 0xd4, 0xf5, 0x2c, 0x53, 0xa5, 0x06, 0x95, 0x57, 0xbb, 0x23, 0xc0, 0x38, 0xc4, 0x97, 0xbf, - 0x9d, 0x85, 0x85, 0x64, 0xc2, 0xe4, 0x5d, 0xbe, 0x42, 0xf7, 0x01, 0x98, 0xe0, 0xff, 0x47, 0x47, - 0x92, 0x5e, 0xaf, 0xc5, 0xa1, 0x58, 0x62, 0xd1, 0x2a, 0x4c, 0x59, 0x4e, 0x9b, 0xdc, 0xe3, 0xb3, - 0x25, 0x1f, 0xcf, 0x46, 0xad, 0x87, 0x08, 0x1c, 0xd1, 0xb0, 0xa2, 0xd9, 0xfc, 0x09, 0x67, 0x56, - 0x58, 0x34, 0x9b, 0x5d, 0x98, 0x63, 0x58, 0x33, 0x25, 0x66, 0x95, 0x6a, 0xa6, 0x3e, 0xbb, 0x17, - 0x2c, 0x02, 0x22, 0xfc, 0x18, 0x4c, 0xc3, 0x38, 0x12, 0xb1, 0x56, 0x41, 0x8b, 0x80, 0x22, 0x14, - 0xd6, 0xe9, 0xca, 0x0d, 0x10, 0xf7, 0x15, 0x98, 0x31, 0x38, 0x54, 0xed, 0xa4, 0x8c, 0xc1, 0xf6, - 0x7a, 0x13, 0x33, 0x38, 0x7a, 0x1a, 0xf2, 0x87, 0xbe, 0xd5, 0x96, 0x2d, 0xc5, 0x5f, 0x97, 0xd8, - 0xc6, 0xeb, 0x0d, 0xcc, 0xa1, 0xe5, 0x3f, 0xce, 0xc2, 0xdc, 0x1d, 0xc3, 0xf3, 0xa2, 0x0b, 0xff, - 0x63, 0xf0, 0x3d, 0x77, 0x63, 0xbe, 0x67, 0xf8, 0x31, 0x95, 0xb8, 0x82, 0x03, 0x17, 0x82, 0xff, - 0x3f, 0xb1, 0x10, 0xfc, 0x50, 0x5a, 0xc1, 0xa7, 0x2f, 0x06, 0xdf, 0xc9, 0x00, 0x8a, 0x33, 0x8c, - 0xc1, 0xcd, 0xdd, 0x89, 0xbb, 0xb9, 0xd5, 0x94, 0x55, 0x1a, 0xe0, 0xec, 0x7e, 0x2b, 0x03, 0xcb, - 0x71, 0xc2, 0xf3, 0x72, 0xb4, 0xf1, 0x0f, 0x7b, 0x1a, 0xf9, 0x5c, 0x1e, 0x99, 0xf9, 0x49, 0x16, - 0x96, 0xfa, 0x0d, 0x9e, 0x47, 0x91, 0xfc, 0x99, 0xa6, 0xa7, 0x30, 0xc4, 0x2e, 0x50, 0x0d, 0x33, - 0x75, 0xcf, 0x40, 0xe1, 0x50, 0xf3, 0x0a, 0x6a, 0xec, 0x6f, 0x73, 0xb7, 0x20, 0x70, 0xe5, 0xaf, - 0x66, 0x20, 0x7c, 0xb9, 0x19, 0xad, 0x42, 0xbe, 0xe3, 0xb6, 0x7b, 0xfe, 0x0d, 0x66, 0xd3, 0x6d, - 0xf3, 0x27, 0xdb, 0x24, 0x19, 0xfb, 0xc4, 0x9c, 0x10, 0x7d, 0x0e, 0x8a, 0x01, 0xf5, 0x0d, 0x4a, - 0xf6, 0x8e, 0x46, 0xfe, 0x47, 0x45, 0x29, 0xa5, 0x25, 0xf9, 0xa2, 0x91, 0x1b, 0x42, 0xb0, 0x92, - 0x59, 0xfe, 0xdb, 0x0c, 0xcc, 0x27, 0xe8, 0xd1, 0x9b, 0x00, 0x1d, 0xe3, 0xde, 0x5d, 0xc7, 0x27, - 0x46, 0xfb, 0x68, 0xa8, 0x45, 0xee, 0x52, 0xcb, 0xae, 0x88, 0xff, 0x54, 0xad, 0xac, 0x3b, 0xf4, - 0xb6, 0xdf, 0xa2, 0xbe, 0xe5, 0xec, 0x89, 0xfd, 0xed, 0x4d, 0x25, 0x07, 0x6b, 0x32, 0x11, 0x86, - 0xc7, 0xdb, 0xbe, 0x61, 0x39, 0x5b, 0x6e, 0x9b, 0xd4, 0xc8, 0xae, 0xeb, 0x13, 0xa9, 0x83, 0x7c, - 0x13, 0x9f, 0xbf, 0xd4, 0xd6, 0xe8, 0x4b, 0x81, 0x07, 0x70, 0xf2, 0x1d, 0x8e, 0x6d, 0xd7, 0xee, - 0x76, 0x48, 0x83, 0x98, 0xee, 0xb8, 0xfe, 0xed, 0x32, 0xed, 0x0e, 0x47, 0x42, 0xc3, 0x33, 0xdc, - 0xe1, 0x48, 0x4a, 0x1e, 0xbe, 0xc3, 0x91, 0xe0, 0x38, 0x8f, 0x3b, 0x1c, 0x09, 0x15, 0x07, 0xfd, - 0x79, 0x65, 0xb6, 0xa7, 0x32, 0xe7, 0x32, 0x11, 0x78, 0x15, 0xa6, 0x0f, 0xb9, 0x9a, 0x77, 0x8e, - 0x3c, 0x12, 0x1e, 0x35, 0xe6, 0x6f, 0x9c, 0x6c, 0x47, 0x60, 0xac, 0xd3, 0xa0, 0xd7, 0x61, 0xf1, - 0x2d, 0xd7, 0x3f, 0xb0, 0x5d, 0xa3, 0x5d, 0x6d, 0x77, 0xac, 0x40, 0x3d, 0x13, 0x59, 0x8c, 0xf6, - 0x42, 0xde, 0x48, 0x12, 0xe0, 0x5e, 0x9e, 0xf2, 0x77, 0xf2, 0x70, 0xb1, 0xef, 0x10, 0x49, 0xe7, - 0x41, 0x62, 0x15, 0xc8, 0x3e, 0x68, 0x05, 0x72, 0xe9, 0x2b, 0x30, 0xf0, 0xcf, 0x3b, 0xf3, 0xef, - 0xfe, 0xcf, 0x3b, 0x0b, 0x0f, 0xe0, 0x0f, 0x27, 0x52, 0xf8, 0xc3, 0xc9, 0x33, 0xf1, 0x87, 0xc5, - 0xf1, 0xfb, 0xc3, 0xda, 0x95, 0x77, 0x7e, 0x7c, 0xe9, 0xb1, 0x1f, 0xfc, 0xf8, 0xd2, 0x63, 0x3f, - 0xfc, 0xf1, 0xa5, 0xc7, 0xbe, 0x74, 0x72, 0x29, 0xf3, 0xce, 0xc9, 0xa5, 0xcc, 0x0f, 0x4e, 0x2e, - 0x65, 0x7e, 0x78, 0x72, 0x29, 0xf3, 0x2f, 0x27, 0x97, 0x32, 0x5f, 0xfe, 0xd7, 0x4b, 0x8f, 0x7d, - 0x36, 0x7b, 0x78, 0xf5, 0x7f, 0x03, 0x00, 0x00, 0xff, 0xff, 0x98, 0xe4, 0x24, 0x4c, 0xee, 0x7c, - 0x00, 0x00, + 0x3b, 0xf1, 0x60, 0xe3, 0x63, 0xef, 0xa6, 0xce, 0xc1, 0x80, 0xb8, 0xe3, 0x32, 0x5c, 0x1a, 0xc0, + 0x25, 0x57, 0xf2, 0x6c, 0x61, 0x1e, 0x86, 0xe9, 0x63, 0x08, 0xb0, 0x36, 0xe3, 0x75, 0xbe, 0x32, + 0x6a, 0x9d, 0x07, 0x54, 0xef, 0x3f, 0x73, 0x2a, 0xac, 0xda, 0x14, 0x9a, 0xa1, 0x65, 0xc8, 0x5a, + 0x9e, 0x34, 0x47, 0x20, 0x99, 0xb2, 0xeb, 0x4d, 0x9c, 0xb5, 0x3c, 0x95, 0x10, 0xc9, 0x0e, 0x4c, + 0x88, 0x3c, 0x0f, 0xc5, 0x6e, 0xc0, 0x22, 0x25, 0xb5, 0x96, 0x51, 0xb5, 0xb9, 0x2b, 0xe1, 0x58, + 0x51, 0xf0, 0x20, 0xcd, 0x08, 0x82, 0xb7, 0x5c, 0xbf, 0x2d, 0xd7, 0x30, 0x22, 0x48, 0x93, 0x30, + 0xac, 0xb0, 0x6c, 0x4e, 0x7b, 0xbe, 0x75, 0x28, 0x03, 0xe1, 0x42, 0x14, 0xc6, 0x37, 0x15, 0x14, + 0x6b, 0x14, 0x9c, 0xde, 0x08, 0x82, 0xe6, 0xbe, 0x6f, 0x04, 0x44, 0xae, 0x5d, 0x04, 0xbd, 0x82, + 0x62, 0x8d, 0x02, 0x99, 0x30, 0x61, 0x1b, 0x3b, 0xc4, 0x16, 0x56, 0x68, 0xfa, 0xda, 0xab, 0xa3, + 0x36, 0xac, 0x6c, 0xb6, 0xca, 0x06, 0xe7, 0x16, 0xd1, 0x88, 0x5a, 0xbc, 0x0a, 0x20, 0x96, 0xa2, + 0x51, 0x15, 0x26, 0x98, 0xaf, 0xa2, 0x61, 0xf4, 0xf4, 0xa4, 0x36, 0x30, 0x2a, 0xa6, 0xeb, 0x13, + 0xbe, 0x7c, 0x66, 0x14, 0x91, 0x08, 0xfe, 0x19, 0x60, 0xc9, 0xb8, 0xfc, 0x0a, 0x4c, 0x6b, 0x25, + 0xa5, 0xf2, 0x44, 0x3f, 0xca, 0xc2, 0xbc, 0x54, 0xba, 0xe9, 0xbb, 0x1e, 0xf1, 0xe9, 0x11, 0xda, + 0x80, 0xa5, 0x8e, 0x71, 0x2f, 0xdc, 0xe3, 0x20, 0xfe, 0xa1, 0x65, 0x92, 0xad, 0x6e, 0x47, 0x26, + 0x62, 0x4a, 0x2c, 0x2a, 0xdd, 0xec, 0x83, 0xc7, 0x7d, 0xb9, 0xd0, 0x87, 0x61, 0xb6, 0x63, 0xdc, + 0xdb, 0x72, 0xdb, 0xa4, 0xe9, 0xb6, 0x99, 0x18, 0x31, 0x4e, 0x16, 0x59, 0xcc, 0xb0, 0xa9, 0x23, + 0x70, 0x9c, 0x0e, 0x7d, 0x29, 0x03, 0xb3, 0x2e, 0xf3, 0x18, 0xae, 0xdd, 0xc6, 0x06, 0xb5, 0x5c, + 0x69, 0xc6, 0xea, 0xa3, 0xf6, 0x42, 0x58, 0xa1, 0xca, 0x6d, 0x5d, 0x8a, 0xe8, 0x0d, 0x15, 0xb6, + 0xc4, 0x70, 0x38, 0x5e, 0xe0, 0xf2, 0x27, 0x01, 0xf5, 0xf2, 0xa6, 0x6a, 0xdf, 0xff, 0x28, 0xa8, + 0xf6, 0x0d, 0x6d, 0x04, 0xfa, 0x59, 0x28, 0x9a, 0x86, 0x67, 0x98, 0x16, 0x65, 0x42, 0x58, 0x95, + 0x3e, 0x3e, 0x6a, 0x95, 0x42, 0x19, 0x95, 0xba, 0x14, 0x20, 0x6a, 0x73, 0x39, 0x9c, 0x4e, 0x21, + 0xf8, 0xfe, 0xf1, 0xca, 0x4c, 0x48, 0xcb, 0x0c, 0x06, 0x56, 0x25, 0xa2, 0x5f, 0xca, 0xc0, 0xb4, + 0x61, 0xdb, 0xae, 0x69, 0x50, 0x9e, 0x06, 0x13, 0x36, 0xa3, 0x9a, 0x5a, 0x83, 0x6a, 0x24, 0x43, + 0x28, 0x11, 0x6e, 0x56, 0x4e, 0x6b, 0x98, 0x1e, 0x3d, 0xf4, 0xa2, 0x59, 0x0f, 0x4f, 0xc9, 0x6f, + 0x1e, 0x8a, 0x30, 0x45, 0x3e, 0xf1, 0xa0, 0x8a, 0x90, 0xb6, 0x50, 0xe3, 0xbd, 0x2a, 0xa1, 0x17, + 0xc2, 0x7b, 0x94, 0x88, 0x0a, 0x5d, 0x3e, 0x80, 0xd9, 0x58, 0x53, 0xf6, 0xe9, 0xdc, 0x86, 0xde, + 0xb9, 0x43, 0x0c, 0x77, 0x25, 0x3c, 0xb4, 0x55, 0xf9, 0x74, 0xd7, 0x70, 0xa8, 0x45, 0x8f, 0xb4, + 0xc1, 0xb0, 0xec, 0xc0, 0x42, 0xb2, 0xd5, 0x1e, 0x6a, 0x79, 0x36, 0xcc, 0xc5, 0x1b, 0xe7, 0x61, + 0x96, 0x56, 0xfe, 0xd6, 0x45, 0xe5, 0xf3, 0xf8, 0xee, 0xd7, 0x27, 0x00, 0x76, 0x2d, 0xc7, 0xb0, + 0xad, 0xb7, 0x89, 0x1f, 0xf0, 0x81, 0x3e, 0x55, 0x5b, 0x61, 0xd6, 0xf6, 0x35, 0x05, 0xbd, 0x7f, + 0xbc, 0x32, 0xab, 0xbe, 0x78, 0xac, 0xaa, 0xb1, 0xa4, 0xcf, 0x99, 0xb5, 0xad, 0xc0, 0xb3, 0x8d, + 0xa3, 0x7e, 0x39, 0xb3, 0x46, 0x84, 0xc2, 0x3a, 0x9d, 0xca, 0xd0, 0xe6, 0x07, 0x66, 0x68, 0x53, + 0xc4, 0xb5, 0x0d, 0x98, 0x76, 0x08, 0x7d, 0xcb, 0xf5, 0x0f, 0xe4, 0xbe, 0x0c, 0x23, 0x2f, 0x87, + 0x3a, 0x6c, 0x45, 0xa8, 0xfb, 0xf1, 0x4f, 0xac, 0xb3, 0xb1, 0x95, 0x96, 0xfc, 0x6c, 0x10, 0x66, + 0x45, 0x79, 0x86, 0x4c, 0xdb, 0x5b, 0xda, 0xd2, 0x91, 0x38, 0x4e, 0xab, 0xa5, 0x0e, 0xeb, 0xeb, + 0x0d, 0xcc, 0x93, 0x64, 0xbd, 0xa9, 0x43, 0x86, 0xc2, 0x3a, 0x1d, 0xba, 0x0a, 0xd3, 0x81, 0xb0, + 0xd9, 0x9c, 0xed, 0x82, 0xa8, 0x28, 0x63, 0x69, 0x45, 0x60, 0xac, 0xd3, 0xa0, 0x55, 0x98, 0x6a, + 0x3b, 0x41, 0xc3, 0xed, 0x18, 0x96, 0xc3, 0x33, 0x6d, 0xda, 0x39, 0x82, 0xc6, 0x56, 0x4b, 0x20, + 0x70, 0x44, 0x83, 0x30, 0x3c, 0x2e, 0xf2, 0x2b, 0x55, 0x9b, 0xe7, 0x4d, 0xa8, 0x75, 0x48, 0x44, + 0xf8, 0x0e, 0x7c, 0x70, 0x2c, 0x9f, 0x1c, 0xaf, 0x3c, 0xde, 0xec, 0x4b, 0x81, 0x07, 0x70, 0x22, + 0x17, 0x8a, 0xbb, 0x62, 0x09, 0x1e, 0xc8, 0x15, 0xf5, 0x6a, 0xca, 0x8c, 0x81, 0xea, 0x9f, 0xa2, + 0x04, 0xb0, 0x51, 0x99, 0x48, 0x2b, 0x61, 0x55, 0x08, 0x7a, 0x8b, 0xc5, 0x1c, 0xdc, 0xaf, 0xb0, + 0x75, 0xc4, 0xcc, 0xa8, 0xc7, 0xac, 0xe2, 0x1e, 0xa9, 0xf6, 0xfe, 0x30, 0xf0, 0x6f, 0x2a, 0x59, + 0x3c, 0xd3, 0x1f, 0x27, 0xc3, 0x5a, 0x51, 0xe8, 0xf3, 0x30, 0x65, 0x88, 0xed, 0x2a, 0x12, 0x94, + 0x66, 0xb9, 0xad, 0x5c, 0x4d, 0x19, 0x8f, 0x44, 0xf3, 0x47, 0x02, 0x02, 0x1c, 0xc9, 0x44, 0xbf, + 0x98, 0x81, 0xf9, 0xb6, 0x6b, 0x1e, 0x10, 0x7f, 0xed, 0x1e, 0xf5, 0x8d, 0xaa, 0xbf, 0x17, 0x94, + 0xe6, 0xd2, 0x39, 0x07, 0x36, 0xef, 0x2b, 0x8d, 0xb8, 0x0c, 0x61, 0x95, 0x9f, 0x90, 0x25, 0xcf, + 0x27, 0xb0, 0x38, 0x59, 0x24, 0xf3, 0x4f, 0x0b, 0x07, 0xdd, 0x1d, 0x62, 0x13, 0x1a, 0xe9, 0x31, + 0xcf, 0xf5, 0xa8, 0xa5, 0xd2, 0xe3, 0x56, 0x42, 0x88, 0x50, 0x44, 0x65, 0x0d, 0x92, 0x68, 0xdc, + 0x53, 0x2a, 0xfa, 0x72, 0x06, 0x90, 0xe1, 0x59, 0x22, 0x01, 0x12, 0x29, 0xb3, 0xc0, 0x95, 0x69, + 0xa4, 0x52, 0xa6, 0xda, 0x23, 0x46, 0xa8, 0xa3, 0xb6, 0x44, 0xaa, 0xcd, 0xf5, 0x04, 0x01, 0xee, + 0x53, 0x36, 0xfa, 0x76, 0x06, 0x96, 0x4d, 0xd7, 0xa1, 0xbe, 0x6b, 0xdb, 0xac, 0x5f, 0x1d, 0x63, + 0x4f, 0x57, 0x6d, 0x91, 0xab, 0xb6, 0x91, 0x4a, 0xb5, 0xfa, 0x40, 0x71, 0x42, 0xc5, 0x70, 0x7e, + 0x2c, 0x0f, 0x26, 0xc4, 0xa7, 0xe8, 0xc4, 0x5b, 0x31, 0x90, 0x39, 0x4a, 0x4d, 0x55, 0xf4, 0x00, + 0xad, 0xd8, 0xea, 0x11, 0x93, 0x68, 0xc5, 0x5e, 0x02, 0xdc, 0xa7, 0x6c, 0x74, 0x08, 0x4b, 0x66, + 0x32, 0xc7, 0x8c, 0xc9, 0x6e, 0x69, 0x49, 0xe6, 0x86, 0xfa, 0x44, 0xe0, 0x1b, 0xae, 0x69, 0xd8, + 0x62, 0x99, 0x8e, 0xc9, 0x2e, 0xf1, 0x89, 0x63, 0x12, 0x11, 0x0b, 0xd7, 0xfb, 0x48, 0xc2, 0x7d, + 0xe5, 0xa3, 0x3a, 0xe4, 0x09, 0x35, 0xdb, 0xa5, 0x8b, 0xbc, 0x9c, 0xe1, 0x79, 0xd2, 0x35, 0x6a, + 0xb6, 0x45, 0x12, 0x9b, 0xfd, 0xc2, 0x9c, 0x19, 0x7d, 0x0a, 0xd0, 0xbe, 0x1b, 0x50, 0xb6, 0x56, + 0xaa, 0x06, 0x2c, 0x5e, 0xe6, 0xeb, 0xaa, 0x27, 0x78, 0x22, 0x47, 0x35, 0xc4, 0xcd, 0x1e, 0x0a, + 0xdc, 0x87, 0x0b, 0x51, 0xe5, 0xb0, 0x78, 0x9f, 0x94, 0xd2, 0xad, 0x99, 0x79, 0x9f, 0x6c, 0x45, + 0xfc, 0xa2, 0x33, 0x2e, 0x24, 0xfc, 0x1d, 0xef, 0x05, 0xbd, 0x18, 0xe4, 0xc3, 0x7c, 0x60, 0x1a, + 0xb6, 0xe5, 0xec, 0x85, 0x76, 0xa8, 0xf4, 0xe4, 0x83, 0x19, 0x34, 0x65, 0x56, 0x5a, 0x71, 0x79, + 0x38, 0x59, 0x00, 0xfa, 0x02, 0xcc, 0xee, 0x68, 0x47, 0x7f, 0x83, 0xd2, 0xf2, 0x88, 0x87, 0x7f, + 0xf4, 0x03, 0xc3, 0x91, 0x0f, 0xd6, 0xa1, 0x01, 0x8e, 0x8b, 0x5e, 0xae, 0xc1, 0x52, 0x3f, 0x23, + 0x98, 0x66, 0xe1, 0xb0, 0x5c, 0x87, 0x8b, 0x7d, 0x0d, 0x58, 0x2a, 0x21, 0x6b, 0xf0, 0xc4, 0x00, + 0xc3, 0x93, 0x4a, 0xcc, 0x26, 0xac, 0x0c, 0x31, 0x12, 0x69, 0xb5, 0x1a, 0x30, 0x91, 0x53, 0x89, + 0xf9, 0x38, 0x2c, 0x24, 0xc7, 0x5e, 0xaa, 0xa5, 0xd9, 0x37, 0x00, 0x66, 0x63, 0x07, 0xf9, 0x50, + 0x19, 0x26, 0x6c, 0xd6, 0x6f, 0x6d, 0xb9, 0x7d, 0xc4, 0xf7, 0x16, 0x37, 0x38, 0x04, 0x4b, 0x8c, + 0x1e, 0x0d, 0x66, 0x87, 0x44, 0x83, 0x2f, 0xc5, 0x8f, 0xa7, 0xbe, 0x27, 0x79, 0x3c, 0x35, 0x3c, + 0x1c, 0x18, 0x3b, 0x4c, 0x45, 0x00, 0xcc, 0x68, 0x0f, 0x26, 0x9f, 0xee, 0x84, 0x8c, 0xda, 0x93, + 0x89, 0x32, 0x8b, 0xda, 0xb6, 0x8d, 0x26, 0x58, 0xdf, 0x32, 0x2f, 0x9c, 0xbe, 0x65, 0xae, 0xed, + 0xc2, 0x4f, 0x9c, 0xba, 0x0b, 0xff, 0xa6, 0x1e, 0xa0, 0x4c, 0xa6, 0x9b, 0xcf, 0xf2, 0x20, 0x8e, + 0x76, 0x1a, 0x23, 0x94, 0xa4, 0x47, 0x28, 0x5f, 0x84, 0x62, 0xb8, 0x02, 0xe1, 0x01, 0x67, 0x8a, + 0xc8, 0x2b, 0x5c, 0xff, 0xa9, 0x55, 0x6a, 0x31, 0x84, 0x68, 0x71, 0x57, 0x08, 0xc2, 0xaa, 0x18, + 0xd1, 0x1d, 0xf2, 0x70, 0x8a, 0x88, 0x53, 0x53, 0x75, 0x87, 0xe4, 0xd4, 0xbb, 0x23, 0x14, 0x86, + 0x35, 0xc1, 0x2c, 0x6a, 0xd7, 0xc3, 0xef, 0xe9, 0x78, 0xd4, 0x3e, 0x30, 0x04, 0x6f, 0xc0, 0x82, + 0xe3, 0xb6, 0xf9, 0xef, 0x4d, 0x23, 0x38, 0x68, 0x59, 0x6f, 0x13, 0x1e, 0x92, 0x16, 0xa2, 0x30, + 0x67, 0x2b, 0x81, 0xc7, 0x3d, 0x1c, 0xe8, 0x19, 0x28, 0xb4, 0x9d, 0x60, 0xbd, 0x29, 0xb7, 0xa1, + 0x55, 0x52, 0xb0, 0xb1, 0xd5, 0x5a, 0x6f, 0x62, 0x81, 0x63, 0x0b, 0x04, 0x9f, 0xec, 0x59, 0x01, + 0xf5, 0x8f, 0xd6, 0x9b, 0x22, 0x30, 0x94, 0x0b, 0x04, 0x1c, 0x81, 0xb1, 0x4e, 0xc3, 0x0f, 0x7c, + 0x13, 0x36, 0xe6, 0x0c, 0xff, 0x48, 0xab, 0x82, 0xdc, 0xbe, 0x89, 0x0e, 0x7c, 0xf7, 0xa1, 0xc1, + 0x7d, 0x39, 0x93, 0x8b, 0x9b, 0x85, 0x11, 0x17, 0x37, 0xba, 0x22, 0x1a, 0x51, 0x69, 0x71, 0x80, + 0x22, 0xba, 0xa0, 0xbe, 0x9c, 0x4c, 0x62, 0xb2, 0x19, 0xd7, 0x9b, 0x87, 0x2f, 0x97, 0x10, 0x6f, + 0x7c, 0x25, 0x71, 0xab, 0x0f, 0x0d, 0xee, 0xcb, 0x39, 0x40, 0xe2, 0x75, 0xbe, 0x12, 0x3b, 0x5d, + 0xe2, 0xf5, 0xbe, 0x12, 0xaf, 0xa3, 0x06, 0x00, 0x8b, 0x68, 0xc5, 0x91, 0x79, 0x1e, 0xda, 0x4c, + 0xd5, 0xde, 0x17, 0x8e, 0xc3, 0x5b, 0x0a, 0xc3, 0x56, 0x3b, 0xd1, 0x17, 0x5f, 0x8d, 0x6a, 0x7c, + 0xe5, 0x6f, 0xe5, 0x60, 0xaa, 0xee, 0x3a, 0xbb, 0xd6, 0xde, 0xa6, 0x31, 0x8e, 0xcb, 0x4c, 0xdb, + 0x90, 0xe7, 0xd2, 0x45, 0x5a, 0xea, 0xe5, 0xe1, 0x53, 0x2d, 0xd4, 0xad, 0xd2, 0x30, 0xa8, 0x21, + 0x22, 0x10, 0xb5, 0x8a, 0x67, 0x20, 0xcc, 0xe5, 0x21, 0x07, 0x60, 0xc7, 0x72, 0x0c, 0xff, 0xa8, + 0x21, 0xf6, 0x1d, 0x46, 0xdc, 0x5c, 0x56, 0xd2, 0x6b, 0x8a, 0x59, 0x94, 0xa1, 0x6a, 0x11, 0x21, + 0xb0, 0x56, 0xc2, 0xf2, 0x87, 0x61, 0x4a, 0x11, 0xa7, 0x72, 0x6b, 0x1f, 0x83, 0xf9, 0x44, 0x59, + 0xc3, 0xd8, 0x67, 0x74, 0xaf, 0xf6, 0x97, 0x19, 0x98, 0x55, 0x5a, 0x8f, 0x61, 0xef, 0xe1, 0x76, + 0x7c, 0xef, 0xe1, 0x83, 0xa3, 0x37, 0xe9, 0x80, 0xdd, 0x07, 0x7e, 0x97, 0xc0, 0x77, 0x9d, 0x9b, + 0xcd, 0xea, 0x79, 0xbc, 0x4b, 0x20, 0x34, 0x3b, 0xcb, 0xbb, 0x04, 0x52, 0xe2, 0xe9, 0xc7, 0xe4, + 0xf9, 0x86, 0x92, 0xa0, 0x3c, 0x97, 0x1b, 0x4a, 0x42, 0xb5, 0x01, 0x5d, 0xba, 0x0f, 0x17, 0x24, + 0xc1, 0xc3, 0xbe, 0x88, 0xf2, 0xb5, 0xa8, 0x99, 0xce, 0xe5, 0x25, 0xaa, 0x1f, 0x65, 0x61, 0x36, + 0xd6, 0xe1, 0x69, 0x0e, 0xe3, 0x5f, 0x8d, 0x1f, 0xc6, 0x4f, 0x77, 0xdd, 0x29, 0x97, 0xe2, 0xba, + 0x53, 0xfe, 0x4c, 0xae, 0x3b, 0x15, 0x7e, 0x0a, 0xd7, 0x9d, 0xfe, 0x34, 0x03, 0x7c, 0xa9, 0x8c, + 0x6e, 0x41, 0xc1, 0x66, 0x2b, 0x76, 0x39, 0x39, 0x86, 0x9b, 0x25, 0xbe, 0xbe, 0xe7, 0xeb, 0x6d, + 0x7e, 0xd6, 0x80, 0x7f, 0x62, 0x21, 0x03, 0xbd, 0xd1, 0x73, 0x37, 0xf5, 0x85, 0x91, 0xef, 0xa6, + 0x72, 0x91, 0x83, 0xee, 0xa3, 0xfe, 0x1f, 0x28, 0x0d, 0xba, 0xc3, 0xfa, 0xee, 0xb6, 0x5c, 0xcb, + 0xdf, 0xcf, 0xc0, 0x8c, 0xae, 0x02, 0x3f, 0xeb, 0xe9, 0xb4, 0x3d, 0x97, 0xef, 0x34, 0x8a, 0x64, + 0xbc, 0x38, 0xeb, 0x19, 0x02, 0x71, 0x84, 0x67, 0xc3, 0xc6, 0x34, 0x5e, 0xb3, 0xec, 0x70, 0xa8, + 0xa9, 0x61, 0x53, 0xaf, 0x32, 0x28, 0x96, 0x58, 0x36, 0xbd, 0x4c, 0xe2, 0x53, 0x4e, 0x99, 0xd8, + 0xd8, 0xad, 0x4b, 0x38, 0x56, 0x14, 0x6c, 0xa8, 0x1f, 0x90, 0x23, 0x4e, 0x9c, 0x8f, 0x0f, 0xf5, + 0x5b, 0x02, 0x8c, 0x43, 0x7c, 0xb9, 0x01, 0x79, 0xce, 0xf2, 0x1e, 0xc8, 0x05, 0xbe, 0x29, 0x5b, + 0x41, 0x5d, 0xbd, 0x6d, 0xf9, 0x26, 0x66, 0x70, 0x86, 0x6e, 0xab, 0xc3, 0xfa, 0x0a, 0xdd, 0x08, + 0x28, 0x66, 0xf0, 0xf2, 0x9f, 0x64, 0x20, 0x7b, 0xb3, 0x8a, 0xea, 0x90, 0xa3, 0x07, 0x44, 0x8e, + 0x84, 0x0f, 0x0c, 0xed, 0xb9, 0x3b, 0xb7, 0xd6, 0x6e, 0x56, 0xe5, 0xb1, 0x4d, 0xf6, 0x13, 0x33, + 0x6e, 0xf4, 0x79, 0x00, 0xba, 0x6f, 0xf9, 0xed, 0xa6, 0xe1, 0xd3, 0xa3, 0x91, 0x47, 0xc1, 0x1d, + 0xc5, 0x72, 0xb3, 0x5a, 0x5b, 0x38, 0x39, 0x5e, 0x99, 0xd1, 0x21, 0x58, 0x13, 0x59, 0xfe, 0xe5, + 0x2c, 0xe4, 0x6f, 0x12, 0xbb, 0x33, 0x06, 0xa7, 0x77, 0x2b, 0xe6, 0xf4, 0x9e, 0x1d, 0x7e, 0x54, + 0x90, 0xd8, 0x9d, 0x81, 0x1e, 0xaf, 0x95, 0xf0, 0x78, 0xcf, 0x8d, 0x26, 0xee, 0x74, 0x77, 0xf7, + 0xe7, 0x19, 0x28, 0x32, 0xb2, 0x31, 0xf8, 0xba, 0x4f, 0xc5, 0x7d, 0xdd, 0xfb, 0x47, 0x52, 0x7f, + 0x80, 0xa3, 0x7b, 0x19, 0x16, 0x18, 0x36, 0xe6, 0xe5, 0xc2, 0xdb, 0x20, 0x99, 0x81, 0xb7, 0x41, + 0xbe, 0x2a, 0x2b, 0x7b, 0x2e, 0x3d, 0xd6, 0x3f, 0x65, 0x01, 0xa2, 0x0e, 0x7b, 0xe4, 0xae, 0xce, + 0xd4, 0x5d, 0xb1, 0x39, 0xbf, 0xde, 0xac, 0x6e, 0x9e, 0xc3, 0x39, 0xcf, 0xd4, 0x3a, 0xc3, 0x39, + 0xcf, 0xc5, 0x0d, 0x9f, 0xf3, 0x8c, 0xec, 0x3c, 0xce, 0x79, 0xa6, 0xd7, 0xe0, 0x39, 0xcf, 0xb0, + 0x0f, 0x30, 0xe7, 0xc3, 0x26, 0x3e, 0x97, 0x73, 0x3e, 0xea, 0xb0, 0x47, 0x73, 0xfe, 0xcc, 0xe7, + 0xfc, 0x46, 0xad, 0xfe, 0xda, 0x39, 0x9c, 0xf3, 0x4c, 0xad, 0x33, 0x9c, 0xf3, 0x5c, 0xdc, 0xf0, + 0x39, 0xcf, 0xc8, 0xce, 0xe3, 0x9c, 0x67, 0x7a, 0x0d, 0x98, 0xf3, 0xbf, 0x9a, 0x81, 0x05, 0x86, + 0x7e, 0xc8, 0xcb, 0x59, 0x36, 0x37, 0x0c, 0x93, 0x5a, 0xbd, 0x73, 0xa3, 0xca, 0xa1, 0x58, 0x62, + 0xb9, 0x35, 0x09, 0x3b, 0xef, 0x5c, 0x5a, 0x93, 0x68, 0x28, 0x3c, 0xb2, 0x26, 0x67, 0x6a, 0x4d, + 0xfe, 0x31, 0x0b, 0x53, 0x6a, 0xe9, 0xca, 0x6f, 0xcd, 0x1a, 0xd4, 0x68, 0x58, 0x7e, 0xb2, 0x6d, + 0x1b, 0x02, 0x8c, 0x43, 0x3c, 0xfa, 0x02, 0x4c, 0x11, 0xb5, 0x17, 0x2f, 0xa6, 0xc4, 0x2b, 0xa3, + 0x2f, 0x92, 0x2b, 0x89, 0x0d, 0x78, 0x35, 0xd0, 0xa3, 0x7d, 0xf7, 0x48, 0x3c, 0xbf, 0x5b, 0xc4, + 0xf7, 0x20, 0xd9, 0xa2, 0xb0, 0x55, 0xdd, 0x12, 0x07, 0xd2, 0xc3, 0xbb, 0x45, 0x31, 0x0c, 0x4e, + 0x50, 0xa2, 0x97, 0x61, 0xc6, 0x23, 0x1a, 0x67, 0x9e, 0x73, 0xf2, 0xa5, 0x54, 0x53, 0x83, 0xe3, + 0x18, 0xd5, 0xf2, 0x47, 0x61, 0xee, 0xc1, 0x77, 0x16, 0xf9, 0xc3, 0x1d, 0x1b, 0xee, 0x5e, 0xdd, + 0xb5, 0x6d, 0x62, 0x8e, 0xe7, 0xdd, 0xa6, 0xb4, 0x0f, 0x77, 0xe8, 0xea, 0x9d, 0xe1, 0xc3, 0x1d, + 0x31, 0xb1, 0xc3, 0x1f, 0xee, 0xd0, 0xc9, 0xcf, 0xe3, 0xc3, 0x1d, 0xba, 0x7e, 0x03, 0x4c, 0x79, + 0x07, 0x4a, 0x3a, 0xd5, 0xc3, 0x4e, 0x50, 0x7e, 0x3d, 0xd1, 0x6a, 0xe7, 0xd2, 0x62, 0x9f, 0x64, + 0x01, 0xf5, 0x8e, 0x84, 0x47, 0x96, 0xfb, 0x4c, 0x2d, 0xf7, 0x57, 0xb2, 0x30, 0x19, 0x5e, 0xaf, + 0x38, 0x7f, 0xfb, 0x1c, 0x52, 0xb3, 0x33, 0xdc, 0xe7, 0x08, 0x25, 0x9e, 0x6e, 0x55, 0x02, 0x98, + 0x93, 0x84, 0xe1, 0x13, 0x1e, 0xd7, 0x63, 0x4f, 0x28, 0x94, 0x13, 0x4f, 0x78, 0xa0, 0x38, 0x75, + 0xfc, 0xd8, 0xae, 0x3c, 0x39, 0x90, 0x3c, 0xa8, 0x21, 0x69, 0x71, 0x88, 0xe7, 0x4f, 0x37, 0x48, + 0x39, 0x8f, 0x9e, 0x6e, 0x38, 0xb7, 0x4f, 0x37, 0x7c, 0x2f, 0x03, 0xd3, 0xb2, 0x97, 0xce, 0xe3, + 0x16, 0x58, 0x78, 0x24, 0xad, 0xbf, 0x9b, 0xf9, 0x66, 0x41, 0x29, 0xff, 0x53, 0x3a, 0x1c, 0xff, + 0x20, 0x0f, 0x4a, 0x0c, 0x3f, 0x1c, 0x2f, 0x76, 0x29, 0x0a, 0xa7, 0xee, 0x52, 0x4c, 0x8c, 0x74, + 0x31, 0x6c, 0x32, 0xd5, 0xc5, 0xb0, 0x62, 0x8a, 0x8b, 0x61, 0x53, 0x29, 0x2f, 0x86, 0xc1, 0xd0, + 0x8b, 0x61, 0x6f, 0xaa, 0x8b, 0x61, 0xd3, 0x7c, 0x74, 0xdc, 0x48, 0x63, 0x4f, 0x53, 0xde, 0x0a, + 0x9b, 0xf9, 0x29, 0xdc, 0x0a, 0xfb, 0xef, 0x1c, 0xcc, 0xc6, 0xec, 0xf5, 0x48, 0x47, 0xe3, 0x5e, + 0x8a, 0x3b, 0xfd, 0xde, 0xf3, 0x6e, 0x52, 0xe4, 0x29, 0xe7, 0xdd, 0x72, 0x23, 0x1e, 0xb0, 0x4a, + 0x5a, 0xeb, 0x34, 0xe7, 0xdd, 0xf2, 0x23, 0x9f, 0x77, 0x2b, 0x8c, 0x7e, 0xde, 0x6d, 0x62, 0xc4, + 0xf3, 0x6e, 0x71, 0x77, 0x35, 0xe4, 0xbc, 0x9b, 0x05, 0xd3, 0xd2, 0x8c, 0xad, 0x3b, 0xbb, 0x2e, + 0x9f, 0x21, 0xa3, 0x3c, 0x9f, 0x11, 0xf6, 0xdc, 0x51, 0x40, 0x49, 0x87, 0x71, 0x46, 0x33, 0x7d, + 0x33, 0x12, 0x87, 0x75, 0xd9, 0xe5, 0x7f, 0xcf, 0xc3, 0x62, 0x0f, 0x1f, 0x0b, 0x80, 0x43, 0xa2, + 0x46, 0x32, 0x00, 0x0e, 0x45, 0x35, 0x70, 0x44, 0xc3, 0x82, 0xb3, 0x80, 0xb3, 0xdf, 0xbd, 0xab, + 0xec, 0x92, 0xea, 0x9a, 0x96, 0xc2, 0x60, 0x8d, 0x8a, 0xb5, 0xf7, 0x8e, 0xeb, 0x32, 0x3b, 0x96, + 0x08, 0xfc, 0x6a, 0x1c, 0x8a, 0x25, 0x16, 0xbd, 0x0a, 0xb3, 0x07, 0xc4, 0x77, 0x88, 0x3d, 0xe0, + 0xc9, 0xb5, 0x5b, 0x3a, 0x12, 0xc7, 0x69, 0x59, 0xff, 0xbb, 0xc1, 0x7a, 0xa7, 0xcf, 0x79, 0xc7, + 0xdb, 0x2d, 0x0e, 0xc6, 0x21, 0x1e, 0x7d, 0x06, 0x9e, 0x48, 0xbe, 0x1f, 0x10, 0x96, 0x28, 0x5c, + 0xd4, 0x8a, 0x64, 0x7d, 0xa2, 0xde, 0x9f, 0x0c, 0x0f, 0xe2, 0x47, 0x1f, 0x87, 0x39, 0x79, 0xc9, + 0x20, 0x94, 0x28, 0xac, 0xde, 0xe3, 0x52, 0xe2, 0xdc, 0xad, 0x18, 0x16, 0x27, 0xa8, 0x51, 0x43, + 0x5c, 0x8d, 0xe0, 0x8b, 0x94, 0x50, 0x42, 0x31, 0xfe, 0x18, 0xc2, 0xad, 0x04, 0x1e, 0xf7, 0x70, + 0xa0, 0x2a, 0xcc, 0xbb, 0xfc, 0x65, 0x0a, 0xcb, 0xd9, 0x13, 0x7d, 0x22, 0xaf, 0xef, 0xa8, 0xd3, + 0xd4, 0xb7, 0xe3, 0x68, 0x9c, 0xa4, 0x47, 0x37, 0x60, 0xc6, 0xf0, 0xcd, 0x7d, 0x8b, 0x12, 0x93, + 0x76, 0x7d, 0x61, 0x32, 0xb5, 0xab, 0xe9, 0x55, 0x0d, 0x87, 0x63, 0x94, 0x65, 0x02, 0x0b, 0xcd, + 0xed, 0x3a, 0x7e, 0xd8, 0xeb, 0xac, 0x6f, 0x65, 0x60, 0xb1, 0xc9, 0xea, 0x1b, 0x50, 0xe2, 0xd0, + 0x9a, 0x61, 0x1e, 0xac, 0x39, 0x6d, 0xb4, 0x09, 0x39, 0xd3, 0x0e, 0x64, 0xb4, 0x30, 0x7c, 0x22, + 0xc9, 0xa7, 0x68, 0x25, 0x77, 0x7d, 0xa3, 0x55, 0x9b, 0x3c, 0x39, 0x5e, 0xc9, 0xd5, 0x37, 0x5a, + 0x98, 0xc9, 0x41, 0xeb, 0x90, 0x25, 0xc1, 0xc8, 0x4b, 0xf6, 0xb8, 0xb4, 0xb5, 0x96, 0x78, 0x7e, + 0x65, 0xad, 0x85, 0xb3, 0x24, 0x28, 0x7f, 0x33, 0x0b, 0xf3, 0x91, 0xbe, 0x6b, 0x87, 0xc4, 0xa1, + 0xe3, 0x39, 0x6c, 0xa7, 0xad, 0x0a, 0x86, 0x1f, 0xb6, 0x4b, 0x68, 0x38, 0x70, 0x75, 0xf0, 0xb9, + 0xc4, 0xea, 0xe0, 0x7a, 0x6a, 0xc9, 0xa7, 0xaf, 0x12, 0xfe, 0x2e, 0x03, 0x17, 0x12, 0x1c, 0x63, + 0x08, 0x09, 0xef, 0xc6, 0x43, 0xc2, 0x17, 0xd3, 0x56, 0x6a, 0x40, 0x68, 0xf8, 0xf5, 0x6c, 0x4f, + 0x65, 0xc6, 0x97, 0x15, 0xf8, 0x19, 0x58, 0xf4, 0x92, 0xd3, 0x64, 0xe4, 0x67, 0xbe, 0x7b, 0x26, + 0x98, 0x7a, 0x72, 0xa7, 0x77, 0xee, 0xe1, 0xde, 0x72, 0xf4, 0x84, 0x42, 0x7e, 0x48, 0x4a, 0xe2, + 0xdf, 0xb2, 0x70, 0xb1, 0xef, 0x18, 0x79, 0x94, 0x95, 0x38, 0xd3, 0xac, 0xc4, 0xef, 0x64, 0x01, + 0x9a, 0xbe, 0xdb, 0x21, 0x74, 0x9f, 0x74, 0xc7, 0xf1, 0xc8, 0xc9, 0xa7, 0x63, 0x26, 0x68, 0x78, + 0x00, 0x15, 0x29, 0x37, 0xd0, 0xfa, 0x7c, 0x26, 0x61, 0x7d, 0xae, 0xa6, 0x11, 0x7a, 0xba, 0xe1, + 0xf9, 0xab, 0x0c, 0xcc, 0x45, 0xc4, 0x63, 0xb0, 0x39, 0xcd, 0xb8, 0xcd, 0x79, 0x2e, 0x45, 0x55, + 0x06, 0x26, 0x3c, 0x97, 0x22, 0x1a, 0x4c, 0x3a, 0x2e, 0xe5, 0xd1, 0x28, 0x7a, 0x0e, 0xa6, 0xde, + 0xf2, 0x2d, 0xf1, 0xa1, 0x1f, 0x10, 0x7b, 0x23, 0x04, 0xe2, 0x08, 0xcf, 0x96, 0x62, 0x3e, 0x31, + 0xda, 0x9c, 0x36, 0xcb, 0x69, 0x67, 0xc4, 0x9d, 0x0a, 0x01, 0xc3, 0x0a, 0x5b, 0xfe, 0xdd, 0x09, + 0xbd, 0xc5, 0xce, 0x63, 0xba, 0x13, 0x05, 0x00, 0x41, 0x77, 0x27, 0x8a, 0x2a, 0x47, 0x7b, 0x86, + 0x20, 0x5e, 0xa9, 0x4a, 0x4b, 0x49, 0x48, 0x9c, 0x0f, 0x8f, 0x10, 0x58, 0x2b, 0x06, 0xf9, 0x30, + 0xeb, 0xab, 0xc6, 0x27, 0x41, 0x20, 0x67, 0xfb, 0x87, 0x52, 0x94, 0x1b, 0x75, 0x5e, 0x14, 0x04, + 0x63, 0x5d, 0x26, 0x8e, 0x17, 0xc1, 0x2f, 0x96, 0xbb, 0xd4, 0xda, 0x3d, 0x92, 0xe7, 0x0c, 0x65, + 0x3c, 0x1b, 0x5d, 0x2c, 0xd7, 0x91, 0x38, 0x4e, 0x8b, 0x76, 0x61, 0xca, 0x57, 0x0f, 0x0a, 0x4d, + 0x8e, 0xa8, 0xac, 0xba, 0x51, 0x43, 0xbe, 0xd8, 0xb5, 0x7c, 0xd2, 0x21, 0x0e, 0xd5, 0x16, 0x3d, + 0xd1, 0x33, 0x42, 0x91, 0x68, 0xd6, 0xdf, 0x7e, 0xd7, 0xb9, 0xed, 0x88, 0xc7, 0xed, 0x78, 0x78, + 0x5b, 0x8c, 0xfa, 0x1b, 0x47, 0x28, 0xac, 0xd3, 0xa1, 0x4d, 0xb8, 0x60, 0xd8, 0xc4, 0xa7, 0x98, + 0x78, 0xc4, 0xa0, 0xfc, 0x95, 0xbe, 0x43, 0xc3, 0x96, 0x81, 0xad, 0x7a, 0xed, 0xac, 0xda, 0x4b, + 0x82, 0xfb, 0xf1, 0xb1, 0xe1, 0xf3, 0x96, 0x45, 0xf7, 0xb7, 0x9a, 0x0d, 0x1e, 0xdb, 0x16, 0xa3, + 0xe1, 0xf3, 0x86, 0x00, 0xe3, 0x10, 0xbf, 0xfc, 0x31, 0x98, 0x4f, 0x74, 0x7e, 0xaa, 0xb5, 0xf6, + 0x6f, 0xe6, 0x61, 0x21, 0x69, 0x7f, 0x1e, 0x39, 0xb5, 0xb3, 0x74, 0x6a, 0xa8, 0x1b, 0x9b, 0xe0, + 0x13, 0x23, 0xde, 0x69, 0x4f, 0x76, 0x4a, 0xda, 0x29, 0xfe, 0x6e, 0x07, 0xc6, 0x5f, 0x64, 0xa0, + 0x18, 0xde, 0xad, 0x1a, 0x83, 0x23, 0xbe, 0x1d, 0x73, 0xc4, 0x2f, 0x8c, 0x30, 0xb5, 0x85, 0x6a, + 0x03, 0xff, 0x47, 0xe8, 0xfb, 0x19, 0x98, 0x09, 0x89, 0xc6, 0xe0, 0x29, 0xb7, 0xe2, 0x9e, 0xf2, + 0xd9, 0x91, 0x2b, 0x30, 0xc0, 0x4f, 0x7e, 0x2d, 0x1b, 0xa9, 0xff, 0x60, 0x6e, 0x4b, 0x7f, 0x8e, + 0x24, 0x3b, 0xe2, 0x73, 0x24, 0x0f, 0x98, 0xa8, 0x7d, 0x0f, 0xe4, 0xba, 0xbe, 0x2d, 0xa3, 0x68, + 0x75, 0x10, 0xfa, 0x2e, 0xde, 0xc0, 0x0c, 0xce, 0xdc, 0x75, 0x37, 0x90, 0x22, 0x45, 0xfa, 0x63, + 0x26, 0xcc, 0xb1, 0x6e, 0xa9, 0x1c, 0xeb, 0x56, 0x32, 0xc7, 0x3a, 0x11, 0x51, 0xf6, 0xe6, 0x58, + 0xcb, 0xff, 0x95, 0x83, 0xa5, 0x7e, 0xe6, 0x1d, 0x1d, 0xc1, 0x84, 0x6d, 0x75, 0x2c, 0x79, 0xcc, + 0x7c, 0x94, 0x99, 0xd6, 0x4f, 0x4c, 0x65, 0x83, 0xcb, 0x10, 0x33, 0xed, 0x92, 0xca, 0x92, 0x72, + 0x60, 0xcf, 0x83, 0x3e, 0xb2, 0x40, 0xf4, 0x73, 0xfc, 0x61, 0xf3, 0x2f, 0x76, 0x49, 0x40, 0xc3, + 0x71, 0x50, 0x7f, 0xb0, 0xd2, 0xb1, 0x94, 0x92, 0x78, 0x5f, 0x29, 0x04, 0xf7, 0xbe, 0xaf, 0x14, + 0x16, 0xbb, 0x6c, 0xc1, 0xb4, 0xa6, 0xfa, 0x43, 0x7d, 0xdf, 0xe7, 0x00, 0x66, 0x63, 0x7a, 0x3e, + 0xd4, 0xe7, 0x7d, 0x6c, 0x58, 0xec, 0xc9, 0x87, 0xb0, 0x39, 0x61, 0xbb, 0x7b, 0x2d, 0xd2, 0x67, + 0x4e, 0x6c, 0x48, 0x38, 0x56, 0x14, 0xcc, 0xab, 0x51, 0xd7, 0xb3, 0x4c, 0x95, 0x1a, 0x54, 0x5e, + 0xed, 0x8e, 0x00, 0xe3, 0x10, 0x5f, 0xfe, 0x76, 0x16, 0x16, 0x92, 0x09, 0x93, 0x77, 0xf9, 0x0a, + 0xdd, 0x07, 0x60, 0x82, 0xff, 0x63, 0x1d, 0x49, 0x7a, 0xbd, 0x16, 0x87, 0x62, 0x89, 0x45, 0xab, + 0x30, 0x65, 0x39, 0x6d, 0x72, 0x8f, 0xcf, 0x96, 0x7c, 0x3c, 0x1b, 0xb5, 0x1e, 0x22, 0x70, 0x44, + 0xc3, 0x8a, 0x66, 0xf3, 0x27, 0x9c, 0x59, 0x61, 0xd1, 0x6c, 0x76, 0x61, 0x8e, 0x61, 0xcd, 0x94, + 0x98, 0x55, 0xaa, 0x99, 0xfa, 0xec, 0x5e, 0xb0, 0x08, 0x88, 0xf0, 0x63, 0x30, 0x0d, 0xe3, 0x48, + 0xc4, 0x5a, 0x05, 0x2d, 0x02, 0x8a, 0x50, 0x58, 0xa7, 0x2b, 0x37, 0x40, 0xdc, 0x57, 0x60, 0xc6, + 0xe0, 0x50, 0xb5, 0x93, 0x32, 0x06, 0xdb, 0xeb, 0x4d, 0xcc, 0xe0, 0xe8, 0x69, 0xc8, 0x1f, 0xfa, + 0x56, 0x5b, 0xb6, 0x14, 0x7f, 0x5d, 0x62, 0x1b, 0xaf, 0x37, 0x30, 0x87, 0x96, 0xff, 0x38, 0x0b, + 0x73, 0x77, 0x0c, 0xcf, 0x8b, 0x2e, 0xfc, 0x8f, 0xc1, 0xf7, 0xdc, 0x8d, 0xf9, 0x9e, 0xe1, 0xc7, + 0x54, 0xe2, 0x0a, 0x0e, 0x5c, 0x08, 0xfe, 0xff, 0xc4, 0x42, 0xf0, 0x43, 0x69, 0x05, 0x9f, 0xbe, + 0x18, 0x7c, 0x27, 0x03, 0x28, 0xce, 0x30, 0x06, 0x37, 0x77, 0x27, 0xee, 0xe6, 0x56, 0x53, 0x56, + 0x69, 0x80, 0xb3, 0xfb, 0xad, 0x0c, 0x2c, 0xc7, 0x09, 0xcf, 0xcb, 0xd1, 0xc6, 0x3f, 0xec, 0x69, + 0xe4, 0x73, 0x79, 0x64, 0xe6, 0x27, 0x59, 0x58, 0xea, 0x37, 0x78, 0x1e, 0x45, 0xf2, 0x67, 0x9a, + 0x9e, 0xc2, 0x10, 0xbb, 0x40, 0x35, 0xcc, 0xd4, 0x3d, 0x03, 0x85, 0x43, 0xcd, 0x2b, 0xa8, 0xb1, + 0xbf, 0xcd, 0xdd, 0x82, 0xc0, 0x95, 0xbf, 0x9a, 0x81, 0xf0, 0x6d, 0x67, 0xb4, 0x0a, 0xf9, 0x8e, + 0xdb, 0xee, 0xf9, 0xbf, 0x98, 0x4d, 0xb7, 0xcd, 0x9f, 0x6c, 0x93, 0x64, 0xec, 0x13, 0x73, 0x42, + 0xf4, 0x39, 0x28, 0x06, 0xd4, 0x37, 0x28, 0xd9, 0x3b, 0x1a, 0xf9, 0x3f, 0x17, 0xa5, 0x94, 0x96, + 0xe4, 0x8b, 0x46, 0x6e, 0x08, 0xc1, 0x4a, 0x66, 0xf9, 0x6f, 0x33, 0x30, 0x9f, 0xa0, 0x47, 0x6f, + 0x02, 0x74, 0x8c, 0x7b, 0x77, 0x1d, 0x9f, 0x18, 0xed, 0xa3, 0xa1, 0x16, 0xb9, 0x4b, 0x2d, 0xbb, + 0x22, 0xfe, 0x75, 0xb5, 0xb2, 0xee, 0xd0, 0xdb, 0x7e, 0x8b, 0xfa, 0x96, 0xb3, 0x27, 0xf6, 0xb7, + 0x37, 0x95, 0x1c, 0xac, 0xc9, 0x44, 0x18, 0x1e, 0x6f, 0xfb, 0x86, 0xe5, 0x6c, 0xb9, 0x6d, 0x52, + 0x23, 0xbb, 0xae, 0x4f, 0xa4, 0x0e, 0xf2, 0xd5, 0x7c, 0xfe, 0x52, 0x5b, 0xa3, 0x2f, 0x05, 0x1e, + 0xc0, 0xc9, 0x77, 0x38, 0xb6, 0x5d, 0xbb, 0xdb, 0x21, 0x0d, 0x62, 0xba, 0xe3, 0xfa, 0x3f, 0xcc, + 0xb4, 0x3b, 0x1c, 0x09, 0x0d, 0xcf, 0x70, 0x87, 0x23, 0x29, 0x79, 0xf8, 0x0e, 0x47, 0x82, 0xe3, + 0x3c, 0xee, 0x70, 0x24, 0x54, 0x1c, 0xf4, 0xf7, 0x96, 0xd9, 0x9e, 0xca, 0x9c, 0xcb, 0x44, 0xe0, + 0x55, 0x98, 0x3e, 0xe4, 0x6a, 0xde, 0x39, 0xf2, 0x48, 0x78, 0xd4, 0x98, 0xbf, 0x71, 0xb2, 0x1d, + 0x81, 0xb1, 0x4e, 0x83, 0x5e, 0x87, 0xc5, 0xb7, 0x5c, 0xff, 0xc0, 0x76, 0x8d, 0x76, 0xb5, 0xdd, + 0xb1, 0x02, 0xf5, 0x4c, 0x64, 0x31, 0xda, 0x0b, 0x79, 0x23, 0x49, 0x80, 0x7b, 0x79, 0xca, 0xdf, + 0xc9, 0xc3, 0xc5, 0xbe, 0x43, 0x24, 0x9d, 0x07, 0x89, 0x55, 0x20, 0xfb, 0xa0, 0x15, 0xc8, 0xa5, + 0xaf, 0xc0, 0xc0, 0xbf, 0xf7, 0xcc, 0xbf, 0xfb, 0xbf, 0xf7, 0x2c, 0x3c, 0x80, 0x3f, 0x9c, 0x48, + 0xe1, 0x0f, 0x27, 0xcf, 0xc4, 0x1f, 0x16, 0xc7, 0xef, 0x0f, 0x6b, 0x57, 0xde, 0xf9, 0xf1, 0xa5, + 0xc7, 0x7e, 0xf0, 0xe3, 0x4b, 0x8f, 0xfd, 0xf0, 0xc7, 0x97, 0x1e, 0xfb, 0xd2, 0xc9, 0xa5, 0xcc, + 0x3b, 0x27, 0x97, 0x32, 0x3f, 0x38, 0xb9, 0x94, 0xf9, 0xe1, 0xc9, 0xa5, 0xcc, 0xbf, 0x9c, 0x5c, + 0xca, 0x7c, 0xf9, 0x5f, 0x2f, 0x3d, 0xf6, 0xd9, 0xec, 0xe1, 0xd5, 0xff, 0x0d, 0x00, 0x00, 0xff, + 0xff, 0xf7, 0x2c, 0xe3, 0x69, 0x10, 0x7d, 0x00, 0x00, } func (m *AddonSpec) Marshal() (dAtA []byte, err error) { @@ -5037,6 +5066,29 @@ func (m *ClusterGroupAPIResourceItemsList) MarshalToSizedBuffer(dAtA []byte) (in return len(dAtA) - i, nil } +func (m *ClusterGroupAPIResourceOptions) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ClusterGroupAPIResourceOptions) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ClusterGroupAPIResourceOptions) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + func (m *ClusterList) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -9930,6 +9982,15 @@ func (m *ClusterGroupAPIResourceItemsList) Size() (n int) { return n } +func (m *ClusterGroupAPIResourceOptions) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + func (m *ClusterList) Size() (n int) { if m == nil { return 0 @@ -11916,6 +11977,15 @@ func (this *ClusterGroupAPIResourceItemsList) String() string { }, "") return s } +func (this *ClusterGroupAPIResourceOptions) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ClusterGroupAPIResourceOptions{`, + `}`, + }, "") + return s +} func (this *ClusterList) String() string { if this == nil { return "nil" @@ -18262,6 +18332,59 @@ func (m *ClusterGroupAPIResourceItemsList) Unmarshal(dAtA []byte) error { } return nil } +func (m *ClusterGroupAPIResourceOptions) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ClusterGroupAPIResourceOptions: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ClusterGroupAPIResourceOptions: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} func (m *ClusterList) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 diff --git a/api/platform/v1/generated.proto b/api/platform/v1/generated.proto index f5e3fdb61..d3c008532 100644 --- a/api/platform/v1/generated.proto +++ b/api/platform/v1/generated.proto @@ -457,6 +457,10 @@ message ClusterGroupAPIResourceItemsList { repeated ClusterGroupAPIResourceItems items = 2; } +// ClusterGroupAPIResourceOptions is the query options. +message ClusterGroupAPIResourceOptions { +} + // ClusterList is the whole list of all clusters which owned by a tenant. message ClusterList { // +optional diff --git a/api/platform/v1/register.go b/api/platform/v1/register.go index 34d151eeb..07f97396a 100644 --- a/api/platform/v1/register.go +++ b/api/platform/v1/register.go @@ -109,6 +109,7 @@ func addKnownTypes(scheme *runtime.Scheme) error { &ClusterGroupAPIResourceItems{}, &ClusterGroupAPIResourceItemsList{}, + &ClusterGroupAPIResourceOptions{}, ) metav1.AddToGroupVersion(scheme, SchemeGroupVersion) return nil diff --git a/api/platform/v1/types.go b/api/platform/v1/types.go index 43b758f48..d2ac6634a 100644 --- a/api/platform/v1/types.go +++ b/api/platform/v1/types.go @@ -1780,3 +1780,10 @@ type ClusterGroupAPIResourceItem struct { // categories is a list of the grouped resources this resource belongs to (e.g. 'all') Categories []string `protobuf:"bytes,9,rep,name=categories"` } + +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// ClusterGroupAPIResourceOptions is the query options. +type ClusterGroupAPIResourceOptions struct { + metav1.TypeMeta `json:",inline"` +} diff --git a/api/platform/v1/types_swagger_doc_generated.go b/api/platform/v1/types_swagger_doc_generated.go index 7805f2859..3adc41cbe 100644 --- a/api/platform/v1/types_swagger_doc_generated.go +++ b/api/platform/v1/types_swagger_doc_generated.go @@ -271,6 +271,14 @@ func (ClusterGroupAPIResourceItemsList) SwaggerDoc() map[string]string { return map_ClusterGroupAPIResourceItemsList } +var map_ClusterGroupAPIResourceOptions = map[string]string{ + "": "ClusterGroupAPIResourceOptions is the query options.", +} + +func (ClusterGroupAPIResourceOptions) SwaggerDoc() map[string]string { + return map_ClusterGroupAPIResourceOptions +} + var map_ClusterList = map[string]string{ "": "ClusterList is the whole list of all clusters which owned by a tenant.", "items": "List of clusters", diff --git a/api/platform/v1/zz_generated.conversion.go b/api/platform/v1/zz_generated.conversion.go index 9b900ea67..61088df67 100644 --- a/api/platform/v1/zz_generated.conversion.go +++ b/api/platform/v1/zz_generated.conversion.go @@ -320,6 +320,16 @@ func RegisterConversions(s *runtime.Scheme) error { }); err != nil { return err } + if err := s.AddGeneratedConversionFunc((*ClusterGroupAPIResourceOptions)(nil), (*platform.ClusterGroupAPIResourceOptions)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1_ClusterGroupAPIResourceOptions_To_platform_ClusterGroupAPIResourceOptions(a.(*ClusterGroupAPIResourceOptions), b.(*platform.ClusterGroupAPIResourceOptions), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*platform.ClusterGroupAPIResourceOptions)(nil), (*ClusterGroupAPIResourceOptions)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_platform_ClusterGroupAPIResourceOptions_To_v1_ClusterGroupAPIResourceOptions(a.(*platform.ClusterGroupAPIResourceOptions), b.(*ClusterGroupAPIResourceOptions), scope) + }); err != nil { + return err + } if err := s.AddGeneratedConversionFunc((*ClusterList)(nil), (*platform.ClusterList)(nil), func(a, b interface{}, scope conversion.Scope) error { return Convert_v1_ClusterList_To_platform_ClusterList(a.(*ClusterList), b.(*platform.ClusterList), scope) }); err != nil { @@ -1852,6 +1862,24 @@ func Convert_platform_ClusterGroupAPIResourceItemsList_To_v1_ClusterGroupAPIReso return autoConvert_platform_ClusterGroupAPIResourceItemsList_To_v1_ClusterGroupAPIResourceItemsList(in, out, s) } +func autoConvert_v1_ClusterGroupAPIResourceOptions_To_platform_ClusterGroupAPIResourceOptions(in *ClusterGroupAPIResourceOptions, out *platform.ClusterGroupAPIResourceOptions, s conversion.Scope) error { + return nil +} + +// Convert_v1_ClusterGroupAPIResourceOptions_To_platform_ClusterGroupAPIResourceOptions is an autogenerated conversion function. +func Convert_v1_ClusterGroupAPIResourceOptions_To_platform_ClusterGroupAPIResourceOptions(in *ClusterGroupAPIResourceOptions, out *platform.ClusterGroupAPIResourceOptions, s conversion.Scope) error { + return autoConvert_v1_ClusterGroupAPIResourceOptions_To_platform_ClusterGroupAPIResourceOptions(in, out, s) +} + +func autoConvert_platform_ClusterGroupAPIResourceOptions_To_v1_ClusterGroupAPIResourceOptions(in *platform.ClusterGroupAPIResourceOptions, out *ClusterGroupAPIResourceOptions, s conversion.Scope) error { + return nil +} + +// Convert_platform_ClusterGroupAPIResourceOptions_To_v1_ClusterGroupAPIResourceOptions is an autogenerated conversion function. +func Convert_platform_ClusterGroupAPIResourceOptions_To_v1_ClusterGroupAPIResourceOptions(in *platform.ClusterGroupAPIResourceOptions, out *ClusterGroupAPIResourceOptions, s conversion.Scope) error { + return autoConvert_platform_ClusterGroupAPIResourceOptions_To_v1_ClusterGroupAPIResourceOptions(in, out, s) +} + func autoConvert_v1_ClusterList_To_platform_ClusterList(in *ClusterList, out *platform.ClusterList, s conversion.Scope) error { out.ListMeta = in.ListMeta if in.Items != nil { diff --git a/api/platform/v1/zz_generated.deepcopy.go b/api/platform/v1/zz_generated.deepcopy.go index b2bcff43a..7ad76261d 100644 --- a/api/platform/v1/zz_generated.deepcopy.go +++ b/api/platform/v1/zz_generated.deepcopy.go @@ -835,6 +835,31 @@ func (in *ClusterGroupAPIResourceItemsList) DeepCopyObject() runtime.Object { return nil } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ClusterGroupAPIResourceOptions) DeepCopyInto(out *ClusterGroupAPIResourceOptions) { + *out = *in + out.TypeMeta = in.TypeMeta + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ClusterGroupAPIResourceOptions. +func (in *ClusterGroupAPIResourceOptions) DeepCopy() *ClusterGroupAPIResourceOptions { + if in == nil { + return nil + } + out := new(ClusterGroupAPIResourceOptions) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *ClusterGroupAPIResourceOptions) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *ClusterList) DeepCopyInto(out *ClusterList) { *out = *in diff --git a/api/platform/zz_generated.deepcopy.go b/api/platform/zz_generated.deepcopy.go index 6d10a30fe..1d716a0fe 100644 --- a/api/platform/zz_generated.deepcopy.go +++ b/api/platform/zz_generated.deepcopy.go @@ -834,6 +834,31 @@ func (in *ClusterGroupAPIResourceItemsList) DeepCopyObject() runtime.Object { return nil } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ClusterGroupAPIResourceOptions) DeepCopyInto(out *ClusterGroupAPIResourceOptions) { + *out = *in + out.TypeMeta = in.TypeMeta + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ClusterGroupAPIResourceOptions. +func (in *ClusterGroupAPIResourceOptions) DeepCopy() *ClusterGroupAPIResourceOptions { + if in == nil { + return nil + } + out := new(ClusterGroupAPIResourceOptions) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *ClusterGroupAPIResourceOptions) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *ClusterList) DeepCopyInto(out *ClusterList) { *out = *in diff --git a/pkg/platform/registry/cluster/storage/api_resources.go b/pkg/platform/registry/cluster/storage/api_resources.go index 64e4dc548..5cbf92302 100644 --- a/pkg/platform/registry/cluster/storage/api_resources.go +++ b/pkg/platform/registry/cluster/storage/api_resources.go @@ -43,6 +43,10 @@ func (r *APIResourcesREST) New() runtime.Object { return &platform.ClusterGroupAPIResourceItems{} } +func (r *APIResourcesREST) NewGetOptions() (runtime.Object, bool, string) { + return &platform.ClusterGroupAPIResourceOptions{}, false, "" +} + // Get finds a resource in the storage by name and returns it. func (r *APIResourcesREST) Get(ctx context.Context, clusterName string, options runtime.Object) (runtime.Object, error) { clusterObject, err := r.store.Get(ctx, clusterName, &metav1.GetOptions{}) From 7a6812a069aeec7dfd2a691b0cfbd7409e692e43 Mon Sep 17 00:00:00 2001 From: Lis Date: Thu, 2 Sep 2021 14:54:25 +0800 Subject: [PATCH 34/62] fix(platform): gpu support containerd (#1533) --- build/docker/tools/provider-res/Dockerfile | 1 + build/docker/tools/provider-res/Makefile | 2 ++ .../tke-platform-api/tke-platform-api.yaml | 5 ----- .../tke-platform-controller.yaml | 5 ----- pkg/platform/provider/baremetal/cluster/create.go | 1 + .../baremetal/conf/containerd/config.toml | 15 +++++++++------ .../provider/baremetal/constants/constants.go | 2 +- pkg/platform/provider/baremetal/images/images.go | 2 +- .../manifests/gpu-manager/gpu-manager.yaml | 6 +++++- 9 files changed, 20 insertions(+), 19 deletions(-) diff --git a/build/docker/tools/provider-res/Dockerfile b/build/docker/tools/provider-res/Dockerfile index dd3d54415..59291925d 100644 --- a/build/docker/tools/provider-res/Dockerfile +++ b/build/docker/tools/provider-res/Dockerfile @@ -43,5 +43,6 @@ COPY linux-amd64/NVIDIA-*.tar.gz res/linux-amd64/ COPY linux-amd64/nvidia-container-*.tar.gz res/linux-amd64/ COPY containerd/* res/containerd/ +COPY gpu-manager/* res/gpu-manager/ ENTRYPOINT ["sh"] diff --git a/build/docker/tools/provider-res/Makefile b/build/docker/tools/provider-res/Makefile index c71562a2b..4061db2b0 100644 --- a/build/docker/tools/provider-res/Makefile +++ b/build/docker/tools/provider-res/Makefile @@ -35,6 +35,8 @@ include $(ROOT_DIR)/build/lib/docker-buildx.mk per.build: download @cp "$(ROOT_DIR)/build/docker/tools/$(IMAGE)/Dockerfile" "$(WORK_DIR)/Dockerfile" @cp -r "$(ROOT_DIR)/pkg/platform/provider/baremetal/conf/containerd" "$(WORK_DIR)/containerd" + @cp -r "$(ROOT_DIR)/pkg/platform/provider/baremetal/manifests/gpu-manager" "$(WORK_DIR)/gpu-mana +ger" .PHONY: download download: diff --git a/cmd/tke-installer/app/installer/manifests/tke-platform-api/tke-platform-api.yaml b/cmd/tke-installer/app/installer/manifests/tke-platform-api/tke-platform-api.yaml index 66d91498c..e694cadbb 100644 --- a/cmd/tke-installer/app/installer/manifests/tke-platform-api/tke-platform-api.yaml +++ b/cmd/tke-installer/app/installer/manifests/tke-platform-api/tke-platform-api.yaml @@ -68,8 +68,6 @@ spec: mountPath: /app/provider/baremetal/conf/kubeadm/ - name: gpu-manifests-volume mountPath: /app/provider/baremetal/manifests/gpu/ - - name: gpu-manager-manifests-volume - mountPath: /app/provider/baremetal/manifests/gpu-manager/ - name: csi-operator-manifests-volume mountPath: /app/provider/baremetal/manifests/csi-operator/ - name: keepalived-manifests-volume @@ -125,9 +123,6 @@ spec: - name: gpu-manifests-volume configMap: name: gpu-manifests - - name: gpu-manager-manifests-volume - configMap: - name: gpu-manager-manifests - name: csi-operator-manifests-volume configMap: name: csi-operator-manifests diff --git a/cmd/tke-installer/app/installer/manifests/tke-platform-controller/tke-platform-controller.yaml b/cmd/tke-installer/app/installer/manifests/tke-platform-controller/tke-platform-controller.yaml index 29da4a242..36c9a4642 100644 --- a/cmd/tke-installer/app/installer/manifests/tke-platform-controller/tke-platform-controller.yaml +++ b/cmd/tke-installer/app/installer/manifests/tke-platform-controller/tke-platform-controller.yaml @@ -58,8 +58,6 @@ spec: mountPath: /app/provider/baremetal/conf/kubeadm/ - name: gpu-manifests-volume mountPath: /app/provider/baremetal/manifests/gpu/ - - name: gpu-manager-manifests-volume - mountPath: /app/provider/baremetal/manifests/gpu-manager/ - name: keepalived-manifests-volume mountPath: /app/provider/baremetal/manifests/keepalived/ - name: metrics-server-manifests-volume @@ -106,9 +104,6 @@ spec: - name: gpu-manifests-volume configMap: name: gpu-manifests - - name: gpu-manager-manifests-volume - configMap: - name: gpu-manager-manifests - name: keepalived-manifests-volume configMap: name: keepalived-manifests diff --git a/pkg/platform/provider/baremetal/cluster/create.go b/pkg/platform/provider/baremetal/cluster/create.go index df9b81e16..6658df836 100644 --- a/pkg/platform/provider/baremetal/cluster/create.go +++ b/pkg/platform/provider/baremetal/cluster/create.go @@ -1316,6 +1316,7 @@ func (p *Provider) EnsureGPUManager(ctx context.Context, c *v1.Cluster) error { "BusyboxImage": images.Get().Busybox.FullName(), "GPUQuotaAdmissionImage": images.Get().GPUQuotaAdmission.FullName(), "GPUQuotaAdmissionHost": c.Annotations[constants.GPUQuotaAdmissionIPAnnotaion], + "ContainerRuntime": c.Spec.Features.ContainerRuntime, } err = apiclient.CreateResourceWithFile(ctx, client, constants.GPUManagerManifest, option) diff --git a/pkg/platform/provider/baremetal/conf/containerd/config.toml b/pkg/platform/provider/baremetal/conf/containerd/config.toml index f99353fae..b86e733a3 100644 --- a/pkg/platform/provider/baremetal/conf/containerd/config.toml +++ b/pkg/platform/provider/baremetal/conf/containerd/config.toml @@ -16,14 +16,17 @@ state = "/run/containerd" bin_dir = "/opt/cni/bin" conf_dir = "/etc/cni/net.d" [plugins."io.containerd.grpc.v1.cri".containerd] - {{ if .IsGPU}} - default_runtime_name=nvidia - [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.nvidia] - [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.nvidia.options] - Runtime="/usr/bin/nvidia-container-runtime" - {{else}} default_runtime_name="runc" + {{ if .IsGPU}} + [plugins."io.containerd.grpc.v1.cri".containerd.runtimes] + [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc] + runtime_type = "io.containerd.runtime.v1.linux" {{end}} + {{ if .IsGPU}} + [plugins."io.containerd.runtime.v1.linux"] + shim = "containerd-shim" + runtime = "nvidia-container-runtime" + {{end}} [plugins."io.containerd.grpc.v1.cri".registry] [plugins."io.containerd.grpc.v1.cri".registry.configs] {{range .InsecureRegistries}} diff --git a/pkg/platform/provider/baremetal/constants/constants.go b/pkg/platform/provider/baremetal/constants/constants.go index 7f531cbb1..e066429ad 100644 --- a/pkg/platform/provider/baremetal/constants/constants.go +++ b/pkg/platform/provider/baremetal/constants/constants.go @@ -115,7 +115,7 @@ const ( AuditPolicyConfigFile = ConfDir + AuditPolicyConfigName OIDCConfigFile = ConfDir + OIDCCACertName ManifestsDir = ProviderDir + "manifests/" - GPUManagerManifest = ManifestsDir + "gpu-manager/gpu-manager.yaml" + GPUManagerManifest = SrcDir + "gpu-manager/gpu-manager.yaml" CSIOperatorManifest = ManifestsDir + "csi-operator/csi-operator.yaml" MetricsServerManifest = ManifestsDir + "metrics-server/metrics-server.yaml" CiliumManifest = ManifestsDir + "cilium/*.yaml" diff --git a/pkg/platform/provider/baremetal/images/images.go b/pkg/platform/provider/baremetal/images/images.go index f383b28ff..9f51086f5 100644 --- a/pkg/platform/provider/baremetal/images/images.go +++ b/pkg/platform/provider/baremetal/images/images.go @@ -65,7 +65,7 @@ var components = Components{ NvidiaDevicePlugin: containerregistry.Image{Name: "nvidia-device-plugin", Tag: "1.0.0-beta4"}, Keepalived: containerregistry.Image{Name: "keepalived", Tag: "2.0.16-r0"}, - GPUManager: containerregistry.Image{Name: "gpu-manager", Tag: "v1.0.6"}, + GPUManager: containerregistry.Image{Name: "gpu-manager", Tag: "v1.1.5"}, Busybox: containerregistry.Image{Name: "busybox", Tag: "1.31.1"}, GPUQuotaAdmission: containerregistry.Image{Name: "gpu-quota-admission", Tag: "v1.0.0"}, diff --git a/pkg/platform/provider/baremetal/manifests/gpu-manager/gpu-manager.yaml b/pkg/platform/provider/baremetal/manifests/gpu-manager/gpu-manager.yaml index 06d3549e3..7b93cb5f7 100644 --- a/pkg/platform/provider/baremetal/manifests/gpu-manager/gpu-manager.yaml +++ b/pkg/platform/provider/baremetal/manifests/gpu-manager/gpu-manager.yaml @@ -110,7 +110,11 @@ spec: - name: LOG_LEVEL value: "3" - name: EXTRA_FLAGS - value: "--incluster-mode=true --logtostderr" + {{ if eq .ContainerRuntime "docker" }} + value: "--logtostderr" + {{ else }} + value: "--logtostderr --container-runtime-endpoint /var/run/containerd/containerd.sock" + {{ end }} - name: NODE_NAME valueFrom: fieldRef: From 9f9354ff46f63320cf30dcbad396b77c9ae55334 Mon Sep 17 00:00:00 2001 From: Lis Date: Thu, 2 Sep 2021 16:32:12 +0800 Subject: [PATCH 35/62] fix(platform): remove cilium configmap (#1529) --- build/docker/tools/provider-res/Dockerfile | 2 ++ build/docker/tools/provider-res/Makefile | 4 ++-- .../manifests/tke-platform-api/tke-platform-api.yaml | 5 ----- .../tke-platform-controller/tke-platform-controller.yaml | 5 ----- pkg/platform/provider/baremetal/constants/constants.go | 2 +- 5 files changed, 5 insertions(+), 13 deletions(-) diff --git a/build/docker/tools/provider-res/Dockerfile b/build/docker/tools/provider-res/Dockerfile index 59291925d..6c0dd4281 100644 --- a/build/docker/tools/provider-res/Dockerfile +++ b/build/docker/tools/provider-res/Dockerfile @@ -45,4 +45,6 @@ COPY linux-amd64/nvidia-container-*.tar.gz res/linux-amd64/ COPY containerd/* res/containerd/ COPY gpu-manager/* res/gpu-manager/ +COPY cilium* res/cilium/ + ENTRYPOINT ["sh"] diff --git a/build/docker/tools/provider-res/Makefile b/build/docker/tools/provider-res/Makefile index 4061db2b0..40fc65c3f 100644 --- a/build/docker/tools/provider-res/Makefile +++ b/build/docker/tools/provider-res/Makefile @@ -35,8 +35,8 @@ include $(ROOT_DIR)/build/lib/docker-buildx.mk per.build: download @cp "$(ROOT_DIR)/build/docker/tools/$(IMAGE)/Dockerfile" "$(WORK_DIR)/Dockerfile" @cp -r "$(ROOT_DIR)/pkg/platform/provider/baremetal/conf/containerd" "$(WORK_DIR)/containerd" - @cp -r "$(ROOT_DIR)/pkg/platform/provider/baremetal/manifests/gpu-manager" "$(WORK_DIR)/gpu-mana -ger" + @cp -r "$(ROOT_DIR)/pkg/platform/provider/baremetal/manifests/cilium" "$(WORK_DIR)/cilium" + @cp -r "$(ROOT_DIR)/pkg/platform/provider/baremetal/manifests/gpu-manager" "$(WORK_DIR)/gpu-manager" .PHONY: download download: diff --git a/cmd/tke-installer/app/installer/manifests/tke-platform-api/tke-platform-api.yaml b/cmd/tke-installer/app/installer/manifests/tke-platform-api/tke-platform-api.yaml index e694cadbb..2dbe097d0 100644 --- a/cmd/tke-installer/app/installer/manifests/tke-platform-api/tke-platform-api.yaml +++ b/cmd/tke-installer/app/installer/manifests/tke-platform-api/tke-platform-api.yaml @@ -74,8 +74,6 @@ spec: mountPath: /app/provider/baremetal/manifests/keepalived/ - name: metrics-server-manifests-volume mountPath: /app/provider/baremetal/manifests/metrics-server/ - - name: cilium-manifests-volume - mountPath: /app/provider/baremetal/manifests/cilium/ ports: - containerPort: 9443 readinessProbe: @@ -132,9 +130,6 @@ spec: - name: metrics-server-manifests-volume configMap: name: metrics-server-manifests - - name: cilium-manifests-volume - configMap: - name: cilium-manifests --- kind: ConfigMap apiVersion: v1 diff --git a/cmd/tke-installer/app/installer/manifests/tke-platform-controller/tke-platform-controller.yaml b/cmd/tke-installer/app/installer/manifests/tke-platform-controller/tke-platform-controller.yaml index 36c9a4642..56bd6836e 100644 --- a/cmd/tke-installer/app/installer/manifests/tke-platform-controller/tke-platform-controller.yaml +++ b/cmd/tke-installer/app/installer/manifests/tke-platform-controller/tke-platform-controller.yaml @@ -62,8 +62,6 @@ spec: mountPath: /app/provider/baremetal/manifests/keepalived/ - name: metrics-server-manifests-volume mountPath: /app/provider/baremetal/manifests/metrics-server/ - - name: cilium-manifests-volume - mountPath: /app/provider/baremetal/manifests/cilium/ ports: - containerPort: 9445 livenessProbe: @@ -110,9 +108,6 @@ spec: - name: metrics-server-manifests-volume configMap: name: metrics-server-manifests - - name: cilium-manifests-volume - configMap: - name: cilium-manifests --- kind: ConfigMap apiVersion: v1 diff --git a/pkg/platform/provider/baremetal/constants/constants.go b/pkg/platform/provider/baremetal/constants/constants.go index e066429ad..d01220a57 100644 --- a/pkg/platform/provider/baremetal/constants/constants.go +++ b/pkg/platform/provider/baremetal/constants/constants.go @@ -118,7 +118,7 @@ const ( GPUManagerManifest = SrcDir + "gpu-manager/gpu-manager.yaml" CSIOperatorManifest = ManifestsDir + "csi-operator/csi-operator.yaml" MetricsServerManifest = ManifestsDir + "metrics-server/metrics-server.yaml" - CiliumManifest = ManifestsDir + "cilium/*.yaml" + CiliumManifest = SrcDir + "cilium/*.yaml" KUBERNETES = 1 DNSIPIndex = 10 From 305c0809412297c29395349c90645beccdf28572 Mon Sep 17 00:00:00 2001 From: Lis Date: Fri, 3 Sep 2021 18:17:28 +0800 Subject: [PATCH 36/62] feat(platform): support containerd on installer (#1530) --- build/docker/tools/tke-installer/Dockerfile | 8 +- .../tools/tke-installer/dockerd-entrypoint.sh | 208 ++++++++++++++++++ build/docker/tools/tke-installer/install.sh | 80 ++++--- build/docker/tools/tke-installer/release.sh | 14 +- build/docker/tools/tke-installer/run.sh | 52 +++++ cmd/tke-installer/app/installer/installer.go | 42 +--- pkg/util/docker/docker.go | 2 +- 7 files changed, 335 insertions(+), 71 deletions(-) create mode 100755 build/docker/tools/tke-installer/dockerd-entrypoint.sh create mode 100755 build/docker/tools/tke-installer/run.sh diff --git a/build/docker/tools/tke-installer/Dockerfile b/build/docker/tools/tke-installer/Dockerfile index 86a1defaa..bbf9aa627 100644 --- a/build/docker/tools/tke-installer/Dockerfile +++ b/build/docker/tools/tke-installer/Dockerfile @@ -14,7 +14,7 @@ # WARRANTIES OF ANY KIND, either express or implied. See the License for the # specific language governing permissions and limitations under the License. -FROM alpine:3.10 +FROM docker:20.10.8-dind RUN echo "hosts: files dns" >> /etc/nsswitch.conf @@ -22,6 +22,7 @@ WORKDIR /app ENV PATH="/app/bin:$PATH" ENV DOCKER_CLI_EXPERIMENTAL=enabled +ARG ENV_ARCH RUN apk add --no-cache \ bash \ @@ -32,9 +33,12 @@ RUN apk add --no-cache \ ansible RUN apk --update-cache --repository http://dl-3.alpinelinux.org/alpine/edge/testing/ --allow-untrusted add lrzsz +RUN wget -O nerdctl-0.11.0-linux.tar.gz https://github.com/containerd/nerdctl/releases/download/v0.11.0/nerdctl-0.11.0-linux-"$ENV_ARCH".tar.gz \ + && tar -zvxf nerdctl-0.11.0-linux.tar.gz -C /usr/local/bin/ \ + && rm -rf nerdctl-0.11.0-linux.tar.gz ADD . /app RUN ln -s /app/.docker /root/.docker -ENTRYPOINT ["/app/bin/tke-installer"] +ENTRYPOINT ["/bin/sh", "-c" , "/app/run.sh"] diff --git a/build/docker/tools/tke-installer/dockerd-entrypoint.sh b/build/docker/tools/tke-installer/dockerd-entrypoint.sh new file mode 100755 index 000000000..4749a863f --- /dev/null +++ b/build/docker/tools/tke-installer/dockerd-entrypoint.sh @@ -0,0 +1,208 @@ +#!/bin/sh + +# Tencent is pleased to support the open source community by making TKEStack +# available. +# +# Copyright (C) 2012-2021 Tencent. All Rights Reserved. +# +# 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 +# +# https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the +# specific language governing permissions and limitations under the License. + +set -eu + +_tls_ensure_private() { + local f="$1"; shift + [ -s "$f" ] || openssl genrsa -out "$f" 4096 +} +_tls_san() { + { + ip -oneline address | awk '{ gsub(/\/.+$/, "", $4); print "IP:" $4 }' + { + cat /etc/hostname + echo 'docker' + echo 'localhost' + hostname -f + hostname -s + } | sed 's/^/DNS:/' + [ -z "${DOCKER_TLS_SAN:-}" ] || echo "$DOCKER_TLS_SAN" + } | sort -u | xargs printf '%s,' | sed "s/,\$//" +} +_tls_generate_certs() { + local dir="$1"; shift + + # if ca/key.pem || !ca/cert.pem, generate CA public if necessary + # if ca/key.pem, generate server public + # if ca/key.pem, generate client public + # (regenerating public certs every startup to account for SAN/IP changes and/or expiration) + + # https://github.com/FiloSottile/mkcert/issues/174 + local certValidDays='825' + + if [ -s "$dir/ca/key.pem" ] || [ ! -s "$dir/ca/cert.pem" ]; then + # if we either have a CA private key or do *not* have a CA public key, then we should create/manage the CA + mkdir -p "$dir/ca" + _tls_ensure_private "$dir/ca/key.pem" + openssl req -new -key "$dir/ca/key.pem" \ + -out "$dir/ca/cert.pem" \ + -subj '/CN=docker:dind CA' -x509 -days "$certValidDays" + fi + + if [ -s "$dir/ca/key.pem" ]; then + # if we have a CA private key, we should create/manage a server key + mkdir -p "$dir/server" + _tls_ensure_private "$dir/server/key.pem" + openssl req -new -key "$dir/server/key.pem" \ + -out "$dir/server/csr.pem" \ + -subj '/CN=docker:dind server' + cat > "$dir/server/openssl.cnf" <<-EOF + [ x509_exts ] + subjectAltName = $(_tls_san) + EOF + openssl x509 -req \ + -in "$dir/server/csr.pem" \ + -CA "$dir/ca/cert.pem" \ + -CAkey "$dir/ca/key.pem" \ + -CAcreateserial \ + -out "$dir/server/cert.pem" \ + -days "$certValidDays" \ + -extfile "$dir/server/openssl.cnf" \ + -extensions x509_exts + cp "$dir/ca/cert.pem" "$dir/server/ca.pem" + openssl verify -CAfile "$dir/server/ca.pem" "$dir/server/cert.pem" + fi + + if [ -s "$dir/ca/key.pem" ]; then + # if we have a CA private key, we should create/manage a client key + mkdir -p "$dir/client" + _tls_ensure_private "$dir/client/key.pem" + chmod 0644 "$dir/client/key.pem" # openssl defaults to 0600 for the private key, but this one needs to be shared with arbitrary client contexts + openssl req -new \ + -key "$dir/client/key.pem" \ + -out "$dir/client/csr.pem" \ + -subj '/CN=docker:dind client' + cat > "$dir/client/openssl.cnf" <<-'EOF' + [ x509_exts ] + extendedKeyUsage = clientAuth + EOF + openssl x509 -req \ + -in "$dir/client/csr.pem" \ + -CA "$dir/ca/cert.pem" \ + -CAkey "$dir/ca/key.pem" \ + -CAcreateserial \ + -out "$dir/client/cert.pem" \ + -days "$certValidDays" \ + -extfile "$dir/client/openssl.cnf" \ + -extensions x509_exts + cp "$dir/ca/cert.pem" "$dir/client/ca.pem" + openssl verify -CAfile "$dir/client/ca.pem" "$dir/client/cert.pem" + fi +} + +# no arguments passed +# or first arg is `-f` or `--some-option` +if [ "$#" -eq 0 ] || [ "${1#-}" != "$1" ]; then + # set "dockerSocket" to the default "--host" *unix socket* value (for both standard or rootless) + uid="$(id -u)" + if [ "$uid" = '0' ]; then + dockerSocket='unix:///var/run/docker.sock' + else + # if we're not root, we must be trying to run rootless + : "${XDG_RUNTIME_DIR:=/run/user/$uid}" + dockerSocket="unix://$XDG_RUNTIME_DIR/docker.sock" + fi + case "${DOCKER_HOST:-}" in + unix://*) + dockerSocket="$DOCKER_HOST" + ;; + esac + + # add our default arguments + if [ -n "${DOCKER_TLS_CERTDIR:-}" ] \ + && _tls_generate_certs "$DOCKER_TLS_CERTDIR" \ + && [ -s "$DOCKER_TLS_CERTDIR/server/ca.pem" ] \ + && [ -s "$DOCKER_TLS_CERTDIR/server/cert.pem" ] \ + && [ -s "$DOCKER_TLS_CERTDIR/server/key.pem" ] \ + ; then + # generate certs and use TLS if requested/possible (default in 19.03+) + set -- dockerd \ + --host="$dockerSocket" \ + --host=tcp://0.0.0.0:2376 \ + --tlsverify \ + --tlscacert "$DOCKER_TLS_CERTDIR/server/ca.pem" \ + --tlscert "$DOCKER_TLS_CERTDIR/server/cert.pem" \ + --tlskey "$DOCKER_TLS_CERTDIR/server/key.pem" \ + "$@" + DOCKERD_ROOTLESS_ROOTLESSKIT_FLAGS="${DOCKERD_ROOTLESS_ROOTLESSKIT_FLAGS:-} -p 0.0.0.0:2376:2376/tcp" + else + # TLS disabled (-e DOCKER_TLS_CERTDIR='') or missing certs + set -- dockerd \ + --host="$dockerSocket" \ + --host=tcp://0.0.0.0:2375 \ + "$@" + DOCKERD_ROOTLESS_ROOTLESSKIT_FLAGS="${DOCKERD_ROOTLESS_ROOTLESSKIT_FLAGS:-} -p 0.0.0.0:2375:2375/tcp" + fi +fi + +if [ "$1" = 'dockerd' ]; then + # explicitly remove Docker's default PID file to ensure that it can start properly if it was stopped uncleanly (and thus didn't clean up the PID file) + find /run /var/run -iname 'docker*.pid' -delete || : + + if dockerd --version | grep -qF ' 20.10.'; then + # XXX inject "docker-init" (tini) as pid1 to workaround https://github.com/docker-library/docker/issues/318 (zombie container-shim processes) + set -- docker-init -- "$@" + fi + + uid="$(id -u)" + if [ "$uid" != '0' ]; then + # if we're not root, we must be trying to run rootless + if ! command -v rootlesskit > /dev/null; then + echo >&2 "error: attempting to run rootless dockerd but missing 'rootlesskit' (perhaps the 'docker:dind-rootless' image variant is intended?)" + exit 1 + fi + user="$(id -un 2>/dev/null || :)" + if ! grep -qE "^($uid${user:+|$user}):" /etc/subuid || ! grep -qE "^($uid${user:+|$user}):" /etc/subgid; then + echo >&2 "error: attempting to run rootless dockerd but missing necessary entries in /etc/subuid and/or /etc/subgid for $uid" + exit 1 + fi + : "${XDG_RUNTIME_DIR:=/run/user/$uid}" + export XDG_RUNTIME_DIR + if ! mkdir -p "$XDG_RUNTIME_DIR" || [ ! -w "$XDG_RUNTIME_DIR" ] || ! mkdir -p "$HOME/.local/share/docker" || [ ! -w "$HOME/.local/share/docker" ]; then + echo >&2 "error: attempting to run rootless dockerd but need writable HOME ($HOME) and XDG_RUNTIME_DIR ($XDG_RUNTIME_DIR) for user $uid" + exit 1 + fi + if [ -f /proc/sys/kernel/unprivileged_userns_clone ] && unprivClone="$(cat /proc/sys/kernel/unprivileged_userns_clone)" && [ "$unprivClone" != '1' ]; then + echo >&2 "error: attempting to run rootless dockerd but need 'kernel.unprivileged_userns_clone' (/proc/sys/kernel/unprivileged_userns_clone) set to 1" + exit 1 + fi + if [ -f /proc/sys/user/max_user_namespaces ] && maxUserns="$(cat /proc/sys/user/max_user_namespaces)" && [ "$maxUserns" = '0' ]; then + echo >&2 "error: attempting to run rootless dockerd but need 'user.max_user_namespaces' (/proc/sys/user/max_user_namespaces) set to a sufficiently large value" + exit 1 + fi + # TODO overlay support detection? + exec rootlesskit \ + --net="${DOCKERD_ROOTLESS_ROOTLESSKIT_NET:-vpnkit}" \ + --mtu="${DOCKERD_ROOTLESS_ROOTLESSKIT_MTU:-1500}" \ + --disable-host-loopback \ + --port-driver=builtin \ + --copy-up=/etc \ + --copy-up=/run \ + ${DOCKERD_ROOTLESS_ROOTLESSKIT_FLAGS:-} \ + "$@" + elif [ -x '/usr/local/bin/dind' ]; then + # if we have the (mostly defunct now) Docker-in-Docker wrapper script, use it + set -- '/usr/local/bin/dind' "$@" + fi +else + # if it isn't `dockerd` we're trying to run, pass it through `docker-entrypoint.sh` so it gets `DOCKER_HOST` set appropriately too + set -- docker-entrypoint.sh "$@" +fi + +exec "$@" diff --git a/build/docker/tools/tke-installer/install.sh b/build/docker/tools/tke-installer/install.sh index fba3b9044..8e4b8f3fe 100755 --- a/build/docker/tools/tke-installer/install.sh +++ b/build/docker/tools/tke-installer/install.sh @@ -32,16 +32,30 @@ VERSION=latest INSTALL_DIR=/opt/tke-installer DATA_DIR=$INSTALL_DIR/data +REGISTRY_DIR=$INSTALL_DIR/registry +REGISTRY_VERSION=2.7.1 OPTIONS="--name tke-installer -d --privileged --net=host --restart=always -v /etc/hosts:/app/hosts --v /etc/docker:/etc/docker --v /var/run/docker.sock:/var/run/docker.sock -v $DATA_DIR:/app/data +-v /var/run/containerd/containerd.sock:/var/run/containerd/containerd.sock +-v /run/containerd/:/run/containerd/ -v $INSTALL_DIR/conf:/app/conf -v registry-certs:/app/certs -v tke-installer-bin:/app/bin " +RegistryHTTPOptions="--name registry-http -d --net=host --restart=always -p 80:5000 +-e REGISTRY_HTTP_ADDR=0.0.0.0:80 \ +-v $REGISTRY_DIR:/var/lib/registry +" +RegistryHTTPSOptions="--name registry-https -d --net=host --restart=always -p 443:443 +-v $REGISTRY_DIR:/var/lib/registry +-v registry-certs:/certs +-e REGISTRY_HTTP_ADDR=0.0.0.0:443 +-e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/server.crt +-e REGISTRY_HTTP_TLS_KEY=/certs/server.key +" + declare -A archMap=( [x86_64]=amd64 [aarch64]=arm64 @@ -81,50 +95,49 @@ function check::disk() { echo "available disk space($path): $disk_avail GiB" } -function ensure_docker() { - echo "Step.2 check docker status" +function ensure_containerd() { + echo "Step.2 check containerd status" - if ! [ -x "$(command -v docker)" ]; then - echo "command docker not find" - install_docker + if ! [ -x "$(command -v nerdctl)" ]; then + echo "command nerdctl not find" + install_containerd fi - if ! systemctl is-active --quiet docker; then - echo "docker status is not running" - install_docker + if ! systemctl is-active --quiet containerd; then + echo "containerd status is not running" + install_containerd fi } -function install_docker() { - echo "install docker [in process]" +function install_containerd() { + echo "install containerd [in process]" - tar xvaf "res/docker.tgz" -C /usr/bin --strip-components=1 - cp -v res/docker.service /etc/systemd/system - mkdir -p /etc/docker - cp -v res/daemon.json /etc/docker/ + tar xvaf "res/containerd.tar.gz" -C / + tar xvaf "res/nerdctl.tar.gz" -C /usr/local/bin/ systemctl daemon-reload # becuase first start docker may be restart some times - systemctl start docker || : + systemctl start containerd || : maxSecond=60 for i in $(seq 1 $maxSecond); do - if systemctl is-active --quiet docker; then + if systemctl is-active --quiet containerd; then break fi sleep 1 done if ((i == maxSecond)); then - echo "start docker failed, please check docker service." + echo "start containerd failed, please check containerd service." exit 1 fi - echo "install docker [done]" + echo "install containerd [done]" } function load_image() { echo "Step.3 load tke-installer image [in process]" - docker load -i res/tke-installer.tgz + nerdctl load -i res/tke-installer.tar + nerdctl load -i res/registry.tar echo "Step.3 load tke-installer image [done]" } @@ -132,8 +145,11 @@ function load_image() { function clean_old_data() { echo "Step.4 clean old data [in process]" - docker rm -f tke-installer >/dev/null 2>&1 || : - docker volume prune -f >/dev/null 2>&1 || : + nerdctl stop tke-installer >/dev/null 2>&1 && nerdctl rm tke-installer >/dev/null 2>&1 || : + nerdctl stop registry-http >/dev/null 2>&1 && nerdctl rm registry-http >/dev/null 2>&1 || : + nerdctl stop registry-https >/dev/null 2>&1 && nerdctl rm registry-https >/dev/null 2>&1 || : + nerdctl volume rm tke-installer-bin >/dev/null 2>&1 || : + nerdctl volume rm registry-certs >/dev/null 2>&1 || : if [ -d "$DATA_DIR" ]; then rm -f $DATA_DIR/tke.json >/dev/null 2>&1 || : @@ -145,12 +161,21 @@ function clean_old_data() { function start_installer() { echo "Step.5 start tke-installer [in process]" - - docker run $OPTIONS "tkestack/tke-installer-${ARCH}:$VERSION" $@ + mkdir -p $DATA_DIR + mkdir -p $INSTALL_DIR/conf + nerdctl run $OPTIONS "tkestack/tke-installer-${ARCH}:$VERSION" $@ echo "Step.5 start tke-installer [done]" } +function start_registry() { + echo "Step.6 start regisry [in process]" + + mkdir -p $REGISTRY_DIR + nerdctl run $RegistryHTTPOptions "tkestack/registry-${ARCH}:$REGISTRY_VERSION" $@ + nerdctl run $RegistryHTTPSOptions "tkestack/registry-${ARCH}:$REGISTRY_VERSION" $@ + echo "Step.6 start registry [done]" +} function check_installer() { s=10 @@ -169,13 +194,14 @@ function check_installer() { fi done echo "check installer status error" - docker logs tke-installer + nerdctl logs tke-installer exit 1 } preflight -ensure_docker +ensure_containerd load_image clean_old_data start_installer $@ +start_registry $@ check_installer diff --git a/build/docker/tools/tke-installer/release.sh b/build/docker/tools/tke-installer/release.sh index 5196b8dbe..cb7d6c630 100755 --- a/build/docker/tools/tke-installer/release.sh +++ b/build/docker/tools/tke-installer/release.sh @@ -26,6 +26,9 @@ VERSION=${VERSION:-$(git describe --dirty --always --tags | sed 's/-/./g')} PROVIDER_RES_VERSION=v1.20.4-2 K8S_VERSION=${PROVIDER_RES_VERSION%-*} DOCKER_VERSION=19.03.14 +CONTAINERD_VERSION=1.5.4 +NERDCTL_VERSION=0.11.0 +REGISTRY_VERSION=2.7.1 OSS=(linux) ARCHS=(amd64 arm64) OUTPUT_DIR=_output @@ -75,6 +78,8 @@ function prepare::tke_installer() { cp -rv cmd/tke-installer/app/installer/hooks "${DST_DIR}" cp -rv "${SCRIPT_DIR}/certs" "${DST_DIR}" cp -rv "${SCRIPT_DIR}/.docker" "${DST_DIR}" + cp -rv "${SCRIPT_DIR}/run.sh" "${DST_DIR}" + cp -rv "${SCRIPT_DIR}/dockerd-entrypoint.sh" "${DST_DIR}" make web.build.installer cp -rv web/installer/build "${DST_DIR}/assets" @@ -83,7 +88,7 @@ function prepare::tke_installer() { function build::installer_image() { local -r arch="$1" - docker build --platform="${arch}" --pull -t "${REGISTRY_PREFIX}/tke-installer-${arch}:$VERSION" -f "${SCRIPT_DIR}/Dockerfile" "${DST_DIR}" + docker build --platform="${arch}" --build-arg ENV_ARCH="${arch}" --pull -t "${REGISTRY_PREFIX}/tke-installer-${arch}:$VERSION" -f "${SCRIPT_DIR}/Dockerfile" "${DST_DIR}" } function build::installer() { @@ -102,10 +107,15 @@ function build::installer() { "${INSTALLER_DIR}/res/docker.tgz" cp -v pkg/platform/provider/baremetal/conf/docker/docker.service "${INSTALLER_DIR}/res/" cp -v build/docker/tools/tke-installer/daemon.json "${INSTALLER_DIR}/res/" + cp -v "${DST_DIR}/provider/baremetal/res/${target_platform}/containerd-${target_platform}-${CONTAINERD_VERSION}.tar.gz" "${INSTALLER_DIR}/res/containerd.tar.gz" + cp -v "${DST_DIR}/provider/baremetal/res/${target_platform}/nerdctl-${target_platform}-${NERDCTL_VERSION}.tar.gz" "${INSTALLER_DIR}/res/nerdctl.tar.gz" - docker save "${REGISTRY_PREFIX}/tke-installer-${arch}:$VERSION" | gzip -c > "${INSTALLER_DIR}/res/tke-installer.tgz" + docker save "${REGISTRY_PREFIX}/tke-installer-${arch}:$VERSION" -o "${INSTALLER_DIR}/res/tke-installer.tar" + docker pull "${REGISTRY_PREFIX}/registry-${arch}:$REGISTRY_VERSION" + docker save "${REGISTRY_PREFIX}/registry-${arch}:$REGISTRY_VERSION" -o "${INSTALLER_DIR}/res/registry.tar" sed -i "s;VERSION=.*;VERSION=$VERSION;g" "${INSTALLER_DIR}/install.sh" + sed -i "s;REGISTRY_VERSION=.*;REGISTRY_VERSION=$REGISTRY_VERSION;g" "${INSTALLER_DIR}/install.sh" "${INSTALLER_DIR}/build.sh" "${installer}" cp -v "${INSTALLER_DIR}/${installer}" $OUTPUT_DIR diff --git a/build/docker/tools/tke-installer/run.sh b/build/docker/tools/tke-installer/run.sh new file mode 100755 index 000000000..cc25da5ff --- /dev/null +++ b/build/docker/tools/tke-installer/run.sh @@ -0,0 +1,52 @@ +#!/bin/bash + +# Tencent is pleased to support the open source community by making TKEStack +# available. +# +# Copyright (C) 2012-2021 Tencent. All Rights Reserved. +# +# 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 +# +# https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the +# specific language governing permissions and limitations under the License. + +# Start the first process +./dockerd-entrypoint.sh& +status=$? +if [ $status -ne 0 ]; then + echo "Failed to start my_first_process: $status" + exit $status +fi + +# Start the second process +./bin/tke-installer +status=$? +if [ $status -ne 0 ]; then + echo "Failed to start my_second_process: $status" + exit $status +fi + +# Naive check runs checks once a minute to see if either of the processes exited. +# This illustrates part of the heavy lifting you need to do if you want to run +# more than one service in a container. The container exits with an error +# if it detects that either of the processes has exited. +# Otherwise it loops forever, waking up every 60 seconds + +while sleep 60; do + ps aux |grep tke-installer |grep -q -v grep + PROCESS_1_STATUS=$? + ps aux |grep docker-init |grep -q -v grep + PROCESS_2_STATUS=$? + # If the greps above find anything, they exit with 0 status + # If they are not both 0, then something is wrong + if [ $PROCESS_1_STATUS -ne 0 -o $PROCESS_2_STATUS -ne 0 ]; then + echo "One of the processes has already exited." + exit 1 + fi +done diff --git a/cmd/tke-installer/app/installer/installer.go b/cmd/tke-installer/app/installer/installer.go index 288376261..d0a883bac 100644 --- a/cmd/tke-installer/app/installer/installer.go +++ b/cmd/tke-installer/app/installer/installer.go @@ -31,7 +31,6 @@ import ( "os" "os/exec" "path" - goruntime "runtime" "sort" "strings" "time" @@ -1188,9 +1187,6 @@ func (t *TKE) createGlobalCluster(ctx context.Context) error { return err } t.completeWithProvider() - if len(t.Cluster.Spec.Features.ContainerRuntime) == 0 { - t.Cluster.Spec.Features.ContainerRuntime = platformv1.Docker - } if t.Cluster.Spec.ClusterCredentialRef == nil { credential := &platformv1.ClusterCredential{ @@ -1266,18 +1262,13 @@ func (t *TKE) tagImages(ctx context.Context) error { func (t *TKE) setupLocalRegistry(ctx context.Context) error { server := t.Para.Config.Registry.Domain() - err := t.startLocalRegistry() - if err != nil { - return errors.Wrap(err, "start local registry error") - } - // for push image to local registry localHosts := hosts.LocalHosts{Host: server, File: "hosts"} - err = localHosts.Set("127.0.0.1") + err := localHosts.Set("127.0.0.1") if err != nil { return err } - localHosts.File = "/etc/hosts" + localHosts.File = "/app/hosts" err = localHosts.Set("127.0.0.1") if err != nil { return err @@ -1292,33 +1283,6 @@ func (t *TKE) setupLocalRegistry(ctx context.Context) error { return nil } -func (t *TKE) startLocalRegistry() error { - err := t.stopLocalRegistry(context.Background()) - if err != nil { - return err - } - - err = t.docker.ClearLocalManifests() - if err != nil { - return err - } - - registryImage := strings.ReplaceAll(images.Get().Registry.FullName(), ":", fmt.Sprintf("-%s:", goruntime.GOARCH)) - - err = t.docker.RunImage(registryImage, constants.RegistryHTTPOptions, "") - if err != nil { - return err - } - - // for docker manifest create which --insecure is not working - err = t.docker.RunImage(registryImage, constants.RegistryHTTPSOptions, "") - if err != nil { - return err - } - - return nil -} - func (t *TKE) readOrGenerateString(filename string) string { var ( data []byte @@ -2354,7 +2318,7 @@ func (t *TKE) preparePushImagesToTKERegistry(ctx context.Context) error { if err != nil { return err } - localHosts.File = "/etc/hosts" + localHosts.File = "/app/hosts" err = localHosts.Set(t.servers[0]) if err != nil { return err diff --git a/pkg/util/docker/docker.go b/pkg/util/docker/docker.go index 47c5969d3..7ff6f4dbb 100644 --- a/pkg/util/docker/docker.go +++ b/pkg/util/docker/docker.go @@ -232,7 +232,7 @@ func (d *Docker) RemoveImage(image string) error { // RemoveContainers forces to remove one or more running containers. func (d *Docker) RemoveContainers(containers ...string) error { for _, one := range containers { - cmdString := fmt.Sprintf("docker inspect %s >/dev/null 2>&1 && docker rm -f %s || true", one, one) + cmdString := fmt.Sprintf("nerdctl stop %s && nerdctl rm %s || true", one, one) err := d.runCmd(cmdString) if err != nil { return pkgerrors.Wrap(err, "docker rm error") From 9e0a6c986e1bf83cb58f027387fa7b5bf2e177ca Mon Sep 17 00:00:00 2001 From: Lis Date: Tue, 7 Sep 2021 11:34:18 +0800 Subject: [PATCH 37/62] fix(platform): install containerd exclude cni binary and config file (#1543) --- build/docker/tools/tke-installer/install.sh | 3 ++- .../provider/baremetal/phases/containerd/containerd.go | 9 ++------- 2 files changed, 4 insertions(+), 8 deletions(-) diff --git a/build/docker/tools/tke-installer/install.sh b/build/docker/tools/tke-installer/install.sh index 8e4b8f3fe..f985d963c 100755 --- a/build/docker/tools/tke-installer/install.sh +++ b/build/docker/tools/tke-installer/install.sh @@ -111,7 +111,8 @@ function ensure_containerd() { function install_containerd() { echo "install containerd [in process]" - tar xvaf "res/containerd.tar.gz" -C / + # Install containerd exclude cni binaries and cni config file. + tar xvaf "res/containerd.tar.gz" -C / --exclude=etc/cni --exclude=opt tar xvaf "res/nerdctl.tar.gz" -C /usr/local/bin/ systemctl daemon-reload diff --git a/pkg/platform/provider/baremetal/phases/containerd/containerd.go b/pkg/platform/provider/baremetal/phases/containerd/containerd.go index c381146d8..575944fcc 100644 --- a/pkg/platform/provider/baremetal/phases/containerd/containerd.go +++ b/pkg/platform/provider/baremetal/phases/containerd/containerd.go @@ -49,7 +49,8 @@ func Install(s ssh.Interface, option *Option) error { return err } - cmd := "tar xvaf %s -C %s" + // Install containerd exclude cni binaries and cni config file. + cmd := "tar xvaf %s -C %s --exclude=etc/cni --exclude=opt" _, stderr, exit, err := s.Execf(cmd, dstFile, "/") if err != nil { return fmt.Errorf("exec %q failed:exit %d:stderr %s:error %s", cmd, exit, stderr, err) @@ -90,11 +91,5 @@ func Install(s ssh.Interface, option *Option) error { return err } - cmd = "rm -rf /etc/cni/net.d/10-containerd-net.conflist" - _, stderr, exit, err = s.Execf(cmd) - if err != nil { - return fmt.Errorf("exec %q failed:exit %d:stderr %s:error %s", cmd, exit, stderr, err) - } - return nil } From ed99c80a175bfd4a024d9a14fb844eb12bfe39fc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=88=98=E7=A5=9E=E8=A5=BF=E7=BA=A2=E6=9F=BF?= <34213033+TomatoAres@users.noreply.github.com> Date: Tue, 7 Sep 2021 14:36:08 +0800 Subject: [PATCH 38/62] fix(logagent): log-agent error with provider (#1544) Co-authored-by: Cui Shuaijie --- api/logagent/types.go | 8 +-- api/logagent/v1/types.go | 1 + api/logagent/v1/zz_generated.conversion.go | 32 +++++++++ api/platform/types.go | 1 + api/platform/v1/types.go | 1 + api/platform/v1/zz_generated.conversion.go | 31 ++++++++ pkg/logagent/util/cluster.go | 70 ++++++++++++++++--- .../addon/logcollector/controller.go | 5 +- 8 files changed, 131 insertions(+), 18 deletions(-) diff --git a/api/logagent/types.go b/api/logagent/types.go index a5a9aeb70..583a0e451 100644 --- a/api/logagent/types.go +++ b/api/logagent/types.go @@ -48,7 +48,6 @@ const ( AddonPhaseUnknown AddonPhase = "Unknown" ) - // +genclient // +genclient:nonNamespaced // +genclient:skipVerbs=deleteCollection @@ -80,7 +79,6 @@ type LogAgentList struct { Items []LogAgent } - // LogAgentSpec describes the attributes of a Logagent. type LogAgentSpec struct { TenantID string @@ -106,6 +104,7 @@ type LogAgentStatus struct { LastReInitializingTimestamp metav1.Time } +// +k8s:conversion-gen:explicit-from=net/url.Values // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object // LogAgentProxyOptions is the query options to a kube-apiserver proxy call for LogAgent crd object. @@ -116,14 +115,12 @@ type LogAgentProxyOptions struct { Name string `json:"name,omitempty"` } - - // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object // LogFileTree type LogFileTree struct { metav1.TypeMeta `json:",inline"` - Spec LogFileTreeSpec `json:"spec"` + Spec LogFileTreeSpec `json:"spec"` } type LogFileTreeSpec struct { @@ -133,7 +130,6 @@ type LogFileTreeSpec struct { Pod string `json:"pod,omitempty"` } - // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object // LogFileContent diff --git a/api/logagent/v1/types.go b/api/logagent/v1/types.go index 14a499071..5588ef22d 100644 --- a/api/logagent/v1/types.go +++ b/api/logagent/v1/types.go @@ -96,6 +96,7 @@ type LogAgentStatus struct { LastReInitializingTimestamp metav1.Time `json:"lastReInitializingTimestamp" protobuf:"bytes,5,name=lastReInitializingTimestamp"` } +// +k8s:conversion-gen:explicit-from=net/url.Values // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object // LogAgentProxyOptions is the query options to a kube-apiserver proxy call for LogAgent crd object. diff --git a/api/logagent/v1/zz_generated.conversion.go b/api/logagent/v1/zz_generated.conversion.go index 068dc38ca..1c445df7e 100644 --- a/api/logagent/v1/zz_generated.conversion.go +++ b/api/logagent/v1/zz_generated.conversion.go @@ -1,3 +1,4 @@ +//go:build !ignore_autogenerated // +build !ignore_autogenerated /* @@ -23,6 +24,7 @@ package v1 import ( + url "net/url" unsafe "unsafe" conversion "k8s.io/apimachinery/pkg/conversion" @@ -167,6 +169,11 @@ func RegisterConversions(s *runtime.Scheme) error { }); err != nil { return err } + if err := s.AddGeneratedConversionFunc((*url.Values)(nil), (*LogAgentProxyOptions)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_url_Values_To_v1_LogAgentProxyOptions(a.(*url.Values), b.(*LogAgentProxyOptions), scope) + }); err != nil { + return err + } return nil } @@ -292,6 +299,31 @@ func Convert_logagent_LogAgentProxyOptions_To_v1_LogAgentProxyOptions(in *logage return autoConvert_logagent_LogAgentProxyOptions_To_v1_LogAgentProxyOptions(in, out, s) } +func autoConvert_url_Values_To_v1_LogAgentProxyOptions(in *url.Values, out *LogAgentProxyOptions, s conversion.Scope) error { + // WARNING: Field TypeMeta does not have json tag, skipping. + + if values, ok := map[string][]string(*in)["namespace"]; ok && len(values) > 0 { + if err := runtime.Convert_Slice_string_To_string(&values, &out.Namespace, s); err != nil { + return err + } + } else { + out.Namespace = "" + } + if values, ok := map[string][]string(*in)["name"]; ok && len(values) > 0 { + if err := runtime.Convert_Slice_string_To_string(&values, &out.Name, s); err != nil { + return err + } + } else { + out.Name = "" + } + return nil +} + +// Convert_url_Values_To_v1_LogAgentProxyOptions is an autogenerated conversion function. +func Convert_url_Values_To_v1_LogAgentProxyOptions(in *url.Values, out *LogAgentProxyOptions, s conversion.Scope) error { + return autoConvert_url_Values_To_v1_LogAgentProxyOptions(in, out, s) +} + func autoConvert_v1_LogAgentSpec_To_logagent_LogAgentSpec(in *LogAgentSpec, out *logagent.LogAgentSpec, s conversion.Scope) error { out.TenantID = in.TenantID out.ClusterName = in.ClusterName diff --git a/api/platform/types.go b/api/platform/types.go index 746ae30ec..409480a0e 100644 --- a/api/platform/types.go +++ b/api/platform/types.go @@ -1338,6 +1338,7 @@ type VolumeDecoratorStatus struct { LastReInitializingTimestamp metav1.Time } +// +k8s:conversion-gen:explicit-from=net/url.Values // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object // LogCollectorProxyOptions is the query options to a kube-apiserver proxy call for LogCollector crd object. diff --git a/api/platform/v1/types.go b/api/platform/v1/types.go index d2ac6634a..d002d876e 100644 --- a/api/platform/v1/types.go +++ b/api/platform/v1/types.go @@ -1361,6 +1361,7 @@ type VolumeDecoratorStatus struct { LastReInitializingTimestamp metav1.Time `json:"lastReInitializingTimestamp" protobuf:"bytes,8,name=lastReInitializingTimestamp"` } +// +k8s:conversion-gen:explicit-from=net/url.Values // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object // LogCollectorProxyOptions is the query options to a kube-apiserver proxy call for LogCollector crd object. diff --git a/api/platform/v1/zz_generated.conversion.go b/api/platform/v1/zz_generated.conversion.go index 61088df67..bf9dbb188 100644 --- a/api/platform/v1/zz_generated.conversion.go +++ b/api/platform/v1/zz_generated.conversion.go @@ -1,3 +1,4 @@ +//go:build !ignore_autogenerated // +build !ignore_autogenerated /* @@ -1100,6 +1101,11 @@ func RegisterConversions(s *runtime.Scheme) error { }); err != nil { return err } + if err := s.AddGeneratedConversionFunc((*url.Values)(nil), (*LogCollectorProxyOptions)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_url_Values_To_v1_LogCollectorProxyOptions(a.(*url.Values), b.(*LogCollectorProxyOptions), scope) + }); err != nil { + return err + } if err := s.AddGeneratedConversionFunc((*url.Values)(nil), (*TappControllerProxyOptions)(nil), func(a, b interface{}, scope conversion.Scope) error { return Convert_url_Values_To_v1_TappControllerProxyOptions(a.(*url.Values), b.(*TappControllerProxyOptions), scope) }); err != nil { @@ -2955,6 +2961,31 @@ func Convert_platform_LogCollectorProxyOptions_To_v1_LogCollectorProxyOptions(in return autoConvert_platform_LogCollectorProxyOptions_To_v1_LogCollectorProxyOptions(in, out, s) } +func autoConvert_url_Values_To_v1_LogCollectorProxyOptions(in *url.Values, out *LogCollectorProxyOptions, s conversion.Scope) error { + // WARNING: Field TypeMeta does not have json tag, skipping. + + if values, ok := map[string][]string(*in)["namespace"]; ok && len(values) > 0 { + if err := runtime.Convert_Slice_string_To_string(&values, &out.Namespace, s); err != nil { + return err + } + } else { + out.Namespace = "" + } + if values, ok := map[string][]string(*in)["name"]; ok && len(values) > 0 { + if err := runtime.Convert_Slice_string_To_string(&values, &out.Name, s); err != nil { + return err + } + } else { + out.Name = "" + } + return nil +} + +// Convert_url_Values_To_v1_LogCollectorProxyOptions is an autogenerated conversion function. +func Convert_url_Values_To_v1_LogCollectorProxyOptions(in *url.Values, out *LogCollectorProxyOptions, s conversion.Scope) error { + return autoConvert_url_Values_To_v1_LogCollectorProxyOptions(in, out, s) +} + func autoConvert_v1_LogCollectorSpec_To_platform_LogCollectorSpec(in *LogCollectorSpec, out *platform.LogCollectorSpec, s conversion.Scope) error { out.TenantID = in.TenantID out.ClusterName = in.ClusterName diff --git a/pkg/logagent/util/cluster.go b/pkg/logagent/util/cluster.go index 94a85e9b9..c29faf437 100644 --- a/pkg/logagent/util/cluster.go +++ b/pkg/logagent/util/cluster.go @@ -31,13 +31,14 @@ import ( "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/fields" "k8s.io/apiserver/pkg/endpoints/request" "k8s.io/client-go/kubernetes" + platformversionedclient "tkestack.io/tke/api/client/clientset/versioned/typed/platform/v1" + "tkestack.io/tke/api/platform" platformv1 "tkestack.io/tke/api/platform/v1" v1platform "tkestack.io/tke/api/platform/v1" - "tkestack.io/tke/pkg/apiserver/authentication" - clusterprovider "tkestack.io/tke/pkg/platform/provider/cluster" "tkestack.io/tke/pkg/platform/util" "tkestack.io/tke/pkg/util/log" ) @@ -59,7 +60,7 @@ func GetClusterClient(ctx context.Context, clusterName string, platformClient pl ClusterNameToClient.Delete(clusterName) } - kubeClient, err := util.BuildExternalClientSetWithName(ctx, platformClient, clusterName) + kubeClient, err := BuildExternalClientSetWithName(ctx, platformClient, clusterName) if err != nil { return nil, err } @@ -83,12 +84,7 @@ func APIServerLocationByCluster(ctx context.Context, clusterName string, platfor if cluster.Status.Phase != v1platform.ClusterRunning { return nil, nil, "", errors.NewServiceUnavailable(fmt.Sprintf("cluster %s status is abnormal", cluster.ObjectMeta.Name)) } - provider, err := clusterprovider.GetProvider(cluster.Spec.Type) - if err != nil { - return nil, nil, "", err - } - username, _ := authentication.UsernameAndTenantID(ctx) - credential, err := provider.GetClusterCredentialV1(ctx, platformClient, cluster, username) + credential, err := GetClusterCredentialV1(ctx, platformClient, cluster) if err != nil { log.Errorf("unable to get credential %v", err) return nil, nil, "", err @@ -178,3 +174,59 @@ func rootCertPool(caData []byte) *x509.CertPool { certPool.AppendCertsFromPEM(caData) return certPool } + +// BuildExternalClientSetWithName creates the clientset of kubernetes by given cluster +// name and returns it. +func BuildExternalClientSetWithName(ctx context.Context, platformClient platformversionedclient.PlatformV1Interface, name string) (*kubernetes.Clientset, error) { + cluster, err := platformClient.Clusters().Get(ctx, name, metav1.GetOptions{}) + if err != nil { + return nil, err + } + clientset, err := BuildExternalClientSet(ctx, cluster, platformClient) + if err != nil { + return nil, err + } + return clientset, nil +} + +// BuildExternalClientSet creates the clientset of kubernetes by given cluster object and returns it. +func BuildExternalClientSet(ctx context.Context, cluster *platformv1.Cluster, client platformversionedclient.PlatformV1Interface) (*kubernetes.Clientset, error) { + credential, err := GetClusterCredentialV1(ctx, client, cluster) + if err != nil { + return nil, err + } + + if cluster.Status.Locked != nil && *cluster.Status.Locked { + return nil, fmt.Errorf("cluster %s has been locked", cluster.ObjectMeta.Name) + } + + return util.BuildVersionedClientSet(cluster, credential) +} + +// GetClusterCredentialV1 returns the versioned cluster's credential +func GetClusterCredentialV1(ctx context.Context, client platformversionedclient.PlatformV1Interface, cluster *platformv1.Cluster) (*platformv1.ClusterCredential, error) { + var ( + credential *platformv1.ClusterCredential + err error + ) + + if cluster.Spec.ClusterCredentialRef != nil { + credential, err = client.ClusterCredentials().Get(ctx, cluster.Spec.ClusterCredentialRef.Name, metav1.GetOptions{}) + if err != nil && !errors.IsNotFound(err) { + return nil, err + } + } else { + clusterName := cluster.Name + fieldSelector := fields.OneTermEqualSelector("clusterName", clusterName).String() + clusterCredentials, err := client.ClusterCredentials().List(ctx, metav1.ListOptions{FieldSelector: fieldSelector}) + if err != nil { + return nil, err + } + if len(clusterCredentials.Items) == 0 { + return nil, errors.NewNotFound(platform.Resource("ClusterCredential"), clusterName) + } + credential = &clusterCredentials.Items[0] + } + + return credential, nil +} diff --git a/pkg/platform/controller/addon/logcollector/controller.go b/pkg/platform/controller/addon/logcollector/controller.go index 42a1c260e..05c7f055d 100644 --- a/pkg/platform/controller/addon/logcollector/controller.go +++ b/pkg/platform/controller/addon/logcollector/controller.go @@ -26,13 +26,12 @@ import ( "sync" "time" - "tkestack.io/tke/pkg/platform/controller/addon/logcollector/images" - clientset "tkestack.io/tke/api/client/clientset/versioned" platformv1informer "tkestack.io/tke/api/client/informers/externalversions/platform/v1" platformv1lister "tkestack.io/tke/api/client/listers/platform/v1" controllerutil "tkestack.io/tke/pkg/controller" - "tkestack.io/tke/pkg/platform/util" + "tkestack.io/tke/pkg/logagent/util" + "tkestack.io/tke/pkg/platform/controller/addon/logcollector/images" "tkestack.io/tke/pkg/util/metrics" appsv1 "k8s.io/api/apps/v1" From b1a40af7665eff000aa4e0078470824db042b419 Mon Sep 17 00:00:00 2001 From: Leo Ryu Date: Tue, 7 Sep 2021 17:25:39 +0800 Subject: [PATCH 39/62] feat(platform): upgrade eni ipamd to v3.3.3 (#1547) --- pkg/platform/provider/baremetal/images/images.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/platform/provider/baremetal/images/images.go b/pkg/platform/provider/baremetal/images/images.go index 9f51086f5..78fc8b69d 100644 --- a/pkg/platform/provider/baremetal/images/images.go +++ b/pkg/platform/provider/baremetal/images/images.go @@ -74,7 +74,7 @@ var components = Components{ Cilium: containerregistry.Image{Name: "cilium", Tag: "v1.9.5"}, CiliumOperator: containerregistry.Image{Name: "cilium-operator-generic", Tag: "v1.9.5"}, - Ipamd: containerregistry.Image{Name: "tke-eni-ipamd", Tag: "v3.2.6"}, + Ipamd: containerregistry.Image{Name: "tke-eni-ipamd", Tag: "v3.3.3"}, Masq: containerregistry.Image{Name: "ip-masq-agent", Tag: "v1.0.0"}, CiliumRouter: containerregistry.Image{Name: "cilium-router", Tag: "v0.1.0"}, } From ee6eafdb76970114e6d32bbe1705a3b531ac01bd Mon Sep 17 00:00:00 2001 From: Pavle Lee <523260513@qq.com> Date: Wed, 8 Sep 2021 11:03:19 +0800 Subject: [PATCH 40/62] fix(platform): ensure create credential not idempotent (#1545) --- .../controller/cluster/cluster_controller.go | 48 +++++++++++-------- 1 file changed, 29 insertions(+), 19 deletions(-) diff --git a/pkg/platform/controller/cluster/cluster_controller.go b/pkg/platform/controller/cluster/cluster_controller.go index acda2cd6b..a231278cf 100644 --- a/pkg/platform/controller/cluster/cluster_controller.go +++ b/pkg/platform/controller/cluster/cluster_controller.go @@ -30,6 +30,7 @@ import ( corev1 "k8s.io/api/core/v1" apierrors "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/fields" utilruntime "k8s.io/apimachinery/pkg/util/runtime" "k8s.io/apimachinery/pkg/util/wait" "k8s.io/client-go/tools/cache" @@ -408,7 +409,6 @@ func (c *Controller) onUpdate(ctx context.Context, cluster *platformv1.Cluster) } // ensureCreateClusterCredential creates ClusterCredential for cluster if ClusterCredentialRef is nil. -// TODO: add gc collector for clean non reference ClusterCredential. func (c *Controller) ensureCreateClusterCredential(ctx context.Context, cluster *platformv1.Cluster) (*platformv1.Cluster, error) { if cluster.Spec.ClusterCredentialRef != nil { // Set OwnerReferences for imported cluster credentials @@ -425,29 +425,39 @@ func (c *Controller) ensureCreateClusterCredential(ctx context.Context, cluster return cluster, nil } - var err error - // Set OwnerReferences for baremetal cluster credentials - credential := &platformv1.ClusterCredential{ - TenantID: cluster.Spec.TenantID, - ClusterName: cluster.Name, - ObjectMeta: metav1.ObjectMeta{ - OwnerReferences: []metav1.OwnerReference{ - *metav1.NewControllerRef(cluster, platformv1.SchemeGroupVersion.WithKind("Cluster"))}, - }, - } - - credential, err = c.platformClient.ClusterCredentials().Create(ctx, credential, metav1.CreateOptions{}) + // TODO use informer search by labels. + fieldSelector := fields.OneTermEqualSelector("clusterName", cluster.Name).String() + clustercredentials, err := c.platformClient.ClusterCredentials().List(ctx, metav1.ListOptions{FieldSelector: fieldSelector}) if err != nil { return nil, err } - cluster.Spec.ClusterCredentialRef = &corev1.LocalObjectReference{Name: credential.Name} - cluster, err = c.platformClient.Clusters().Update(ctx, cluster, metav1.UpdateOptions{}) - if err != nil { - // Possible deletion failure will result in dirty data. So need gc collector. - _ = c.platformClient.ClusterCredentials().Delete(ctx, credential.Name, metav1.DeleteOptions{}) - return nil, err + + // [Idempotent] if not found cluster credentials, create one for next logic + var credential *platformv1.ClusterCredential + if len(clustercredentials.Items) == 0 { + credential = &platformv1.ClusterCredential{ + TenantID: cluster.Spec.TenantID, + ClusterName: cluster.Name, + ObjectMeta: metav1.ObjectMeta{ + OwnerReferences: []metav1.OwnerReference{ + *metav1.NewControllerRef(cluster, platformv1.SchemeGroupVersion.WithKind("Cluster"))}, + }, + } + + credential, err = c.platformClient.ClusterCredentials().Create(ctx, credential, metav1.CreateOptions{}) + if err != nil { + return nil, err + } + } else { + if len(clustercredentials.Items) > 1 { + log.Warnf("cluster %s has more than one credentials, need attention!") + } + + credential = &clustercredentials.Items[0] } + cluster.Spec.ClusterCredentialRef = &corev1.LocalObjectReference{Name: credential.Name} + return cluster, nil } From 25094ada3ff95ed5c8afc4327de602b181ab0f9a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=88=98=E7=A5=9E=E8=A5=BF=E7=BA=A2=E6=9F=BF?= <34213033+TomatoAres@users.noreply.github.com> Date: Wed, 8 Sep 2021 15:22:58 +0800 Subject: [PATCH 41/62] fix(addon): decouple addon with provider (#1552) Co-authored-by: Cui Shuaijie --- pkg/logagent/util/cluster.go | 63 +----- .../controller/prometheus/controller.go | 33 ++-- pkg/monitor/util/cache/cache.go | 24 +-- pkg/monitor/util/cluster.go | 4 +- .../addon/logcollector/controller.go | 12 +- pkg/platform/util/addon/client.go | 185 ++++++++++++++++++ pkg/platform/util/addon/readme.md | 5 + pkg/platform/util/client.go | 34 +--- 8 files changed, 228 insertions(+), 132 deletions(-) create mode 100644 pkg/platform/util/addon/client.go create mode 100644 pkg/platform/util/addon/readme.md diff --git a/pkg/logagent/util/cluster.go b/pkg/logagent/util/cluster.go index c29faf437..d8f8ea975 100644 --- a/pkg/logagent/util/cluster.go +++ b/pkg/logagent/util/cluster.go @@ -31,15 +31,14 @@ import ( "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/fields" "k8s.io/apiserver/pkg/endpoints/request" "k8s.io/client-go/kubernetes" platformversionedclient "tkestack.io/tke/api/client/clientset/versioned/typed/platform/v1" - "tkestack.io/tke/api/platform" platformv1 "tkestack.io/tke/api/platform/v1" v1platform "tkestack.io/tke/api/platform/v1" "tkestack.io/tke/pkg/platform/util" + "tkestack.io/tke/pkg/platform/util/addon" "tkestack.io/tke/pkg/util/log" ) @@ -60,7 +59,7 @@ func GetClusterClient(ctx context.Context, clusterName string, platformClient pl ClusterNameToClient.Delete(clusterName) } - kubeClient, err := BuildExternalClientSetWithName(ctx, platformClient, clusterName) + kubeClient, err := addon.BuildExternalClientSetWithName(ctx, platformClient, clusterName) if err != nil { return nil, err } @@ -84,7 +83,7 @@ func APIServerLocationByCluster(ctx context.Context, clusterName string, platfor if cluster.Status.Phase != v1platform.ClusterRunning { return nil, nil, "", errors.NewServiceUnavailable(fmt.Sprintf("cluster %s status is abnormal", cluster.ObjectMeta.Name)) } - credential, err := GetClusterCredentialV1(ctx, platformClient, cluster) + credential, err := addon.GetClusterCredentialV1(ctx, platformClient, cluster) if err != nil { log.Errorf("unable to get credential %v", err) return nil, nil, "", err @@ -174,59 +173,3 @@ func rootCertPool(caData []byte) *x509.CertPool { certPool.AppendCertsFromPEM(caData) return certPool } - -// BuildExternalClientSetWithName creates the clientset of kubernetes by given cluster -// name and returns it. -func BuildExternalClientSetWithName(ctx context.Context, platformClient platformversionedclient.PlatformV1Interface, name string) (*kubernetes.Clientset, error) { - cluster, err := platformClient.Clusters().Get(ctx, name, metav1.GetOptions{}) - if err != nil { - return nil, err - } - clientset, err := BuildExternalClientSet(ctx, cluster, platformClient) - if err != nil { - return nil, err - } - return clientset, nil -} - -// BuildExternalClientSet creates the clientset of kubernetes by given cluster object and returns it. -func BuildExternalClientSet(ctx context.Context, cluster *platformv1.Cluster, client platformversionedclient.PlatformV1Interface) (*kubernetes.Clientset, error) { - credential, err := GetClusterCredentialV1(ctx, client, cluster) - if err != nil { - return nil, err - } - - if cluster.Status.Locked != nil && *cluster.Status.Locked { - return nil, fmt.Errorf("cluster %s has been locked", cluster.ObjectMeta.Name) - } - - return util.BuildVersionedClientSet(cluster, credential) -} - -// GetClusterCredentialV1 returns the versioned cluster's credential -func GetClusterCredentialV1(ctx context.Context, client platformversionedclient.PlatformV1Interface, cluster *platformv1.Cluster) (*platformv1.ClusterCredential, error) { - var ( - credential *platformv1.ClusterCredential - err error - ) - - if cluster.Spec.ClusterCredentialRef != nil { - credential, err = client.ClusterCredentials().Get(ctx, cluster.Spec.ClusterCredentialRef.Name, metav1.GetOptions{}) - if err != nil && !errors.IsNotFound(err) { - return nil, err - } - } else { - clusterName := cluster.Name - fieldSelector := fields.OneTermEqualSelector("clusterName", clusterName).String() - clusterCredentials, err := client.ClusterCredentials().List(ctx, metav1.ListOptions{FieldSelector: fieldSelector}) - if err != nil { - return nil, err - } - if len(clusterCredentials.Items) == 0 { - return nil, errors.NewNotFound(platform.Resource("ClusterCredential"), clusterName) - } - credential = &clusterCredentials.Items[0] - } - - return credential, nil -} diff --git a/pkg/monitor/controller/prometheus/controller.go b/pkg/monitor/controller/prometheus/controller.go index 4af8bf68d..7e9c13e75 100755 --- a/pkg/monitor/controller/prometheus/controller.go +++ b/pkg/monitor/controller/prometheus/controller.go @@ -27,6 +27,7 @@ import ( "strings" "sync" "time" + "tkestack.io/tke/pkg/platform/util/addon" "github.com/coreos/prometheus-operator/pkg/apis/monitoring" monitoringv1 "github.com/coreos/prometheus-operator/pkg/apis/monitoring/v1" @@ -49,6 +50,7 @@ import ( "k8s.io/client-go/tools/cache" "k8s.io/client-go/util/workqueue" apiregistrationv1 "k8s.io/kube-aggregator/pkg/apis/apiregistration/v1" + clientset "tkestack.io/tke/api/client/clientset/versioned" platformv1client "tkestack.io/tke/api/client/clientset/versioned/typed/platform/v1" monitorv1informer "tkestack.io/tke/api/client/informers/externalversions/monitor/v1" @@ -60,8 +62,6 @@ import ( "tkestack.io/tke/pkg/monitor/controller/prometheus/images" esutil "tkestack.io/tke/pkg/monitor/storage/es/client" monitorutil "tkestack.io/tke/pkg/monitor/util" - clusterprovider "tkestack.io/tke/pkg/platform/provider/cluster" - platformutil "tkestack.io/tke/pkg/platform/util" "tkestack.io/tke/pkg/util/apiclient" containerregistryutil "tkestack.io/tke/pkg/util/containerregistry" utilhttp "tkestack.io/tke/pkg/util/http" @@ -601,22 +601,22 @@ func (c *Controller) installPrometheus(ctx context.Context, prometheus *v1.Prome if err != nil { return fmt.Errorf("get cluster failed: %v", err) } - kubeClient, err := platformutil.BuildExternalClientSet(ctx, cluster, c.platformClient) + kubeClient, err := addon.BuildExternalClientSet(ctx, cluster, c.platformClient) if err != nil { return fmt.Errorf("get kubeClient failed: %v", err) } - crdClient, err := platformutil.BuildExternalExtensionClientSet(ctx, cluster, c.platformClient) + crdClient, err := addon.BuildExternalExtensionClientSet(ctx, cluster, c.platformClient) if err != nil { return fmt.Errorf("get crdClient failed: %v", err) } - kaClient, err := platformutil.BuildKubeAggregatorClientSet(ctx, cluster, c.platformClient) + kaClient, err := addon.BuildKubeAggregatorClientSet(ctx, cluster, c.platformClient) if err != nil { return fmt.Errorf("get kaClient failed: %v", err) } - mclient, err := platformutil.BuildExternalMonitoringClientSet(ctx, cluster, c.platformClient) + mclient, err := addon.BuildExternalMonitoringClientSet(ctx, cluster, c.platformClient) if err != nil { return fmt.Errorf("get mclient failed: %v", err) } @@ -737,12 +737,9 @@ func (c *Controller) installPrometheus(ctx context.Context, prometheus *v1.Prome prometheus.Status.SubVersion[AlertManagerService] = components.AlertManagerService.Tag log.Infof("Start to create prometheus") - provider, err := clusterprovider.GetProvider(cluster.Spec.Type) - if err != nil { - return fmt.Errorf("get provider failed: %v", err) - } + // Secret for prometheus-etcd - credential, err := provider.GetClusterCredentialV1(ctx, c.platformClient, cluster, clusterprovider.AdminUsername) + credential, err := addon.GetClusterCredentialV1(ctx, c.platformClient, cluster) if err != nil { return fmt.Errorf("get credential failed: %v", err) } @@ -2613,22 +2610,22 @@ func (c *Controller) uninstallPrometheus(ctx context.Context, prometheus *v1.Pro if err != nil { return err } - kubeClient, err := platformutil.BuildExternalClientSet(ctx, cluster, c.platformClient) + kubeClient, err := addon.BuildExternalClientSet(ctx, cluster, c.platformClient) if err != nil { return err } - kaClient, err := platformutil.BuildKubeAggregatorClientSet(ctx, cluster, c.platformClient) + kaClient, err := addon.BuildKubeAggregatorClientSet(ctx, cluster, c.platformClient) if err != nil { return fmt.Errorf("get kaClient failed: %v", err) } - crdClient, err := platformutil.BuildExternalExtensionClientSet(ctx, cluster, c.platformClient) + crdClient, err := addon.BuildExternalExtensionClientSet(ctx, cluster, c.platformClient) if err != nil { return err } - mclient, err := platformutil.BuildExternalMonitoringClientSet(ctx, cluster, c.platformClient) + mclient, err := addon.BuildExternalMonitoringClientSet(ctx, cluster, c.platformClient) if err != nil { return err } @@ -2919,7 +2916,7 @@ func (c *Controller) watchPrometheusHealth(ctx context.Context, key string) func log.Info("Prometheus health check over", log.String("prome", key)) return true, nil } - kubeClient, err := platformutil.BuildExternalClientSet(ctx, cluster, c.platformClient) + kubeClient, err := addon.BuildExternalClientSet(ctx, cluster, c.platformClient) if err != nil { return false, err } @@ -2952,7 +2949,7 @@ func (c *Controller) checkPrometheusStatus(ctx context.Context, prometheus *v1.P log.Info("Prometheus status checking over", log.String("prome", key)) return true, nil } - kubeClient, err := platformutil.BuildExternalClientSet(ctx, cluster, c.platformClient) + kubeClient, err := addon.BuildExternalClientSet(ctx, cluster, c.platformClient) if err != nil { return false, err } @@ -2999,7 +2996,7 @@ func (c *Controller) checkPrometheusUpgrade(ctx context.Context, prometheus *v1. log.Info("Prometheus upgrade over", log.String("prome", key)) return true, nil } - kubeClient, err := platformutil.BuildExternalClientSet(ctx, cluster, c.platformClient) + kubeClient, err := addon.BuildExternalClientSet(ctx, cluster, c.platformClient) if err != nil { return false, err } diff --git a/pkg/monitor/util/cache/cache.go b/pkg/monitor/util/cache/cache.go index 29778944e..1029c33a3 100644 --- a/pkg/monitor/util/cache/cache.go +++ b/pkg/monitor/util/cache/cache.go @@ -26,21 +26,21 @@ import ( "sync/atomic" "time" + corev1 "k8s.io/api/core/v1" + "k8s.io/apimachinery/pkg/api/errors" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/runtime/schema" + "k8s.io/client-go/kubernetes" + metricsv "k8s.io/metrics/pkg/client/clientset/versioned" + businessversionedclient "tkestack.io/tke/api/client/clientset/versioned/typed/business/v1" platformversionedclient "tkestack.io/tke/api/client/clientset/versioned/typed/platform/v1" "tkestack.io/tke/api/monitor" platformv1 "tkestack.io/tke/api/platform/v1" "tkestack.io/tke/pkg/monitor/util" - clusterprovider "tkestack.io/tke/pkg/platform/provider/cluster" platformutil "tkestack.io/tke/pkg/platform/util" + "tkestack.io/tke/pkg/platform/util/addon" "tkestack.io/tke/pkg/util/log" - - corev1 "k8s.io/api/core/v1" - "k8s.io/apimachinery/pkg/api/errors" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/runtime/schema" - "k8s.io/client-go/kubernetes" - metricsv "k8s.io/metrics/pkg/client/clientset/versioned" ) type updateComponent func(componentStatus *corev1.ComponentStatus, health *util.ComponentHealth) @@ -170,7 +170,7 @@ func (c *cacher) getClusters(ctx context.Context) { }) return } - clientSet, err := platformutil.BuildExternalClientSet(ctx, &cls, c.platformClient) + clientSet, err := addon.BuildExternalClientSet(ctx, &cls, c.platformClient) if err != nil { log.Error("create clientSet of cluster failed", log.Any("cluster", clusterID), log.Err(err)) @@ -281,11 +281,7 @@ func (c *cacher) getClusters(ctx context.Context) { } func (c *cacher) getMetricServerClientSet(ctx context.Context, cls *platformv1.Cluster) (*metricsv.Clientset, error) { - provider, err := clusterprovider.GetProvider(cls.Spec.Type) - if err != nil { - return nil, err - } - cc, err := provider.GetClusterCredentialV1(ctx, c.platformClient, cls, clusterprovider.AdminUsername) + cc, err := addon.GetClusterCredentialV1(ctx, c.platformClient, cls) if err != nil { log.Error("query cluster credential failed", log.Any("cluster", cls.GetName()), log.Err(err)) return nil, err diff --git a/pkg/monitor/util/cluster.go b/pkg/monitor/util/cluster.go index 24214b093..66eddc6f8 100755 --- a/pkg/monitor/util/cluster.go +++ b/pkg/monitor/util/cluster.go @@ -29,9 +29,11 @@ import ( influxclient "github.com/influxdata/influxdb1-client/v2" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/client-go/kubernetes" + platformversionedclient "tkestack.io/tke/api/client/clientset/versioned/typed/platform/v1" esclient "tkestack.io/tke/pkg/monitor/storage/es/client" "tkestack.io/tke/pkg/platform/util" + "tkestack.io/tke/pkg/platform/util/addon" ) const ( @@ -83,7 +85,7 @@ func GetMonitoringClient(ctx context.Context, clusterName string, platformClient ClusterNameToClient.Delete(clusterName) } - monitoringClient, err := util.BuildExternalMonitoringClientSetWithName(ctx, platformClient, clusterName) + monitoringClient, err := addon.BuildExternalMonitoringClientSetWithName(ctx, platformClient, clusterName) if err != nil { return nil, err } diff --git a/pkg/platform/controller/addon/logcollector/controller.go b/pkg/platform/controller/addon/logcollector/controller.go index 05c7f055d..ff9a9db25 100644 --- a/pkg/platform/controller/addon/logcollector/controller.go +++ b/pkg/platform/controller/addon/logcollector/controller.go @@ -30,8 +30,8 @@ import ( platformv1informer "tkestack.io/tke/api/client/informers/externalversions/platform/v1" platformv1lister "tkestack.io/tke/api/client/listers/platform/v1" controllerutil "tkestack.io/tke/pkg/controller" - "tkestack.io/tke/pkg/logagent/util" "tkestack.io/tke/pkg/platform/controller/addon/logcollector/images" + "tkestack.io/tke/pkg/platform/util/addon" "tkestack.io/tke/pkg/util/metrics" appsv1 "k8s.io/api/apps/v1" @@ -423,7 +423,7 @@ func (c *Controller) installLogCollector(ctx context.Context, LogCollector *v1.L if err != nil { return err } - kubeClient, err := util.BuildExternalClientSet(ctx, cluster, c.client.PlatformV1()) + kubeClient, err := addon.BuildExternalClientSet(ctx, cluster, c.client.PlatformV1()) if err != nil { return err } @@ -653,7 +653,7 @@ func (c *Controller) uninstallLogCollector(ctx context.Context, LogCollector *v1 if err != nil { return err } - kubeClient, err := util.BuildExternalClientSet(ctx, cluster, c.client.PlatformV1()) + kubeClient, err := addon.BuildExternalClientSet(ctx, cluster, c.client.PlatformV1()) if err != nil { return err } @@ -722,7 +722,7 @@ func (c *Controller) watchLogCollectorHealth(ctx context.Context, key string) fu return true, nil } - kubeClient, err := util.BuildExternalClientSet(ctx, cluster, c.client.PlatformV1()) + kubeClient, err := addon.BuildExternalClientSet(ctx, cluster, c.client.PlatformV1()) if err != nil { return false, err } @@ -763,7 +763,7 @@ func (c *Controller) checkLogCollectorStatus( return true, nil } - kubeClient, err := util.BuildExternalClientSet(ctx, cluster, c.client.PlatformV1()) + kubeClient, err := addon.BuildExternalClientSet(ctx, cluster, c.client.PlatformV1()) if err != nil { return false, err } @@ -818,7 +818,7 @@ func (c *Controller) upgradeLogCollector( return true, nil } - kubeClient, err := util.BuildExternalClientSet(ctx, cluster, c.client.PlatformV1()) + kubeClient, err := addon.BuildExternalClientSet(ctx, cluster, c.client.PlatformV1()) if err != nil { return false, err } diff --git a/pkg/platform/util/addon/client.go b/pkg/platform/util/addon/client.go new file mode 100644 index 000000000..c4f85c025 --- /dev/null +++ b/pkg/platform/util/addon/client.go @@ -0,0 +1,185 @@ +/* + * Tencent is pleased to support the open source community by making TKEStack + * available. + * + * Copyright (C) 2012-2021 Tencent. All Rights Reserved. + * + * 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 + * + * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ + +package addon + +// These clients are for addon, decoupling with provider + +import ( + "context" + "fmt" + + monitoringclient "github.com/coreos/prometheus-operator/pkg/client/versioned" + apiextensionsclient "k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset" + "k8s.io/apimachinery/pkg/api/errors" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/fields" + "k8s.io/client-go/kubernetes" + kubeaggregatorclientset "k8s.io/kube-aggregator/pkg/client/clientset_generated/clientset" + + platformversionedclient "tkestack.io/tke/api/client/clientset/versioned/typed/platform/v1" + "tkestack.io/tke/api/platform" + platformv1 "tkestack.io/tke/api/platform/v1" + "tkestack.io/tke/pkg/platform/util" + "tkestack.io/tke/pkg/util/log" +) + +// BuildExternalMonitoringClientSetNoStatus creates the monitoring clientset of prometheus operator by given +// cluster object and returns it. +func BuildExternalMonitoringClientSetNoStatus(ctx context.Context, cluster *platformv1.Cluster, client platformversionedclient.PlatformV1Interface) (monitoringclient.Interface, error) { + credential, err := GetClusterCredentialV1(ctx, client, cluster) + if err != nil { + return nil, err + } + restConfig, err := util.GetExternalRestConfig(cluster, credential) + if err != nil { + log.Error("Build cluster config error", log.String("clusterName", cluster.ObjectMeta.Name), log.Err(err)) + return nil, err + } + return monitoringclient.NewForConfig(restConfig) +} + +// BuildExternalMonitoringClientSet creates the monitoring clientset of prometheus operator by given cluster +// object and returns it. +func BuildExternalMonitoringClientSet(ctx context.Context, cluster *platformv1.Cluster, client platformversionedclient.PlatformV1Interface) (monitoringclient.Interface, error) { + if cluster.Status.Locked != nil && *cluster.Status.Locked { + return nil, fmt.Errorf("cluster %s has been locked", cluster.ObjectMeta.Name) + } + + return BuildExternalMonitoringClientSetNoStatus(ctx, cluster, client) +} + +// BuildExternalMonitoringClientSetWithName creates the clientset of prometheus operator by given cluster +// name and returns it. +func BuildExternalMonitoringClientSetWithName(ctx context.Context, platformClient platformversionedclient.PlatformV1Interface, name string) (monitoringclient.Interface, error) { + cluster, err := platformClient.Clusters().Get(ctx, name, metav1.GetOptions{}) + if err != nil { + return nil, err + } + clientset, err := BuildExternalMonitoringClientSet(ctx, cluster, platformClient) + if err != nil { + return nil, err + } + return clientset, nil +} + +// BuildKubeAggregatorClientSet creates the kube-aggregator clientset of kubernetes by given cluster +// object and returns it. +func BuildKubeAggregatorClientSet(ctx context.Context, cluster *platformv1.Cluster, client platformversionedclient.PlatformV1Interface) (*kubeaggregatorclientset.Clientset, error) { + if cluster.Status.Locked != nil && *cluster.Status.Locked { + return nil, fmt.Errorf("cluster %s has been locked", cluster.ObjectMeta.Name) + } + + return BuildKubeAggregatorClientSetNoStatus(ctx, cluster, client) +} + +// BuildExternalExtensionClientSetNoStatus creates the api extension clientset of kubernetes by given +// cluster object and returns it. +func BuildExternalExtensionClientSetNoStatus(ctx context.Context, cluster *platformv1.Cluster, client platformversionedclient.PlatformV1Interface) (*apiextensionsclient.Clientset, error) { + credential, err := GetClusterCredentialV1(ctx, client, cluster) + if err != nil { + return nil, err + } + restConfig, err := util.GetExternalRestConfig(cluster, credential) + if err != nil { + log.Error("Build cluster config error", log.String("clusterName", cluster.ObjectMeta.Name), log.Err(err)) + return nil, err + } + return apiextensionsclient.NewForConfig(restConfig) +} + +// BuildExternalExtensionClientSet creates the api extension clientset of kubernetes by given cluster +// object and returns it. +func BuildExternalExtensionClientSet(ctx context.Context, cluster *platformv1.Cluster, client platformversionedclient.PlatformV1Interface) (*apiextensionsclient.Clientset, error) { + if cluster.Status.Locked != nil && *cluster.Status.Locked { + return nil, fmt.Errorf("cluster %s has been locked", cluster.ObjectMeta.Name) + } + + return BuildExternalExtensionClientSetNoStatus(ctx, cluster, client) +} + +// BuildKubeAggregatorClientSetNoStatus creates the kube-aggregator clientset of kubernetes by given +// cluster object and returns it. +func BuildKubeAggregatorClientSetNoStatus(ctx context.Context, cluster *platformv1.Cluster, client platformversionedclient.PlatformV1Interface) (*kubeaggregatorclientset.Clientset, error) { + credential, err := GetClusterCredentialV1(ctx, client, cluster) + if err != nil { + return nil, err + } + restConfig, err := util.GetExternalRestConfig(cluster, credential) + if err != nil { + log.Error("Build cluster config error", log.String("clusterName", cluster.ObjectMeta.Name), log.Err(err)) + return nil, err + } + return kubeaggregatorclientset.NewForConfig(restConfig) +} + +// BuildExternalClientSetWithName creates the clientset of kubernetes by given cluster +// name and returns it. +func BuildExternalClientSetWithName(ctx context.Context, platformClient platformversionedclient.PlatformV1Interface, name string) (*kubernetes.Clientset, error) { + cluster, err := platformClient.Clusters().Get(ctx, name, metav1.GetOptions{}) + if err != nil { + return nil, err + } + clientset, err := BuildExternalClientSet(ctx, cluster, platformClient) + if err != nil { + return nil, err + } + return clientset, nil +} + +// BuildExternalClientSet creates the clientset of kubernetes by given cluster object and returns it. +func BuildExternalClientSet(ctx context.Context, cluster *platformv1.Cluster, client platformversionedclient.PlatformV1Interface) (*kubernetes.Clientset, error) { + credential, err := GetClusterCredentialV1(ctx, client, cluster) + if err != nil { + return nil, err + } + + if cluster.Status.Locked != nil && *cluster.Status.Locked { + return nil, fmt.Errorf("cluster %s has been locked", cluster.ObjectMeta.Name) + } + + return util.BuildVersionedClientSet(cluster, credential) +} + +// GetClusterCredentialV1 returns the versioned cluster's credential +func GetClusterCredentialV1(ctx context.Context, client platformversionedclient.PlatformV1Interface, cluster *platformv1.Cluster) (*platformv1.ClusterCredential, error) { + var ( + credential *platformv1.ClusterCredential + err error + ) + + if cluster.Spec.ClusterCredentialRef != nil { + credential, err = client.ClusterCredentials().Get(ctx, cluster.Spec.ClusterCredentialRef.Name, metav1.GetOptions{}) + if err != nil && !errors.IsNotFound(err) { + return nil, err + } + } else { + clusterName := cluster.Name + fieldSelector := fields.OneTermEqualSelector("clusterName", clusterName).String() + clusterCredentials, err := client.ClusterCredentials().List(ctx, metav1.ListOptions{FieldSelector: fieldSelector}) + if err != nil { + return nil, err + } + if len(clusterCredentials.Items) == 0 { + return nil, errors.NewNotFound(platform.Resource("ClusterCredential"), clusterName) + } + credential = &clusterCredentials.Items[0] + } + + return credential, nil +} diff --git a/pkg/platform/util/addon/readme.md b/pkg/platform/util/addon/readme.md new file mode 100644 index 000000000..1637e612e --- /dev/null +++ b/pkg/platform/util/addon/readme.md @@ -0,0 +1,5 @@ +# Introduction + +This package just for independent addon controller and decouple with provider. + +Not for platform controller, which has used providers. diff --git a/pkg/platform/util/client.go b/pkg/platform/util/client.go index 4ef4d347e..0779843b0 100644 --- a/pkg/platform/util/client.go +++ b/pkg/platform/util/client.go @@ -35,13 +35,13 @@ import ( apiextensionsclient "k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset" "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/util/wait" "k8s.io/client-go/dynamic" "k8s.io/client-go/kubernetes" restclient "k8s.io/client-go/rest" "k8s.io/client-go/tools/clientcmd" "k8s.io/client-go/tools/clientcmd/api" kubeaggregatorclientset "k8s.io/kube-aggregator/pkg/client/clientset_generated/clientset" + platforminternalclient "tkestack.io/tke/api/client/clientset/internalversion/typed/platform/internalversion" platformversionedclient "tkestack.io/tke/api/client/clientset/versioned/typed/platform/v1" "tkestack.io/tke/api/platform" @@ -395,20 +395,6 @@ func BuildExternalMonitoringClientSet(ctx context.Context, cluster *platformv1.C return BuildExternalMonitoringClientSetNoStatus(ctx, cluster, client) } -// BuildExternalMonitoringClientSetWithName creates the clientset of prometheus operator by given cluster -// name and returns it. -func BuildExternalMonitoringClientSetWithName(ctx context.Context, platformClient platformversionedclient.PlatformV1Interface, name string) (monitoringclient.Interface, error) { - cluster, err := platformClient.Clusters().Get(ctx, name, metav1.GetOptions{}) - if err != nil { - return nil, err - } - clientset, err := BuildExternalMonitoringClientSet(ctx, cluster, platformClient) - if err != nil { - return nil, err - } - return clientset, nil -} - // BuildExternalDynamicClientSetNoStatus creates the dynamic clientset of kubernetes by given // cluster object and returns it. func BuildExternalDynamicClientSetNoStatus(cluster *platformv1.Cluster, credential *platformv1.ClusterCredential) (dynamic.Interface, error) { @@ -545,21 +531,3 @@ func rootCertPool(caData []byte) *x509.CertPool { certPool.AppendCertsFromPEM(caData) return certPool } - -// CheckClusterHealthzWithTimeout check cluster status within timeout -func CheckClusterHealthzWithTimeout(ctx context.Context, platformClient platformversionedclient.PlatformV1Interface, name string, timeout time.Duration) error { - err := wait.PollImmediate(1*time.Second, timeout, func() (bool, error) { - clientset, err := BuildExternalClientSetWithName(ctx, platformClient, name) - if err != nil { - return false, nil - } - healthStatus := 0 - clientset.Discovery().RESTClient().Get().AbsPath("/healthz").Do(ctx).StatusCode(&healthStatus) - if healthStatus != http.StatusOK { - return false, nil - } - return true, nil - }) - - return err -} From be0e737147d306e6c640843582622572f77ea048 Mon Sep 17 00:00:00 2001 From: jo-hnny Date: Wed, 8 Sep 2021 15:36:14 +0800 Subject: [PATCH 42/62] feat(console): set container rutime default value as containerd (#1551) --- .../cluster/reducers/CreateICReducer.ts | 130 +++++++++--------- 1 file changed, 65 insertions(+), 65 deletions(-) diff --git a/web/console/src/modules/cluster/reducers/CreateICReducer.ts b/web/console/src/modules/cluster/reducers/CreateICReducer.ts index e315c8d6f..869db16ce 100644 --- a/web/console/src/modules/cluster/reducers/CreateICReducer.ts +++ b/web/console/src/modules/cluster/reducers/CreateICReducer.ts @@ -15,68 +15,68 @@ * WARRANTIES OF ANY KIND, either express or implied. See the License for the * specific language governing permissions and limitations under the License. */ -import { combineReducers } from 'redux'; - -import { RecordSet, reduceToPayload } from '@tencent/ff-redux'; - -import { initValidator } from '../../common/models'; -import * as ActionType from '../constants/ActionType'; -import { GPUTYPE, k8sVersionList, CreateICVipType, ContainerRuntimeEnum } from '../constants/Config'; - -const TempReducer = combineReducers({ - name: reduceToPayload(ActionType.IC_Name, ''), - - v_name: reduceToPayload(ActionType.v_IC_Name, initValidator), - - networkDevice: reduceToPayload(ActionType.IC_NetworkDevice, 'eth0'), - - v_networkDevice: reduceToPayload(ActionType.v_IC_NetworkDevice, initValidator), - - maxClusterServiceNum: reduceToPayload(ActionType.IC_MaxClusterServiceNum, 256), - - maxNodePodNum: reduceToPayload(ActionType.IC_MaxNodePodNum, 256), - - k8sVersion: reduceToPayload(ActionType.IC_K8SVersion, ''), - - k8sVersionList: reduceToPayload(ActionType.IC_FetchK8SVersion, []), - - cidr: reduceToPayload(ActionType.IC_Cidr, '10.244.0.0/16'), - - computerList: reduceToPayload(ActionType.IC_ComputerList, []), - computerEdit: reduceToPayload(ActionType.IC_ComputerEdit, null), - vipAddress: reduceToPayload(ActionType.IC_VipAddress, ''), - vipPort: reduceToPayload(ActionType.IC_VipPort, '6443'), - - v_vipAddress: reduceToPayload(ActionType.v_IC_VipAddress, initValidator), - - v_vipPort: reduceToPayload(ActionType.v_IC_VipPort, initValidator), - - vipType: reduceToPayload(ActionType.v_IC_Vip, CreateICVipType.unuse), - - gpu: reduceToPayload(ActionType.v_IC_Gpu, false), - - merticsServer: reduceToPayload(ActionType.v_IC_Mertics_server, true), - - cilium: reduceToPayload(ActionType.v_IC_Cilium, 'Galaxy'), - - networkMode: reduceToPayload(ActionType.v_IC_NetworkMode, 'overlay'), - - asNumber: reduceToPayload(ActionType.IC_AS, ''), - v_asNumber: reduceToPayload(ActionType.v_IC_AS, initValidator), - - switchIp: reduceToPayload(ActionType.IC_SwitchIp, ''), - v_switchIp: reduceToPayload(ActionType.v_IC_SwitchIp, initValidator), - - gpuType: reduceToPayload(ActionType.v_IC_GpuType, GPUTYPE.PGPU), - - containerRuntime: reduceToPayload(ActionType.IC_EnableContainerRuntime, ContainerRuntimeEnum.DOCKER) -}); - -export const CreateICReducer = (state, action) => { - let newState = state; - // 销毁创建namespace 页面 - if (action.type === ActionType.IC_Clear) { - newState = undefined; - } - return TempReducer(newState, action); -}; +import { combineReducers } from 'redux'; + +import { RecordSet, reduceToPayload } from '@tencent/ff-redux'; + +import { initValidator } from '../../common/models'; +import * as ActionType from '../constants/ActionType'; +import { GPUTYPE, k8sVersionList, CreateICVipType, ContainerRuntimeEnum } from '../constants/Config'; + +const TempReducer = combineReducers({ + name: reduceToPayload(ActionType.IC_Name, ''), + + v_name: reduceToPayload(ActionType.v_IC_Name, initValidator), + + networkDevice: reduceToPayload(ActionType.IC_NetworkDevice, 'eth0'), + + v_networkDevice: reduceToPayload(ActionType.v_IC_NetworkDevice, initValidator), + + maxClusterServiceNum: reduceToPayload(ActionType.IC_MaxClusterServiceNum, 256), + + maxNodePodNum: reduceToPayload(ActionType.IC_MaxNodePodNum, 256), + + k8sVersion: reduceToPayload(ActionType.IC_K8SVersion, ''), + + k8sVersionList: reduceToPayload(ActionType.IC_FetchK8SVersion, []), + + cidr: reduceToPayload(ActionType.IC_Cidr, '10.244.0.0/16'), + + computerList: reduceToPayload(ActionType.IC_ComputerList, []), + computerEdit: reduceToPayload(ActionType.IC_ComputerEdit, null), + vipAddress: reduceToPayload(ActionType.IC_VipAddress, ''), + vipPort: reduceToPayload(ActionType.IC_VipPort, '6443'), + + v_vipAddress: reduceToPayload(ActionType.v_IC_VipAddress, initValidator), + + v_vipPort: reduceToPayload(ActionType.v_IC_VipPort, initValidator), + + vipType: reduceToPayload(ActionType.v_IC_Vip, CreateICVipType.unuse), + + gpu: reduceToPayload(ActionType.v_IC_Gpu, false), + + merticsServer: reduceToPayload(ActionType.v_IC_Mertics_server, true), + + cilium: reduceToPayload(ActionType.v_IC_Cilium, 'Galaxy'), + + networkMode: reduceToPayload(ActionType.v_IC_NetworkMode, 'overlay'), + + asNumber: reduceToPayload(ActionType.IC_AS, ''), + v_asNumber: reduceToPayload(ActionType.v_IC_AS, initValidator), + + switchIp: reduceToPayload(ActionType.IC_SwitchIp, ''), + v_switchIp: reduceToPayload(ActionType.v_IC_SwitchIp, initValidator), + + gpuType: reduceToPayload(ActionType.v_IC_GpuType, GPUTYPE.PGPU), + + containerRuntime: reduceToPayload(ActionType.IC_EnableContainerRuntime, ContainerRuntimeEnum.CONTAINERD) +}); + +export const CreateICReducer = (state, action) => { + let newState = state; + // 销毁创建namespace 页面 + if (action.type === ActionType.IC_Clear) { + newState = undefined; + } + return TempReducer(newState, action); +}; From f6d756f5703600f03cdaa6118bea2f3e5666aa24 Mon Sep 17 00:00:00 2001 From: jo-hnny Date: Wed, 8 Sep 2021 15:36:24 +0800 Subject: [PATCH 43/62] feat(console): when cluster is containerd, disabled open logagent (#1549) --- .../ClusterDetailBasicInfoPanel.tsx | 24 ++++++++------ .../ClusterPlugInfoPanel.tsx | 31 +++++++++++++------ .../src/modules/common/models/Cluster.ts | 2 ++ 3 files changed, 37 insertions(+), 20 deletions(-) diff --git a/web/console/src/modules/cluster/components/resource/clusterInfomation/ClusterDetailBasicInfoPanel.tsx b/web/console/src/modules/cluster/components/resource/clusterInfomation/ClusterDetailBasicInfoPanel.tsx index 4b7465e3e..c3ab0bf02 100644 --- a/web/console/src/modules/cluster/components/resource/clusterInfomation/ClusterDetailBasicInfoPanel.tsx +++ b/web/console/src/modules/cluster/components/resource/clusterInfomation/ClusterDetailBasicInfoPanel.tsx @@ -28,10 +28,11 @@ import { Clip } from '../../../../common/components'; import { DialogNameEnum } from '../../../models'; import { RootProps } from '../../ClusterApp'; import { ClusterStatus } from '../../clusterManage/ClusterTablePanel'; +import { ContainerRuntimeEnum } from '@src/modules/cluster/constants/Config'; export class ClusterDetailBasicInfoPanel extends React.Component { render() { - let { cluster } = this.props; + const { cluster } = this.props; return ( @@ -44,11 +45,11 @@ export class ClusterDetailBasicInfoPanel extends React.Component ); } _renderNodeMax() { - let { cluster } = this.props; - let clusterInfo: Cluster = cluster.selection; + const { cluster } = this.props; + const clusterInfo: Cluster = cluster.selection; if (clusterInfo && clusterInfo.spec.clusterCIDR) { - let b = clusterInfo.spec.clusterCIDR.split('/')[1]; - let { maxNodePodNum, maxClusterServiceNum } = clusterInfo.spec.properties; + const b = clusterInfo.spec.clusterCIDR.split('/')[1]; + const { maxNodePodNum, maxClusterServiceNum } = clusterInfo.spec.properties; return Math.pow(2, 32 - parseInt(b)) / maxNodePodNum - Math.ceil(maxClusterServiceNum / maxNodePodNum); } else { return ''; @@ -56,8 +57,8 @@ export class ClusterDetailBasicInfoPanel extends React.Component } /** 处理开关日志采集组件的的操作 */ private _handleSwitch(cluster: Cluster) { - let { actions, route } = this.props; - let enableLogAgent = !cluster.spec.logAgentName; + const { actions, route } = this.props; + const enableLogAgent = !cluster.spec.logAgentName; if (enableLogAgent) { actions.cluster.enableLogAgent(cluster); } else { @@ -70,9 +71,9 @@ export class ClusterDetailBasicInfoPanel extends React.Component } /** 展示集群的基本信息 */ private _renderClusterInfo() { - let { actions, cluster } = this.props; - let clusterInfo: Cluster = cluster.selection; - let nodeMax = this._renderNodeMax(); + const { actions, cluster } = this.props; + const clusterInfo: Cluster = cluster.selection; + const nodeMax = this._renderNodeMax(); return cluster.selection ? ( @@ -89,6 +90,9 @@ export class ClusterDetailBasicInfoPanel extends React.Component {clusterInfo.status.version} + + {clusterInfo?.spec?.features?.enableContainerRuntime ?? ContainerRuntimeEnum.DOCKER} + {clusterInfo.spec.networkDevice && ( {clusterInfo.spec.networkDevice} diff --git a/web/console/src/modules/cluster/components/resource/clusterInfomation/ClusterPlugInfoPanel.tsx b/web/console/src/modules/cluster/components/resource/clusterInfomation/ClusterPlugInfoPanel.tsx index 532b3049e..045cc37fc 100644 --- a/web/console/src/modules/cluster/components/resource/clusterInfomation/ClusterPlugInfoPanel.tsx +++ b/web/console/src/modules/cluster/components/resource/clusterInfomation/ClusterPlugInfoPanel.tsx @@ -15,22 +15,24 @@ * WARRANTIES OF ANY KIND, either express or implied. See the License for the * specific language governing permissions and limitations under the License. */ -import React, { useEffect } from 'react'; +import React from 'react'; import { FormPanel } from '@tencent/ff-component'; -import { Table, TableColumn, Button, Icon } from '@tea/component'; +import { Table, TableColumn, Button, Icon, Bubble } from '@tea/component'; import { RootProps } from '../../ClusterApp'; import { FetchState } from '@tencent/ff-redux'; import { router } from '../../../router'; +import { ContainerRuntimeEnum } from '@src/modules/cluster/constants/Config'; enum PlugType { Promethus, LogAgent } -export const ClusterPlugInfoPanel: React.FC = ({ cluster, actions, clusterVersion, route }) => { - const targetCluster = cluster.selection; - const { promethus = null, logAgent = null } = targetCluster ? cluster.selection.spec : {}; - const clusterId = targetCluster ? targetCluster.metadata.name : ''; +export const ClusterPlugInfoPanel: React.FC = ({ cluster, actions, route }) => { + const { promethus = null, logAgent = null } = cluster?.selection?.spec ?? {}; + const clusterId = cluster?.selection?.metadata?.name ?? ''; + + const isContainerd = cluster?.selection?.spec?.features?.enableContainerRuntime === ContainerRuntimeEnum.CONTAINERD; const open = (type: PlugType) => () => { switch (type) { @@ -66,6 +68,8 @@ export const ClusterPlugInfoPanel: React.FC = ({ cluster, actions, cl key: 'action', header: '操作', render({ action, type }) { + const disabled = type === PlugType.LogAgent && isContainerd; + return action ? ( <> ) : ( - + + + ); } } @@ -104,7 +110,12 @@ export const ClusterPlugInfoPanel: React.FC = ({ cluster, actions, cl {cluster.list.fetched !== true || cluster.list.fetchState === FetchState.Fetching ? ( ) : ( - +
type === PlugType.LogAgent && isContainerd} + /> )} ); diff --git a/web/console/src/modules/common/models/Cluster.ts b/web/console/src/modules/common/models/Cluster.ts index 44b508025..c4529a4ec 100644 --- a/web/console/src/modules/common/models/Cluster.ts +++ b/web/console/src/modules/common/models/Cluster.ts @@ -15,6 +15,7 @@ * WARRANTIES OF ANY KIND, either express or implied. See the License for the * specific language governing permissions and limitations under the License. */ +import { ContainerRuntimeEnum } from '@src/modules/cluster/constants/Config'; import { Identifiable } from '@tencent/ff-redux'; import { Resource } from './Resource'; @@ -56,6 +57,7 @@ interface ClusterSpec { features?: { ipvs: boolean; public: boolean; + enableContainerRuntime?: ContainerRuntimeEnum; }; /** 集群类型 */ From cfbcf4377784a0687881c603377fc975d19dc6cc Mon Sep 17 00:00:00 2001 From: Leo Ryu Date: Wed, 8 Sep 2021 15:38:56 +0800 Subject: [PATCH 44/62] Revert "feat(platform): proxy cluster version api (#1142)" (#1548) This reverts commit ea282b5da1953a979c09e0c803f530f3e4119be0. --- pkg/apiserver/filter/authentication.go | 1 + pkg/apiserver/openapi/openapi.go | 9 ++++ pkg/platform/apiserver/apiserver.go | 5 -- pkg/platform/proxy/version/rest/rest.go | 72 ------------------------- 4 files changed, 10 insertions(+), 77 deletions(-) delete mode 100644 pkg/platform/proxy/version/rest/rest.go diff --git a/pkg/apiserver/filter/authentication.go b/pkg/apiserver/filter/authentication.go index ecd276f5f..d3865ed68 100644 --- a/pkg/apiserver/filter/authentication.go +++ b/pkg/apiserver/filter/authentication.go @@ -75,6 +75,7 @@ var ( "/metrics", "/debug", "/openapi", + "/version", "/swagger", "/favicon.ico", "/healthz", diff --git a/pkg/apiserver/openapi/openapi.go b/pkg/apiserver/openapi/openapi.go index 7bfd45a0e..9476ec55b 100644 --- a/pkg/apiserver/openapi/openapi.go +++ b/pkg/apiserver/openapi/openapi.go @@ -25,6 +25,7 @@ import ( "strings" "github.com/go-openapi/spec" + "k8s.io/apimachinery/pkg/version" openapinamer "k8s.io/apiserver/pkg/endpoints/openapi" genericapiserver "k8s.io/apiserver/pkg/server" openapicommon "k8s.io/kube-openapi/pkg/common" @@ -43,6 +44,14 @@ func SetupOpenAPI(genericAPIServerConfig *genericapiserver.Config, getDefinition genericAPIServerConfig.OpenAPIConfig.Info.Version = appVersion.GitVersion genericAPIServerConfig.OpenAPIConfig.PostProcessSpec = postProcessOpenAPISpec(host, port) + // version + genericAPIServerConfig.Version = &version.Info{ + GitVersion: appVersion.GitVersion, + BuildDate: appVersion.BuildDate, + GoVersion: appVersion.GoVersion, + Compiler: appVersion.Compiler, + Platform: appVersion.Platform, + } } func postProcessOpenAPISpec(host string, port int) func(*spec.Swagger) (*spec.Swagger, error) { diff --git a/pkg/platform/apiserver/apiserver.go b/pkg/platform/apiserver/apiserver.go index 4ad17e0df..05366b645 100644 --- a/pkg/platform/apiserver/apiserver.go +++ b/pkg/platform/apiserver/apiserver.go @@ -71,7 +71,6 @@ import ( schedulingrest "tkestack.io/tke/pkg/platform/proxy/scheduling/rest" settingsrest "tkestack.io/tke/pkg/platform/proxy/settings/rest" storagerest "tkestack.io/tke/pkg/platform/proxy/storage/rest" - versionrest "tkestack.io/tke/pkg/platform/proxy/version/rest" platformrest "tkestack.io/tke/pkg/platform/registry/rest" "tkestack.io/tke/pkg/util/log" ) @@ -204,10 +203,6 @@ func (m *APIServer) InstallAPIs(apiResourceConfigSource serverstorage.APIResourc apiGroupsInfo = append(apiGroupsInfo, apiGroupInfo) } - // install /version route - versionHandler := versionrest.NewVersionProxyHandler(m.GenericAPIServer.LoopbackClientConfig) - versionHandler.Install(m.GenericAPIServer.Handler.GoRestfulContainer) - for i := range apiGroupsInfo { if err := m.GenericAPIServer.InstallAPIGroup(&apiGroupsInfo[i]); err != nil { log.Fatalf("Error in registering group versions: %v", err) diff --git a/pkg/platform/proxy/version/rest/rest.go b/pkg/platform/proxy/version/rest/rest.go deleted file mode 100644 index d37ecf469..000000000 --- a/pkg/platform/proxy/version/rest/rest.go +++ /dev/null @@ -1,72 +0,0 @@ -/* - * Tencent is pleased to support the open source community by making TKEStack - * available. - * - * Copyright (C) 2012-2021 Tencent. All Rights Reserved. - * - * 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 - * - * https://opensource.org/licenses/Apache-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 OF ANY KIND, either express or implied. See the License for the - * specific language governing permissions and limitations under the License. - */ - -package rest - -import ( - "net/http" - - "github.com/emicklei/go-restful" - "k8s.io/client-go/rest" - platforminternalclient "tkestack.io/tke/api/client/clientset/internalversion/typed/platform/internalversion" - "tkestack.io/tke/pkg/platform/proxy" -) - -type VersionProxyHandler struct { - config *rest.Config -} - -func NewVersionProxyHandler(config *rest.Config) *VersionProxyHandler { - return &VersionProxyHandler{ - config: config, - } -} - -// Install install /version route -// Please confirm /version is not in pkg/apiserver/filter/authentication.go defaultIgnoreAuthPathPrefixes -func (s *VersionProxyHandler) Install(c *restful.Container) { - versionWS := new(restful.WebService) - versionWS.Path("/version") - versionWS.Doc("git code version from which this is built") - versionWS.Route( - versionWS.GET("/").To(s.handle). - Doc("get the code version"). - Operation("getVersion"). - Produces(restful.MIME_JSON). - Consumes(restful.MIME_JSON)) - - c.Add(versionWS) -} - -// /version route process -func (s *VersionProxyHandler) handle(req *restful.Request, resp *restful.Response) { - platformClient := platforminternalclient.NewForConfigOrDie(s.config) - client, err := proxy.ClientSet(req.Request.Context(), platformClient) - if err != nil { - resp.WriteHeaderAndEntity(http.StatusBadRequest, err.Error()) - return - } - version, err := client.Discovery().ServerVersion() - - if err != nil { - resp.WriteHeaderAndEntity(http.StatusInternalServerError, err.Error()) - return - } - - resp.WriteHeaderAndEntity(http.StatusOK, version) -} From 019b4eb3138482ee1e47606ab5923cae07007e4e Mon Sep 17 00:00:00 2001 From: jo-hnny Date: Wed, 8 Sep 2021 17:12:20 +0800 Subject: [PATCH 45/62] fix(console): should use spec.features.containerRuntime (#1554) --- .../resource/clusterInfomation/ClusterDetailBasicInfoPanel.tsx | 2 +- .../resource/clusterInfomation/ClusterPlugInfoPanel.tsx | 2 +- web/console/src/modules/common/models/Cluster.ts | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/web/console/src/modules/cluster/components/resource/clusterInfomation/ClusterDetailBasicInfoPanel.tsx b/web/console/src/modules/cluster/components/resource/clusterInfomation/ClusterDetailBasicInfoPanel.tsx index c3ab0bf02..7ef02e7f8 100644 --- a/web/console/src/modules/cluster/components/resource/clusterInfomation/ClusterDetailBasicInfoPanel.tsx +++ b/web/console/src/modules/cluster/components/resource/clusterInfomation/ClusterDetailBasicInfoPanel.tsx @@ -91,7 +91,7 @@ export class ClusterDetailBasicInfoPanel extends React.Component {clusterInfo.status.version} - {clusterInfo?.spec?.features?.enableContainerRuntime ?? ContainerRuntimeEnum.DOCKER} + {clusterInfo?.spec?.features?.containerRuntime ?? ContainerRuntimeEnum.DOCKER} {clusterInfo.spec.networkDevice && ( diff --git a/web/console/src/modules/cluster/components/resource/clusterInfomation/ClusterPlugInfoPanel.tsx b/web/console/src/modules/cluster/components/resource/clusterInfomation/ClusterPlugInfoPanel.tsx index 045cc37fc..4351f53dc 100644 --- a/web/console/src/modules/cluster/components/resource/clusterInfomation/ClusterPlugInfoPanel.tsx +++ b/web/console/src/modules/cluster/components/resource/clusterInfomation/ClusterPlugInfoPanel.tsx @@ -32,7 +32,7 @@ export const ClusterPlugInfoPanel: React.FC = ({ cluster, actions, ro const { promethus = null, logAgent = null } = cluster?.selection?.spec ?? {}; const clusterId = cluster?.selection?.metadata?.name ?? ''; - const isContainerd = cluster?.selection?.spec?.features?.enableContainerRuntime === ContainerRuntimeEnum.CONTAINERD; + const isContainerd = cluster?.selection?.spec?.features?.containerRuntime === ContainerRuntimeEnum.CONTAINERD; const open = (type: PlugType) => () => { switch (type) { diff --git a/web/console/src/modules/common/models/Cluster.ts b/web/console/src/modules/common/models/Cluster.ts index c4529a4ec..ae1c8863f 100644 --- a/web/console/src/modules/common/models/Cluster.ts +++ b/web/console/src/modules/common/models/Cluster.ts @@ -57,7 +57,7 @@ interface ClusterSpec { features?: { ipvs: boolean; public: boolean; - enableContainerRuntime?: ContainerRuntimeEnum; + containerRuntime?: ContainerRuntimeEnum; }; /** 集群类型 */ From 351b9a6e0e9da3acb7d5a5bb710ba4f37e5d8864 Mon Sep 17 00:00:00 2001 From: Lis Date: Wed, 8 Sep 2021 19:13:42 +0800 Subject: [PATCH 46/62] fix(platform): set container runtime as required (#1553) --- api/openapi/zz_generated.openapi.go | 1 + api/platform/types.go | 2 +- api/platform/v1/defaults.go | 6 ++++++ api/platform/v1/generated.proto | 1 - api/platform/v1/types.go | 4 ++-- api/platform/v1/zz_generated.defaults.go | 1 + cmd/tke-installer/app/installer/installer.go | 4 ++++ test/tke/tke.go | 1 + 8 files changed, 16 insertions(+), 4 deletions(-) diff --git a/api/openapi/zz_generated.openapi.go b/api/openapi/zz_generated.openapi.go index 80d0976e4..1a3b15be8 100644 --- a/api/openapi/zz_generated.openapi.go +++ b/api/openapi/zz_generated.openapi.go @@ -47035,6 +47035,7 @@ func schema_tke_api_platform_v1_ClusterFeature(ref common.ReferenceCallback) com }, }, }, + Required: []string{"containerRuntime"}, }, }, Dependencies: []string{ diff --git a/api/platform/types.go b/api/platform/types.go index 409480a0e..543d06af2 100644 --- a/api/platform/types.go +++ b/api/platform/types.go @@ -394,7 +394,7 @@ type ClusterFeature struct { EnableMetricsServer bool // +optional EnableCilium bool - // +optional + ContainerRuntime ContainerRuntimeType // +optional IPv6DualStack bool diff --git a/api/platform/v1/defaults.go b/api/platform/v1/defaults.go index bc61d8797..49020ffb4 100644 --- a/api/platform/v1/defaults.go +++ b/api/platform/v1/defaults.go @@ -126,3 +126,9 @@ func SetDefaults_LBCFStatus(obj *LBCFStatus) { obj.Phase = AddonPhaseInitializing } } + +func SetDefaults_ClusterFeature(obj *ClusterFeature) { + if obj.ContainerRuntime == "" { + obj.ContainerRuntime = Docker + } +} diff --git a/api/platform/v1/generated.proto b/api/platform/v1/generated.proto index d3c008532..29e54f957 100644 --- a/api/platform/v1/generated.proto +++ b/api/platform/v1/generated.proto @@ -393,7 +393,6 @@ message ClusterFeature { // +optional optional bool enableCilium = 14; - // +optional optional string containerRuntime = 15; // Upgrade control upgrade process. diff --git a/api/platform/v1/types.go b/api/platform/v1/types.go index d002d876e..79af63ba7 100644 --- a/api/platform/v1/types.go +++ b/api/platform/v1/types.go @@ -402,8 +402,8 @@ type ClusterFeature struct { IPv6DualStack bool `json:"ipv6DualStack,omitempty" protobuf:"bytes,13,opt,name=ipv6DualStack"` // +optional EnableCilium bool `json:"enableCilium,omitempty" protobuf:"bytes,14,opt,name=enableCilium"` - // +optional - ContainerRuntime ContainerRuntimeType `json:"containerRuntime,omitempty" protobuf:"bytes,15,opt,name=containerRuntime"` + + ContainerRuntime ContainerRuntimeType `json:"containerRuntime" protobuf:"bytes,15,opt,name=containerRuntime"` // Upgrade control upgrade process. // +optional Upgrade Upgrade `json:"upgrade,omitempty" protobuf:"bytes,22,opt,name=upgrade"` diff --git a/api/platform/v1/zz_generated.defaults.go b/api/platform/v1/zz_generated.defaults.go index e41cb7f08..7ca063ada 100644 --- a/api/platform/v1/zz_generated.defaults.go +++ b/api/platform/v1/zz_generated.defaults.go @@ -73,6 +73,7 @@ func SetObjectDefaults_CSIOperatorList(in *CSIOperatorList) { func SetObjectDefaults_Cluster(in *Cluster) { SetDefaults_ClusterSpec(&in.Spec) + SetDefaults_ClusterFeature(&in.Spec.Features) for i := range in.Spec.BootstrapApps { a := &in.Spec.BootstrapApps[i] applicationv1.SetDefaults_AppSpec(&a.App.Spec) diff --git a/cmd/tke-installer/app/installer/installer.go b/cmd/tke-installer/app/installer/installer.go index d0a883bac..c7d5f338c 100644 --- a/cmd/tke-installer/app/installer/installer.go +++ b/cmd/tke-installer/app/installer/installer.go @@ -1188,6 +1188,10 @@ func (t *TKE) createGlobalCluster(ctx context.Context) error { } t.completeWithProvider() + if len(t.Cluster.Spec.Features.ContainerRuntime) == 0 { + t.Cluster.Spec.Features.ContainerRuntime = platformv1.Containerd + } + if t.Cluster.Spec.ClusterCredentialRef == nil { credential := &platformv1.ClusterCredential{ ObjectMeta: metav1.ObjectMeta{ diff --git a/test/tke/tke.go b/test/tke/tke.go index 6ca906965..fce361386 100644 --- a/test/tke/tke.go +++ b/test/tke/tke.go @@ -66,6 +66,7 @@ func (testTke *TestTKE) ClusterTemplate(nodes ...cloudprovider.Instance) *platfo Features: platformv1.ClusterFeature{ HA: &platformv1.HA{}, EnableMasterSchedule: true, + ContainerRuntime: platformv1.Containerd, }, Version: env.K8sVersion(), ClusterCIDR: "10.244.0.0/16", From 890c472f1ab25d9bb60ae11b19aac3dc1e88d288 Mon Sep 17 00:00:00 2001 From: Leo Ryu Date: Thu, 9 Sep 2021 20:56:21 +0800 Subject: [PATCH 47/62] fix(installer): global cls use containerd (#1558) --- cmd/tke-installer/app/installer/installer.go | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/cmd/tke-installer/app/installer/installer.go b/cmd/tke-installer/app/installer/installer.go index c7d5f338c..d248edff2 100644 --- a/cmd/tke-installer/app/installer/installer.go +++ b/cmd/tke-installer/app/installer/installer.go @@ -1188,9 +1188,7 @@ func (t *TKE) createGlobalCluster(ctx context.Context) error { } t.completeWithProvider() - if len(t.Cluster.Spec.Features.ContainerRuntime) == 0 { - t.Cluster.Spec.Features.ContainerRuntime = platformv1.Containerd - } + t.Cluster.Spec.Features.ContainerRuntime = platformv1.Containerd if t.Cluster.Spec.ClusterCredentialRef == nil { credential := &platformv1.ClusterCredential{ From 7ae93e8ff2eeaab4c4a6ca2188ed244b865853f5 Mon Sep 17 00:00:00 2001 From: GaoXiaodong <13814823514@163.com> Date: Fri, 10 Sep 2021 11:11:30 +0800 Subject: [PATCH 48/62] fix(platform): add options conversion-gen (#1559) Co-authored-by: xdonggao --- api/logagent/v1/zz_generated.conversion.go | 1 - api/platform/types.go | 6 + api/platform/v1/types.go | 6 + api/platform/v1/zz_generated.conversion.go | 160 ++++++++++++++++++++- 4 files changed, 171 insertions(+), 2 deletions(-) diff --git a/api/logagent/v1/zz_generated.conversion.go b/api/logagent/v1/zz_generated.conversion.go index 1c445df7e..6d6871c49 100644 --- a/api/logagent/v1/zz_generated.conversion.go +++ b/api/logagent/v1/zz_generated.conversion.go @@ -1,4 +1,3 @@ -//go:build !ignore_autogenerated // +build !ignore_autogenerated /* diff --git a/api/platform/types.go b/api/platform/types.go index 543d06af2..02eeefb6b 100644 --- a/api/platform/types.go +++ b/api/platform/types.go @@ -688,6 +688,7 @@ type ClusterAddonTypeList struct { Items []ClusterAddonType } +// +k8s:conversion-gen:explicit-from=net/url.Values // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object // ClusterApplyOptions is the query options to a kube-apiserver proxy call for cluster object. @@ -994,6 +995,7 @@ const ( AddonPhaseUnknown AddonPhase = "Unknown" ) +// +k8s:conversion-gen:explicit-from=net/url.Values // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object // IPAMProxyOptions is the query options to a Helm-api proxy call. @@ -1191,6 +1193,7 @@ type TappControllerStatus struct { LastReInitializingTimestamp metav1.Time } +// +k8s:conversion-gen:explicit-from=net/url.Values // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object // CSIProxyOptions is the query options to a kube-apiserver proxy call for CSI crd object. @@ -1261,6 +1264,7 @@ type CSIOperatorStatus struct { LastReInitializingTimestamp metav1.Time } +// +k8s:conversion-gen:explicit-from=net/url.Values // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object // PVCRProxyOptions is the query options to a kube-apiserver proxy call for PVCR crd object. @@ -1632,6 +1636,7 @@ type CronHPAStatus struct { LastReInitializingTimestamp metav1.Time } +// +k8s:conversion-gen:explicit-from=net/url.Values // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object // LBCFProxyOptions is the query options to a kube-apiserver proxy call. @@ -1754,6 +1759,7 @@ type ClusterGroupAPIResourceItem struct { Categories []string } +// +k8s:conversion-gen:explicit-from=net/url.Values // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object // ClusterGroupAPIResourceOptions is the query options. diff --git a/api/platform/v1/types.go b/api/platform/v1/types.go index 79af63ba7..2a59079f5 100644 --- a/api/platform/v1/types.go +++ b/api/platform/v1/types.go @@ -703,6 +703,7 @@ type ClusterAddonTypeList struct { Items []ClusterAddonType `json:"items,omitempty" protobuf:"bytes,2,opt,name=items"` } +// +k8s:conversion-gen:explicit-from=net/url.Values // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object // ClusterApplyOptions is the query options to a kube-apiserver proxy call for cluster object. @@ -1016,6 +1017,7 @@ const ( AddonPhaseUnknown AddonPhase = "Unknown" ) +// +k8s:conversion-gen:explicit-from=net/url.Values // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object // IPAMProxyOptions is the query options to a ipam-api proxy call. @@ -1214,6 +1216,7 @@ type TappControllerStatus struct { LastReInitializingTimestamp metav1.Time `json:"lastReInitializingTimestamp" protobuf:"bytes,5,name=lastReInitializingTimestamp"` } +// +k8s:conversion-gen:explicit-from=net/url.Values // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object // CSIProxyOptions is the query options to a kube-apiserver proxy call for CSI crd object. @@ -1284,6 +1287,7 @@ type CSIOperatorStatus struct { LastReInitializingTimestamp metav1.Time `json:"lastReInitializingTimestamp" protobuf:"bytes,6,name=lastReInitializingTimestamp"` } +// +k8s:conversion-gen:explicit-from=net/url.Values // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object // PVCRProxyOptions is the query options to a kube-apiserver proxy call for PVCR crd object. @@ -1660,6 +1664,7 @@ type CronHPAStatus struct { LastReInitializingTimestamp metav1.Time `json:"lastReInitializingTimestamp" protobuf:"bytes,5,name=lastReInitializingTimestamp"` } +// +k8s:conversion-gen:explicit-from=net/url.Values // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object // LBCFProxyOptions is the query options to a kube-apiserver proxy call. @@ -1782,6 +1787,7 @@ type ClusterGroupAPIResourceItem struct { Categories []string `protobuf:"bytes,9,rep,name=categories"` } +// +k8s:conversion-gen:explicit-from=net/url.Values // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object // ClusterGroupAPIResourceOptions is the query options. diff --git a/api/platform/v1/zz_generated.conversion.go b/api/platform/v1/zz_generated.conversion.go index bf9dbb188..298d9a4f8 100644 --- a/api/platform/v1/zz_generated.conversion.go +++ b/api/platform/v1/zz_generated.conversion.go @@ -1,4 +1,3 @@ -//go:build !ignore_autogenerated // +build !ignore_autogenerated /* @@ -1091,6 +1090,21 @@ func RegisterConversions(s *runtime.Scheme) error { }); err != nil { return err } + if err := s.AddGeneratedConversionFunc((*url.Values)(nil), (*CSIProxyOptions)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_url_Values_To_v1_CSIProxyOptions(a.(*url.Values), b.(*CSIProxyOptions), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*url.Values)(nil), (*ClusterApplyOptions)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_url_Values_To_v1_ClusterApplyOptions(a.(*url.Values), b.(*ClusterApplyOptions), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*url.Values)(nil), (*ClusterGroupAPIResourceOptions)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_url_Values_To_v1_ClusterGroupAPIResourceOptions(a.(*url.Values), b.(*ClusterGroupAPIResourceOptions), scope) + }); err != nil { + return err + } if err := s.AddGeneratedConversionFunc((*url.Values)(nil), (*CronHPAProxyOptions)(nil), func(a, b interface{}, scope conversion.Scope) error { return Convert_url_Values_To_v1_CronHPAProxyOptions(a.(*url.Values), b.(*CronHPAProxyOptions), scope) }); err != nil { @@ -1101,11 +1115,26 @@ func RegisterConversions(s *runtime.Scheme) error { }); err != nil { return err } + if err := s.AddGeneratedConversionFunc((*url.Values)(nil), (*IPAMProxyOptions)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_url_Values_To_v1_IPAMProxyOptions(a.(*url.Values), b.(*IPAMProxyOptions), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*url.Values)(nil), (*LBCFProxyOptions)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_url_Values_To_v1_LBCFProxyOptions(a.(*url.Values), b.(*LBCFProxyOptions), scope) + }); err != nil { + return err + } if err := s.AddGeneratedConversionFunc((*url.Values)(nil), (*LogCollectorProxyOptions)(nil), func(a, b interface{}, scope conversion.Scope) error { return Convert_url_Values_To_v1_LogCollectorProxyOptions(a.(*url.Values), b.(*LogCollectorProxyOptions), scope) }); err != nil { return err } + if err := s.AddGeneratedConversionFunc((*url.Values)(nil), (*PVCRProxyOptions)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_url_Values_To_v1_PVCRProxyOptions(a.(*url.Values), b.(*PVCRProxyOptions), scope) + }); err != nil { + return err + } if err := s.AddGeneratedConversionFunc((*url.Values)(nil), (*TappControllerProxyOptions)(nil), func(a, b interface{}, scope conversion.Scope) error { return Convert_url_Values_To_v1_TappControllerProxyOptions(a.(*url.Values), b.(*TappControllerProxyOptions), scope) }); err != nil { @@ -1350,6 +1379,31 @@ func Convert_platform_CSIProxyOptions_To_v1_CSIProxyOptions(in *platform.CSIProx return autoConvert_platform_CSIProxyOptions_To_v1_CSIProxyOptions(in, out, s) } +func autoConvert_url_Values_To_v1_CSIProxyOptions(in *url.Values, out *CSIProxyOptions, s conversion.Scope) error { + // WARNING: Field TypeMeta does not have json tag, skipping. + + if values, ok := map[string][]string(*in)["namespace"]; ok && len(values) > 0 { + if err := runtime.Convert_Slice_string_To_string(&values, &out.Namespace, s); err != nil { + return err + } + } else { + out.Namespace = "" + } + if values, ok := map[string][]string(*in)["name"]; ok && len(values) > 0 { + if err := runtime.Convert_Slice_string_To_string(&values, &out.Name, s); err != nil { + return err + } + } else { + out.Name = "" + } + return nil +} + +// Convert_url_Values_To_v1_CSIProxyOptions is an autogenerated conversion function. +func Convert_url_Values_To_v1_CSIProxyOptions(in *url.Values, out *CSIProxyOptions, s conversion.Scope) error { + return autoConvert_url_Values_To_v1_CSIProxyOptions(in, out, s) +} + func autoConvert_v1_Cluster_To_platform_Cluster(in *Cluster, out *platform.Cluster, s conversion.Scope) error { out.ObjectMeta = in.ObjectMeta if err := Convert_v1_ClusterSpec_To_platform_ClusterSpec(&in.Spec, &out.Spec, s); err != nil { @@ -1582,6 +1636,24 @@ func Convert_platform_ClusterApplyOptions_To_v1_ClusterApplyOptions(in *platform return autoConvert_platform_ClusterApplyOptions_To_v1_ClusterApplyOptions(in, out, s) } +func autoConvert_url_Values_To_v1_ClusterApplyOptions(in *url.Values, out *ClusterApplyOptions, s conversion.Scope) error { + // WARNING: Field TypeMeta does not have json tag, skipping. + + if values, ok := map[string][]string(*in)["notUpdate"]; ok && len(values) > 0 { + if err := runtime.Convert_Slice_string_To_bool(&values, &out.NotUpdate, s); err != nil { + return err + } + } else { + out.NotUpdate = false + } + return nil +} + +// Convert_url_Values_To_v1_ClusterApplyOptions is an autogenerated conversion function. +func Convert_url_Values_To_v1_ClusterApplyOptions(in *url.Values, out *ClusterApplyOptions, s conversion.Scope) error { + return autoConvert_url_Values_To_v1_ClusterApplyOptions(in, out, s) +} + func autoConvert_v1_ClusterComponent_To_platform_ClusterComponent(in *ClusterComponent, out *platform.ClusterComponent, s conversion.Scope) error { out.Type = in.Type if err := Convert_v1_ClusterComponentReplicas_To_platform_ClusterComponentReplicas(&in.Replicas, &out.Replicas, s); err != nil { @@ -1886,6 +1958,17 @@ func Convert_platform_ClusterGroupAPIResourceOptions_To_v1_ClusterGroupAPIResour return autoConvert_platform_ClusterGroupAPIResourceOptions_To_v1_ClusterGroupAPIResourceOptions(in, out, s) } +func autoConvert_url_Values_To_v1_ClusterGroupAPIResourceOptions(in *url.Values, out *ClusterGroupAPIResourceOptions, s conversion.Scope) error { + // WARNING: Field TypeMeta does not have json tag, skipping. + + return nil +} + +// Convert_url_Values_To_v1_ClusterGroupAPIResourceOptions is an autogenerated conversion function. +func Convert_url_Values_To_v1_ClusterGroupAPIResourceOptions(in *url.Values, out *ClusterGroupAPIResourceOptions, s conversion.Scope) error { + return autoConvert_url_Values_To_v1_ClusterGroupAPIResourceOptions(in, out, s) +} + func autoConvert_v1_ClusterList_To_platform_ClusterList(in *ClusterList, out *platform.ClusterList, s conversion.Scope) error { out.ListMeta = in.ListMeta if in.Items != nil { @@ -2677,6 +2760,24 @@ func Convert_platform_IPAMProxyOptions_To_v1_IPAMProxyOptions(in *platform.IPAMP return autoConvert_platform_IPAMProxyOptions_To_v1_IPAMProxyOptions(in, out, s) } +func autoConvert_url_Values_To_v1_IPAMProxyOptions(in *url.Values, out *IPAMProxyOptions, s conversion.Scope) error { + // WARNING: Field TypeMeta does not have json tag, skipping. + + if values, ok := map[string][]string(*in)["path"]; ok && len(values) > 0 { + if err := runtime.Convert_Slice_string_To_string(&values, &out.Path, s); err != nil { + return err + } + } else { + out.Path = "" + } + return nil +} + +// Convert_url_Values_To_v1_IPAMProxyOptions is an autogenerated conversion function. +func Convert_url_Values_To_v1_IPAMProxyOptions(in *url.Values, out *IPAMProxyOptions, s conversion.Scope) error { + return autoConvert_url_Values_To_v1_IPAMProxyOptions(in, out, s) +} + func autoConvert_v1_IPAMSpec_To_platform_IPAMSpec(in *IPAMSpec, out *platform.IPAMSpec, s conversion.Scope) error { out.TenantID = in.TenantID out.ClusterName = in.ClusterName @@ -2807,6 +2908,38 @@ func Convert_platform_LBCFProxyOptions_To_v1_LBCFProxyOptions(in *platform.LBCFP return autoConvert_platform_LBCFProxyOptions_To_v1_LBCFProxyOptions(in, out, s) } +func autoConvert_url_Values_To_v1_LBCFProxyOptions(in *url.Values, out *LBCFProxyOptions, s conversion.Scope) error { + // WARNING: Field TypeMeta does not have json tag, skipping. + + if values, ok := map[string][]string(*in)["namespace"]; ok && len(values) > 0 { + if err := runtime.Convert_Slice_string_To_string(&values, &out.Namespace, s); err != nil { + return err + } + } else { + out.Namespace = "" + } + if values, ok := map[string][]string(*in)["name"]; ok && len(values) > 0 { + if err := runtime.Convert_Slice_string_To_string(&values, &out.Name, s); err != nil { + return err + } + } else { + out.Name = "" + } + if values, ok := map[string][]string(*in)["action"]; ok && len(values) > 0 { + if err := runtime.Convert_Slice_string_To_string(&values, &out.Action, s); err != nil { + return err + } + } else { + out.Action = "" + } + return nil +} + +// Convert_url_Values_To_v1_LBCFProxyOptions is an autogenerated conversion function. +func Convert_url_Values_To_v1_LBCFProxyOptions(in *url.Values, out *LBCFProxyOptions, s conversion.Scope) error { + return autoConvert_url_Values_To_v1_LBCFProxyOptions(in, out, s) +} + func autoConvert_v1_LBCFSpec_To_platform_LBCFSpec(in *LBCFSpec, out *platform.LBCFSpec, s conversion.Scope) error { out.TenantID = in.TenantID out.ClusterName = in.ClusterName @@ -3282,6 +3415,31 @@ func Convert_platform_PVCRProxyOptions_To_v1_PVCRProxyOptions(in *platform.PVCRP return autoConvert_platform_PVCRProxyOptions_To_v1_PVCRProxyOptions(in, out, s) } +func autoConvert_url_Values_To_v1_PVCRProxyOptions(in *url.Values, out *PVCRProxyOptions, s conversion.Scope) error { + // WARNING: Field TypeMeta does not have json tag, skipping. + + if values, ok := map[string][]string(*in)["namespace"]; ok && len(values) > 0 { + if err := runtime.Convert_Slice_string_To_string(&values, &out.Namespace, s); err != nil { + return err + } + } else { + out.Namespace = "" + } + if values, ok := map[string][]string(*in)["name"]; ok && len(values) > 0 { + if err := runtime.Convert_Slice_string_To_string(&values, &out.Name, s); err != nil { + return err + } + } else { + out.Name = "" + } + return nil +} + +// Convert_url_Values_To_v1_PVCRProxyOptions is an autogenerated conversion function. +func Convert_url_Values_To_v1_PVCRProxyOptions(in *url.Values, out *PVCRProxyOptions, s conversion.Scope) error { + return autoConvert_url_Values_To_v1_PVCRProxyOptions(in, out, s) +} + func autoConvert_v1_PersistentBackEnd_To_platform_PersistentBackEnd(in *PersistentBackEnd, out *platform.PersistentBackEnd, s conversion.Scope) error { out.CLS = (*platform.StorageBackEndCLS)(unsafe.Pointer(in.CLS)) out.ES = (*platform.StorageBackEndES)(unsafe.Pointer(in.ES)) From da8e0d602233116f4cf97dacd2c8a9f6b1fc500f Mon Sep 17 00:00:00 2001 From: Lis Date: Fri, 10 Sep 2021 11:30:21 +0800 Subject: [PATCH 49/62] fix(platform): check cni config file (#1557) --- .../provider/baremetal/constants/constants.go | 2 +- .../provider/baremetal/preflight/checks.go | 26 ++++++++++++++++++- pkg/util/ssh/interface.go | 5 +++- pkg/util/ssh/ssh.go | 5 ++++ 4 files changed, 35 insertions(+), 3 deletions(-) diff --git a/pkg/platform/provider/baremetal/constants/constants.go b/pkg/platform/provider/baremetal/constants/constants.go index d01220a57..be128bd1e 100644 --- a/pkg/platform/provider/baremetal/constants/constants.go +++ b/pkg/platform/provider/baremetal/constants/constants.go @@ -57,7 +57,7 @@ const ( DstBinDir = "/usr/bin/" CNIBinDir = "/opt/cni/bin/" CNIDataDir = "/var/lib/cni/" - CNIConfDIr = "/etc/cni" + CNIConfDIr = "/etc/cni/net.d" AppCertDir = "/app/certs/" // AppCert diff --git a/pkg/platform/provider/baremetal/preflight/checks.go b/pkg/platform/provider/baremetal/preflight/checks.go index ace006a81..abd75a23e 100644 --- a/pkg/platform/provider/baremetal/preflight/checks.go +++ b/pkg/platform/provider/baremetal/preflight/checks.go @@ -64,7 +64,7 @@ func newCommonChecks(c *v1.Cluster, s ssh.Interface) []Checker { FileAvailableCheck{Interface: s, Path: constants.KubectlConfigFile}, - DirAvailableCheck{Interface: s, Path: constants.CNIConfDIr}, + DirEmptyCheck{Interface: s, Path: constants.CNIConfDIr}, DirAvailableCheck{Interface: s, Path: constants.CNIDataDir}, PortOpenCheck{Interface: s, port: constants.ProxyHealthzPort}, @@ -389,6 +389,30 @@ func (dac DirAvailableCheck) Check() (warnings, errorList []error) { return nil, errorList } +// DirEmptyCheck checks if the given directory either does not exist, or is empty. +type DirEmptyCheck struct { + ssh.Interface + Path string + Label string +} + +// Name returns label for individual DirEmptyCheck. If not known, will return based on path. +func (dmc DirEmptyCheck) Name() string { + if dmc.Label != "" { + return dmc.Label + } + return fmt.Sprintf("DirEmptyCheck-%s", strings.Replace(dmc.Path, "/", "-", -1)) +} + +// Check validates if a directory is empty. +func (dmc DirEmptyCheck) Check() (warnings, errorList []error) { + if res, err := dmc.ReadDir(dmc.Path); err == nil && len(res) != 0 { + errorList = append(errorList, errors.Errorf("%s not empty dir", dmc.Path)) + } + + return nil, errorList +} + // Check the kernel version and kernel parameter for Cilium installation. type KernelParameterCheck struct { ssh.Interface diff --git a/pkg/util/ssh/interface.go b/pkg/util/ssh/interface.go index f9a4ff7f7..047f5072c 100644 --- a/pkg/util/ssh/interface.go +++ b/pkg/util/ssh/interface.go @@ -18,7 +18,9 @@ package ssh -import "io" +import ( + "io" +) type Interface interface { Ping() error @@ -30,6 +32,7 @@ type Interface interface { CopyFile(src, dst string) error WriteFile(src io.Reader, dst string) error ReadFile(filename string) ([]byte, error) + ReadDir(dirname string) (string, error) Exist(filename string) (bool, error) LookPath(file string) (string, error) diff --git a/pkg/util/ssh/ssh.go b/pkg/util/ssh/ssh.go index a60c3d417..2b973e465 100644 --- a/pkg/util/ssh/ssh.go +++ b/pkg/util/ssh/ssh.go @@ -245,6 +245,11 @@ func (s *SSH) LookPath(file string) (string, error) { return string(data), err } +func (s *SSH) ReadDir(dir string) (string, error) { + data, err := s.CombinedOutput(fmt.Sprintf("ls %s", dir)) + return string(data), err +} + func (s *SSH) writeFile(src io.Reader, dst string) error { log.Debugf("[%s] Write data to %q", s.addr(), dst) From 8cb8d1000dcf92e3072d857118ee85a1bf61ed0e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=88=98=E7=A5=9E=E8=A5=BF=E7=BA=A2=E6=9F=BF?= <34213033+TomatoAres@users.noreply.github.com> Date: Fri, 10 Sep 2021 17:02:31 +0800 Subject: [PATCH 50/62] feat(platform): bump k8s to 1.21.4-tke (#1555) Co-authored-by: Cui Shuaijie --- build/docker/tools/provider-res/Makefile | 2 +- build/docker/tools/tke-installer/release.sh | 2 +- cmd/tke-installer/app/installer/images/images.go | 2 +- pkg/spec/spec.go | 2 +- test/e2e_installer/cluster/cluster_test.go | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/build/docker/tools/provider-res/Makefile b/build/docker/tools/provider-res/Makefile index 40fc65c3f..df5c50a01 100644 --- a/build/docker/tools/provider-res/Makefile +++ b/build/docker/tools/provider-res/Makefile @@ -15,7 +15,7 @@ # specific language governing permissions and limitations under the License. IMAGE = provider-res -VERSION = v1.20.4-2 +VERSION = v1.21.4-1 REGISTRY_PREFIX ?= tkestack COMMON_SELF_DIR := $(dir $(lastword $(MAKEFILE_LIST))) diff --git a/build/docker/tools/tke-installer/release.sh b/build/docker/tools/tke-installer/release.sh index cb7d6c630..b48e4f4f1 100755 --- a/build/docker/tools/tke-installer/release.sh +++ b/build/docker/tools/tke-installer/release.sh @@ -23,7 +23,7 @@ set -o pipefail REGISTRY_PREFIX=${REGISTRY_PREFIX:-tkestack} BUILDER=${BUILDER:-default} VERSION=${VERSION:-$(git describe --dirty --always --tags | sed 's/-/./g')} -PROVIDER_RES_VERSION=v1.20.4-2 +PROVIDER_RES_VERSION=v1.21.4-1 K8S_VERSION=${PROVIDER_RES_VERSION%-*} DOCKER_VERSION=19.03.14 CONTAINERD_VERSION=1.5.4 diff --git a/cmd/tke-installer/app/installer/images/images.go b/cmd/tke-installer/app/installer/images/images.go index 7fad582f5..03ee6968f 100644 --- a/cmd/tke-installer/app/installer/images/images.go +++ b/cmd/tke-installer/app/installer/images/images.go @@ -76,7 +76,7 @@ var components = Components{ InfluxDB: containerregistry.Image{Name: "influxdb", Tag: "1.7.9"}, Thanos: containerregistry.Image{Name: "thanos", Tag: "v0.15.0"}, - ProviderRes: containerregistry.Image{Name: "provider-res", Tag: "v1.20.4-2"}, + ProviderRes: containerregistry.Image{Name: "provider-res", Tag: "v1.21.4-1"}, TKEAuthAPI: containerregistry.Image{Name: "tke-auth-api", Tag: Version}, TKEAuthController: containerregistry.Image{Name: "tke-auth-controller", Tag: Version}, diff --git a/pkg/spec/spec.go b/pkg/spec/spec.go index 7d4c9f237..950e5f731 100644 --- a/pkg/spec/spec.go +++ b/pkg/spec/spec.go @@ -31,7 +31,7 @@ var ( OSs = []string{"linux"} K8sVersionConstraint = ">= 1.10" - K8sVersions = []string{"1.20.4-tke.1", "1.20.4", "1.19.7", "1.18.3"} + K8sVersions = []string{"1.21.4-tke.1", "1.20.4-tke.1", "1.20.4", "1.19.7"} K8sVersionsWithV = funk.Map(K8sVersions, func(s string) string { return "v" + s }).([]string) diff --git a/test/e2e_installer/cluster/cluster_test.go b/test/e2e_installer/cluster/cluster_test.go index 69857be59..28a6e8231 100644 --- a/test/e2e_installer/cluster/cluster_test.go +++ b/test/e2e_installer/cluster/cluster_test.go @@ -115,7 +115,7 @@ var _ = Describe("cluster", func() { Expect(cls.Spec.Version).Should(Equal(newVersion), "Cluster version is wrong") }, Entry("1.19.7->1.20.4", "1.19.7", "1.20.4"), - Entry("1.18.3->1.19.7", "1.18.3", "1.19.7")) + Entry("1.20.4->1.21.4-tke.1", "1.20.4", "1.21.4-tke.1")) It("Cluster scaling", func() { // Prepare two instances From fe51d7d4363ca4882d53cd657cd00c06366d0f0b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=88=98=E7=A5=9E=E8=A5=BF=E7=BA=A2=E6=9F=BF?= <34213033+TomatoAres@users.noreply.github.com> Date: Mon, 13 Sep 2021 18:52:27 +0800 Subject: [PATCH 51/62] feat(installer): coredns version is fixed to 1.7 (#1562) Co-authored-by: Cui Shuaijie --- pkg/platform/provider/baremetal/cluster/kubeadm.go | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/pkg/platform/provider/baremetal/cluster/kubeadm.go b/pkg/platform/provider/baremetal/cluster/kubeadm.go index 13aafd019..eaac2fc14 100644 --- a/pkg/platform/provider/baremetal/cluster/kubeadm.go +++ b/pkg/platform/provider/baremetal/cluster/kubeadm.go @@ -182,6 +182,10 @@ func (p *Provider) getClusterConfiguration(c *v1.Cluster) *kubeadmv1beta2.Cluste }, DNS: kubeadmv1beta2.DNS{ Type: kubeadmv1beta2.CoreDNS, + ImageMeta: kubeadmv1beta2.ImageMeta{ + ImageRepository: p.config.Registry.Prefix, + ImageTag: images.Get().CoreDNS.Tag, + }, }, ImageRepository: p.config.Registry.Prefix, ClusterName: c.Name, From 5ffc56c33515a29ec82a68869b9b378c8d1c349c Mon Sep 17 00:00:00 2001 From: jo-hnny Date: Tue, 14 Sep 2021 14:47:46 +0800 Subject: [PATCH 52/62] feat(console): upgrade clear node sh (#1563) --- .../src/modules/cluster/constants/Config.ts | 38 +++++++++++-------- 1 file changed, 23 insertions(+), 15 deletions(-) diff --git a/web/console/src/modules/cluster/constants/Config.ts b/web/console/src/modules/cluster/constants/Config.ts index 9c4216c1a..12a0a174e 100644 --- a/web/console/src/modules/cluster/constants/Config.ts +++ b/web/console/src/modules/cluster/constants/Config.ts @@ -704,29 +704,37 @@ export const LbcfArgsConfig = [ ]; export const clearNodeSH = `#!/bin/bash -rm -rf /etc/kubernetes - -systemctl stop kubelet 2>/dev/null - -docker rm -f $(docker ps -aq) 2>/dev/null -systemctl stop docker 2>/dev/null +# common +kubeadm reset -f +rm -fv /root/.kube/config +rm -rfv /etc/kubernetes +rm -rfv /var/lib/kubelet +rm -rfv /var/lib/etcd +rm -rfv /var/lib/cni +rm -rfv /etc/cni +rm -rfv /var/lib/tke-registry-api +rm -rfv /opt/tke-installer +rm -rfv /var/lib/postgresql /etc/core/token /var/lib/redis /storage /chart_storage ip link del cni0 2>/etc/null for port in 80 2379 6443 8086 {10249..10259} ; do fuser -k -9 \${port}/tcp done -rm -rfv /etc/kubernetes +# docker +docker rm -f $(docker ps -aq) 2>/dev/null +systemctl disable docker 2>/dev/null +systemctl stop docker 2>/dev/null rm -rfv /etc/docker -rm -fv /root/.kube/config -rm -rfv /var/lib/kubelet -rm -rfv /var/lib/cni -rm -rfv /etc/cni -rm -rfv /var/lib/etcd -rm -rfv /var/lib/postgresql /etc/core/token /var/lib/redis /storage /chart_storage - -systemctl start docker 2>/dev/null`; +ip link del docker0 2>/etc/null + +# containerd +nerdctl rm -f $(nerdctl ps -aq) 2>/dev/null +ip netns list | cut -d' ' -f 1 | xargs -n1 ip netns delete 2>/dev/null +systemctl disable containerd 2>/dev/null +systemctl stop containerd 2>/dev/null +rm -rfv /var/lib/nerdctl/*`; export enum GPUTYPE { PGPU = 'Physical', From 5383f570ad51d14615e240018f9876a04a396d07 Mon Sep 17 00:00:00 2001 From: Leo Ryu Date: Tue, 14 Sep 2021 17:32:46 +0800 Subject: [PATCH 53/62] feat(installer): update need upgrade coms (#1566) --- cmd/tke-installer/app/installer/upgrader.go | 91 +++++++++++++-------- 1 file changed, 59 insertions(+), 32 deletions(-) diff --git a/cmd/tke-installer/app/installer/upgrader.go b/cmd/tke-installer/app/installer/upgrader.go index 9771a9bf7..831e3684f 100644 --- a/cmd/tke-installer/app/installer/upgrader.go +++ b/cmd/tke-installer/app/installer/upgrader.go @@ -121,6 +121,10 @@ func (t *TKE) upgradeSteps() { }...) } t.steps = append(t.steps, []types.Handler{ + { + Name: "Prepare images before upgrade", + Func: t.prepareImages, + }, { Name: "Upgrade tke-platform-api", Func: t.upgradeTKEPlatformAPI, @@ -137,6 +141,27 @@ func (t *TKE) upgradeSteps() { Name: "Upgrade tke-monitor-controller", Func: t.upgradeTKEMonitorController, }, + { + Name: "Upgrade tke-application-api", + Func: t.upgradeTKEApplicationAPI, + }, + { + Name: "Upgrade tke-application-controller", + Func: t.upgradeTKEApplicationController, + }, + { + Name: "Upgrade tke-logagent-api", + Func: t.upgradeTKELogagentAPI, + }, + { + Name: "Upgrade tke-logagent-controller", + Func: t.upgradeTKELogagentController, + }, + // upgrade gateway should always be the last com to upgrade + { + Name: "Upgrade tke-gateway", + Func: t.upgradeTKEGateway, + }, }...) t.steps = append(t.steps, []types.Handler{ @@ -179,29 +204,7 @@ func (t *TKE) upgradeSteps() { } func (t *TKE) upgradeTKEPlatformAPI(ctx context.Context) error { - com := "tke-platform-api" - depl, err := t.globalClient.AppsV1().Deployments(t.namespace).Get(ctx, com, metav1.GetOptions{}) - if err != nil { - return err - } - - if len(depl.Spec.Template.Spec.Containers) == 0 { - return fmt.Errorf("%s has no containers", com) - } - depl.Spec.Template.Spec.Containers[0].Image = images.Get().TKEPlatformAPI.FullName() - - _, err = t.globalClient.AppsV1().Deployments(t.namespace).Update(ctx, depl, metav1.UpdateOptions{}) - if err != nil { - return err - } - - return wait.PollImmediate(5*time.Second, 10*time.Minute, func() (bool, error) { - ok, err := apiclient.CheckDeployment(ctx, t.globalClient, t.namespace, com) - if err != nil { - return false, nil - } - return ok, nil - }) + return t.upgradeDeplImage(ctx, images.Get().TKEPlatformAPI) } func (t *TKE) upgradeTKEPlatformController(ctx context.Context) error { @@ -237,7 +240,31 @@ func (t *TKE) upgradeTKEPlatformController(ctx context.Context) error { } func (t *TKE) upgradeTKEMonitorAPI(ctx context.Context) error { - com := "tke-monitor-api" + return t.upgradeDeplImage(ctx, images.Get().TKEMonitorAPI) +} + +func (t *TKE) upgradeTKEMonitorController(ctx context.Context) error { + return t.upgradeDeplImage(ctx, images.Get().TKEMonitorController) +} + +func (t *TKE) upgradeTKEApplicationAPI(ctx context.Context) error { + return t.upgradeDeplImage(ctx, images.Get().TKEApplicationAPI) +} + +func (t *TKE) upgradeTKEApplicationController(ctx context.Context) error { + return t.upgradeDeplImage(ctx, images.Get().TKEApplicationController) +} + +func (t *TKE) upgradeTKELogagentAPI(ctx context.Context) error { + return t.upgradeDeplImage(ctx, images.Get().TKELogagentAPI) +} + +func (t *TKE) upgradeTKELogagentController(ctx context.Context) error { + return t.upgradeDeplImage(ctx, images.Get().TKELogagentController) +} + +func (t *TKE) upgradeDeplImage(ctx context.Context, image containerregistry.Image) error { + com := image.Name depl, err := t.globalClient.AppsV1().Deployments(t.namespace).Get(ctx, com, metav1.GetOptions{}) if err != nil { return err @@ -246,7 +273,7 @@ func (t *TKE) upgradeTKEMonitorAPI(ctx context.Context) error { if len(depl.Spec.Template.Spec.Containers) == 0 { return fmt.Errorf("%s has no containers", com) } - depl.Spec.Template.Spec.Containers[0].Image = images.Get().TKEMonitorAPI.FullName() + depl.Spec.Template.Spec.Containers[0].Image = images.Get().TKEMonitorController.FullName() _, err = t.globalClient.AppsV1().Deployments(t.namespace).Update(ctx, depl, metav1.UpdateOptions{}) if err != nil { @@ -262,25 +289,25 @@ func (t *TKE) upgradeTKEMonitorAPI(ctx context.Context) error { }) } -func (t *TKE) upgradeTKEMonitorController(ctx context.Context) error { - com := "tke-monitor-controller" - depl, err := t.globalClient.AppsV1().Deployments(t.namespace).Get(ctx, com, metav1.GetOptions{}) +func (t *TKE) upgradeTKEGateway(ctx context.Context) error { + com := "tke-gateway" + ds, err := t.globalClient.AppsV1().DaemonSets(t.namespace).Get(ctx, com, metav1.GetOptions{}) if err != nil { return err } - if len(depl.Spec.Template.Spec.Containers) == 0 { + if len(ds.Spec.Template.Spec.Containers) == 0 { return fmt.Errorf("%s has no containers", com) } - depl.Spec.Template.Spec.Containers[0].Image = images.Get().TKEMonitorController.FullName() + ds.Spec.Template.Spec.Containers[0].Image = images.Get().TKEGateway.FullName() - _, err = t.globalClient.AppsV1().Deployments(t.namespace).Update(ctx, depl, metav1.UpdateOptions{}) + _, err = t.globalClient.AppsV1().DaemonSets(t.namespace).Update(ctx, ds, metav1.UpdateOptions{}) if err != nil { return err } return wait.PollImmediate(5*time.Second, 10*time.Minute, func() (bool, error) { - ok, err := apiclient.CheckDeployment(ctx, t.globalClient, t.namespace, com) + ok, err := apiclient.CheckDaemonset(ctx, t.globalClient, t.namespace, com) if err != nil { return false, nil } From 7498128a242fab7fd1fab01e8df993907f1a3814 Mon Sep 17 00:00:00 2001 From: Leo Ryu Date: Tue, 14 Sep 2021 18:22:05 +0800 Subject: [PATCH 54/62] fix(installer): add pause for kubeadm job (#1568) --- pkg/platform/provider/baremetal/images/images.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/pkg/platform/provider/baremetal/images/images.go b/pkg/platform/provider/baremetal/images/images.go index 78fc8b69d..778655465 100644 --- a/pkg/platform/provider/baremetal/images/images.go +++ b/pkg/platform/provider/baremetal/images/images.go @@ -28,6 +28,7 @@ type Components struct { ETCD containerregistry.Image CoreDNS containerregistry.Image Pause containerregistry.Image + Pause4KubeadmJob containerregistry.Image NvidiaDevicePlugin containerregistry.Image Keepalived containerregistry.Image @@ -62,6 +63,7 @@ var components = Components{ ETCD: containerregistry.Image{Name: "etcd", Tag: "v3.4.7"}, CoreDNS: containerregistry.Image{Name: "coredns", Tag: "1.7.0"}, Pause: containerregistry.Image{Name: "pause", Tag: "3.2"}, + Pause4KubeadmJob: containerregistry.Image{Name: "pause", Tag: "3.4.1"}, NvidiaDevicePlugin: containerregistry.Image{Name: "nvidia-device-plugin", Tag: "1.0.0-beta4"}, Keepalived: containerregistry.Image{Name: "keepalived", Tag: "2.0.16-r0"}, From 375ef689b814bd2c7d5acf90226c9011e803eb7f Mon Sep 17 00:00:00 2001 From: Lis Date: Tue, 14 Sep 2021 18:23:01 +0800 Subject: [PATCH 55/62] fix(platform): check docker status before install (#1567) --- build/docker/tools/tke-installer/install.sh | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/build/docker/tools/tke-installer/install.sh b/build/docker/tools/tke-installer/install.sh index f985d963c..f33492e93 100755 --- a/build/docker/tools/tke-installer/install.sh +++ b/build/docker/tools/tke-installer/install.sh @@ -70,6 +70,7 @@ function preflight() { echo "Step.1 preflight" check::root + check::docker check::disk '/opt' 30 check::disk '/var/lib' 20 } @@ -95,6 +96,17 @@ function check::disk() { echo "available disk space($path): $disk_avail GiB" } +function check::docker() { + echo "check docker status" + + if systemctl is-active --quiet docker; then + echo "docker is running,please stop docker before using containerd runtime" + echo "if the migration case please follow the migration doc:" + echo "https://tkestack.github.io/web/zh/blog/2021/09/01/container-runtime-migraion/" + exit 1 + fi +} + function ensure_containerd() { echo "Step.2 check containerd status" From c834c8af45df6ea8319c9bad0658f4a1fcd81dd5 Mon Sep 17 00:00:00 2001 From: Lis Date: Wed, 15 Sep 2021 14:36:01 +0800 Subject: [PATCH 56/62] docs(design-proposal): containerd design doc (#1560) --- docs/design-proposals/containerd.md | 194 ++++++++++++++++++++++++++++ docs/images/cluster-create.svg | 3 + docs/images/cri-runtime.svg | 3 + 3 files changed, 200 insertions(+) create mode 100644 docs/design-proposals/containerd.md create mode 100644 docs/images/cluster-create.svg create mode 100644 docs/images/cri-runtime.svg diff --git a/docs/design-proposals/containerd.md b/docs/design-proposals/containerd.md new file mode 100644 index 000000000..0c423911a --- /dev/null +++ b/docs/design-proposals/containerd.md @@ -0,0 +1,194 @@ +# Support standard CRI runtime Containerd + + +**Author**: Tai Hui Min + +**Status** (20210914): Done + +## Abstract +CRI(Container runtime interface)是Kubernetes容器运行时接口,是Kubernetes规定的容器运行时标准,由protocol buffer协议和gRPC API构成。Docker、Containerd、CRI-O为实现CRI的容器引擎。 +以下Proposal主要介绍了TKEStack支持CRI标准容器引擎containerd的背景、动机和具体的实施步骤。 + + +## Background + 随着Kubernetes社区的蓬勃发展,容器引擎也发展迅速,除了Docker引擎外,出现多种更加轻量级的容器引擎: 比如Containerd[1]、CRI-O[2]、iSulad[3]等;为了统一支持这些运行引擎,Kubernetes V1.5版本引入了CRI(Container runtime interface)。 + + 同时为了保持对Docker的支持,Kubelet内置了dockershim来支持CRI,但也因此引出了一系列问题,最终Kubernetes社区计划移除dockershim,确保Kubelet和容器引擎的界面是CRI接口[4]: 1.20-1.22标记depracated, 1.23正式移除。后续dockershim由Mirantis维护,需要在Kubelet和Docker之外额外安装[5]。 + + ![CRI](../images/cri-runtime.svg) + + 此外,Containerd 、CRI-O等容器引擎相比Docker更加轻量级,表现在功能更简单、创建容器时的调用链更短,性能更加健壮并且可移植性强,因此更适合作为Kubernetes的容器运行时。Containerd于2019年已经正式从CNCF毕业,成为行业标准的容器引擎,在各大互联网公司也有较广泛的应用 [1]。本文内容集中在TKEStack支持Containerd容器引擎,Dockershim+Docker以后在TKEStack将不再提供支持。 + + Containerd作为纯粹的容器运行时工具,缺少镜像制作等能力,需要引入额外的工具满足TKEStack的需求。下表为TKEStack不同功能阶段对容器引擎的功能需求。 + +| 功能阶段 | 容器引擎功能点 | Docker+Dockershim | CRI标准接口(Containerd/CRIO) | containerd + ctr | +| ----- | ------- |-|-|-| +| 构建 | 制作镜像 |是|否|否| +| 构建 | push镜像 |是|否|是| +| 构建 | tag镜像 |是|否|是| +| install | load镜像 |是|否|是| +| install | push镜像 |是|否|是| +| install | manifest(multi-arch) |是|否|是| +| running(管理集群: 创建、导入、增加节点、运行负载) | 启动容器 |是|是|是| +| running(管理集群) | 下载镜像 |是|是|是| +| running(管理集群) | 运行容器 |是|是|是| +| running(管理集群) | 运行POD |是|是|是| +| running(管理集群) | 配置网络 |是|是|是| +| running(管理集群) | 删除容器 |是|是|是| +| running(管理集群) | 删除镜像 |是|是|是| + + + +## Motivation + +TKEStack支持配置CRI标准兼容容器引擎docker和containerd,用户在安装业务集群时可以自由选择使用docker或者containerd: + +**版本需求** + * TKEStack版本:v1.8.0 + * 支持的Kubernetes版本:(v1.19.7, v1.20.4, v1.20.4-tke.1) + * containerd版本:v1.5.4 + * crictl版本:1.20.0-24-g53ad8bb7 + * nerdctl版本:0.11.0 + * 支持的操作系统类型: ≥ Ubuntu 16.04/18.04 LTS (64-bit);≥ CentOS Linux 7.6 (64-bit);≥ Tencent Linux 2.2 + * 支持的操作系统架构:amd64 + +根据TKEStack在不同阶段使用功能的差异,我们把支持CRI接口容器引擎分为两个阶段: + +**阶段1 完成running阶段的改造** + * 支持配置Containerd为容器引擎 + +**阶段2 完成Install阶段的改造** + + * 使用Containerd作为容器引擎 + * 引入工具nerdctl创建tke-installer、registry-http、registry-https容器 + * 使用docker-in-docker的方式,在Containerd容器中运行docker,完成tkestack在安装阶段创建image manifests,push multiarch images到local registry过程 + +## Main proposal + +### 阶段1 完成Running阶段的改造 + +该阶段容器引擎的调用者是Kubelet,只使用CRI标准定义的接口,所以只需要引入Containerd,不需要引入其他第三方组件,通过暴露参数`Cluster.Spec.Features.EnsureContainerRuntime`为判断容器引擎选择的开关,该阶段包含2个部分: + +**1. 安装Cluster** + + * Install过程中安装Global Cluster,使用containerd作为容器运行时 + * 安装User Cluster,可以选择使用Containerd或者docker作为容器运行时 + + 两个过程均调用`clusterProvider.OnCreate`函数创建集群。相关的流程以及修改如下 + +  ![clusterprovider.OnCreate流程](../images/cluster-create.svg) + +修改文件: + +* `pkg/platform/provider/baremetal/cluster/provider.go` +* `pkg/platform/provider/baremetal/cluster/create.go` + +**2. user cluster扩容节点** + +该过程通过调用`machineProvider.OnCreate`,和安装cluster过程类似,不再赘述。 + +修改文件: + +* `pkg/platform/provider/baremetal/machine/provider.go` +* `pkg/platform/provider/baremetal/machine/create.go` + +由于增加了Containerd,需要引入配置文件和server文件 + +* `pkg/platform/provider/baremetal/conf/containerd/config.toml` +* `pkg/platform/provider/baremetal/conf/containerd/containerd.service` + +### 阶段2 install阶段的改造 完全支持containerd,需要配合nerdctl工具进行改造 + 目前的install步骤: + * Execute pre install hook + * Load images(docker load) + * Tag images (docker tag) + * Setup local registry(docker run) + * Push images(docker manifest, docker push) + * Generate certificates for TKE components + * Create global cluster + +在install开始阶段,需要使用`nerdctl run`命令创建installer容器,registry-http容器和registry-https容器, +``` +nerdctl run -d --privileged --net=host --restart=always -v /etc/hosts:/app/hosts -v /run/containerd:/run/containerd -v /var/lib/containerd:/var/lib/containerd -v /var/lib/nerdctl:/var/lib/nerdctl -v /opt/cni/bin:/opt/cni/bin -v /run/containerd/containerd.sock:/run/containerd/containerd.sock -v /opt/tke-installer/data:/app/data -v /opt/tke-installer/conf:/app/conf -v registry-certs:/app/certs -v tke-installer-bin:/app/bin docker.io/library/test:20 tke-installer +``` +``` +nerdctl run -d --name registry-http -p 80:5000 -v /opt/tke-installer/registry:/var/lib/registry registry.tke.com/library/registry-amd64:2.7.1 +``` +``` +nerdctl run -d --name registry-https --restart always -p 443:443 -v /opt/tke-installer/registry:/var/lib/registry -v registry-certs:/certs -e REGISTRY_HTTP_ADDR=0.0.0.0:443 -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/server.crt -e REGISTRY_HTTP_TLS_KEY=/certs/server.key registry.tke.com/library/registry-amd64:2.7.1 +``` +使用nerdctl 查看创建的容器: +``` +nerdctl ps -a +``` +查看容器日志: +``` +nerdctl logs +``` +install过程中需要创建registry镜像仓库,在安装过程中需要搭建临时镜像仓库,并将多种体系架构的镜像push到临时仓库中完成安装,由于安装和创建global集群时我们都切换为Containerd运行时,但同时还需要使用docker创建多架构的镜像push到registry中, +所以这里使用docker-in-docker的方式,将dockerd和docker client使用dind的镜像部署到containerd容器中,在containerd容器中使用docker来制作镜像的manifest并且push到registry中。 + +``` +FROM docker:20.10.8-dind + +RUN echo "hosts: files dns" >> /etc/nsswitch.conf + +WORKDIR /app + +ENV PATH="/app/bin:$PATH" +ENV DOCKER_CLI_EXPERIMENTAL=enabled +ARG ENV_ARCH + +RUN apk add --no-cache \ + bash \ + busybox-extras \ + curl \ + tcpdump \ + docker \ + ansible + +RUN apk --update-cache --repository http://dl-3.alpinelinux.org/alpine/edge/testing/ --allow-untrusted add lrzsz +RUN wget -O nerdctl-0.11.0-linux.tar.gz https://github.com/containerd/nerdctl/releases/download/v0.11.0/nerdctl-0.11.0-linux-"$ENV_ARCH".tar.gz \ + && tar -zvxf nerdctl-0.11.0-linux.tar.gz -C /usr/local/bin/ \ + && rm -rf nerdctl-0.11.0-linux.tar.gz + +ADD . /app +``` +通过nerdctl进入到tke-installer容器中,可以看到启动的dockerd和tke-installer进程: +``` +# nerdctl ps +CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES +d25ffca45f2f docker.io/tkestack/tke-installer-amd64:b1a40af7665eff000aa4e0078470824db042b419 "/bin/sh -c /app/run…" 6 days ago Up tke-installer +``` +``` +# nerdctl exec -it d25ffca45f2f sh +/app # ps -ef +PID USER TIME COMMAND + 1 root 0:00 {run.sh} /bin/bash /app/run.sh + 7 root 0:07 docker-init -- dockerd --host=unix:///var/run/docker.sock + 8 root 1:01 ./bin/tke-installer + 67 root 1:23 dockerd --host=unix:///var/run/docker.sock --host=tcp://0. + 203 root 0:00 sh + 209 root 0:00 ps -ef +/app # +``` +### 阶段3 用户场景容器引擎的切换 + +用户已有集群从docker切换到containerd: + * 现存节点用户根据指导文档手动迁移到containerd:https://tkestack.github.io/web/zh/blog/2021/09/01/container-runtime-migraion/ + + +## Refereneces: +1. https://containerd.io/ +2. https://github.com/cri-o/cri-o +3. https://gitee.com/openeuler/iSulad +4. https://github.com/kubernetes/enhancements/blob/master/keps/sig-node/1985-remove-dockershim/README.md +5. https://www.mirantis.com/blog/mirantis-to-take-over-support-of-kubernetes-dockershim-2 +6. https://tkestack.github.io/docs/installation/installation-steps.html +7. https://github.com/moby/buildkit +8. https://github.com/containers/buildah +9. https://github.com/GoogleContainerTools/kaniko +10. https://github.com/containerd/nerdctl +11. https://github.com/containerd/containerd/blob/master/docs/cri/installation.md +12. https://github.com/containerd/cri/blob/master/docs/crictl.md +13. https://blog.scottlowe.org/2020/01/25/manually-loading-container-images-with-containerd/ diff --git a/docs/images/cluster-create.svg b/docs/images/cluster-create.svg new file mode 100644 index 000000000..0f998a58d --- /dev/null +++ b/docs/images/cluster-create.svg @@ -0,0 +1,3 @@ + + +
p.EnsureKubelet
p.EnsureKubelet
p.EnsureKubernetesImage
p.EnsureKubernetesImage
...
...
p.EnsureContainerRuntime
p.EnsureContainerRuntime
p.EnsureCNIPlugins
p.EnsureCNIPlugins
p.EnsureKubeadm
p.EnsureKubeadm
create cluster
create cluster
Finished
Finished
Viewer does not support full SVG 1.1
\ No newline at end of file diff --git a/docs/images/cri-runtime.svg b/docs/images/cri-runtime.svg new file mode 100644 index 000000000..e1961d73a --- /dev/null +++ b/docs/images/cri-runtime.svg @@ -0,0 +1,3 @@ + + +
CRI
CRI
dockershim
dockershim
Docker
Docker
Containerd
Containerd
CRI-O
CRI-O
Kubelet
Kubelet
CRI
CRI
dockershim
dockershim
Docker
Docker
Containerd
Containerd
CRI-O
CRI-O
Kubelet
Kubelet
Viewer does not support full SVG 1.1
\ No newline at end of file From dfb5f9db95240920004d0dd4400650bc38dd896f Mon Sep 17 00:00:00 2001 From: Lis Date: Wed, 15 Sep 2021 15:51:16 +0800 Subject: [PATCH 57/62] fix(platform): add checkpoint data file for gpumanager (#1569) --- .../baremetal/manifests/gpu-manager/gpu-manager.yaml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/pkg/platform/provider/baremetal/manifests/gpu-manager/gpu-manager.yaml b/pkg/platform/provider/baremetal/manifests/gpu-manager/gpu-manager.yaml index 7b93cb5f7..f11be5383 100644 --- a/pkg/platform/provider/baremetal/manifests/gpu-manager/gpu-manager.yaml +++ b/pkg/platform/provider/baremetal/manifests/gpu-manager/gpu-manager.yaml @@ -98,6 +98,8 @@ spec: mountPath: /etc/gpu-manager/vm - name: log mountPath: /var/log/gpu-manager + - name: checkpoint + mountPath: /etc/gpu-manager/checkpoint - name: rundir mountPath: /var/run - name: cgroup @@ -144,6 +146,10 @@ spec: hostPath: type: DirectoryOrCreate path: /etc/gpu-manager/log + - name: checkpoint + hostPath: + type: DirectoryOrCreate + path: /etc/gpu-manager/checkpoint - name: rundir hostPath: type: Directory From c04529b4876b077cf3add7d1c6499f857b500d1b Mon Sep 17 00:00:00 2001 From: CrescentP <56831307+CrescentP@users.noreply.github.com> Date: Wed, 15 Sep 2021 16:59:06 +0800 Subject: [PATCH 58/62] =?UTF-8?q?Create=20TKEStack=20=E9=9B=86=E7=BE=A4CIS?= =?UTF-8?q?=E5=AE=89=E5=85=A8=E5=9F=BA=E7=BA=BF=E6=89=AB=E6=8F=8F=E5=88=86?= =?UTF-8?q?=E6=9E=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...1\253\346\217\217\345\210\206\346\236\220" | 409 ++++++++++++++++++ 1 file changed, 409 insertions(+) create mode 100644 "TKEStack \351\233\206\347\276\244CIS\345\256\211\345\205\250\345\237\272\347\272\277\346\211\253\346\217\217\345\210\206\346\236\220" diff --git "a/TKEStack \351\233\206\347\276\244CIS\345\256\211\345\205\250\345\237\272\347\272\277\346\211\253\346\217\217\345\210\206\346\236\220" "b/TKEStack \351\233\206\347\276\244CIS\345\256\211\345\205\250\345\237\272\347\272\277\346\211\253\346\217\217\345\210\206\346\236\220" new file mode 100644 index 000000000..f4fe91b1b --- /dev/null +++ "b/TKEStack \351\233\206\347\276\244CIS\345\256\211\345\205\250\345\237\272\347\272\277\346\211\253\346\217\217\345\210\206\346\236\220" @@ -0,0 +1,409 @@ +# TKEStack 集群CIS安全基线扫描分析 + +## *任务描述*: + +为了提供更安全的K8s集群,有必要使集群遵循安全的配置基线。 + +## *建议方案*: + +建议使用Center for Internet Security(CIS) benchmarks 来评估和分析集群的安全性。 + +## 具体流程 + +### 搭建TKEStack集群 + +1. 在`Installer `节点执行脚本 + + ```shell + arch=amd64 version=v1.3.1 && wget https://tke-release-1251707795.cos.ap-guangzhou.myqcloud.com/tke-installer-linux-$arch-$version.run{,.sha256} && sha256sum --check --status tke-installer-linux-$arch-$version.run.sha256 && chmod +x tke-installer-linux-$arch-$version.run && ./tke-installer-linux-$arch-$version.run + ``` + +2. 控制台安装 + + 按照提示好global集群 + + 最终可以得到这个 + + ![image-20210915153621127](https://gitee.com/Crescent_P/picture-bed/raw/master/image-20210915153621127.png) + +3. 访问控制台 + + ![image-20210915153800794](https://gitee.com/Crescent_P/picture-bed/raw/master/image-20210915153800794.png) + +### 创建业务集群 + +在集群管理中选择新建独立集群,填写相关信息即可 + +![image-20210915153919020](https://gitee.com/Crescent_P/picture-bed/raw/master/image-20210915153919020.png) + +### 使用 kube-bencht 扫描集群 + +Kube-Bench是一款针对Kubernete的安全检测工具,从本质上来说,Kube-Bench是一个基于Go开发的应用程序,它可以帮助研究人员对部署的Kubernete进行安全检测,安全检测原则遵循CIS Kubernetes Benchmark。 + +#### 安装部署 + +- 二进制安装 + + ```shell + wget https://github.com/aquasecurity/kube-bench/releases/download/v0.4.0/kube-bench_0.4.0_linux_amd64.tar.gz + tar -zxvf kube-bench_0.4.0_linux_amd64.tar.gz + mv kube-bench /usr/bin/ + ``` + +- + + ```shell + docker run --rm -v `pwd`:/host aquasec/kube-bench:latest install[root@VM-0-11-centos cis-1.6]# ls /etc/kube-bench/cfg/ + ack-1.0 aks-1.0 cis-1.20 cis-1.5 cis-1.6 config.yaml eks-1.0 gke-1.0 rh-0.7 rh-1.0 + # 根据这些文件对集群当中的组件扫描已有的配置 + [root@VM-0-11-centos cis-1.6]# cd /etc/kube-bench/cfg/cis-1.6 + [root@VM-0-11-centos cis-1.6]# ls + config.yaml controlplane.yaml etcd.yaml master.yaml node.yaml policies.yaml + ``` + +### 扫描结果 + +#### master + +```shell +[root@VM-0-11-centos cis-1.6]# kube-bench run --targets=master +[INFO] 1 Master Node Security Configuration +[INFO] 1.1 Master Node Configuration Files +[PASS] 1.1.1 Ensure that the API server pod specification file permissions are set to 644 or more restrictive (Automated) +[PASS] 1.1.2 Ensure that the API server pod specification file ownership is set to root:root (Automated) +[PASS] 1.1.3 Ensure that the controller manager pod specification file permissions are set to 644 or more restrictive (Automated) +[PASS] 1.1.4 Ensure that the controller manager pod specification file ownership is set to root:root (Automated) +[PASS] 1.1.5 Ensure that the scheduler pod specification file permissions are set to 644 or more restrictive (Automated) +[PASS] 1.1.6 Ensure that the scheduler pod specification file ownership is set to root:root (Automated) +[PASS] 1.1.7 Ensure that the etcd pod specification file permissions are set to 644 or more restrictive (Automated) +[PASS] 1.1.8 Ensure that the etcd pod specification file ownership is set to root:root (Automated) +[WARN] 1.1.9 Ensure that the Container Network Interface file permissions are set to 644 or more restrictive (Manual) +[PASS] 1.1.10 Ensure that the Container Network Interface file ownership is set to root:root (Manual) +[PASS] 1.1.11 Ensure that the etcd data directory permissions are set to 700 or more restrictive (Automated) +[FAIL] 1.1.12 Ensure that the etcd data directory ownership is set to etcd:etcd (Automated) +[PASS] 1.1.13 Ensure that the admin.conf file permissions are set to 644 or more restrictive (Automated) +[PASS] 1.1.14 Ensure that the admin.conf file ownership is set to root:root (Automated) +[PASS] 1.1.15 Ensure that the scheduler.conf file permissions are set to 644 or more restrictive (Automated) +[PASS] 1.1.16 Ensure that the scheduler.conf file ownership is set to root:root (Automated) +[PASS] 1.1.17 Ensure that the controller-manager.conf file permissions are set to 644 or more restrictive (Automated) +[PASS] 1.1.18 Ensure that the controller-manager.conf file ownership is set to root:root (Automated) +[PASS] 1.1.19 Ensure that the Kubernetes PKI directory and file ownership is set to root:root (Automated) +[PASS] 1.1.20 Ensure that the Kubernetes PKI certificate file permissions are set to 644 or more restrictive (Manual) +[WARN] 1.1.21 Ensure that the Kubernetes PKI key file permissions are set to 600 (Manual) +[INFO] 1.2 API Server +[WARN] 1.2.1 Ensure that the --anonymous-auth argument is set to false (Manual) +[PASS] 1.2.2 Ensure that the --basic-auth-file argument is not set (Automated) +[FAIL] 1.2.3 Ensure that the --token-auth-file parameter is not set (Automated) +[PASS] 1.2.4 Ensure that the --kubelet-https argument is set to true (Automated) +[PASS] 1.2.5 Ensure that the --kubelet-client-certificate and --kubelet-client-key arguments are set as appropriate (Automated) +[FAIL] 1.2.6 Ensure that the --kubelet-certificate-authority argument is set as appropriate (Automated) +[PASS] 1.2.7 Ensure that the --authorization-mode argument is not set to AlwaysAllow (Automated) +[PASS] 1.2.8 Ensure that the --authorization-mode argument includes Node (Automated) +[PASS] 1.2.9 Ensure that the --authorization-mode argument includes RBAC (Automated) +[WARN] 1.2.10 Ensure that the admission control plugin EventRateLimit is set (Manual) +[PASS] 1.2.11 Ensure that the admission control plugin AlwaysAdmit is not set (Automated) +[WARN] 1.2.12 Ensure that the admission control plugin AlwaysPullImages is set (Manual) +[WARN] 1.2.13 Ensure that the admission control plugin SecurityContextDeny is set if PodSecurityPolicy is not used (Manual) +[PASS] 1.2.14 Ensure that the admission control plugin ServiceAccount is set (Automated) +[PASS] 1.2.15 Ensure that the admission control plugin NamespaceLifecycle is set (Automated) +[FAIL] 1.2.16 Ensure that the admission control plugin PodSecurityPolicy is set (Automated) +[PASS] 1.2.17 Ensure that the admission control plugin NodeRestriction is set (Automated) +[PASS] 1.2.18 Ensure that the --insecure-bind-address argument is not set (Automated) +[PASS] 1.2.19 Ensure that the --insecure-port argument is set to 0 (Automated) +[PASS] 1.2.20 Ensure that the --secure-port argument is not set to 0 (Automated) +[FAIL] 1.2.21 Ensure that the --profiling argument is set to false (Automated) +[FAIL] 1.2.22 Ensure that the --audit-log-path argument is set (Automated) +[FAIL] 1.2.23 Ensure that the --audit-log-maxage argument is set to 30 or as appropriate (Automated) +[FAIL] 1.2.24 Ensure that the --audit-log-maxbackup argument is set to 10 or as appropriate (Automated) +[FAIL] 1.2.25 Ensure that the --audit-log-maxsize argument is set to 100 or as appropriate (Automated) +[WARN] 1.2.26 Ensure that the --request-timeout argument is set as appropriate (Automated) +[PASS] 1.2.27 Ensure that the --service-account-lookup argument is set to true (Automated) +[PASS] 1.2.28 Ensure that the --service-account-key-file argument is set as appropriate (Automated) +[PASS] 1.2.29 Ensure that the --etcd-certfile and --etcd-keyfile arguments are set as appropriate (Automated) +[PASS] 1.2.30 Ensure that the --tls-cert-file and --tls-private-key-file arguments are set as appropriate (Automated) +[PASS] 1.2.31 Ensure that the --client-ca-file argument is set as appropriate (Automated) +[PASS] 1.2.32 Ensure that the --etcd-cafile argument is set as appropriate (Automated) +[WARN] 1.2.33 Ensure that the --encryption-provider-config argument is set as appropriate (Manual) +[WARN] 1.2.34 Ensure that encryption providers are appropriately configured (Manual) +[WARN] 1.2.35 Ensure that the API Server only makes use of Strong Cryptographic Ciphers (Manual) +[INFO] 1.3 Controller Manager +[WARN] 1.3.1 Ensure that the --terminated-pod-gc-threshold argument is set as appropriate (Manual) +[FAIL] 1.3.2 Ensure that the --profiling argument is set to false (Automated) +[PASS] 1.3.3 Ensure that the --use-service-account-credentials argument is set to true (Automated) +[PASS] 1.3.4 Ensure that the --service-account-private-key-file argument is set as appropriate (Automated) +[PASS] 1.3.5 Ensure that the --root-ca-file argument is set as appropriate (Automated) +[PASS] 1.3.6 Ensure that the RotateKubeletServerCertificate argument is set to true (Automated) +[PASS] 1.3.7 Ensure that the --bind-address argument is set to 127.0.0.1 (Automated) +[INFO] 1.4 Scheduler +[FAIL] 1.4.1 Ensure that the --profiling argument is set to false (Automated) +[PASS] 1.4.2 Ensure that the --bind-address argument is set to 127.0.0.1 (Automated) + +== Remediations == +1.1.9 Run the below command (based on the file location on your system) on the master node. +For example, +chmod 644 + +1.1.12 On the etcd server node, get the etcd data directory, passed as an argument --data-dir, +from the below command: +ps -ef | grep etcd +Run the below command (based on the etcd data directory found above). +For example, chown etcd:etcd /var/lib/etcd + +1.1.21 Run the below command (based on the file location on your system) on the master node. +For example, +chmod -R 600 /etc/kubernetes/pki/*.key + +1.2.1 Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml +on the master node and set the below parameter. +--anonymous-auth=false + +1.2.3 Follow the documentation and configure alternate mechanisms for authentication. Then, +edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml +on the master node and remove the --token-auth-file= parameter. + +1.2.6 Follow the Kubernetes documentation and setup the TLS connection between +the apiserver and kubelets. Then, edit the API server pod specification file +/etc/kubernetes/manifests/kube-apiserver.yaml on the master node and set the +--kubelet-certificate-authority parameter to the path to the cert file for the certificate authority. +--kubelet-certificate-authority= + +1.2.10 Follow the Kubernetes documentation and set the desired limits in a configuration file. +Then, edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml +and set the below parameters. +--enable-admission-plugins=...,EventRateLimit,... +--admission-control-config-file= + +1.2.12 Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml +on the master node and set the --enable-admission-plugins parameter to include +AlwaysPullImages. +--enable-admission-plugins=...,AlwaysPullImages,... + +1.2.13 Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml +on the master node and set the --enable-admission-plugins parameter to include +SecurityContextDeny, unless PodSecurityPolicy is already in place. +--enable-admission-plugins=...,SecurityContextDeny,... + +1.2.16 Follow the documentation and create Pod Security Policy objects as per your environment. +Then, edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml +on the master node and set the --enable-admission-plugins parameter to a +value that includes PodSecurityPolicy: +--enable-admission-plugins=...,PodSecurityPolicy,... +Then restart the API Server. + +1.2.21 Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml +on the master node and set the below parameter. +--profiling=false + +1.2.22 Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml +on the master node and set the --audit-log-path parameter to a suitable path and +file where you would like audit logs to be written, for example: +--audit-log-path=/var/log/apiserver/audit.log + +1.2.23 Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml +on the master node and set the --audit-log-maxage parameter to 30 or as an appropriate number of days: +--audit-log-maxage=30 + +1.2.24 Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml +on the master node and set the --audit-log-maxbackup parameter to 10 or to an appropriate +value. +--audit-log-maxbackup=10 + +1.2.25 Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml +on the master node and set the --audit-log-maxsize parameter to an appropriate size in MB. +For example, to set it as 100 MB: +--audit-log-maxsize=100 + +1.2.26 Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml +and set the below parameter as appropriate and if needed. +For example, +--request-timeout=300s + +1.2.33 Follow the Kubernetes documentation and configure a EncryptionConfig file. +Then, edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml +on the master node and set the --encryption-provider-config parameter to the path of that file: --encryption-provider-config= + +1.2.34 Follow the Kubernetes documentation and configure a EncryptionConfig file. +In this file, choose aescbc, kms or secretbox as the encryption provider. + +1.2.35 Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml +on the master node and set the below parameter. +--tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM +_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_256_GCM +_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_ECDSA_WITH_AES_256_GCM +_SHA384 + +1.3.1 Edit the Controller Manager pod specification file /etc/kubernetes/manifests/kube-controller-manager.yaml +on the master node and set the --terminated-pod-gc-threshold to an appropriate threshold, +for example: +--terminated-pod-gc-threshold=10 + +1.3.2 Edit the Controller Manager pod specification file /etc/kubernetes/manifests/kube-controller-manager.yaml +on the master node and set the below parameter. +--profiling=false + +1.4.1 Edit the Scheduler pod specification file /etc/kubernetes/manifests/kube-scheduler.yaml file +on the master node and set the below parameter. +--profiling=false + + +== Summary == +43 checks PASS +11 checks FAIL +11 checks WARN +0 checks INFO + +``` + +#### node + +```shell +[root@VM-0-11-centos cis-1.6]# kube-bench run --targets=node +[INFO] 4 Worker Node Security Configuration +[INFO] 4.1 Worker Node Configuration Files +[PASS] 4.1.1 Ensure that the kubelet service file permissions are set to 644 or more restrictive (Automated) +[PASS] 4.1.2 Ensure that the kubelet service file ownership is set to root:root (Automated) +[PASS] 4.1.3 If proxy kubeconfig file exists ensure permissions are set to 644 or more restrictive (Manual) +[PASS] 4.1.4 Ensure that the proxy kubeconfig file ownership is set to root:root (Manual) +[PASS] 4.1.5 Ensure that the --kubeconfig kubelet.conf file permissions are set to 644 or more restrictive (Automated) +[PASS] 4.1.6 Ensure that the --kubeconfig kubelet.conf file ownership is set to root:root (Manual) +[PASS] 4.1.7 Ensure that the certificate authorities file permissions are set to 644 or more restrictive (Manual) +[PASS] 4.1.8 Ensure that the client certificate authorities file ownership is set to root:root (Manual) +[PASS] 4.1.9 Ensure that the kubelet --config configuration file has permissions set to 644 or more restrictive (Automated) +[PASS] 4.1.10 Ensure that the kubelet --config configuration file ownership is set to root:root (Automated) +[INFO] 4.2 Kubelet +[PASS] 4.2.1 Ensure that the anonymous-auth argument is set to false (Automated) +[PASS] 4.2.2 Ensure that the --authorization-mode argument is not set to AlwaysAllow (Automated) +[PASS] 4.2.3 Ensure that the --client-ca-file argument is set as appropriate (Automated) +[PASS] 4.2.4 Ensure that the --read-only-port argument is set to 0 (Manual) +[PASS] 4.2.5 Ensure that the --streaming-connection-idle-timeout argument is not set to 0 (Manual) +[FAIL] 4.2.6 Ensure that the --protect-kernel-defaults argument is set to true (Automated) +[PASS] 4.2.7 Ensure that the --make-iptables-util-chains argument is set to true (Automated) +[WARN] 4.2.8 Ensure that the --hostname-override argument is not set (Manual) +[WARN] 4.2.9 Ensure that the --event-qps argument is set to 0 or a level which ensures appropriate event capture (Manual) +[WARN] 4.2.10 Ensure that the --tls-cert-file and --tls-private-key-file arguments are set as appropriate (Manual) +[PASS] 4.2.11 Ensure that the --rotate-certificates argument is not set to false (Manual) +[PASS] 4.2.12 Verify that the RotateKubeletServerCertificate argument is set to true (Manual) +[WARN] 4.2.13 Ensure that the Kubelet only makes use of Strong Cryptographic Ciphers (Manual) + +== Remediations == +4.2.6 If using a Kubelet config file, edit the file to set protectKernelDefaults: true. +If using command line arguments, edit the kubelet service file +/etc/systemd/system/kubelet.service on each worker node and +set the below parameter in KUBELET_SYSTEM_PODS_ARGS variable. +--protect-kernel-defaults=true +Based on your system, restart the kubelet service. For example: +systemctl daemon-reload +systemctl restart kubelet.service + +4.2.8 Edit the kubelet service file /etc/systemd/system/kubelet.service +on each worker node and remove the --hostname-override argument from the +KUBELET_SYSTEM_PODS_ARGS variable. +Based on your system, restart the kubelet service. For example: +systemctl daemon-reload +systemctl restart kubelet.service + +4.2.9 If using a Kubelet config file, edit the file to set eventRecordQPS: to an appropriate level. +If using command line arguments, edit the kubelet service file +/etc/systemd/system/kubelet.service on each worker node and +set the below parameter in KUBELET_SYSTEM_PODS_ARGS variable. +Based on your system, restart the kubelet service. For example: +systemctl daemon-reload +systemctl restart kubelet.service + +4.2.10 If using a Kubelet config file, edit the file to set tlsCertFile to the location +of the certificate file to use to identify this Kubelet, and tlsPrivateKeyFile +to the location of the corresponding private key file. +If using command line arguments, edit the kubelet service file +/etc/systemd/system/kubelet.service on each worker node and +set the below parameters in KUBELET_CERTIFICATE_ARGS variable. +--tls-cert-file= +--tls-private-key-file= +Based on your system, restart the kubelet service. For example: +systemctl daemon-reload +systemctl restart kubelet.service + +4.2.13 If using a Kubelet config file, edit the file to set TLSCipherSuites: to +TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_128_GCM_SHA256 +or to a subset of these values. +If using executable arguments, edit the kubelet service file +/etc/systemd/system/kubelet.service on each worker node and +set the --tls-cipher-suites parameter as follows, or to a subset of these values. +--tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_128_GCM_SHA256 +Based on your system, restart the kubelet service. For example: +systemctl daemon-reload +systemctl restart kubelet.service + + +== Summary == +18 checks PASS +1 checks FAIL +4 checks WARN +0 checks INFO + +``` + +### 结果分析 + +我们按照CIS Kubernetes Benchmark进行分析 + +#### 1.1.12 + +![image-20210915162536350](https://gitee.com/Crescent_P/picture-bed/raw/master/image-20210915162536350.png) + +#### 1.2.3 + +![image-20210915162614233](https://gitee.com/Crescent_P/picture-bed/raw/master/image-20210915162614233.png) + +#### 1.2.6 + +![image-20210915162642312](https://gitee.com/Crescent_P/picture-bed/raw/master/image-20210915162642312.png) + +#### 1.2.16 + +![image-20210915162714613](https://gitee.com/Crescent_P/picture-bed/raw/master/image-20210915162714613.png) + +#### 1.2.21 + +![image-20210915162757078](https://gitee.com/Crescent_P/picture-bed/raw/master/image-20210915162757078.png) + +#### 1.2.22 + +![image-20210915162841148](https://gitee.com/Crescent_P/picture-bed/raw/master/image-20210915162841148.png) + +#### 1.2.23 + +![image-20210915162848073](https://gitee.com/Crescent_P/picture-bed/raw/master/image-20210915162848073.png) + +#### 1.2.24 + +![image-20210915162855325](https://gitee.com/Crescent_P/picture-bed/raw/master/image-20210915162855325.png) + +#### 1.2.25 + +#### ![image-20210915162902354](https://gitee.com/Crescent_P/picture-bed/raw/master/image-20210915162902354.png) + +#### 1.3.2 + +![image-20210915162933815](https://gitee.com/Crescent_P/picture-bed/raw/master/image-20210915162933815.png) + +#### 1.4.1 + +![image-20210915162955259](https://gitee.com/Crescent_P/picture-bed/raw/master/image-20210915162955259.png) + +#### 4.2.6 + +![image-20210915163028273](https://gitee.com/Crescent_P/picture-bed/raw/master/image-20210915163028273.png) + +## 结语 + +以上资料参考 + +https://tkestack.github.io/docs/ + +https://cloud.tencent.com/developer/article/1680433 + +https://www.cisecurity.org/benchmark/kubernetes/ + +欢迎大家参与到TKEStack的建设中:https://github.com/tkestack + +**在这里十分感谢TKEStack的各位导师给我提供的资源和帮助** From 8d8642ec0a699934205e21b5ff80891a17aef5d6 Mon Sep 17 00:00:00 2001 From: CrescentP <56831307+CrescentP@users.noreply.github.com> Date: Wed, 15 Sep 2021 16:59:33 +0800 Subject: [PATCH 59/62] =?UTF-8?q?Rename=20TKEStack=20=E9=9B=86=E7=BE=A4CIS?= =?UTF-8?q?=E5=AE=89=E5=85=A8=E5=9F=BA=E7=BA=BF=E6=89=AB=E6=8F=8F=E5=88=86?= =?UTF-8?q?=E6=9E=90=20to=20TKEStack=20=E9=9B=86=E7=BE=A4CIS=E5=AE=89?= =?UTF-8?q?=E5=85=A8=E5=9F=BA=E7=BA=BF=E6=89=AB=E6=8F=8F=E5=88=86=E6=9E=90?= =?UTF-8?q?.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...47\272\277\346\211\253\346\217\217\345\210\206\346\236\220.md" | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename "TKEStack \351\233\206\347\276\244CIS\345\256\211\345\205\250\345\237\272\347\272\277\346\211\253\346\217\217\345\210\206\346\236\220" => "TKEStack \351\233\206\347\276\244CIS\345\256\211\345\205\250\345\237\272\347\272\277\346\211\253\346\217\217\345\210\206\346\236\220.md" (100%) diff --git "a/TKEStack \351\233\206\347\276\244CIS\345\256\211\345\205\250\345\237\272\347\272\277\346\211\253\346\217\217\345\210\206\346\236\220" "b/TKEStack \351\233\206\347\276\244CIS\345\256\211\345\205\250\345\237\272\347\272\277\346\211\253\346\217\217\345\210\206\346\236\220.md" similarity index 100% rename from "TKEStack \351\233\206\347\276\244CIS\345\256\211\345\205\250\345\237\272\347\272\277\346\211\253\346\217\217\345\210\206\346\236\220" rename to "TKEStack \351\233\206\347\276\244CIS\345\256\211\345\205\250\345\237\272\347\272\277\346\211\253\346\217\217\345\210\206\346\236\220.md" From fec20a168408da5578aa7697c9741899606e9975 Mon Sep 17 00:00:00 2001 From: CrescentP <56831307+CrescentP@users.noreply.github.com> Date: Wed, 15 Sep 2021 17:45:21 +0800 Subject: [PATCH 60/62] =?UTF-8?q?Update=20and=20rename=20TKEStack=20?= =?UTF-8?q?=E9=9B=86=E7=BE=A4CIS=E5=AE=89=E5=85=A8=E5=9F=BA=E7=BA=BF?= =?UTF-8?q?=E6=89=AB=E6=8F=8F=E5=88=86=E6=9E=90.md=20to=20Center=20for=20I?= =?UTF-8?q?nternet=20Security=20(CIS)=20benchmarks=20to=20evaluate=20and?= =?UTF-8?q?=20analyze=20the=20security=20of=20cluster?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...) benchmarks to evaluate and analyze the security of cluster | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename "TKEStack \351\233\206\347\276\244CIS\345\256\211\345\205\250\345\237\272\347\272\277\346\211\253\346\217\217\345\210\206\346\236\220.md" => Center for Internet Security (CIS) benchmarks to evaluate and analyze the security of cluster (99%) diff --git "a/TKEStack \351\233\206\347\276\244CIS\345\256\211\345\205\250\345\237\272\347\272\277\346\211\253\346\217\217\345\210\206\346\236\220.md" b/Center for Internet Security (CIS) benchmarks to evaluate and analyze the security of cluster similarity index 99% rename from "TKEStack \351\233\206\347\276\244CIS\345\256\211\345\205\250\345\237\272\347\272\277\346\211\253\346\217\217\345\210\206\346\236\220.md" rename to Center for Internet Security (CIS) benchmarks to evaluate and analyze the security of cluster index f4fe91b1b..e91fda666 100644 --- "a/TKEStack \351\233\206\347\276\244CIS\345\256\211\345\205\250\345\237\272\347\272\277\346\211\253\346\217\217\345\210\206\346\236\220.md" +++ b/Center for Internet Security (CIS) benchmarks to evaluate and analyze the security of cluster @@ -1,4 +1,4 @@ -# TKEStack 集群CIS安全基线扫描分析 +# Center for Internet Security (CIS) benchmarks to evaluate and analyze the security of cluster ## *任务描述*: From 8dd48b82b76353003f1a36c0b1e8f20984263f51 Mon Sep 17 00:00:00 2001 From: CrescentP <56831307+CrescentP@users.noreply.github.com> Date: Thu, 16 Sep 2021 14:52:46 +0800 Subject: [PATCH 61/62] Delete Test --- ...aluate and analyze the security of cluster | 409 ------------------ 1 file changed, 409 deletions(-) delete mode 100644 Center for Internet Security (CIS) benchmarks to evaluate and analyze the security of cluster diff --git a/Center for Internet Security (CIS) benchmarks to evaluate and analyze the security of cluster b/Center for Internet Security (CIS) benchmarks to evaluate and analyze the security of cluster deleted file mode 100644 index e91fda666..000000000 --- a/Center for Internet Security (CIS) benchmarks to evaluate and analyze the security of cluster +++ /dev/null @@ -1,409 +0,0 @@ -# Center for Internet Security (CIS) benchmarks to evaluate and analyze the security of cluster - -## *任务描述*: - -为了提供更安全的K8s集群,有必要使集群遵循安全的配置基线。 - -## *建议方案*: - -建议使用Center for Internet Security(CIS) benchmarks 来评估和分析集群的安全性。 - -## 具体流程 - -### 搭建TKEStack集群 - -1. 在`Installer `节点执行脚本 - - ```shell - arch=amd64 version=v1.3.1 && wget https://tke-release-1251707795.cos.ap-guangzhou.myqcloud.com/tke-installer-linux-$arch-$version.run{,.sha256} && sha256sum --check --status tke-installer-linux-$arch-$version.run.sha256 && chmod +x tke-installer-linux-$arch-$version.run && ./tke-installer-linux-$arch-$version.run - ``` - -2. 控制台安装 - - 按照提示好global集群 - - 最终可以得到这个 - - ![image-20210915153621127](https://gitee.com/Crescent_P/picture-bed/raw/master/image-20210915153621127.png) - -3. 访问控制台 - - ![image-20210915153800794](https://gitee.com/Crescent_P/picture-bed/raw/master/image-20210915153800794.png) - -### 创建业务集群 - -在集群管理中选择新建独立集群,填写相关信息即可 - -![image-20210915153919020](https://gitee.com/Crescent_P/picture-bed/raw/master/image-20210915153919020.png) - -### 使用 kube-bencht 扫描集群 - -Kube-Bench是一款针对Kubernete的安全检测工具,从本质上来说,Kube-Bench是一个基于Go开发的应用程序,它可以帮助研究人员对部署的Kubernete进行安全检测,安全检测原则遵循CIS Kubernetes Benchmark。 - -#### 安装部署 - -- 二进制安装 - - ```shell - wget https://github.com/aquasecurity/kube-bench/releases/download/v0.4.0/kube-bench_0.4.0_linux_amd64.tar.gz - tar -zxvf kube-bench_0.4.0_linux_amd64.tar.gz - mv kube-bench /usr/bin/ - ``` - -- - - ```shell - docker run --rm -v `pwd`:/host aquasec/kube-bench:latest install[root@VM-0-11-centos cis-1.6]# ls /etc/kube-bench/cfg/ - ack-1.0 aks-1.0 cis-1.20 cis-1.5 cis-1.6 config.yaml eks-1.0 gke-1.0 rh-0.7 rh-1.0 - # 根据这些文件对集群当中的组件扫描已有的配置 - [root@VM-0-11-centos cis-1.6]# cd /etc/kube-bench/cfg/cis-1.6 - [root@VM-0-11-centos cis-1.6]# ls - config.yaml controlplane.yaml etcd.yaml master.yaml node.yaml policies.yaml - ``` - -### 扫描结果 - -#### master - -```shell -[root@VM-0-11-centos cis-1.6]# kube-bench run --targets=master -[INFO] 1 Master Node Security Configuration -[INFO] 1.1 Master Node Configuration Files -[PASS] 1.1.1 Ensure that the API server pod specification file permissions are set to 644 or more restrictive (Automated) -[PASS] 1.1.2 Ensure that the API server pod specification file ownership is set to root:root (Automated) -[PASS] 1.1.3 Ensure that the controller manager pod specification file permissions are set to 644 or more restrictive (Automated) -[PASS] 1.1.4 Ensure that the controller manager pod specification file ownership is set to root:root (Automated) -[PASS] 1.1.5 Ensure that the scheduler pod specification file permissions are set to 644 or more restrictive (Automated) -[PASS] 1.1.6 Ensure that the scheduler pod specification file ownership is set to root:root (Automated) -[PASS] 1.1.7 Ensure that the etcd pod specification file permissions are set to 644 or more restrictive (Automated) -[PASS] 1.1.8 Ensure that the etcd pod specification file ownership is set to root:root (Automated) -[WARN] 1.1.9 Ensure that the Container Network Interface file permissions are set to 644 or more restrictive (Manual) -[PASS] 1.1.10 Ensure that the Container Network Interface file ownership is set to root:root (Manual) -[PASS] 1.1.11 Ensure that the etcd data directory permissions are set to 700 or more restrictive (Automated) -[FAIL] 1.1.12 Ensure that the etcd data directory ownership is set to etcd:etcd (Automated) -[PASS] 1.1.13 Ensure that the admin.conf file permissions are set to 644 or more restrictive (Automated) -[PASS] 1.1.14 Ensure that the admin.conf file ownership is set to root:root (Automated) -[PASS] 1.1.15 Ensure that the scheduler.conf file permissions are set to 644 or more restrictive (Automated) -[PASS] 1.1.16 Ensure that the scheduler.conf file ownership is set to root:root (Automated) -[PASS] 1.1.17 Ensure that the controller-manager.conf file permissions are set to 644 or more restrictive (Automated) -[PASS] 1.1.18 Ensure that the controller-manager.conf file ownership is set to root:root (Automated) -[PASS] 1.1.19 Ensure that the Kubernetes PKI directory and file ownership is set to root:root (Automated) -[PASS] 1.1.20 Ensure that the Kubernetes PKI certificate file permissions are set to 644 or more restrictive (Manual) -[WARN] 1.1.21 Ensure that the Kubernetes PKI key file permissions are set to 600 (Manual) -[INFO] 1.2 API Server -[WARN] 1.2.1 Ensure that the --anonymous-auth argument is set to false (Manual) -[PASS] 1.2.2 Ensure that the --basic-auth-file argument is not set (Automated) -[FAIL] 1.2.3 Ensure that the --token-auth-file parameter is not set (Automated) -[PASS] 1.2.4 Ensure that the --kubelet-https argument is set to true (Automated) -[PASS] 1.2.5 Ensure that the --kubelet-client-certificate and --kubelet-client-key arguments are set as appropriate (Automated) -[FAIL] 1.2.6 Ensure that the --kubelet-certificate-authority argument is set as appropriate (Automated) -[PASS] 1.2.7 Ensure that the --authorization-mode argument is not set to AlwaysAllow (Automated) -[PASS] 1.2.8 Ensure that the --authorization-mode argument includes Node (Automated) -[PASS] 1.2.9 Ensure that the --authorization-mode argument includes RBAC (Automated) -[WARN] 1.2.10 Ensure that the admission control plugin EventRateLimit is set (Manual) -[PASS] 1.2.11 Ensure that the admission control plugin AlwaysAdmit is not set (Automated) -[WARN] 1.2.12 Ensure that the admission control plugin AlwaysPullImages is set (Manual) -[WARN] 1.2.13 Ensure that the admission control plugin SecurityContextDeny is set if PodSecurityPolicy is not used (Manual) -[PASS] 1.2.14 Ensure that the admission control plugin ServiceAccount is set (Automated) -[PASS] 1.2.15 Ensure that the admission control plugin NamespaceLifecycle is set (Automated) -[FAIL] 1.2.16 Ensure that the admission control plugin PodSecurityPolicy is set (Automated) -[PASS] 1.2.17 Ensure that the admission control plugin NodeRestriction is set (Automated) -[PASS] 1.2.18 Ensure that the --insecure-bind-address argument is not set (Automated) -[PASS] 1.2.19 Ensure that the --insecure-port argument is set to 0 (Automated) -[PASS] 1.2.20 Ensure that the --secure-port argument is not set to 0 (Automated) -[FAIL] 1.2.21 Ensure that the --profiling argument is set to false (Automated) -[FAIL] 1.2.22 Ensure that the --audit-log-path argument is set (Automated) -[FAIL] 1.2.23 Ensure that the --audit-log-maxage argument is set to 30 or as appropriate (Automated) -[FAIL] 1.2.24 Ensure that the --audit-log-maxbackup argument is set to 10 or as appropriate (Automated) -[FAIL] 1.2.25 Ensure that the --audit-log-maxsize argument is set to 100 or as appropriate (Automated) -[WARN] 1.2.26 Ensure that the --request-timeout argument is set as appropriate (Automated) -[PASS] 1.2.27 Ensure that the --service-account-lookup argument is set to true (Automated) -[PASS] 1.2.28 Ensure that the --service-account-key-file argument is set as appropriate (Automated) -[PASS] 1.2.29 Ensure that the --etcd-certfile and --etcd-keyfile arguments are set as appropriate (Automated) -[PASS] 1.2.30 Ensure that the --tls-cert-file and --tls-private-key-file arguments are set as appropriate (Automated) -[PASS] 1.2.31 Ensure that the --client-ca-file argument is set as appropriate (Automated) -[PASS] 1.2.32 Ensure that the --etcd-cafile argument is set as appropriate (Automated) -[WARN] 1.2.33 Ensure that the --encryption-provider-config argument is set as appropriate (Manual) -[WARN] 1.2.34 Ensure that encryption providers are appropriately configured (Manual) -[WARN] 1.2.35 Ensure that the API Server only makes use of Strong Cryptographic Ciphers (Manual) -[INFO] 1.3 Controller Manager -[WARN] 1.3.1 Ensure that the --terminated-pod-gc-threshold argument is set as appropriate (Manual) -[FAIL] 1.3.2 Ensure that the --profiling argument is set to false (Automated) -[PASS] 1.3.3 Ensure that the --use-service-account-credentials argument is set to true (Automated) -[PASS] 1.3.4 Ensure that the --service-account-private-key-file argument is set as appropriate (Automated) -[PASS] 1.3.5 Ensure that the --root-ca-file argument is set as appropriate (Automated) -[PASS] 1.3.6 Ensure that the RotateKubeletServerCertificate argument is set to true (Automated) -[PASS] 1.3.7 Ensure that the --bind-address argument is set to 127.0.0.1 (Automated) -[INFO] 1.4 Scheduler -[FAIL] 1.4.1 Ensure that the --profiling argument is set to false (Automated) -[PASS] 1.4.2 Ensure that the --bind-address argument is set to 127.0.0.1 (Automated) - -== Remediations == -1.1.9 Run the below command (based on the file location on your system) on the master node. -For example, -chmod 644 - -1.1.12 On the etcd server node, get the etcd data directory, passed as an argument --data-dir, -from the below command: -ps -ef | grep etcd -Run the below command (based on the etcd data directory found above). -For example, chown etcd:etcd /var/lib/etcd - -1.1.21 Run the below command (based on the file location on your system) on the master node. -For example, -chmod -R 600 /etc/kubernetes/pki/*.key - -1.2.1 Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml -on the master node and set the below parameter. ---anonymous-auth=false - -1.2.3 Follow the documentation and configure alternate mechanisms for authentication. Then, -edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml -on the master node and remove the --token-auth-file= parameter. - -1.2.6 Follow the Kubernetes documentation and setup the TLS connection between -the apiserver and kubelets. Then, edit the API server pod specification file -/etc/kubernetes/manifests/kube-apiserver.yaml on the master node and set the ---kubelet-certificate-authority parameter to the path to the cert file for the certificate authority. ---kubelet-certificate-authority= - -1.2.10 Follow the Kubernetes documentation and set the desired limits in a configuration file. -Then, edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml -and set the below parameters. ---enable-admission-plugins=...,EventRateLimit,... ---admission-control-config-file= - -1.2.12 Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml -on the master node and set the --enable-admission-plugins parameter to include -AlwaysPullImages. ---enable-admission-plugins=...,AlwaysPullImages,... - -1.2.13 Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml -on the master node and set the --enable-admission-plugins parameter to include -SecurityContextDeny, unless PodSecurityPolicy is already in place. ---enable-admission-plugins=...,SecurityContextDeny,... - -1.2.16 Follow the documentation and create Pod Security Policy objects as per your environment. -Then, edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml -on the master node and set the --enable-admission-plugins parameter to a -value that includes PodSecurityPolicy: ---enable-admission-plugins=...,PodSecurityPolicy,... -Then restart the API Server. - -1.2.21 Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml -on the master node and set the below parameter. ---profiling=false - -1.2.22 Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml -on the master node and set the --audit-log-path parameter to a suitable path and -file where you would like audit logs to be written, for example: ---audit-log-path=/var/log/apiserver/audit.log - -1.2.23 Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml -on the master node and set the --audit-log-maxage parameter to 30 or as an appropriate number of days: ---audit-log-maxage=30 - -1.2.24 Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml -on the master node and set the --audit-log-maxbackup parameter to 10 or to an appropriate -value. ---audit-log-maxbackup=10 - -1.2.25 Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml -on the master node and set the --audit-log-maxsize parameter to an appropriate size in MB. -For example, to set it as 100 MB: ---audit-log-maxsize=100 - -1.2.26 Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml -and set the below parameter as appropriate and if needed. -For example, ---request-timeout=300s - -1.2.33 Follow the Kubernetes documentation and configure a EncryptionConfig file. -Then, edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml -on the master node and set the --encryption-provider-config parameter to the path of that file: --encryption-provider-config= - -1.2.34 Follow the Kubernetes documentation and configure a EncryptionConfig file. -In this file, choose aescbc, kms or secretbox as the encryption provider. - -1.2.35 Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml -on the master node and set the below parameter. ---tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM -_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_256_GCM -_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_ECDSA_WITH_AES_256_GCM -_SHA384 - -1.3.1 Edit the Controller Manager pod specification file /etc/kubernetes/manifests/kube-controller-manager.yaml -on the master node and set the --terminated-pod-gc-threshold to an appropriate threshold, -for example: ---terminated-pod-gc-threshold=10 - -1.3.2 Edit the Controller Manager pod specification file /etc/kubernetes/manifests/kube-controller-manager.yaml -on the master node and set the below parameter. ---profiling=false - -1.4.1 Edit the Scheduler pod specification file /etc/kubernetes/manifests/kube-scheduler.yaml file -on the master node and set the below parameter. ---profiling=false - - -== Summary == -43 checks PASS -11 checks FAIL -11 checks WARN -0 checks INFO - -``` - -#### node - -```shell -[root@VM-0-11-centos cis-1.6]# kube-bench run --targets=node -[INFO] 4 Worker Node Security Configuration -[INFO] 4.1 Worker Node Configuration Files -[PASS] 4.1.1 Ensure that the kubelet service file permissions are set to 644 or more restrictive (Automated) -[PASS] 4.1.2 Ensure that the kubelet service file ownership is set to root:root (Automated) -[PASS] 4.1.3 If proxy kubeconfig file exists ensure permissions are set to 644 or more restrictive (Manual) -[PASS] 4.1.4 Ensure that the proxy kubeconfig file ownership is set to root:root (Manual) -[PASS] 4.1.5 Ensure that the --kubeconfig kubelet.conf file permissions are set to 644 or more restrictive (Automated) -[PASS] 4.1.6 Ensure that the --kubeconfig kubelet.conf file ownership is set to root:root (Manual) -[PASS] 4.1.7 Ensure that the certificate authorities file permissions are set to 644 or more restrictive (Manual) -[PASS] 4.1.8 Ensure that the client certificate authorities file ownership is set to root:root (Manual) -[PASS] 4.1.9 Ensure that the kubelet --config configuration file has permissions set to 644 or more restrictive (Automated) -[PASS] 4.1.10 Ensure that the kubelet --config configuration file ownership is set to root:root (Automated) -[INFO] 4.2 Kubelet -[PASS] 4.2.1 Ensure that the anonymous-auth argument is set to false (Automated) -[PASS] 4.2.2 Ensure that the --authorization-mode argument is not set to AlwaysAllow (Automated) -[PASS] 4.2.3 Ensure that the --client-ca-file argument is set as appropriate (Automated) -[PASS] 4.2.4 Ensure that the --read-only-port argument is set to 0 (Manual) -[PASS] 4.2.5 Ensure that the --streaming-connection-idle-timeout argument is not set to 0 (Manual) -[FAIL] 4.2.6 Ensure that the --protect-kernel-defaults argument is set to true (Automated) -[PASS] 4.2.7 Ensure that the --make-iptables-util-chains argument is set to true (Automated) -[WARN] 4.2.8 Ensure that the --hostname-override argument is not set (Manual) -[WARN] 4.2.9 Ensure that the --event-qps argument is set to 0 or a level which ensures appropriate event capture (Manual) -[WARN] 4.2.10 Ensure that the --tls-cert-file and --tls-private-key-file arguments are set as appropriate (Manual) -[PASS] 4.2.11 Ensure that the --rotate-certificates argument is not set to false (Manual) -[PASS] 4.2.12 Verify that the RotateKubeletServerCertificate argument is set to true (Manual) -[WARN] 4.2.13 Ensure that the Kubelet only makes use of Strong Cryptographic Ciphers (Manual) - -== Remediations == -4.2.6 If using a Kubelet config file, edit the file to set protectKernelDefaults: true. -If using command line arguments, edit the kubelet service file -/etc/systemd/system/kubelet.service on each worker node and -set the below parameter in KUBELET_SYSTEM_PODS_ARGS variable. ---protect-kernel-defaults=true -Based on your system, restart the kubelet service. For example: -systemctl daemon-reload -systemctl restart kubelet.service - -4.2.8 Edit the kubelet service file /etc/systemd/system/kubelet.service -on each worker node and remove the --hostname-override argument from the -KUBELET_SYSTEM_PODS_ARGS variable. -Based on your system, restart the kubelet service. For example: -systemctl daemon-reload -systemctl restart kubelet.service - -4.2.9 If using a Kubelet config file, edit the file to set eventRecordQPS: to an appropriate level. -If using command line arguments, edit the kubelet service file -/etc/systemd/system/kubelet.service on each worker node and -set the below parameter in KUBELET_SYSTEM_PODS_ARGS variable. -Based on your system, restart the kubelet service. For example: -systemctl daemon-reload -systemctl restart kubelet.service - -4.2.10 If using a Kubelet config file, edit the file to set tlsCertFile to the location -of the certificate file to use to identify this Kubelet, and tlsPrivateKeyFile -to the location of the corresponding private key file. -If using command line arguments, edit the kubelet service file -/etc/systemd/system/kubelet.service on each worker node and -set the below parameters in KUBELET_CERTIFICATE_ARGS variable. ---tls-cert-file= ---tls-private-key-file= -Based on your system, restart the kubelet service. For example: -systemctl daemon-reload -systemctl restart kubelet.service - -4.2.13 If using a Kubelet config file, edit the file to set TLSCipherSuites: to -TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_128_GCM_SHA256 -or to a subset of these values. -If using executable arguments, edit the kubelet service file -/etc/systemd/system/kubelet.service on each worker node and -set the --tls-cipher-suites parameter as follows, or to a subset of these values. ---tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_128_GCM_SHA256 -Based on your system, restart the kubelet service. For example: -systemctl daemon-reload -systemctl restart kubelet.service - - -== Summary == -18 checks PASS -1 checks FAIL -4 checks WARN -0 checks INFO - -``` - -### 结果分析 - -我们按照CIS Kubernetes Benchmark进行分析 - -#### 1.1.12 - -![image-20210915162536350](https://gitee.com/Crescent_P/picture-bed/raw/master/image-20210915162536350.png) - -#### 1.2.3 - -![image-20210915162614233](https://gitee.com/Crescent_P/picture-bed/raw/master/image-20210915162614233.png) - -#### 1.2.6 - -![image-20210915162642312](https://gitee.com/Crescent_P/picture-bed/raw/master/image-20210915162642312.png) - -#### 1.2.16 - -![image-20210915162714613](https://gitee.com/Crescent_P/picture-bed/raw/master/image-20210915162714613.png) - -#### 1.2.21 - -![image-20210915162757078](https://gitee.com/Crescent_P/picture-bed/raw/master/image-20210915162757078.png) - -#### 1.2.22 - -![image-20210915162841148](https://gitee.com/Crescent_P/picture-bed/raw/master/image-20210915162841148.png) - -#### 1.2.23 - -![image-20210915162848073](https://gitee.com/Crescent_P/picture-bed/raw/master/image-20210915162848073.png) - -#### 1.2.24 - -![image-20210915162855325](https://gitee.com/Crescent_P/picture-bed/raw/master/image-20210915162855325.png) - -#### 1.2.25 - -#### ![image-20210915162902354](https://gitee.com/Crescent_P/picture-bed/raw/master/image-20210915162902354.png) - -#### 1.3.2 - -![image-20210915162933815](https://gitee.com/Crescent_P/picture-bed/raw/master/image-20210915162933815.png) - -#### 1.4.1 - -![image-20210915162955259](https://gitee.com/Crescent_P/picture-bed/raw/master/image-20210915162955259.png) - -#### 4.2.6 - -![image-20210915163028273](https://gitee.com/Crescent_P/picture-bed/raw/master/image-20210915163028273.png) - -## 结语 - -以上资料参考 - -https://tkestack.github.io/docs/ - -https://cloud.tencent.com/developer/article/1680433 - -https://www.cisecurity.org/benchmark/kubernetes/ - -欢迎大家参与到TKEStack的建设中:https://github.com/tkestack - -**在这里十分感谢TKEStack的各位导师给我提供的资源和帮助** From 0f8d019d107b438ce1d4d13c6ff709c2b01de0c6 Mon Sep 17 00:00:00 2001 From: CrescentP <56831307+CrescentP@users.noreply.github.com> Date: Thu, 16 Sep 2021 14:58:46 +0800 Subject: [PATCH 62/62] CIS Center for Internet Security (CIS) benchmarks to evaluate and analyze the security of cluster --- CISbenchmarks.md | 409 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 409 insertions(+) create mode 100644 CISbenchmarks.md diff --git a/CISbenchmarks.md b/CISbenchmarks.md new file mode 100644 index 000000000..f4fe91b1b --- /dev/null +++ b/CISbenchmarks.md @@ -0,0 +1,409 @@ +# TKEStack 集群CIS安全基线扫描分析 + +## *任务描述*: + +为了提供更安全的K8s集群,有必要使集群遵循安全的配置基线。 + +## *建议方案*: + +建议使用Center for Internet Security(CIS) benchmarks 来评估和分析集群的安全性。 + +## 具体流程 + +### 搭建TKEStack集群 + +1. 在`Installer `节点执行脚本 + + ```shell + arch=amd64 version=v1.3.1 && wget https://tke-release-1251707795.cos.ap-guangzhou.myqcloud.com/tke-installer-linux-$arch-$version.run{,.sha256} && sha256sum --check --status tke-installer-linux-$arch-$version.run.sha256 && chmod +x tke-installer-linux-$arch-$version.run && ./tke-installer-linux-$arch-$version.run + ``` + +2. 控制台安装 + + 按照提示好global集群 + + 最终可以得到这个 + + ![image-20210915153621127](https://gitee.com/Crescent_P/picture-bed/raw/master/image-20210915153621127.png) + +3. 访问控制台 + + ![image-20210915153800794](https://gitee.com/Crescent_P/picture-bed/raw/master/image-20210915153800794.png) + +### 创建业务集群 + +在集群管理中选择新建独立集群,填写相关信息即可 + +![image-20210915153919020](https://gitee.com/Crescent_P/picture-bed/raw/master/image-20210915153919020.png) + +### 使用 kube-bencht 扫描集群 + +Kube-Bench是一款针对Kubernete的安全检测工具,从本质上来说,Kube-Bench是一个基于Go开发的应用程序,它可以帮助研究人员对部署的Kubernete进行安全检测,安全检测原则遵循CIS Kubernetes Benchmark。 + +#### 安装部署 + +- 二进制安装 + + ```shell + wget https://github.com/aquasecurity/kube-bench/releases/download/v0.4.0/kube-bench_0.4.0_linux_amd64.tar.gz + tar -zxvf kube-bench_0.4.0_linux_amd64.tar.gz + mv kube-bench /usr/bin/ + ``` + +- + + ```shell + docker run --rm -v `pwd`:/host aquasec/kube-bench:latest install[root@VM-0-11-centos cis-1.6]# ls /etc/kube-bench/cfg/ + ack-1.0 aks-1.0 cis-1.20 cis-1.5 cis-1.6 config.yaml eks-1.0 gke-1.0 rh-0.7 rh-1.0 + # 根据这些文件对集群当中的组件扫描已有的配置 + [root@VM-0-11-centos cis-1.6]# cd /etc/kube-bench/cfg/cis-1.6 + [root@VM-0-11-centos cis-1.6]# ls + config.yaml controlplane.yaml etcd.yaml master.yaml node.yaml policies.yaml + ``` + +### 扫描结果 + +#### master + +```shell +[root@VM-0-11-centos cis-1.6]# kube-bench run --targets=master +[INFO] 1 Master Node Security Configuration +[INFO] 1.1 Master Node Configuration Files +[PASS] 1.1.1 Ensure that the API server pod specification file permissions are set to 644 or more restrictive (Automated) +[PASS] 1.1.2 Ensure that the API server pod specification file ownership is set to root:root (Automated) +[PASS] 1.1.3 Ensure that the controller manager pod specification file permissions are set to 644 or more restrictive (Automated) +[PASS] 1.1.4 Ensure that the controller manager pod specification file ownership is set to root:root (Automated) +[PASS] 1.1.5 Ensure that the scheduler pod specification file permissions are set to 644 or more restrictive (Automated) +[PASS] 1.1.6 Ensure that the scheduler pod specification file ownership is set to root:root (Automated) +[PASS] 1.1.7 Ensure that the etcd pod specification file permissions are set to 644 or more restrictive (Automated) +[PASS] 1.1.8 Ensure that the etcd pod specification file ownership is set to root:root (Automated) +[WARN] 1.1.9 Ensure that the Container Network Interface file permissions are set to 644 or more restrictive (Manual) +[PASS] 1.1.10 Ensure that the Container Network Interface file ownership is set to root:root (Manual) +[PASS] 1.1.11 Ensure that the etcd data directory permissions are set to 700 or more restrictive (Automated) +[FAIL] 1.1.12 Ensure that the etcd data directory ownership is set to etcd:etcd (Automated) +[PASS] 1.1.13 Ensure that the admin.conf file permissions are set to 644 or more restrictive (Automated) +[PASS] 1.1.14 Ensure that the admin.conf file ownership is set to root:root (Automated) +[PASS] 1.1.15 Ensure that the scheduler.conf file permissions are set to 644 or more restrictive (Automated) +[PASS] 1.1.16 Ensure that the scheduler.conf file ownership is set to root:root (Automated) +[PASS] 1.1.17 Ensure that the controller-manager.conf file permissions are set to 644 or more restrictive (Automated) +[PASS] 1.1.18 Ensure that the controller-manager.conf file ownership is set to root:root (Automated) +[PASS] 1.1.19 Ensure that the Kubernetes PKI directory and file ownership is set to root:root (Automated) +[PASS] 1.1.20 Ensure that the Kubernetes PKI certificate file permissions are set to 644 or more restrictive (Manual) +[WARN] 1.1.21 Ensure that the Kubernetes PKI key file permissions are set to 600 (Manual) +[INFO] 1.2 API Server +[WARN] 1.2.1 Ensure that the --anonymous-auth argument is set to false (Manual) +[PASS] 1.2.2 Ensure that the --basic-auth-file argument is not set (Automated) +[FAIL] 1.2.3 Ensure that the --token-auth-file parameter is not set (Automated) +[PASS] 1.2.4 Ensure that the --kubelet-https argument is set to true (Automated) +[PASS] 1.2.5 Ensure that the --kubelet-client-certificate and --kubelet-client-key arguments are set as appropriate (Automated) +[FAIL] 1.2.6 Ensure that the --kubelet-certificate-authority argument is set as appropriate (Automated) +[PASS] 1.2.7 Ensure that the --authorization-mode argument is not set to AlwaysAllow (Automated) +[PASS] 1.2.8 Ensure that the --authorization-mode argument includes Node (Automated) +[PASS] 1.2.9 Ensure that the --authorization-mode argument includes RBAC (Automated) +[WARN] 1.2.10 Ensure that the admission control plugin EventRateLimit is set (Manual) +[PASS] 1.2.11 Ensure that the admission control plugin AlwaysAdmit is not set (Automated) +[WARN] 1.2.12 Ensure that the admission control plugin AlwaysPullImages is set (Manual) +[WARN] 1.2.13 Ensure that the admission control plugin SecurityContextDeny is set if PodSecurityPolicy is not used (Manual) +[PASS] 1.2.14 Ensure that the admission control plugin ServiceAccount is set (Automated) +[PASS] 1.2.15 Ensure that the admission control plugin NamespaceLifecycle is set (Automated) +[FAIL] 1.2.16 Ensure that the admission control plugin PodSecurityPolicy is set (Automated) +[PASS] 1.2.17 Ensure that the admission control plugin NodeRestriction is set (Automated) +[PASS] 1.2.18 Ensure that the --insecure-bind-address argument is not set (Automated) +[PASS] 1.2.19 Ensure that the --insecure-port argument is set to 0 (Automated) +[PASS] 1.2.20 Ensure that the --secure-port argument is not set to 0 (Automated) +[FAIL] 1.2.21 Ensure that the --profiling argument is set to false (Automated) +[FAIL] 1.2.22 Ensure that the --audit-log-path argument is set (Automated) +[FAIL] 1.2.23 Ensure that the --audit-log-maxage argument is set to 30 or as appropriate (Automated) +[FAIL] 1.2.24 Ensure that the --audit-log-maxbackup argument is set to 10 or as appropriate (Automated) +[FAIL] 1.2.25 Ensure that the --audit-log-maxsize argument is set to 100 or as appropriate (Automated) +[WARN] 1.2.26 Ensure that the --request-timeout argument is set as appropriate (Automated) +[PASS] 1.2.27 Ensure that the --service-account-lookup argument is set to true (Automated) +[PASS] 1.2.28 Ensure that the --service-account-key-file argument is set as appropriate (Automated) +[PASS] 1.2.29 Ensure that the --etcd-certfile and --etcd-keyfile arguments are set as appropriate (Automated) +[PASS] 1.2.30 Ensure that the --tls-cert-file and --tls-private-key-file arguments are set as appropriate (Automated) +[PASS] 1.2.31 Ensure that the --client-ca-file argument is set as appropriate (Automated) +[PASS] 1.2.32 Ensure that the --etcd-cafile argument is set as appropriate (Automated) +[WARN] 1.2.33 Ensure that the --encryption-provider-config argument is set as appropriate (Manual) +[WARN] 1.2.34 Ensure that encryption providers are appropriately configured (Manual) +[WARN] 1.2.35 Ensure that the API Server only makes use of Strong Cryptographic Ciphers (Manual) +[INFO] 1.3 Controller Manager +[WARN] 1.3.1 Ensure that the --terminated-pod-gc-threshold argument is set as appropriate (Manual) +[FAIL] 1.3.2 Ensure that the --profiling argument is set to false (Automated) +[PASS] 1.3.3 Ensure that the --use-service-account-credentials argument is set to true (Automated) +[PASS] 1.3.4 Ensure that the --service-account-private-key-file argument is set as appropriate (Automated) +[PASS] 1.3.5 Ensure that the --root-ca-file argument is set as appropriate (Automated) +[PASS] 1.3.6 Ensure that the RotateKubeletServerCertificate argument is set to true (Automated) +[PASS] 1.3.7 Ensure that the --bind-address argument is set to 127.0.0.1 (Automated) +[INFO] 1.4 Scheduler +[FAIL] 1.4.1 Ensure that the --profiling argument is set to false (Automated) +[PASS] 1.4.2 Ensure that the --bind-address argument is set to 127.0.0.1 (Automated) + +== Remediations == +1.1.9 Run the below command (based on the file location on your system) on the master node. +For example, +chmod 644 + +1.1.12 On the etcd server node, get the etcd data directory, passed as an argument --data-dir, +from the below command: +ps -ef | grep etcd +Run the below command (based on the etcd data directory found above). +For example, chown etcd:etcd /var/lib/etcd + +1.1.21 Run the below command (based on the file location on your system) on the master node. +For example, +chmod -R 600 /etc/kubernetes/pki/*.key + +1.2.1 Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml +on the master node and set the below parameter. +--anonymous-auth=false + +1.2.3 Follow the documentation and configure alternate mechanisms for authentication. Then, +edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml +on the master node and remove the --token-auth-file= parameter. + +1.2.6 Follow the Kubernetes documentation and setup the TLS connection between +the apiserver and kubelets. Then, edit the API server pod specification file +/etc/kubernetes/manifests/kube-apiserver.yaml on the master node and set the +--kubelet-certificate-authority parameter to the path to the cert file for the certificate authority. +--kubelet-certificate-authority= + +1.2.10 Follow the Kubernetes documentation and set the desired limits in a configuration file. +Then, edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml +and set the below parameters. +--enable-admission-plugins=...,EventRateLimit,... +--admission-control-config-file= + +1.2.12 Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml +on the master node and set the --enable-admission-plugins parameter to include +AlwaysPullImages. +--enable-admission-plugins=...,AlwaysPullImages,... + +1.2.13 Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml +on the master node and set the --enable-admission-plugins parameter to include +SecurityContextDeny, unless PodSecurityPolicy is already in place. +--enable-admission-plugins=...,SecurityContextDeny,... + +1.2.16 Follow the documentation and create Pod Security Policy objects as per your environment. +Then, edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml +on the master node and set the --enable-admission-plugins parameter to a +value that includes PodSecurityPolicy: +--enable-admission-plugins=...,PodSecurityPolicy,... +Then restart the API Server. + +1.2.21 Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml +on the master node and set the below parameter. +--profiling=false + +1.2.22 Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml +on the master node and set the --audit-log-path parameter to a suitable path and +file where you would like audit logs to be written, for example: +--audit-log-path=/var/log/apiserver/audit.log + +1.2.23 Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml +on the master node and set the --audit-log-maxage parameter to 30 or as an appropriate number of days: +--audit-log-maxage=30 + +1.2.24 Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml +on the master node and set the --audit-log-maxbackup parameter to 10 or to an appropriate +value. +--audit-log-maxbackup=10 + +1.2.25 Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml +on the master node and set the --audit-log-maxsize parameter to an appropriate size in MB. +For example, to set it as 100 MB: +--audit-log-maxsize=100 + +1.2.26 Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml +and set the below parameter as appropriate and if needed. +For example, +--request-timeout=300s + +1.2.33 Follow the Kubernetes documentation and configure a EncryptionConfig file. +Then, edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml +on the master node and set the --encryption-provider-config parameter to the path of that file: --encryption-provider-config= + +1.2.34 Follow the Kubernetes documentation and configure a EncryptionConfig file. +In this file, choose aescbc, kms or secretbox as the encryption provider. + +1.2.35 Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml +on the master node and set the below parameter. +--tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM +_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_256_GCM +_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_ECDSA_WITH_AES_256_GCM +_SHA384 + +1.3.1 Edit the Controller Manager pod specification file /etc/kubernetes/manifests/kube-controller-manager.yaml +on the master node and set the --terminated-pod-gc-threshold to an appropriate threshold, +for example: +--terminated-pod-gc-threshold=10 + +1.3.2 Edit the Controller Manager pod specification file /etc/kubernetes/manifests/kube-controller-manager.yaml +on the master node and set the below parameter. +--profiling=false + +1.4.1 Edit the Scheduler pod specification file /etc/kubernetes/manifests/kube-scheduler.yaml file +on the master node and set the below parameter. +--profiling=false + + +== Summary == +43 checks PASS +11 checks FAIL +11 checks WARN +0 checks INFO + +``` + +#### node + +```shell +[root@VM-0-11-centos cis-1.6]# kube-bench run --targets=node +[INFO] 4 Worker Node Security Configuration +[INFO] 4.1 Worker Node Configuration Files +[PASS] 4.1.1 Ensure that the kubelet service file permissions are set to 644 or more restrictive (Automated) +[PASS] 4.1.2 Ensure that the kubelet service file ownership is set to root:root (Automated) +[PASS] 4.1.3 If proxy kubeconfig file exists ensure permissions are set to 644 or more restrictive (Manual) +[PASS] 4.1.4 Ensure that the proxy kubeconfig file ownership is set to root:root (Manual) +[PASS] 4.1.5 Ensure that the --kubeconfig kubelet.conf file permissions are set to 644 or more restrictive (Automated) +[PASS] 4.1.6 Ensure that the --kubeconfig kubelet.conf file ownership is set to root:root (Manual) +[PASS] 4.1.7 Ensure that the certificate authorities file permissions are set to 644 or more restrictive (Manual) +[PASS] 4.1.8 Ensure that the client certificate authorities file ownership is set to root:root (Manual) +[PASS] 4.1.9 Ensure that the kubelet --config configuration file has permissions set to 644 or more restrictive (Automated) +[PASS] 4.1.10 Ensure that the kubelet --config configuration file ownership is set to root:root (Automated) +[INFO] 4.2 Kubelet +[PASS] 4.2.1 Ensure that the anonymous-auth argument is set to false (Automated) +[PASS] 4.2.2 Ensure that the --authorization-mode argument is not set to AlwaysAllow (Automated) +[PASS] 4.2.3 Ensure that the --client-ca-file argument is set as appropriate (Automated) +[PASS] 4.2.4 Ensure that the --read-only-port argument is set to 0 (Manual) +[PASS] 4.2.5 Ensure that the --streaming-connection-idle-timeout argument is not set to 0 (Manual) +[FAIL] 4.2.6 Ensure that the --protect-kernel-defaults argument is set to true (Automated) +[PASS] 4.2.7 Ensure that the --make-iptables-util-chains argument is set to true (Automated) +[WARN] 4.2.8 Ensure that the --hostname-override argument is not set (Manual) +[WARN] 4.2.9 Ensure that the --event-qps argument is set to 0 or a level which ensures appropriate event capture (Manual) +[WARN] 4.2.10 Ensure that the --tls-cert-file and --tls-private-key-file arguments are set as appropriate (Manual) +[PASS] 4.2.11 Ensure that the --rotate-certificates argument is not set to false (Manual) +[PASS] 4.2.12 Verify that the RotateKubeletServerCertificate argument is set to true (Manual) +[WARN] 4.2.13 Ensure that the Kubelet only makes use of Strong Cryptographic Ciphers (Manual) + +== Remediations == +4.2.6 If using a Kubelet config file, edit the file to set protectKernelDefaults: true. +If using command line arguments, edit the kubelet service file +/etc/systemd/system/kubelet.service on each worker node and +set the below parameter in KUBELET_SYSTEM_PODS_ARGS variable. +--protect-kernel-defaults=true +Based on your system, restart the kubelet service. For example: +systemctl daemon-reload +systemctl restart kubelet.service + +4.2.8 Edit the kubelet service file /etc/systemd/system/kubelet.service +on each worker node and remove the --hostname-override argument from the +KUBELET_SYSTEM_PODS_ARGS variable. +Based on your system, restart the kubelet service. For example: +systemctl daemon-reload +systemctl restart kubelet.service + +4.2.9 If using a Kubelet config file, edit the file to set eventRecordQPS: to an appropriate level. +If using command line arguments, edit the kubelet service file +/etc/systemd/system/kubelet.service on each worker node and +set the below parameter in KUBELET_SYSTEM_PODS_ARGS variable. +Based on your system, restart the kubelet service. For example: +systemctl daemon-reload +systemctl restart kubelet.service + +4.2.10 If using a Kubelet config file, edit the file to set tlsCertFile to the location +of the certificate file to use to identify this Kubelet, and tlsPrivateKeyFile +to the location of the corresponding private key file. +If using command line arguments, edit the kubelet service file +/etc/systemd/system/kubelet.service on each worker node and +set the below parameters in KUBELET_CERTIFICATE_ARGS variable. +--tls-cert-file= +--tls-private-key-file= +Based on your system, restart the kubelet service. For example: +systemctl daemon-reload +systemctl restart kubelet.service + +4.2.13 If using a Kubelet config file, edit the file to set TLSCipherSuites: to +TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_128_GCM_SHA256 +or to a subset of these values. +If using executable arguments, edit the kubelet service file +/etc/systemd/system/kubelet.service on each worker node and +set the --tls-cipher-suites parameter as follows, or to a subset of these values. +--tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_128_GCM_SHA256 +Based on your system, restart the kubelet service. For example: +systemctl daemon-reload +systemctl restart kubelet.service + + +== Summary == +18 checks PASS +1 checks FAIL +4 checks WARN +0 checks INFO + +``` + +### 结果分析 + +我们按照CIS Kubernetes Benchmark进行分析 + +#### 1.1.12 + +![image-20210915162536350](https://gitee.com/Crescent_P/picture-bed/raw/master/image-20210915162536350.png) + +#### 1.2.3 + +![image-20210915162614233](https://gitee.com/Crescent_P/picture-bed/raw/master/image-20210915162614233.png) + +#### 1.2.6 + +![image-20210915162642312](https://gitee.com/Crescent_P/picture-bed/raw/master/image-20210915162642312.png) + +#### 1.2.16 + +![image-20210915162714613](https://gitee.com/Crescent_P/picture-bed/raw/master/image-20210915162714613.png) + +#### 1.2.21 + +![image-20210915162757078](https://gitee.com/Crescent_P/picture-bed/raw/master/image-20210915162757078.png) + +#### 1.2.22 + +![image-20210915162841148](https://gitee.com/Crescent_P/picture-bed/raw/master/image-20210915162841148.png) + +#### 1.2.23 + +![image-20210915162848073](https://gitee.com/Crescent_P/picture-bed/raw/master/image-20210915162848073.png) + +#### 1.2.24 + +![image-20210915162855325](https://gitee.com/Crescent_P/picture-bed/raw/master/image-20210915162855325.png) + +#### 1.2.25 + +#### ![image-20210915162902354](https://gitee.com/Crescent_P/picture-bed/raw/master/image-20210915162902354.png) + +#### 1.3.2 + +![image-20210915162933815](https://gitee.com/Crescent_P/picture-bed/raw/master/image-20210915162933815.png) + +#### 1.4.1 + +![image-20210915162955259](https://gitee.com/Crescent_P/picture-bed/raw/master/image-20210915162955259.png) + +#### 4.2.6 + +![image-20210915163028273](https://gitee.com/Crescent_P/picture-bed/raw/master/image-20210915163028273.png) + +## 结语 + +以上资料参考 + +https://tkestack.github.io/docs/ + +https://cloud.tencent.com/developer/article/1680433 + +https://www.cisecurity.org/benchmark/kubernetes/ + +欢迎大家参与到TKEStack的建设中:https://github.com/tkestack + +**在这里十分感谢TKEStack的各位导师给我提供的资源和帮助**