func processInstallingDependencies()

in pkg/packages/manager.go [85:139]


func processInstallingDependencies(mc *ManagerContext) bool {
	mc.Log.Info("Installing dependencies", "chart", mc.Source)
	dependencies, err := mc.Bundle.GetDependencies(mc.Version)
	if err != nil {
		mc.Package.Status.Detail = fmt.Sprintf(
			"invalid package bundle. (%s@%s bundle: %s)",
			mc.Package.Name,
			mc.Version,
			mc.Bundle.Name,
		)
		mc.Log.Info(mc.Package.Status.Detail)
		mc.RequeueAfter = retryLong
		return true
	}
	pkgs, err := mc.ManagerClient.GetPackageList(mc.Ctx, mc.Package.Namespace)
	if err != nil {
		mc.RequeueAfter = retryShort
		mc.Package.Status.Detail = err.Error()
		return true
	}
	pkgsNotReady := []api.Package{}

	for _, dep := range dependencies {
		var pkg *api.Package
		for i := range pkgs.Items {
			items := pkgs.Items
			if items[i].Spec.PackageName == dep.Name {
				pkg = &items[i]
			}
		}
		if pkg != nil {
			if pkg.Status.State != api.StateInstalled {
				pkgsNotReady = append(pkgsNotReady, *pkg)
			}
		} else {
			p := api.NewPackage(dep.Name, dep.Name, mc.Package.Namespace, mc.Package.Spec.Config)
			p.Spec.TargetNamespace = mc.Package.Spec.TargetNamespace
			pkgsNotReady = append(pkgsNotReady, p)
			err := mc.ManagerClient.CreatePackage(mc.Ctx, &p)
			if err != nil {
				mc.Log.Error(err, "creating dependency package")
			}
		}
	}

	if len(pkgsNotReady) > 0 {
		depsStr := utils.Map(pkgsNotReady, func(pkg api.Package) string { return pkg.Spec.PackageName })
		mc.Package.Status.Detail = "Waiting for dependencies: " + strings.Join(depsStr, ", ")
		mc.RequeueAfter = retrySoon
		return true
	}
	mc.Package.Status.State = api.StateInstalling
	mc.Package.Status.Detail = ""
	return true
}