1
6 package usedatabase
7
8 import (
9 "context"
10 "database/sql"
11 "fmt"
12 "os"
13
14 "github.com/lib/pq"
15
16 eyedeUtils "edge-infra.dev/hack/tools/eyede/utils"
17 "edge-infra.dev/pkg/edge/api/graph/model"
18 query "edge-infra.dev/pkg/edge/api/sql"
19 "edge-infra.dev/pkg/edge/api/utils"
20 clusterType "edge-infra.dev/pkg/edge/constants/api/cluster"
21 fleetType "edge-infra.dev/pkg/edge/constants/api/fleet"
22 "edge-infra.dev/pkg/edge/info"
23 )
24
25 const (
26 getBannerName = "SELECT banner_name from banners WHERE banner_edge_id = $1"
27 getTenantEdgeID = "SELECT tenant_edge_id from banners WHERE banner_edge_id = $1"
28 getBSLOrgName = "SELECT org_name from tenants WHERE tenant_edge_id = $1"
29 )
30
31
32 func CreateEdgeInfoConfigMap(ctx context.Context, db *sql.DB, projectID, foremanProjectID, topic, edgeAPIURL string, dryRun bool) bool {
33 return getClusters(ctx, db, projectID, foremanProjectID, topic, edgeAPIURL, dryRun)
34 }
35
36
37
38
39 func getClusters(ctx context.Context, db *sql.DB, projectID, foremanProjectID, topic, edgeAPIURL string, dryRun bool) bool {
40 rows, err := db.QueryContext(ctx, eyedeUtils.GetClustersForBanner, projectID)
41 if err != nil {
42 fmt.Println("error getting banner's clusters", err)
43 return true
44 }
45 for rows.Next() {
46 var cluster model.Cluster
47 location := ""
48 storeType := ""
49 organization := ""
50 banner := ""
51 fleet := ""
52 err := rows.Scan(&cluster.ClusterEdgeID, &cluster.Name, &cluster.ProjectID, &cluster.BslSiteID, &location, &cluster.BannerEdgeID)
53 if err != nil {
54 fmt.Println("error scanning cluster vars", err)
55 continue
56 }
57
58 result := db.QueryRowContext(ctx, getBannerName, cluster.BannerEdgeID)
59 err = result.Scan(&banner)
60 if err != nil {
61 fmt.Println("error getting banner name with banner_edge_id", err)
62 continue
63 }
64
65 tenantEdgeID := ""
66 res := db.QueryRowContext(ctx, getTenantEdgeID, cluster.BannerEdgeID)
67 err = res.Scan(&tenantEdgeID)
68 if err != nil {
69 fmt.Println("error getting tenant_edge_id with banner_edge_id", err)
70 continue
71 }
72 resp := db.QueryRowContext(ctx, getBSLOrgName, tenantEdgeID)
73 err = resp.Scan(&organization)
74 if err != nil {
75 fmt.Println("error getting bsl organization with tenant_edge_id", err)
76 continue
77 }
78
79 resp = db.QueryRowContext(ctx, query.SelectEdgeLabelKeys, cluster.ClusterEdgeID)
80 var labels []string
81 err = resp.Scan(pq.Array(&labels))
82 if err != nil {
83 fmt.Println("error scanning fleet and store types", err)
84 continue
85 }
86 if len(labels) == 2 {
87 if err := fleetType.IsValid(labels[0]); err != nil {
88 temp := labels[0]
89 fleet = labels[1]
90 storeType = temp
91 if err := clusterType.Type(storeType).IsValid(); err != nil {
92 storeType = ""
93 }
94 } else {
95 fleet = labels[0]
96 storeType = labels[1]
97 }
98 }
99
100 cm := info.EdgeInfo{
101 BannerName: banner,
102 ProjectID: projectID,
103 ClusterEdgeID: cluster.ClusterEdgeID,
104 Store: cluster.Name,
105 ClusterType: storeType,
106 Location: location,
107 Fleet: fleet,
108 ForemanProjectID: foremanProjectID,
109 BannerEdgeID: cluster.BannerEdgeID,
110 EdgeAPIEndpoint: edgeAPIURL,
111 }.ToConfigMap()
112 edgeInfoCMString, err := info.ConfigMapToString(cm)
113 if err != nil {
114 fmt.Println("error converting configmap to string", err)
115 continue
116 }
117 fmt.Println(string(edgeInfoCMString))
118 fmt.Println("")
119 if !dryRun {
120 configMap := utils.ToBase64(edgeInfoCMString)
121 chariotMessage := eyedeUtils.CreateChariotMessage(cluster.ProjectID, cluster.ClusterEdgeID, eyedeUtils.Filter, configMap)
122 err = eyedeUtils.InvokeChariot(ctx, foremanProjectID, topic, chariotMessage)
123 if err != nil {
124 fmt.Println("failed to send configmap to chariot", err)
125 os.Exit(1)
126 }
127 }
128 }
129 return true
130 }
131
View as plain text