Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 12 additions & 5 deletions cmd/tf-migrate/version_check.go
Original file line number Diff line number Diff line change
Expand Up @@ -90,12 +90,8 @@ func parseVersionFromLockFile(configDir string) (string, error) {
continue
}

// Check for registry.terraform.io/cloudflare/cloudflare
// or just cloudflare/cloudflare (older formats)
providerLabel := labels[0]
if providerLabel == "registry.terraform.io/cloudflare/cloudflare" ||
providerLabel == "cloudflare/cloudflare" {

if isCloudflareProviderAddress(providerLabel) {
versionAttr := block.Body().GetAttribute("version")
if versionAttr == nil {
continue
Expand All @@ -111,6 +107,17 @@ func parseVersionFromLockFile(configDir string) (string, error) {
return "", nil
}

func isCloudflareProviderAddress(providerLabel string) bool {
switch providerLabel {
case "registry.terraform.io/cloudflare/cloudflare",
"registry.opentofu.org/cloudflare/cloudflare",
"cloudflare/cloudflare":
return true
default:
return false
}
}

// parseVersionFromRequiredProviders scans all .tf files for the required_providers
// block and extracts the cloudflare provider version constraint.
// Returns the version constraint string and the file path where it was found.
Expand Down
21 changes: 21 additions & 0 deletions cmd/tf-migrate/version_check_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -116,6 +116,27 @@ provider "registry.terraform.io/cloudflare/cloudflare" {
t.Errorf("Expected version 4.52.5, got %s", version)
}

// Test with OpenTofu registry lock file
tempDirOpenTofu := t.TempDir()
lockContentOpenTofu := `provider "registry.opentofu.org/cloudflare/cloudflare" {
version = "4.52.7"
constraints = "~> 4.0"
}
`
lockFileOpenTofu := filepath.Join(tempDirOpenTofu, ".terraform.lock.hcl")
err = os.WriteFile(lockFileOpenTofu, []byte(lockContentOpenTofu), 0644)
if err != nil {
t.Fatalf("Failed to write lock file: %v", err)
}

version, err = parseVersionFromLockFile(tempDirOpenTofu)
if err != nil {
t.Fatalf("parseVersionFromLockFile failed: %v", err)
}
if version != "4.52.7" {
t.Errorf("Expected version 4.52.7, got %s", version)
}

// Test with lock file without cloudflare provider
lockContentNoCF := `# This file is maintained automatically by "terraform init".
provider "registry.terraform.io/hashicorp/aws" {
Expand Down