| // Copyright IBM Corp. 2014, 2026 | |
| // SPDX-License-Identifier: BUSL-1.1 | |
| package cliconfig | |
| import ( | |
| "fmt" | |
| "log" | |
| "path/filepath" | |
| "runtime" | |
| ) | |
| // GlobalPluginDirs returns directories that should be searched for | |
| // globally-installed plugins (not specific to the current configuration). | |
| // | |
| // Earlier entries in this slice get priority over later when multiple copies | |
| // of the same plugin version are found, but newer versions always override | |
| // older versions where both satisfy the provider version constraints. | |
| func GlobalPluginDirs() []string { | |
| var ret []string | |
| // Look in ~/.terraform.d/plugins/ , or its equivalent on non-UNIX | |
| dir, err := ConfigDir() | |
| if err != nil { | |
| log.Printf("[ERROR] Error finding global config directory: %s", err) | |
| } else { | |
| machineDir := fmt.Sprintf("%s_%s", runtime.GOOS, runtime.GOARCH) | |
| ret = append(ret, filepath.Join(dir, "plugins")) | |
| ret = append(ret, filepath.Join(dir, "plugins", machineDir)) | |
| } | |
| return ret | |
| } |