Skip to content
This repository was archived by the owner on Jun 11, 2021. It is now read-only.

Commit f07a85d

Browse files
committed
Add path support, update tests and README
1 parent ab72f2c commit f07a85d

File tree

5 files changed

+77
-42
lines changed

5 files changed

+77
-42
lines changed

README.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,12 @@ terraform-digitalocean-droplet:
5252
source: "git@github.com:terraform-digitalocean-modules/terraform-digitalocean-droplet.git"
5353
version: "2e6b9729f3f6ea3ef5190bac0b0e1544a01fd80f" // Checkout a commit
5454
55+
# Get a path from within a Git monorepo
56+
terraform-digitalocean-droplet:
57+
source: "https://github.com/terraform-digitalocean-modules/terraform-digitalocean-droplet.git"
58+
version: "v0.1.7"
59+
path: "examples/simple"
60+
5561
# Local directory module
5662
terraform-digitalocean-droplet:
5763
source: "../../modules/terraform-digitalocean-droplet"

Terrafile.example

Lines changed: 19 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,20 @@
1-
tf-aws-vpc:
2-
source: "git@github.com:terraform-aws-modules/terraform-aws-vpc"
3-
version: "v1.46.0"
4-
tf-aws-vpc-experimental:
5-
source: "git@github.com:terraform-aws-modules/terraform-aws-vpc"
6-
version: "master"
7-
tf-aws-vpc-commit:
8-
source: "git@github.com:terraform-aws-modules/terraform-aws-vpc"
9-
version: "01601169c00c68f37d5df8a80cc17c88f02c04d0"
10-
tf-aws-vpc-default:
11-
source: "git@github.com:terraform-aws-modules/terraform-aws-vpc"
12-
terraform-aws-lambda:
13-
source: "claranet/lambda/aws"
14-
version: "0.7.0"
15-
terraform-test-path:
1+
terrafile-test-registry:
2+
source: "terraform-digitalocean-modules/droplet/digitalocean"
3+
version: "0.1.7"
4+
terrafile-test-https:
5+
source: "https://github.com/terraform-digitalocean-modules/terraform-digitalocean-droplet.git"
6+
terrafile-test-tag:
7+
source: "git@github.com:terraform-digitalocean-modules/terraform-digitalocean-droplet.git"
8+
version: "v0.1.7"
9+
terrafile-test-branch:
10+
source: "git@github.com:terraform-digitalocean-modules/terraform-digitalocean-droplet.git"
11+
version: "branch_test"
12+
terrafile-test-commit:
13+
source: "https://github.com/terraform-digitalocean-modules/terraform-digitalocean-droplet.git"
14+
version: "2e6b9729f3f6ea3ef5190bac0b0e1544a01fd80f"
15+
terrafile-test-path:
16+
source: "https://github.com/terraform-digitalocean-modules/terraform-digitalocean-droplet.git"
17+
version: "v0.1.7"
18+
path: "examples/simple"
19+
terrafile-test-local:
1620
source: "./test/module"

