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
}