Skip to content

Commit c9bf9f3

Browse files
committed
terraform: Relax provider config ref constraints
Work in progress, needs tests and the eyes of someone who knows what they're doing.
1 parent 65ddf2c commit c9bf9f3

File tree

4 files changed

+28
-65
lines changed

4 files changed

+28
-65
lines changed

terraform/eval_provider.go

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -49,9 +49,10 @@ func buildProviderConfig(ctx EvalContext, addr addrs.AbsProviderConfig, config *
4949
// EvalConfigProvider is an EvalNode implementation that configures
5050
// a provider that is already initialized and retrieved.
5151
type EvalConfigProvider struct {
52-
Addr addrs.AbsProviderConfig
53-
Provider *providers.Interface
54-
Config *configs.Provider
52+
Addr addrs.AbsProviderConfig
53+
Provider *providers.Interface
54+
Config *configs.Provider
55+
VerifyConfigIsKnown bool
5556
}
5657

5758
func (n *EvalConfigProvider) Eval(ctx EvalContext) (interface{}, error) {
@@ -78,6 +79,16 @@ func (n *EvalConfigProvider) Eval(ctx EvalContext) (interface{}, error) {
7879
return nil, diags.NonFatalErr()
7980
}
8081

82+
if n.VerifyConfigIsKnown && !configVal.IsWhollyKnown() {
83+
diags = diags.Append(&hcl.Diagnostic{
84+
Severity: hcl.DiagError,
85+
Summary: "Invalid provider configuration",
86+
Detail: fmt.Sprintf("The configuration for %s depends on values that cannot be determined until apply.", n.Addr),
87+
Subject: &config.DeclRange,
88+
})
89+
return nil, diags.NonFatalErr()
90+
}
91+
8192
configDiags := ctx.ConfigureProvider(n.Addr, configVal)
8293
configDiags = configDiags.InConfigBody(configBody)
8394

terraform/evaltree_provider.go

Lines changed: 14 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -18,19 +18,6 @@ func ProviderEvalTree(n *NodeApplyableProvider, config *configs.Provider) EvalNo
1818
Addr: addr,
1919
})
2020

21-
// Input stuff
22-
seq = append(seq, &EvalOpFilter{
23-
Ops: []walkOperation{walkImport},
24-
Node: &EvalSequence{
25-
Nodes: []EvalNode{
26-
&EvalGetProvider{
27-
Addr: addr,
28-
Output: &provider,
29-
},
30-
},
31-
},
32-
})
33-
3421
seq = append(seq, &EvalOpFilter{
3522
Ops: []walkOperation{walkValidate},
3623
Node: &EvalSequence{
@@ -48,7 +35,6 @@ func ProviderEvalTree(n *NodeApplyableProvider, config *configs.Provider) EvalNo
4835
},
4936
})
5037

51-
// Apply stuff
5238
seq = append(seq, &EvalOpFilter{
5339
Ops: []walkOperation{walkRefresh, walkPlan, walkApply, walkDestroy, walkImport},
5440
Node: &EvalSequence{
@@ -64,7 +50,7 @@ func ProviderEvalTree(n *NodeApplyableProvider, config *configs.Provider) EvalNo
6450
// We configure on everything but validate, since validate may
6551
// not have access to all the variables.
6652
seq = append(seq, &EvalOpFilter{
67-
Ops: []walkOperation{walkRefresh, walkPlan, walkApply, walkDestroy, walkImport},
53+
Ops: []walkOperation{walkRefresh, walkPlan, walkApply, walkDestroy},
6854
Node: &EvalSequence{
6955
Nodes: []EvalNode{
7056
&EvalConfigProvider{
@@ -75,6 +61,19 @@ func ProviderEvalTree(n *NodeApplyableProvider, config *configs.Provider) EvalNo
7561
},
7662
},
7763
})
64+
seq = append(seq, &EvalOpFilter{
65+
Ops: []walkOperation{walkImport},
66+
Node: &EvalSequence{
67+
Nodes: []EvalNode{
68+
&EvalConfigProvider{
69+
Addr: addr,
70+
Provider: &provider,
71+
Config: config,
72+
VerifyConfigIsKnown: true,
73+
},
74+
},
75+
},
76+
})
7877

7978
return &EvalSequence{Nodes: seq}
8079
}

terraform/graph_builder_import.go

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -94,9 +94,6 @@ func (b *ImportGraphBuilder) Steps() []GraphTransformer {
9494
// configuration
9595
&attachDataResourceDependenciesTransformer{},
9696

97-
// This validates that the providers only depend on variables
98-
&ImportProviderValidateTransformer{},
99-
10097
// Close opened plugin connections
10198
&CloseProviderTransformer{},
10299

terraform/transform_import_provider.go

Lines changed: 0 additions & 44 deletions
This file was deleted.

0 commit comments

Comments
 (0)