...
1 package cushion
2
3 import (
4 "context"
5 "fmt"
6 "time"
7
8 "k8s.io/apimachinery/pkg/labels"
9 "k8s.io/apimachinery/pkg/types"
10 "sigs.k8s.io/controller-runtime/pkg/client"
11
12 dsapi "edge-infra.dev/pkg/edge/datasync/apis/v1alpha1"
13 "edge-infra.dev/pkg/edge/datasync/couchdb"
14 )
15
16
17 func migrateCushionK8sDBs(ctx context.Context, cl client.Client) error {
18 k8sDBs := &dsapi.CouchDBDatabaseList{}
19 r, err := labels.NewRequirement(componentLabel, "!", []string{})
20 if err != nil {
21 return fmt.Errorf("error creating componentLabel requirement for migration: %w", err)
22 }
23 err = cl.List(ctx, k8sDBs, &client.ListOptions{
24 LabelSelector: labels.NewSelector().Add(*r),
25 Namespace: cushionNamespace,
26 })
27 if err != nil {
28 return fmt.Errorf("error listing k8s dbs for migration: %w", err)
29 }
30 if len(k8sDBs.Items) == 0 {
31 return nil
32 }
33 for _, k8sDB := range k8sDBs.Items {
34 if err := migrateCushionK8sDB(ctx, cl, &k8sDB); err != nil {
35 return fmt.Errorf("error migrating k8s db: %w", err)
36 }
37 time.Sleep(1 * time.Second)
38 }
39 return nil
40 }
41
42 func migrateCushionK8sDB(ctx context.Context, cl client.Client, c *dsapi.CouchDBDatabase) error {
43 nn := types.NamespacedName{Name: K8sDBName(c.Spec.Name), Namespace: cushionNamespace}
44
45 k8sDB := newCouchDBDatabase(nn, normalizeDBName(c.Spec.Name), couchdb.Namespace)
46 if err := cl.Create(ctx, k8sDB); err != nil && client.IgnoreAlreadyExists(err) != nil {
47 return fmt.Errorf("error creating k8s db: %w", err)
48 }
49
50 if err := cl.Delete(ctx, c); err != nil {
51 return fmt.Errorf("error deleting old CouchDBDatabase resource: %w", err)
52 }
53 return nil
54 }
55
View as plain text