Skip to content

Commit

Permalink
Add exporting of repos
Browse files Browse the repository at this point in the history
  • Loading branch information
alexott committed Aug 12, 2021
1 parent 5c8e5d2 commit d4cbf22
Show file tree
Hide file tree
Showing 3 changed files with 158 additions and 1 deletion.
55 changes: 54 additions & 1 deletion exporter/importables.go
Original file line number Diff line number Diff line change
Expand Up @@ -817,7 +817,7 @@ var resourcesMap map[string]importable = map[string]importable{
Resource: "databricks_global_init_script",
ID: gis.ScriptID,
})
log.Printf("[INFO] Scanned %d of %d clusters", offset+1, len(globalInitScripts))
log.Printf("[INFO] Scanned %d of %d global init scripts", offset+1, len(globalInitScripts))
}
return nil
},
Expand Down Expand Up @@ -856,4 +856,57 @@ var resourcesMap map[string]importable = map[string]importable{
return nil
},
},
"databricks_repo": {
Service: "repos",
Name: func(d *schema.ResourceData) string {
name := d.Get("path").(string)
if name == "" {
return d.Id()
} else {
name = strings.TrimPrefix(name, "/")
}
re := regexp.MustCompile(`[^0-9A-Za-z_]`)
return re.ReplaceAllString(name, "_")
},
List: func(ic *importContext) error {
repoList, err := workspace.NewReposAPI(ic.Context, ic.Client).ListAll()
if err != nil {
return err
}
for offset, repo := range repoList {
if repo.Url != "" {
ic.Emit(&resource{
Resource: "databricks_repo",
ID: fmt.Sprintf("%d", repo.Id),
})
}
log.Printf("[INFO] Scanned %d of %d repos", offset+1, len(repoList))
}
return nil
},
Import: func(ic *importContext, r *resource) error {
if ic.meAdmin {
ic.Emit(&resource{
Resource: "databricks_permissions",
ID: fmt.Sprintf("/repos/%s", r.ID),
Name: ic.Importables["databricks_repo"].Name(r.Data),
})
}
return nil
},
Body: func(ic *importContext, body *hclwrite.Body, r *resource) error {
b := body.AppendNewBlock("resource", []string{r.Resource, r.Name}).Body()
b.SetAttributeValue("url", cty.StringVal(r.Data.Get("url").(string)))
b.SetAttributeValue("git_provider", cty.StringVal(r.Data.Get("git_provider").(string)))
t := r.Data.Get("branch").(string)
if t != "" {
b.SetAttributeValue("branch", cty.StringVal(t))
}
t = r.Data.Get("path").(string)
if t != "" {
b.SetAttributeValue("path", cty.StringVal(t))
}
return nil
},
},
}
30 changes: 30 additions & 0 deletions workspace/resource_repo.go
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,36 @@ func (a ReposAPI) Read(id string) (ReposResponse, error) {
return resp, err
}

type reposListResponse struct {
NextPageToken string `json:"next_page_token,omitempty"`
Repos []ReposResponse `json:"repos"`
}

func (a ReposAPI) List(prefix string) ([]ReposResponse, error) {
req := map[string]string{}
if prefix != "" {
req["path_prefix"] = prefix
}
reposList := []ReposResponse{}
for {
var resp reposListResponse
err := a.client.Get(a.context, "/repos", req, &resp)
if err != nil {
return nil, err
}
reposList = append(reposList, resp.Repos...)
if resp.NextPageToken == "" {
break
}
req["next_page_token"] = resp.NextPageToken
}
return reposList, nil
}

func (a ReposAPI) ListAll() ([]ReposResponse, error) {
return a.List("")
}

var gitProvidersMap = map[string]string{
"github.com": "gitHub",
"dev.azure.com": "azureDevOpsServices",
Expand Down
74 changes: 74 additions & 0 deletions workspace/resource_repo_test.go
Original file line number Diff line number Diff line change
@@ -1,11 +1,13 @@
package workspace

import (
"context"
"fmt"
"net/http"
"testing"

"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"

"github.com/databrickslabs/terraform-provider-databricks/common"

Expand Down Expand Up @@ -329,3 +331,75 @@ func TestResourceReposUpdateSwitchToBranch(t *testing.T) {
assert.NoError(t, err, err)
assert.Equal(t, "releases", d.Get("branch"))
}

func TestReposListAll(t *testing.T) {
resp := ReposResponse{
Id: 121232342,
Url: "https://github.com/user/test.git",
Provider: "gitHub",
Path: "/Repos/user@domain/test",
HeadCommitId: "1124323423abc23424",
Branch: "releases",
}

client, server, err := qa.HttpFixtureClient(t, []qa.HTTPFixture{
{
Method: "GET",
Resource: "/api/2.0/repos?",
Response: reposListResponse{
NextPageToken: "12312423442343242343",
Repos: []ReposResponse{
resp,
},
},
},
{
Method: "GET",
Resource: "/api/2.0/repos?next_page_token=12312423442343242343",
Response: reposListResponse{
Repos: []ReposResponse{
resp,
},
},
},
})
defer server.Close()
require.NoError(t, err)

ctx := context.Background()
reposList, err := NewReposAPI(ctx, client).ListAll()
require.NoError(t, err)
assert.Equal(t, len(reposList), 2)
assert.Equal(t, resp.Branch, reposList[1].Branch)
}

func TestReposListWithPrefix(t *testing.T) {
resp := ReposResponse{
Id: 121232342,
Url: "https://github.com/user/test.git",
Provider: "gitHub",
Path: "/Repos/user@domain/test",
HeadCommitId: "1124323423abc23424",
Branch: "releases",
}

client, server, err := qa.HttpFixtureClient(t, []qa.HTTPFixture{
{
Method: "GET",
Resource: "/api/2.0/repos?path_prefix=%2FRepos%2Fabc",
Response: reposListResponse{
Repos: []ReposResponse{
resp,
},
},
},
})
defer server.Close()
require.NoError(t, err)

ctx := context.Background()
reposList, err := NewReposAPI(ctx, client).List("/Repos/abc")
require.NoError(t, err)
assert.Equal(t, len(reposList), 1)
assert.Equal(t, resp.Branch, reposList[0].Branch)
}

0 comments on commit d4cbf22

Please sign in to comment.