@@ -7,25 +7,27 @@ import (
77
88// Terraform flag name constants.
99const (
10- tfFlagJSON = "-json"
11- tfFlagNoColor = "-no-color"
12- tfFlagState = "-state"
13- tfFlagStateOut = "-state-out"
14- tfFlagBackup = "-backup"
15- tfFlagLock = "-lock"
16- tfFlagLockTimeout = "-lock-timeout"
10+ tfFlagJSON = "-json"
11+ tfFlagNoColor = "-no-color"
12+ tfFlagState = "-state"
13+ tfFlagStateOut = "-state-out"
14+ tfFlagBackup = "-backup"
15+ tfFlagLock = "-lock"
16+ tfFlagLockTimeout = "-lock-timeout"
17+ tfFlagIgnoreRemoteVersion = "-ignore-remote-version"
1718)
1819
1920// Terraform flag description constants.
2021const (
21- descDisableColorOutput = "Disable color output"
22- descPathToStateFile = "Path to the state file"
23- descPathToReadSaveState = "Path to read and save state"
24- descPathToWriteState = "Path to write updated state"
25- descPathToBackupState = "Path to backup the existing state file"
26- descLockStateFile = "Lock the state file"
27- descDurationRetryLock = "Duration to retry state lock"
28- descOutputJSONFormat = "Output in JSON format"
22+ descDisableColorOutput = "Disable color output"
23+ descPathToStateFile = "Path to the state file"
24+ descPathToReadSaveState = "Path to read and save state"
25+ descPathToWriteState = "Path to write updated state"
26+ descPathToBackupState = "Path to backup the existing state file"
27+ descLockStateFile = "Lock the state file"
28+ descDurationRetryLock = "Duration to retry state lock"
29+ descOutputJSONFormat = "Output in JSON format"
30+ descIgnoreRemoteVersionChecks = "Ignore remote state version constraints"
2931)
3032
3133// TerraformGlobalCompatFlags returns TRUE global terraform flags.
@@ -189,6 +191,81 @@ func StateCompatFlags() map[string]compat.CompatibilityFlag {
189191 }
190192}
191193
194+ // StateListCompatFlags returns compatibility flags specific to terraform state list.
195+ func StateListCompatFlags () map [string ]compat.CompatibilityFlag {
196+ defer perf .Track (nil , "terraform.StateListCompatFlags" )()
197+
198+ return map [string ]compat.CompatibilityFlag {
199+ tfFlagState : {Behavior : compat .AppendToSeparated , Description : descPathToStateFile },
200+ "-id" : {Behavior : compat .AppendToSeparated , Description : "Filter results by resource ID" },
201+ }
202+ }
203+
204+ // StateMvCompatFlags returns compatibility flags specific to terraform state mv.
205+ // Note: terraform's -dry-run is intentionally excluded to avoid conflict with Atmos --dry-run.
206+ func StateMvCompatFlags () map [string ]compat.CompatibilityFlag {
207+ defer perf .Track (nil , "terraform.StateMvCompatFlags" )()
208+
209+ return map [string ]compat.CompatibilityFlag {
210+ tfFlagLock : {Behavior : compat .AppendToSeparated , Description : descLockStateFile },
211+ tfFlagLockTimeout : {Behavior : compat .AppendToSeparated , Description : descDurationRetryLock },
212+ tfFlagIgnoreRemoteVersion : {Behavior : compat .AppendToSeparated , Description : descIgnoreRemoteVersionChecks },
213+ }
214+ }
215+
216+ // StatePullCompatFlags returns compatibility flags specific to terraform state pull.
217+ // State pull has no native flags beyond standard terraform flags.
218+ func StatePullCompatFlags () map [string ]compat.CompatibilityFlag {
219+ defer perf .Track (nil , "terraform.StatePullCompatFlags" )()
220+
221+ return map [string ]compat.CompatibilityFlag {}
222+ }
223+
224+ // StatePushCompatFlags returns compatibility flags specific to terraform state push.
225+ func StatePushCompatFlags () map [string ]compat.CompatibilityFlag {
226+ defer perf .Track (nil , "terraform.StatePushCompatFlags" )()
227+
228+ return map [string ]compat.CompatibilityFlag {
229+ "-force" : {Behavior : compat .AppendToSeparated , Description : "Write the state even if lineages don't match or serial is lower" },
230+ tfFlagLock : {Behavior : compat .AppendToSeparated , Description : descLockStateFile },
231+ tfFlagLockTimeout : {Behavior : compat .AppendToSeparated , Description : descDurationRetryLock },
232+ tfFlagIgnoreRemoteVersion : {Behavior : compat .AppendToSeparated , Description : descIgnoreRemoteVersionChecks },
233+ }
234+ }
235+
236+ // StateReplaceProviderCompatFlags returns compatibility flags specific to terraform state replace-provider.
237+ func StateReplaceProviderCompatFlags () map [string ]compat.CompatibilityFlag {
238+ defer perf .Track (nil , "terraform.StateReplaceProviderCompatFlags" )()
239+
240+ return map [string ]compat.CompatibilityFlag {
241+ "-auto-approve" : {Behavior : compat .AppendToSeparated , Description : "Skip interactive approval" },
242+ tfFlagLock : {Behavior : compat .AppendToSeparated , Description : descLockStateFile },
243+ tfFlagLockTimeout : {Behavior : compat .AppendToSeparated , Description : descDurationRetryLock },
244+ tfFlagIgnoreRemoteVersion : {Behavior : compat .AppendToSeparated , Description : descIgnoreRemoteVersionChecks },
245+ }
246+ }
247+
248+ // StateRmCompatFlags returns compatibility flags specific to terraform state rm.
249+ // Note: terraform's -dry-run is intentionally excluded to avoid conflict with Atmos --dry-run.
250+ func StateRmCompatFlags () map [string ]compat.CompatibilityFlag {
251+ defer perf .Track (nil , "terraform.StateRmCompatFlags" )()
252+
253+ return map [string ]compat.CompatibilityFlag {
254+ tfFlagLock : {Behavior : compat .AppendToSeparated , Description : descLockStateFile },
255+ tfFlagLockTimeout : {Behavior : compat .AppendToSeparated , Description : descDurationRetryLock },
256+ tfFlagIgnoreRemoteVersion : {Behavior : compat .AppendToSeparated , Description : descIgnoreRemoteVersionChecks },
257+ }
258+ }
259+
260+ // StateShowCompatFlags returns compatibility flags specific to terraform state show.
261+ func StateShowCompatFlags () map [string ]compat.CompatibilityFlag {
262+ defer perf .Track (nil , "terraform.StateShowCompatFlags" )()
263+
264+ return map [string ]compat.CompatibilityFlag {
265+ tfFlagState : {Behavior : compat .AppendToSeparated , Description : descPathToStateFile },
266+ }
267+ }
268+
192269// ImportCompatFlags returns compatibility flags specific to terraform import.
193270func ImportCompatFlags () map [string ]compat.CompatibilityFlag {
194271 defer perf .Track (nil , "terraform.ImportCompatFlags" )()
@@ -305,6 +382,53 @@ func WorkspaceCompatFlags() map[string]compat.CompatibilityFlag {
305382 }
306383}
307384
385+ // WorkspaceListCompatFlags returns compatibility flags specific to terraform workspace list.
386+ // Workspace list has no native flags beyond standard terraform flags.
387+ func WorkspaceListCompatFlags () map [string ]compat.CompatibilityFlag {
388+ defer perf .Track (nil , "terraform.WorkspaceListCompatFlags" )()
389+
390+ return map [string ]compat.CompatibilityFlag {}
391+ }
392+
393+ // WorkspaceSelectCompatFlags returns compatibility flags specific to terraform workspace select.
394+ func WorkspaceSelectCompatFlags () map [string ]compat.CompatibilityFlag {
395+ defer perf .Track (nil , "terraform.WorkspaceSelectCompatFlags" )()
396+
397+ return map [string ]compat.CompatibilityFlag {
398+ "-or-create" : {Behavior : compat .AppendToSeparated , Description : "Create the workspace if it doesn't exist" },
399+ }
400+ }
401+
402+ // WorkspaceNewCompatFlags returns compatibility flags specific to terraform workspace new.
403+ func WorkspaceNewCompatFlags () map [string ]compat.CompatibilityFlag {
404+ defer perf .Track (nil , "terraform.WorkspaceNewCompatFlags" )()
405+
406+ return map [string ]compat.CompatibilityFlag {
407+ tfFlagLock : {Behavior : compat .AppendToSeparated , Description : descLockStateFile },
408+ tfFlagLockTimeout : {Behavior : compat .AppendToSeparated , Description : descDurationRetryLock },
409+ tfFlagState : {Behavior : compat .AppendToSeparated , Description : descPathToStateFile },
410+ }
411+ }
412+
413+ // WorkspaceDeleteCompatFlags returns compatibility flags specific to terraform workspace delete.
414+ func WorkspaceDeleteCompatFlags () map [string ]compat.CompatibilityFlag {
415+ defer perf .Track (nil , "terraform.WorkspaceDeleteCompatFlags" )()
416+
417+ return map [string ]compat.CompatibilityFlag {
418+ "-force" : {Behavior : compat .AppendToSeparated , Description : "Force deletion even if the workspace has resources" },
419+ tfFlagLock : {Behavior : compat .AppendToSeparated , Description : descLockStateFile },
420+ tfFlagLockTimeout : {Behavior : compat .AppendToSeparated , Description : descDurationRetryLock },
421+ }
422+ }
423+
424+ // WorkspaceShowCompatFlags returns compatibility flags specific to terraform workspace show.
425+ // Workspace show has no native flags beyond standard terraform flags.
426+ func WorkspaceShowCompatFlags () map [string ]compat.CompatibilityFlag {
427+ defer perf .Track (nil , "terraform.WorkspaceShowCompatFlags" )()
428+
429+ return map [string ]compat.CompatibilityFlag {}
430+ }
431+
308432// ProvidersCompatFlags returns compatibility flags specific to terraform providers.
309433// Note: terraform providers has no special flags beyond standard terraform flags.
310434func ProvidersCompatFlags () map [string ]compat.CompatibilityFlag {
@@ -313,6 +437,36 @@ func ProvidersCompatFlags() map[string]compat.CompatibilityFlag {
313437 return map [string ]compat.CompatibilityFlag {}
314438}
315439
440+ // ProvidersLockCompatFlags returns compatibility flags specific to terraform providers lock.
441+ func ProvidersLockCompatFlags () map [string ]compat.CompatibilityFlag {
442+ defer perf .Track (nil , "terraform.ProvidersLockCompatFlags" )()
443+
444+ return map [string ]compat.CompatibilityFlag {
445+ "-platform" : {Behavior : compat .AppendToSeparated , Description : "Target platform for provider packages (can be specified multiple times)" },
446+ "-fs-mirror" : {Behavior : compat .AppendToSeparated , Description : "Consult the given filesystem mirror directory for provider packages" },
447+ "-net-mirror" : {Behavior : compat .AppendToSeparated , Description : "Consult the given network mirror for provider packages" },
448+ "-enable-plugin-cache" : {Behavior : compat .AppendToSeparated , Description : "Enable the global plugin cache during lock file creation" },
449+ }
450+ }
451+
452+ // ProvidersMirrorCompatFlags returns compatibility flags specific to terraform providers mirror.
453+ func ProvidersMirrorCompatFlags () map [string ]compat.CompatibilityFlag {
454+ defer perf .Track (nil , "terraform.ProvidersMirrorCompatFlags" )()
455+
456+ return map [string ]compat.CompatibilityFlag {
457+ "-platform" : {Behavior : compat .AppendToSeparated , Description : "Target platform for provider packages (can be specified multiple times)" },
458+ }
459+ }
460+
461+ // ProvidersSchemaCompatFlags returns compatibility flags specific to terraform providers schema.
462+ func ProvidersSchemaCompatFlags () map [string ]compat.CompatibilityFlag {
463+ defer perf .Track (nil , "terraform.ProvidersSchemaCompatFlags" )()
464+
465+ return map [string ]compat.CompatibilityFlag {
466+ tfFlagJSON : {Behavior : compat .AppendToSeparated , Description : "Output provider schemas in JSON format" },
467+ }
468+ }
469+
316470// AllTerraformCompatFlags returns a combined set of all terraform compatibility flags.
317471// This is used for preprocessing in Execute() to identify terraform pass-through flags.
318472// Before Cobra parses the command line, we combine all possible flags so we can
@@ -353,5 +507,27 @@ func AllTerraformCompatFlags() map[string]compat.CompatibilityFlag {
353507 mergeFlags (WorkspaceCompatFlags ())
354508 mergeFlags (ProvidersCompatFlags ())
355509
510+ // Per-subcommand compat flags for compound subcommands.
511+ // State sub-subcommands.
512+ mergeFlags (StateListCompatFlags ())
513+ mergeFlags (StateMvCompatFlags ())
514+ mergeFlags (StatePullCompatFlags ())
515+ mergeFlags (StatePushCompatFlags ())
516+ mergeFlags (StateReplaceProviderCompatFlags ())
517+ mergeFlags (StateRmCompatFlags ())
518+ mergeFlags (StateShowCompatFlags ())
519+
520+ // Providers sub-subcommands.
521+ mergeFlags (ProvidersLockCompatFlags ())
522+ mergeFlags (ProvidersMirrorCompatFlags ())
523+ mergeFlags (ProvidersSchemaCompatFlags ())
524+
525+ // Workspace sub-subcommands.
526+ mergeFlags (WorkspaceListCompatFlags ())
527+ mergeFlags (WorkspaceSelectCompatFlags ())
528+ mergeFlags (WorkspaceNewCompatFlags ())
529+ mergeFlags (WorkspaceDeleteCompatFlags ())
530+ mergeFlags (WorkspaceShowCompatFlags ())
531+
356532 return flags
357533}
0 commit comments