|
1 | 1 | package convert |
2 | 2 |
|
3 | 3 | import ( |
| 4 | + "fmt" |
4 | 5 | "slices" |
5 | 6 |
|
6 | 7 | "github.com/hashicorp/hcl/v2/hclwrite" |
@@ -56,31 +57,45 @@ func updateResource(resource *hclwrite.Block) (bool, error) { |
56 | 57 | } |
57 | 58 |
|
58 | 59 | func convertRepSpecs(resourceb *hclwrite.Body) error { |
59 | | - block := resourceb.FirstMatchingBlock(nRepSpecs, nil) |
60 | | - if block == nil { |
61 | | - return nil |
| 60 | + var repSpecs []*hclwrite.Body |
| 61 | + for { |
| 62 | + block := resourceb.FirstMatchingBlock(nRepSpecs, nil) |
| 63 | + if block == nil { |
| 64 | + break |
| 65 | + } |
| 66 | + resourceb.RemoveBlock(block) |
| 67 | + if err := convertConfig(block.Body()); err != nil { |
| 68 | + return err |
| 69 | + } |
| 70 | + repSpecs = append(repSpecs, block.Body()) |
62 | 71 | } |
63 | | - resourceb.RemoveBlock(block) |
64 | | - if err := convertConfig(block.Body()); err != nil { |
65 | | - return err |
| 72 | + if len(repSpecs) == 0 { |
| 73 | + return fmt.Errorf("must have at least one replication_specs") |
66 | 74 | } |
67 | | - resourceb.SetAttributeRaw(nRepSpecs, hcl.TokensArraySingle(block.Body())) |
| 75 | + resourceb.SetAttributeRaw(nRepSpecs, hcl.TokensArray(repSpecs)) |
68 | 76 | return nil |
69 | 77 | } |
70 | 78 |
|
71 | 79 | func convertConfig(repSpecs *hclwrite.Body) error { |
72 | | - block := repSpecs.FirstMatchingBlock(nConfig, nil) |
73 | | - if block == nil { |
74 | | - return nil |
| 80 | + var configs []*hclwrite.Body |
| 81 | + for { |
| 82 | + block := repSpecs.FirstMatchingBlock(nConfig, nil) |
| 83 | + if block == nil { |
| 84 | + break |
| 85 | + } |
| 86 | + repSpecs.RemoveBlock(block) |
| 87 | + blockb := block.Body() |
| 88 | + fillBlockOpt(blockb, nElectableSpecs) |
| 89 | + fillBlockOpt(blockb, nReadOnlySpecs) |
| 90 | + fillBlockOpt(blockb, nAnalyticsSpecs) |
| 91 | + fillBlockOpt(blockb, nAutoScaling) |
| 92 | + fillBlockOpt(blockb, nAnalyticsAutoScaling) |
| 93 | + configs = append(configs, blockb) |
| 94 | + } |
| 95 | + if len(configs) == 0 { |
| 96 | + return fmt.Errorf("replication_specs must have at least one region_configs") |
75 | 97 | } |
76 | | - repSpecs.RemoveBlock(block) |
77 | | - blockb := block.Body() |
78 | | - fillBlockOpt(blockb, nElectableSpecs) |
79 | | - fillBlockOpt(blockb, nReadOnlySpecs) |
80 | | - fillBlockOpt(blockb, nAnalyticsSpecs) |
81 | | - fillBlockOpt(blockb, nAutoScaling) |
82 | | - fillBlockOpt(blockb, nAnalyticsAutoScaling) |
83 | | - repSpecs.SetAttributeRaw(nConfig, hcl.TokensArraySingle(blockb)) |
| 98 | + repSpecs.SetAttributeRaw(nConfig, hcl.TokensArray(configs)) |
84 | 99 | return nil |
85 | 100 | } |
86 | 101 |
|
|
0 commit comments