Skip to content

Commit 71a6984

Browse files
authored
Increase coverage for exporter (#991)
1 parent fdb6779 commit 71a6984

File tree

5 files changed

+615
-138
lines changed

5 files changed

+615
-138
lines changed

.vscode/testing.code-snippets

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,5 +33,26 @@
3333
"}"
3434
],
3535
"description": "if err != nil return err"
36+
},
37+
"assert.EqualError": {
38+
"prefix": "aee",
39+
"body": [
40+
"assert.EqualError(t, err, \"..\")"
41+
],
42+
"description": "assert.EqualError"
43+
},
44+
"assert.Equal": {
45+
"prefix": "ae",
46+
"body": [
47+
"assert.Equal(t, \"..\", $1)"
48+
],
49+
"description": "assert.Equal"
50+
},
51+
"assert.NoError": {
52+
"prefix": "anoe",
53+
"body": [
54+
"assert.NoError(t, err)"
55+
],
56+
"description": "assert.NoError"
3657
}
3758
}

exporter/importables.go

Lines changed: 23 additions & 90 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ import (
66
"encoding/json"
77
"fmt"
88
"log"
9-
"os"
109
"path"
1110
"regexp"
1211
"strings"
@@ -44,22 +43,13 @@ var resourcesMap map[string]importable = map[string]importable{
4443
},
4544
Body: func(ic *importContext, body *hclwrite.Body, r *resource) error {
4645
dbfsAPI := storage.NewDbfsAPI(ic.Context, ic.Client)
47-
fileBytes, err := dbfsAPI.Read(r.ID)
46+
content, err := dbfsAPI.Read(r.ID)
4847
if err != nil {
4948
return err
5049
}
51-
err = os.MkdirAll(fmt.Sprintf("%s/files", ic.Directory), 0755)
52-
if err != nil && !os.IsExist(err) {
53-
return err
54-
}
5550
name := ic.Importables["databricks_dbfs_file"].Name(r.Data)
56-
fileName := ic.prefix + name
57-
local, err := os.Create(fmt.Sprintf("%s/files/%s", ic.Directory, fileName))
58-
if err != nil {
59-
return err
60-
}
61-
defer local.Close()
62-
_, err = local.Write(fileBytes)
51+
fileName, err := ic.createFile(name, content)
52+
log.Printf("Creating %s for %s", fileName, r)
6353
if err != nil {
6454
return err
6555
}
@@ -79,14 +69,10 @@ var resourcesMap map[string]importable = map[string]importable{
7969
Service: "compute",
8070
Name: func(d *schema.ResourceData) string {
8171
raw, ok := d.GetOk("instance_pool_name")
82-
if !ok {
72+
if !ok || raw.(string) == "" {
8373
return strings.Split(d.Id(), "-")[2]
8474
}
85-
name := raw.(string)
86-
if name == "" {
87-
return strings.Split(d.Id(), "-")[2]
88-
}
89-
return name
75+
return raw.(string)
9076
},
9177
Import: func(ic *importContext, r *resource) error {
9278
if ic.meAdmin {
@@ -147,6 +133,7 @@ var resourcesMap map[string]importable = map[string]importable{
147133
continue
148134
}
149135
if !ic.MatchesName(c.ClusterName) {
136+
log.Printf("[INFO] Skipping %s because it doesn't match %s", c.ClusterName, ic.match)
150137
continue
151138
}
152139
if c.LastActivityTime < time.Now().Unix()-lastActiveMs {
@@ -164,12 +151,8 @@ var resourcesMap map[string]importable = map[string]importable{
164151
Import: func(ic *importContext, r *resource) error {
165152
var c clusters.Cluster
166153
s := ic.Resources["databricks_cluster"].Schema
167-
if err := common.DataToStructPointer(r.Data, s, &c); err != nil {
168-
return err
169-
}
170-
if err := ic.importCluster(&c); err != nil {
171-
return err
172-
}
154+
common.DataToStructPointer(r.Data, s, &c)
155+
ic.importCluster(&c)
173156
if ic.meAdmin {
174157
ic.Emit(&resource{
175158
Resource: "databricks_permissions",
@@ -203,12 +186,8 @@ var resourcesMap map[string]importable = map[string]importable{
203186
Import: func(ic *importContext, r *resource) error {
204187
var job jobs.JobSettings
205188
s := ic.Resources["databricks_job"].Schema
206-
if err := common.DataToStructPointer(r.Data, s, &job); err != nil {
207-
return err
208-
}
209-
if err := ic.importCluster(job.NewCluster); err != nil {
210-
return err
211-
}
189+
common.DataToStructPointer(r.Data, s, &job)
190+
ic.importCluster(job.NewCluster)
212191
ic.Emit(&resource{
213192
Resource: "databricks_cluster",
214193
ID: job.ExistingClusterID,
@@ -253,43 +232,8 @@ var resourcesMap map[string]importable = map[string]importable{
253232
return ic.importLibraries(r.Data, s)
254233
},
255234
List: func(ic *importContext) error {
256-
a := jobs.NewJobsAPI(ic.Context, ic.Client)
257-
nowSeconds := time.Now().Unix()
258-
starterAfter := (nowSeconds - (ic.lastActiveDays * 24 * 60 * 60)) * 1000
259-
if l, err := a.List(); err == nil {
260-
i := 0
261-
for _, job := range l.Jobs {
262-
if !ic.MatchesName(job.Settings.Name) {
263-
continue
264-
}
265-
if ic.lastActiveDays != 3650 {
266-
rl, err := a.RunsList(jobs.JobRunsListRequest{
267-
JobID: job.JobID,
268-
CompletedOnly: true,
269-
Limit: 1,
270-
})
271-
if err != nil {
272-
log.Printf("[WARN] Failed to get runs: %s", err)
273-
continue
274-
}
275-
if len(rl.Runs) == 0 {
276-
log.Printf("[INFO] Job %#v (%d) did never run. Skipping", job.Settings.Name, job.JobID)
277-
continue
278-
}
279-
if rl.Runs[0].StartTime < starterAfter {
280-
log.Printf("[INFO] Job %#v (%d) didn't run for %d days. Skipping",
281-
job.Settings.Name, job.JobID,
282-
(nowSeconds*1000-rl.Runs[0].StartTime)/24*60*60/1000)
283-
continue
284-
}
285-
}
286-
ic.Emit(&resource{
287-
Resource: "databricks_job",
288-
ID: job.ID(),
289-
})
290-
i++
291-
log.Printf("[INFO] Imported %d of total %d jobs", i, len(l.Jobs))
292-
}
235+
if l, err := jobs.NewJobsAPI(ic.Context, ic.Client).List(); err == nil {
236+
ic.importJobs(l)
293237
}
294238
return nil
295239
},
@@ -345,6 +289,7 @@ var resourcesMap map[string]importable = map[string]importable{
345289
}
346290
for _, g := range ic.allGroups {
347291
if !ic.MatchesName(g.DisplayName) {
292+
log.Printf("[INFO] Group %s doesn't match %s filter", g.DisplayName, ic.match)
348293
continue
349294
}
350295
ic.Emit(&resource{
@@ -477,12 +422,14 @@ var resourcesMap map[string]importable = map[string]importable{
477422
return nil
478423
},
479424
Import: func(ic *importContext, r *resource) error {
480-
u, err := ic.findUserByName(r.Data.Get("user_name").(string))
425+
username := r.Data.Get("user_name").(string)
426+
u, err := ic.findUserByName(username)
481427
if err != nil {
482428
return err
483429
}
484430
for _, g := range u.Groups {
485431
if g.Type != "direct" {
432+
log.Printf("Skipping non-direct group %s/%s for user %s", g.Value, g.Display, username)
486433
continue
487434
}
488435
ic.Emit(&resource{
@@ -515,19 +462,13 @@ var resourcesMap map[string]importable = map[string]importable{
515462
Ignore: func(ic *importContext, r *resource) bool {
516463
var permissions permissions.PermissionsEntity
517464
s := ic.Resources["databricks_permissions"].Schema
518-
err := common.DataToStructPointer(r.Data, s, &permissions)
519-
if err != nil {
520-
return false
521-
}
465+
common.DataToStructPointer(r.Data, s, &permissions)
522466
return (len(permissions.AccessControlList) == 0)
523467
},
524468
Import: func(ic *importContext, r *resource) error {
525469
var permissions permissions.PermissionsEntity
526470
s := ic.Resources["databricks_permissions"].Schema
527-
err := common.DataToStructPointer(r.Data, s, &permissions)
528-
if err != nil {
529-
return err
530-
}
471+
common.DataToStructPointer(r.Data, s, &permissions)
531472
for _, ac := range permissions.AccessControlList {
532473
ic.Emit(&resource{
533474
Resource: "databricks_user",
@@ -553,6 +494,7 @@ var resourcesMap map[string]importable = map[string]importable{
553494
if scopes, err := ssAPI.List(); err == nil {
554495
for i, scope := range scopes {
555496
if !ic.MatchesName(scope.Name) {
497+
log.Printf("[INFO] Secret scope %s doesn't match %s filter", scope.Name, ic.match)
556498
continue
557499
}
558500
ic.Emit(&resource{
@@ -828,25 +770,16 @@ var resourcesMap map[string]importable = map[string]importable{
828770
if err != nil {
829771
return err
830772
}
831-
err = os.Mkdir(fmt.Sprintf("%s/files", ic.Directory), 0755)
832-
if err != nil && !os.IsExist(err) {
833-
return err
834-
}
835-
fileName := path.Base(r.Name)
836-
local, err := os.Create(fmt.Sprintf("%s/files/gis-%s", ic.Directory, fileName))
773+
content, err := base64.StdEncoding.DecodeString(gis.ContentBase64)
837774
if err != nil {
838775
return err
839776
}
840-
defer local.Close()
841-
fileBytes, err := base64.StdEncoding.DecodeString(gis.ContentBase64)
777+
fileName, err := ic.createFile(path.Base(r.Name), content)
778+
log.Printf("Creating %s for %s", fileName, r)
842779
if err != nil {
843780
return err
844781
}
845-
_, err = local.Write(fileBytes)
846-
if err != nil {
847-
return err
848-
}
849-
relativeFile := fmt.Sprintf("${path.module}/files/gis-%s", fileName)
782+
relativeFile := fmt.Sprintf("${path.module}/files/%s", fileName)
850783
b := body.AppendNewBlock("resource", []string{r.Resource, r.Name}).Body()
851784
b.SetAttributeValue("name", cty.StringVal(gis.Name))
852785
b.SetAttributeValue("enabled", cty.BoolVal(gis.Enabled))

0 commit comments

Comments
 (0)