Skip to content

Commit

Permalink
style: complete comment for ordered resource generator
Browse files Browse the repository at this point in the history
  • Loading branch information
elliotxx committed Aug 22, 2023
1 parent acc6751 commit 35244db
Showing 1 changed file with 10 additions and 4 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import (
"kusionstack.io/kusion/pkg/models"
)

// defaultOrderedKinds provides the default order of kubernetes resource kinds.
var defaultOrderedKinds = []string{
"Namespace",
"ResourceQuota",
Expand Down Expand Up @@ -34,10 +35,12 @@ var defaultOrderedKinds = []string{
"ValidatingWebhookConfiguration",
}

// orderedResourcesGenerator is a generator that inject the dependsOn of resources in a specified order.
type orderedResourcesGenerator struct {
orderedKinds []string
}

// NewOrderedResourcesGenerator returns a new instance of orderedResourcesGenerator.
func NewOrderedResourcesGenerator(orderedKindsList ...[]string) (appconfiguration.Generator, error) {
orderedKinds := defaultOrderedKinds
if len(orderedKindsList) > 0 && len(orderedKindsList[0]) > 0 {
Expand All @@ -48,45 +51,46 @@ func NewOrderedResourcesGenerator(orderedKindsList ...[]string) (appconfiguratio
}, nil
}

// NewOrderedResourcesGeneratorFunc returns a function that creates a new orderedResourcesGenerator.
func NewOrderedResourcesGeneratorFunc(orderedKindsList ...[]string) appconfiguration.NewGeneratorFunc {
return func() (appconfiguration.Generator, error) {
return NewOrderedResourcesGenerator(orderedKindsList...)
}
}

// Generate inject the dependsOn of resources in a specified order.
func (g *orderedResourcesGenerator) Generate(spec *models.Spec) error {
if spec.Resources == nil {
spec.Resources = make(models.Resources, 0)
}

for i := 0; i < len(spec.Resources); i++ {
if spec.Resources[i].Type != runtime.Kubernetes {
continue
}

curResource := &spec.Resources[i]
curKind := resourceKind(curResource)

dependKinds := g.findDependKinds(curKind)
injectAllDependsOn(curResource, dependKinds, spec.Resources)
}

return nil
}

// resourceKind returns the kind of the given resource.
func resourceKind(r *models.Resource) string {
u := &unstructured.Unstructured{}
u.SetUnstructuredContent(r.Attributes)
return u.GetKind()
}

// injectAllDependsOn injects all dependsOn relationships for the given resource and dependent kinds.
func injectAllDependsOn(curResource *models.Resource, dependKinds []string, rs []models.Resource) {
for _, dependKind := range dependKinds {
dependResources := findDependResources(dependKind, rs)
injectDependsOn(curResource, dependResources)
}
}

// injectDependsOn injects dependsOn relationships for the given resource and dependent resources.
func injectDependsOn(res *models.Resource, dependResources []*models.Resource) {
dependsOn := make([]string, 0, len(dependResources))
for _, r := range dependResources {
Expand All @@ -97,6 +101,7 @@ func injectDependsOn(res *models.Resource, dependResources []*models.Resource) {
}
}

// findDependResources returns the dependent resources of the specified kind.
func findDependResources(dependKind string, rs []models.Resource) []*models.Resource {
var dependResources []*models.Resource
for i := 0; i < len(rs); i++ {
Expand All @@ -107,6 +112,7 @@ func findDependResources(dependKind string, rs []models.Resource) []*models.Reso
return dependResources
}

// findDependKinds returns the dependent resource kinds for the specified kind.
func (g *orderedResourcesGenerator) findDependKinds(curKind string) []string {
dependKinds := make([]string, 0)
for _, previousKind := range g.orderedKinds {
Expand Down

0 comments on commit 35244db

Please sign in to comment.