Installer: Make Private network optional

Change-Id: Ic7a2e5250a42dc03de2416b1e2a0d1bbca3f010c
diff --git a/core/installer/app_manager.go b/core/installer/app_manager.go
index 7274e03..6cf1da1 100644
--- a/core/installer/app_manager.go
+++ b/core/installer/app_manager.go
@@ -465,6 +465,7 @@
 	if err := setPortFields(values, portReservations); err != nil {
 		return ReleaseResources{}, err
 	}
+	// TODO(gio): env might not have private domain
 	imageRegistry := fmt.Sprintf("zot.%s", env.PrivateDomain)
 	if o.FetchContainerImages {
 		if err := pullContainerImages(instanceId, rendered.ContainerImages, imageRegistry, namespace, m.jc); err != nil {
@@ -612,7 +613,6 @@
 	return nil
 }
 
-// TODO(gio): deduplicate with cue definition in app.go, this one should be removed.
 func (m *AppManager) CreateNetworks(env EnvConfig) ([]Network, error) {
 	ret := []Network{
 		{
@@ -624,14 +624,16 @@
 			ReservePortAddr:    fmt.Sprintf("http://port-allocator.%s-ingress-public.svc.cluster.local/api/reserve", env.InfraName),
 			DeallocatePortAddr: fmt.Sprintf("http://port-allocator.%s-ingress-public.svc.cluster.local/api/remove", env.InfraName),
 		},
-		{
+	}
+	if env.PrivateDomain != "" {
+		ret = append(ret, Network{
 			Name:               "Private",
 			IngressClass:       fmt.Sprintf("%s-ingress-private", env.Id),
 			Domain:             env.PrivateDomain,
 			AllocatePortAddr:   fmt.Sprintf("http://port-allocator.%s-ingress-private.svc.cluster.local/api/allocate", env.Id),
 			ReservePortAddr:    fmt.Sprintf("http://port-allocator.%s-ingress-private.svc.cluster.local/api/reserve", env.Id),
 			DeallocatePortAddr: fmt.Sprintf("http://port-allocator.%s-ingress-private.svc.cluster.local/api/remove", env.Id),
-		},
+		})
 	}
 	n, err := m.FindAllAppInstances("network")
 	if err != nil {
@@ -799,7 +801,8 @@
 		RepoAddr:  m.repoIO.FullAddress(),
 		AppDir:    appDir,
 	}
-	rendered, err := app.Render(release, infra, values, nil)
+	networks := m.CreateNetworks(infra)
+	rendered, err := app.Render(release, infra, networks, values, nil)
 	if err != nil {
 		return ReleaseResources{}, err
 	}
@@ -808,7 +811,7 @@
 		return ReleaseResources{}, err
 	}
 	localCharts := generateLocalCharts(m.lg, charts)
-	rendered, err = app.Render(release, infra, values, localCharts)
+	rendered, err = app.Render(release, infra, networks, values, localCharts)
 	if err != nil {
 		return ReleaseResources{}, err
 	}
@@ -831,7 +834,7 @@
 	if err := m.repoIO.Pull(); err != nil {
 		return ReleaseResources{}, err
 	}
-	env, err := m.Config()
+	infra, err := m.Config()
 	if err != nil {
 		return ReleaseResources{}, err
 	}
@@ -853,7 +856,8 @@
 	if err != nil {
 		return ReleaseResources{}, err
 	}
-	rendered, err := app.Render(config.Release, env, values, renderedCfg.LocalCharts)
+	networks := m.CreateNetworks(infra)
+	rendered, err := app.Render(config.Release, infra, networks, values, renderedCfg.LocalCharts)
 	if err != nil {
 		return ReleaseResources{}, err
 	}
@@ -867,6 +871,19 @@
 	}, nil
 }
 
+func (m *InfraAppManager) CreateNetworks(infra InfraConfig) []InfraNetwork {
+	return []InfraNetwork{
+		{
+			Name:               "Public",
+			IngressClass:       fmt.Sprintf("%s-ingress-public", infra.Name),
+			CertificateIssuer:  fmt.Sprintf("%s-public", infra.Name),
+			AllocatePortAddr:   fmt.Sprintf("http://port-allocator.%s-ingress-public.svc.cluster.local/api/allocate", infra.Name),
+			ReservePortAddr:    fmt.Sprintf("http://port-allocator.%s-ingress-public.svc.cluster.local/api/reserve", infra.Name),
+			DeallocatePortAddr: fmt.Sprintf("http://port-allocator.%s-ingress-public.svc.cluster.local/api/remove", infra.Name),
+		},
+	}
+}
+
 func pullHelmCharts(hf HelmFetcher, charts HelmCharts, rfs soft.RepoFS, root string) (map[string]string, error) {
 	ret := make(map[string]string)
 	for name, chart := range charts.Git {