This is an automated email from the ASF dual-hosted git repository.
zhongxjian pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/dubbo-kubernetes.git
The following commit(s) were added to refs/heads/master by this push:
new 0a3f9acd [operator] Changing component names and package installers
(#516)
0a3f9acd is described below
commit 0a3f9acdcbd0dddb3da0cbb436aaa72eff9d74d1
Author: mfordjody <[email protected]>
AuthorDate: Mon Dec 2 14:29:44 2024 +0800
[operator] Changing component names and package installers (#516)
---
operator/manifest/manifest.go | 4 +-
.../pkg/{comp/comp.go => component/component.go} | 8 +-
operator/pkg/installer/installer.go | 85 +++++++++++++++++++++-
operator/pkg/util/dmultierr/dmultierr.go | 2 +-
operator/pkg/util/progress/progress.go | 12 +++
5 files changed, 100 insertions(+), 11 deletions(-)
diff --git a/operator/manifest/manifest.go b/operator/manifest/manifest.go
index eb1ef6a0..58027288 100644
--- a/operator/manifest/manifest.go
+++ b/operator/manifest/manifest.go
@@ -1,7 +1,7 @@
package manifest
import (
- "github.com/apache/dubbo-kubernetes/operator/pkg/comp"
+ "github.com/apache/dubbo-kubernetes/operator/pkg/component"
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
)
@@ -11,6 +11,6 @@ type Manifest struct {
}
type ManifestSet struct {
- Components comp.Name
+ Components component.Name
Manifests []Manifest
}
diff --git a/operator/pkg/comp/comp.go b/operator/pkg/component/component.go
similarity index 91%
rename from operator/pkg/comp/comp.go
rename to operator/pkg/component/component.go
index 2e9aae9f..ce91380c 100644
--- a/operator/pkg/comp/comp.go
+++ b/operator/pkg/component/component.go
@@ -1,4 +1,4 @@
-package comp
+package component
import (
"fmt"
@@ -12,7 +12,7 @@ const (
BaseComponentName Name = "Base"
)
-type Comp struct {
+type Component struct {
UserFacingName Name
SpecName string
Default bool
@@ -20,7 +20,7 @@ type Comp struct {
HelmTreeRoot string
}
-var AllComps = []Comp{
+var AllComponents = []Component{
{
UserFacingName: BaseComponentName,
SpecName: "base",
@@ -47,7 +47,7 @@ func UserFacingCompName(name Name) string {
return s
}
-func (c Comp) Get(merged values.Map) ([]apis.MetadataCompSpec, error) {
+func (c Component) Get(merged values.Map) ([]apis.MetadataCompSpec, error) {
defaultNamespace := merged.GetPathString("metadata.namespace")
var defaultResp []apis.MetadataCompSpec
def := c.Default
diff --git a/operator/pkg/installer/installer.go
b/operator/pkg/installer/installer.go
index d5cb34fb..c22dc2d1 100644
--- a/operator/pkg/installer/installer.go
+++ b/operator/pkg/installer/installer.go
@@ -2,9 +2,13 @@ package installer
import (
"github.com/apache/dubbo-kubernetes/operator/manifest"
+ "github.com/apache/dubbo-kubernetes/operator/pkg/component"
"github.com/apache/dubbo-kubernetes/operator/pkg/util/dmultierr"
"github.com/apache/dubbo-kubernetes/operator/pkg/values"
"github.com/apache/dubbo-kubernetes/pkg/kube"
+ "github.com/apache/dubbo-kubernetes/pkg/util/sets"
+ "github.com/apache/dubbo-kubernetes/pkg/util/slices"
+ "github.com/hashicorp/go-multierror"
"sync"
)
@@ -15,10 +19,50 @@ type Installer struct {
Values values.Map
}
-func (i Installer) install(manifest []manifest.ManifestSet) error {
- var _ sync.Mutex
- var _ sync.WaitGroup
- errors := dmultierr.NewDMultiErr()
+func (i Installer) install(manifests []manifest.ManifestSet) error {
+ var mu sync.Mutex
+ var wg sync.WaitGroup
+ errors := dmultierr.New()
+ if err := errors.ErrorOrNil(); err != nil {
+ return err
+ }
+
+ disabledComponents := sets.New(slices.Map(
+ component.AllComponents,
+ func(cc component.Component) component.Name {
+ return cc.UserFacingName
+ },
+ )...)
+ dependencyWaitCh := dependenciesChs()
+ for _, mfs := range manifests {
+ mfs := mfs
+ c := mfs.Components
+ m := mfs.Manifests
+ disabledComponents.Delete(c)
+ wg.Add(1)
+ go func() {
+ defer wg.Done()
+ if s := dependencyWaitCh[c]; s != nil {
+ <-s
+ }
+ if len(m) != 0 {
+ if err := i.applyManifestSet(mfs); err != nil {
+ mu.Lock()
+ errors = multierror.Append(errors, err)
+ mu.Unlock()
+ }
+ }
+ for _, ch := range componentDependencies[c] {
+ dependencyWaitCh[ch] <- struct{}{}
+ }
+ }()
+ }
+ for cc := range disabledComponents {
+ for _, ch := range componentDependencies[cc] {
+ dependencyWaitCh[ch] <- struct{}{}
+ }
+ }
+ wg.Wait()
if err := errors.ErrorOrNil(); err != nil {
return err
}
@@ -26,5 +70,38 @@ func (i Installer) install(manifest []manifest.ManifestSet)
error {
}
func (i Installer) InstallManifests(manifests []manifest.ManifestSet) error {
+ if err := i.install(manifests); err != nil {
+ return err
+ }
+ return nil
+}
+
+func (i Installer) applyManifestSet(manifestSet manifest.ManifestSet) error {
+ componentNames := string(manifestSet.Components)
+ manifests := manifestSet.Manifests
+ for _, obj := range manifests {
+ if err := i.serverSideApply(obj); err != nil {
+ return err
+ }
+ }
+ return nil
+}
+
+func (i Installer) serverSideApply(obj manifest.Manifest) error {
+ const fieldOwner = "dubbo-operator"
return nil
}
+
+var componentDependencies = map[component.Name][]component.Name{
+ component.BaseComponentName: {},
+}
+
+func dependenciesChs() map[component.Name]chan struct{} {
+ r := make(map[component.Name]chan struct{})
+ for _, parent := range componentDependencies {
+ for _, child := range parent {
+ r[child] = make(chan struct{}, 1)
+ }
+ }
+ return r
+}
diff --git a/operator/pkg/util/dmultierr/dmultierr.go
b/operator/pkg/util/dmultierr/dmultierr.go
index e5b428e6..96718282 100644
--- a/operator/pkg/util/dmultierr/dmultierr.go
+++ b/operator/pkg/util/dmultierr/dmultierr.go
@@ -20,7 +20,7 @@ func MultiErrorFormat() multierror.ErrorFormatFunc {
}
}
-func NewDMultiErr() *multierror.Error {
+func New() *multierror.Error {
return &multierror.Error{
ErrorFormat: MultiErrorFormat(),
}
diff --git a/operator/pkg/util/progress/progress.go
b/operator/pkg/util/progress/progress.go
new file mode 100644
index 00000000..56a1dca2
--- /dev/null
+++ b/operator/pkg/util/progress/progress.go
@@ -0,0 +1,12 @@
+package progress
+
+type InstallState int
+
+const (
+ StateInstalling InstallState = iota
+ StatePruning
+ StateComplete
+ StateUninstallComplete
+)
+
+const inProgress = `{{ yellow (cycle . "-" "-" " ") }}`