Skip to content

Commit ecb803a

Browse files
author
yikefan
committed
修复terraform-bridge转pulumi生成dotnet的bug问题
1 parent e41c32d commit ecb803a

File tree

1 file changed

+61
-6
lines changed

1 file changed

+61
-6
lines changed

provider/resources.go

Lines changed: 61 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@ import (
2121
_ "embed"
2222
"fmt"
2323
"path/filepath"
24+
"strings"
25+
"unicode"
2426

2527
"github.com/pulumi/pulumi-terraform-bridge/v3/pkg/tfbridge/info"
2628
"github.com/pulumi/pulumi-terraform-bridge/v3/pkg/tfbridge/tokens"
@@ -164,20 +166,73 @@ func Provider() tfbridge.ProviderInfo {
164166
EnableAccurateBridgePreview: true,
165167
EnableRawStateDelta: true,
166168
}
167-
168169
makeToken := func(module, name string) (string, error) {
169170
return tokens.MakeStandard(volcengeccpkg)(module, name)
170171
}
171172
prov.MustComputeTokens(token.VolcengineToken("volcenginecc_", makeToken))
172173
for k := range prov.Resources {
173-
if k == "volcenginecc_waf_domain" {
174-
delete(prov.Resources, k)
175-
}
176-
if k == "volcenginecc_natgateway_nat_ip" {
177-
delete(prov.Resources, k)
174+
// 获取第二跟斜杠后面的值
175+
lastPart := extractAndConvertToCamelCase(k)
176+
//如果当前类的字段存在同名,比如domain的class下有domain字段,则domain字段 + Value
177+
if prov.P.ResourcesMap().Get(k).Schema().Get(lastPart) != nil {
178+
prov.Resources[k].Fields = map[string]*info.Schema{
179+
lastPart: {
180+
CSharpName: toCamelCase(lastPart) + "Value",
181+
},
182+
}
178183
}
179184
}
180185
prov.MustApplyAutoAliases()
181186

182187
return prov
183188
}
189+
190+
func extractAndConvertToCamelCase(input string) string {
191+
// 按下划线分割字符串
192+
parts := strings.Split(input, "_")
193+
// 如果少于3个部分,返回空字符串或原字符串
194+
if len(parts) < 3 {
195+
return input
196+
}
197+
// 获取第二根下划线后的所有部分
198+
remainingParts := parts[2:]
199+
// 直接返回第二根下划线后的所有内容,保持下划线分隔符
200+
return strings.Join(remainingParts, "_")
201+
}
202+
203+
// toCamelCase 将字符串转换为驼峰命名,首字母大写
204+
func toCamelCase(s string) string {
205+
if len(s) == 0 {
206+
return ""
207+
}
208+
209+
// 按下划线分割字符串
210+
parts := strings.Split(s, "_")
211+
var result strings.Builder
212+
213+
for i, part := range parts {
214+
if len(part) == 0 {
215+
continue
216+
}
217+
if i == 0 {
218+
// 首字母大写
219+
result.WriteString(capitalizeFirst(part))
220+
} else {
221+
// 其余部分首字母大写,其余小写
222+
result.WriteString(capitalizeFirst(strings.ToLower(part)))
223+
}
224+
}
225+
226+
return result.String()
227+
}
228+
229+
// capitalizeFirst 将字符串首字母大写
230+
func capitalizeFirst(s string) string {
231+
if len(s) == 0 {
232+
return ""
233+
}
234+
235+
runes := []rune(s)
236+
runes[0] = unicode.ToUpper(runes[0])
237+
return string(runes)
238+
}

0 commit comments

Comments
 (0)