cmd/install.go

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ var installCmd = &cobra.Command{
5555
if len(moduleMeta.Version) > 0 {
5656
moduleVersion = moduleMeta.Version
5757
}
58+
modulePath := moduleMeta.Path
5859

5960
directory := path.Join(VendorDir, moduleName)
6061

@@ -67,7 +68,19 @@ var installCmd = &cobra.Command{
6768
gitCheckout(moduleName, source, version, directory)
6869
case IContains(moduleSource, "git"):
6970
gitCheckout(moduleName, moduleSource, moduleVersion, directory)
71+
}
72+
73+
// If we have a path specified, let's extract it (move and copy stuff).
74+
if len(modulePath) > 0 {
75+
tmpDirectory := directory + ".tmp"
76+
pathWanted := path.Join(tmpDirectory, modulePath)
77+
78+
err := os.Rename(directory, tmpDirectory)
79+
CheckIfError(err)
7080

81+
err = copy.Copy(pathWanted, directory)
82+
CheckIfError(err)
83+
os.RemoveAll(tmpDirectory)
7184
}
7285
// Cleanup .git directoriy
7386
os.RemoveAll(path.Join(directory, ".git"))

cmd/root.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,10 +33,15 @@ import (
3333
type module struct {
3434
Source string `yaml:"source"`
3535
Version string `yaml:"version"`
36+
Path string `yaml:"path"`
3637
}
3738

3839
var cfgFile string
40+
41+
// VendorDir is the directory to download modules to
3942
var VendorDir string
43+
44+
// Config holds our module information
4045
var Config map[string]module
4146

4247
// rootCmd represents the base command when called without any subcommands

main_test.go

Lines changed: 34 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -34,23 +34,26 @@ func TestTerraformWithTerrafilePath(t *testing.T) {
3434
// Assert output
3535
for _, output := range []string{
3636
"Removing all modules in vendor/xterrafile",
37-
"Checking out master from git@github.com:terraform-aws-modules/terraform-aws-vpc",
38-
"Checking out v1.46.0 from git@github.com:terraform-aws-modules/terraform-aws-vpc",
39-
"Checking out 01601169c00c68f37d5df8a80cc17c88f02c04d0 from git@github.com:terraform-aws-modules/terraform-aws-vpc",
40-
"Checking out v0.7.0 from https://github.com/claranet/terraform-aws-lambda.git",
41-
"Copying from ./test/module",
42-
"Looking up claranet/lambda/aws version 0.7.0 in Terraform registry",
37+
"[terrafile-test-registry] Looking up terraform-digitalocean-modules/droplet/digitalocean version 0.1.7 in Terraform registry",
38+
"[terrafile-test-registry] Checking out v0.1.7 from https://github.com/terraform-digitalocean-modules/terraform-digitalocean-droplet.git",
39+
"[terrafile-test-https] Checking out master from https://github.com/terraform-digitalocean-modules/terraform-digitalocean-droplet.git",
40+
"[terrafile-test-tag] Checking out v0.1.7 from git@github.com:terraform-digitalocean-modules/terraform-digitalocean-droplet.git",
41+
"[terrafile-test-branch] Checking out branch_test from git@github.com:terraform-digitalocean-modules/terraform-digitalocean-droplet.git",
42+
"[terrafile-test-commit] Checking out 2e6b9729f3f6ea3ef5190bac0b0e1544a01fd80f from https://github.com/terraform-digitalocean-modules/terraform-digitalocean-droplet.git",
43+
"[terrafile-test-path] Checking out v0.1.7 from https://github.com/terraform-digitalocean-modules/terraform-digitalocean-droplet.git",
44+
"[terrafile-test-local] Copying from ./test/module",
4345
} {
4446
assert.Contains(t, testcli.Stdout(), output)
4547
}
4648
// Assert files exist
4749
for _, moduleName := range []string{
48-
"tf-aws-vpc",
49-
"tf-aws-vpc-experimental",
50-
"tf-aws-vpc-commit",
51-
"tf-aws-vpc-default",
52-
"terraform-aws-lambda",
53-
"terraform-test-path",
50+
"terrafile-test-registry",
51+
"terrafile-test-https",
52+
"terrafile-test-tag",
53+
"terrafile-test-branch",
54+
"terrafile-test-commit",
55+
"terrafile-test-path",
56+
"terrafile-test-local",
5457
} {
5558
assert.DirExists(t, path.Join(workingDirectory, "vendor/xterrafile", moduleName))
5659
}
@@ -70,21 +73,25 @@ func createFile(t *testing.T, filename string, contents string) {
7073
}
7174

7275
func createTerrafile(t *testing.T, folder string) {
73-
var yaml = `tf-aws-vpc:
74-
source: "git@github.com:terraform-aws-modules/terraform-aws-vpc"
75-
version: "v1.46.0"
76-
tf-aws-vpc-experimental:
77-
source: "git@github.com:terraform-aws-modules/terraform-aws-vpc"
78-
version: "master"
79-
tf-aws-vpc-commit:
80-
source: "git@github.com:terraform-aws-modules/terraform-aws-vpc"
81-
version: "01601169c00c68f37d5df8a80cc17c88f02c04d0"
82-
tf-aws-vpc-default:
83-
source: "git@github.com:terraform-aws-modules/terraform-aws-vpc"
84-
terraform-aws-lambda:
85-
source: "claranet/lambda/aws"
86-
version: "0.7.0"
87-
terraform-test-path:
76+
var yaml = `terrafile-test-registry:
77+
source: "terraform-digitalocean-modules/droplet/digitalocean"
78+
version: "0.1.7"
79+
terrafile-test-https:
80+
source: "https://github.com/terraform-digitalocean-modules/terraform-digitalocean-droplet.git"
81+
terrafile-test-tag:
82+
source: "git@github.com:terraform-digitalocean-modules/terraform-digitalocean-droplet.git"
83+
version: "v0.1.7"
84+
terrafile-test-branch:
85+
source: "git@github.com:terraform-digitalocean-modules/terraform-digitalocean-droplet.git"
86+
version: "branch_test"
87+
terrafile-test-commit:
88+
source: "https://github.com/terraform-digitalocean-modules/terraform-digitalocean-droplet.git"
89+
version: "2e6b9729f3f6ea3ef5190bac0b0e1544a01fd80f"
90+
terrafile-test-path:
91+
source: "https://github.com/terraform-digitalocean-modules/terraform-digitalocean-droplet.git"
92+
version: "v0.1.7"
93+
path: "examples/simple"
94+
terrafile-test-local:
8895
source: "./test/module"
8996
`
9097
createFile(t, path.Join(folder, "Terrafile.test"), yaml)

0 commit comments

Comments
 (0)