@@ -6,11 +6,11 @@ import (
6
6
"fmt"
7
7
"strings"
8
8
9
+ naisv1 "github.com/nais/liberator/pkg/apis/nais.io/v1"
10
+ naisalpha1 "github.com/nais/liberator/pkg/apis/nais.io/v1alpha1"
9
11
"golang.org/x/oauth2"
10
-
11
12
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"
14
14
v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
15
15
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
16
16
"k8s.io/apimachinery/pkg/runtime"
@@ -161,7 +161,10 @@ func (i *DBInfo) fetchSQLDatabases(ctx context.Context) error {
161
161
Resource : "applications" ,
162
162
}).Namespace (i .namespace ).Get (ctx , i .appName , v1.GetOptions {})
163
163
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 )
165
168
}
166
169
167
170
if err := runtime .DefaultUnstructuredConverter .FromUnstructured (u .Object , app ); err != nil {
@@ -192,6 +195,45 @@ func (i *DBInfo) fetchSQLDatabases(ctx context.Context) error {
192
195
return fmt .Errorf ("database %q not found for app %q in %q" , i .databaseName , i .appName , i .namespace )
193
196
}
194
197
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
+
195
237
func (i * DBInfo ) fetchDBInstance (ctx context.Context ) error {
196
238
sqlInstances , err := i .dynamicClient .Resource (schema.GroupVersionResource {
197
239
Group : "sql.cnrm.cloud.google.com" ,
0 commit comments