Skip to content

Commit de4c773

Browse files
authored
postgres: Add naisjob fallback (#346)
1 parent d23236c commit de4c773

File tree

1 file changed

+46
-4
lines changed

1 file changed

+46
-4
lines changed

pkg/postgres/dbinfo.go

+46-4
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,11 @@ import (
66
"fmt"
77
"strings"
88

9+
naisv1 "github.com/nais/liberator/pkg/apis/nais.io/v1"
10+
naisalpha1 "github.com/nais/liberator/pkg/apis/nais.io/v1alpha1"
911
"golang.org/x/oauth2"
10-
1112
corev1 "k8s.io/api/core/v1"
12-
13-
naisalpha1 "github.com/nais/liberator/pkg/apis/nais.io/v1alpha1"
13+
k8serrors "k8s.io/apimachinery/pkg/api/errors"
1414
v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
1515
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
1616
"k8s.io/apimachinery/pkg/runtime"
@@ -161,7 +161,10 @@ func (i *DBInfo) fetchSQLDatabases(ctx context.Context) error {
161161
Resource: "applications",
162162
}).Namespace(i.namespace).Get(ctx, i.appName, v1.GetOptions{})
163163
if err != nil {
164-
return fmt.Errorf("fetchSQLDatabases: unable to get application %q in %q: %w", i.appName, i.namespace, err)
164+
if k8serrors.IsNotFound(err) {
165+
return i.fetchDBInstanceFromJob(ctx)
166+
}
167+
return fmt.Errorf("fetchSQLDatabases: unable to get application or naisjob %q in %q: %w", i.appName, i.namespace, err)
165168
}
166169

167170
if err := runtime.DefaultUnstructuredConverter.FromUnstructured(u.Object, app); err != nil {
@@ -192,6 +195,45 @@ func (i *DBInfo) fetchSQLDatabases(ctx context.Context) error {
192195
return fmt.Errorf("database %q not found for app %q in %q", i.databaseName, i.appName, i.namespace)
193196
}
194197

198+
func (i *DBInfo) fetchDBInstanceFromJob(ctx context.Context) error {
199+
job := &naisv1.Naisjob{}
200+
u, err := i.dynamicClient.Resource(schema.GroupVersionResource{
201+
Group: "nais.io",
202+
Version: "v1",
203+
Resource: "naisjobs",
204+
}).Namespace(i.namespace).Get(ctx, i.appName, v1.GetOptions{})
205+
if err != nil {
206+
return fmt.Errorf("fetchSQLDatabases: unable to get application or naisjob %q in %q: %w", i.appName, i.namespace, err)
207+
}
208+
209+
if err := runtime.DefaultUnstructuredConverter.FromUnstructured(u.Object, job); err != nil {
210+
return fmt.Errorf("fetchSQLDatabases: unable to convert unstructured to application: %w", err)
211+
}
212+
213+
if job.Spec.GCP != nil && len(job.Spec.GCP.SqlInstances) != 1 {
214+
return fmt.Errorf("fetchSQLDatabases: expected exactly one sqlinstance, found %d", len(job.Spec.GCP.SqlInstances))
215+
}
216+
217+
if len(job.Spec.GCP.SqlInstances[0].Databases) == 1 {
218+
return nil
219+
}
220+
221+
if i.databaseName == "" {
222+
return fmt.Errorf("multiple databases found for app %q in %q, please specify one using the --database flag", i.appName, i.namespace)
223+
}
224+
225+
for _, db := range job.Spec.GCP.SqlInstances[0].Databases {
226+
if db.Name == i.databaseName {
227+
i.multiDB = true
228+
i.instanceName = job.Spec.GCP.SqlInstances[0].Name
229+
i.user = db.Users[0].Name
230+
return nil
231+
}
232+
}
233+
234+
return fmt.Errorf("database %q not found for app %q in %q", i.databaseName, i.appName, i.namespace)
235+
}
236+
195237
func (i *DBInfo) fetchDBInstance(ctx context.Context) error {
196238
sqlInstances, err := i.dynamicClient.Resource(schema.GroupVersionResource{
197239
Group: "sql.cnrm.cloud.google.com",

0 commit comments

Comments
 (0)