func()

in pkg/bundle/template/visitor/secretbuilder/api.go [46:169]


func (sb *secretBuilder) Visit(t *bundlev1.Template) {
	results := make(chan *bundlev1.Package)

	// Check arguments
	if t == nil {
		sb.err = errors.New("template is nil")
		return
	}
	if t.Spec == nil {
		sb.err = errors.New("template spec nil")
		return
	}
	if t.Spec.Namespaces == nil {
		sb.err = errors.New("template spec namespace nil")
		return
	}

	go func() {
		defer close(results)

		// Infrastructure secrets
		if t.Spec.Namespaces.Infrastructure != nil {
			for _, obj := range t.Spec.Namespaces.Infrastructure {
				// Initialize a infrastructure visitor
				v := infrastructure(results, sb.templateContext)

				// Traverse the object-tree
				visitor.InfrastructureDecorator(obj).Accept(v)

				// Get result
				if err := v.Error(); err != nil {
					sb.err = err
					return
				}
			}
		}

		// Platform secrets
		if t.Spec.Namespaces.Platform != nil {
			for _, obj := range t.Spec.Namespaces.Platform {
				// Check selector
				if t.Spec.Selector == nil {
					sb.err = fmt.Errorf("selector is mandatory for platform secrets")
					return
				}

				// Initialize a infrastructure visitor
				v, err := platform(results, sb.templateContext, t.Spec.Selector.Quality, t.Spec.Selector.Platform)
				if err != nil {
					sb.err = err
					return
				}

				// Traverse the object-tree
				visitor.PlatformDecorator(obj).Accept(v)

				// Get result
				if err := v.Error(); err != nil {
					sb.err = err
					return
				}
			}
		}

		// Product secrets
		if t.Spec.Namespaces.Product != nil {
			for _, obj := range t.Spec.Namespaces.Product {
				// Check selector
				if t.Spec.Selector == nil {
					sb.err = fmt.Errorf("selector is mandatory for product secrets")
					return
				}

				// Initialize a infrastructure visitor
				v, err := product(results, sb.templateContext, t.Spec.Selector.Product, t.Spec.Selector.Version)
				if err != nil {
					sb.err = err
					return
				}

				// Traverse the object-tree
				visitor.ProductDecorator(obj).Accept(v)

				// Get result
				if err := v.Error(); err != nil {
					sb.err = err
					return
				}
			}
		}

		// Application secrets
		if t.Spec.Namespaces.Application != nil {
			for _, obj := range t.Spec.Namespaces.Application {
				// Check selector
				if t.Spec.Selector == nil {
					sb.err = fmt.Errorf("selector is mandatory for application secrets")
					return
				}

				// Initialize a infrastructure visitor
				v, err := application(results, sb.templateContext, t.Spec.Selector.Quality, t.Spec.Selector.Platform, t.Spec.Selector.Product, t.Spec.Selector.Version)
				if err != nil {
					sb.err = err
					return
				}

				// Traverse the object-tree
				visitor.ApplicationDecorator(obj).Accept(v)

				// Get result
				if err := v.Error(); err != nil {
					sb.err = err
					return
				}
			}
		}
	}()

	// Pull all packages
	for p := range results {
		sb.bundle.Packages = append(sb.bundle.Packages, p)
	}
}