feat: parameterize provider address and source for multi-stand (DEV/TEST/PROD) support
This commit is contained in:
@@ -19,12 +19,12 @@ import (
|
|||||||
var CloudOutputByServiceID = map[int]types.CloudOutputSnapshot{}
|
var CloudOutputByServiceID = map[int]types.CloudOutputSnapshot{}
|
||||||
|
|
||||||
// ResourceDocs генерирует полный набор .md файлов для одного сервиса.
|
// ResourceDocs генерирует полный набор .md файлов для одного сервиса.
|
||||||
func ResourceDocs(docsDir string, spec types.ServiceSpec, version string, apiEndpoint string) {
|
func ResourceDocs(docsDir string, spec types.ServiceSpec, version string, apiEndpoint string, providerSource string) {
|
||||||
base := spec.Name
|
base := spec.Name
|
||||||
nav := fmt.Sprintf("[Manual](%s.md) | [Create params](%s_params_create.md) | [Modify params](%s_params_modify.md) | [Output params](%s_outputs.md) | [Operations](%s_ops.md) | [Example](%s_example.md)", base, base, base, base, base, base)
|
nav := fmt.Sprintf("[Manual](%s.md) | [Create params](%s_params_create.md) | [Modify params](%s_params_modify.md) | [Output params](%s_outputs.md) | [Operations](%s_ops.md) | [Example](%s_example.md)", base, base, base, base, base, base)
|
||||||
|
|
||||||
WriteFile(filepath.Join(docsDir, base+".md"), buildManualPage(spec, nav))
|
WriteFile(filepath.Join(docsDir, base+".md"), buildManualPage(spec, nav))
|
||||||
WriteFile(filepath.Join(docsDir, base+"_example.md"), buildExamplePage(spec, nav, version, apiEndpoint))
|
WriteFile(filepath.Join(docsDir, base+"_example.md"), buildExamplePage(spec, nav, version, apiEndpoint, providerSource))
|
||||||
WriteFile(filepath.Join(docsDir, base+"_params_create.md"), buildCreateParamsPage(spec, nav))
|
WriteFile(filepath.Join(docsDir, base+"_params_create.md"), buildCreateParamsPage(spec, nav))
|
||||||
WriteFile(filepath.Join(docsDir, base+"_params_modify.md"), buildModifyParamsPage(spec, nav))
|
WriteFile(filepath.Join(docsDir, base+"_params_modify.md"), buildModifyParamsPage(spec, nav))
|
||||||
WriteFile(filepath.Join(docsDir, base+"_outputs.md"), buildOutputsPage(spec, nav))
|
WriteFile(filepath.Join(docsDir, base+"_outputs.md"), buildOutputsPage(spec, nav))
|
||||||
@@ -36,7 +36,7 @@ func ResourceDocs(docsDir string, spec types.ServiceSpec, version string, apiEnd
|
|||||||
srNav := fmt.Sprintf("[%s (основной)](%s.md) | [Operations](%s_ops.md) | [%s](%s.md) | [Example](%s_example.md)",
|
srNav := fmt.Sprintf("[%s (основной)](%s.md) | [Operations](%s_ops.md) | [%s](%s.md) | [Example](%s_example.md)",
|
||||||
spec.ServiceDisplayName, base, base, Capitalize(srName), srBase, srBase)
|
spec.ServiceDisplayName, base, base, Capitalize(srName), srBase, srBase)
|
||||||
WriteFile(filepath.Join(docsDir, srBase+".md"), buildSubresourcePage(spec, srName, srNav))
|
WriteFile(filepath.Join(docsDir, srBase+".md"), buildSubresourcePage(spec, srName, srNav))
|
||||||
WriteFile(filepath.Join(docsDir, srBase+"_example.md"), buildSubresourceExamplePage(spec, srName, srNav, version, apiEndpoint))
|
WriteFile(filepath.Join(docsDir, srBase+"_example.md"), buildSubresourceExamplePage(spec, srName, srNav, version, apiEndpoint, providerSource))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -178,12 +178,12 @@ func htmlToMarkdown(s string) string {
|
|||||||
return strings.TrimSpace(s)
|
return strings.TrimSpace(s)
|
||||||
}
|
}
|
||||||
|
|
||||||
func buildExamplePage(spec types.ServiceSpec, nav, version string, apiEndpoint string) string {
|
func buildExamplePage(spec types.ServiceSpec, nav, version string, apiEndpoint string, providerSource string) string {
|
||||||
var b strings.Builder
|
var b strings.Builder
|
||||||
b.WriteString(buildHeader(spec, nav))
|
b.WriteString(buildHeader(spec, nav))
|
||||||
b.WriteString(fmt.Sprintf("## Copy-ready manifest (`%s_main.tf`)\n\n", spec.Name))
|
b.WriteString(fmt.Sprintf("## Copy-ready manifest (`%s_main.tf`)\n\n", spec.Name))
|
||||||
b.WriteString("```hcl\n")
|
b.WriteString("```hcl\n")
|
||||||
b.WriteString(exampleBlock(spec, version, apiEndpoint))
|
b.WriteString(exampleBlock(spec, version, apiEndpoint, providerSource))
|
||||||
b.WriteString("```\n\n")
|
b.WriteString("```\n\n")
|
||||||
b.WriteString("## Outputs usage\n\n")
|
b.WriteString("## Outputs usage\n\n")
|
||||||
b.WriteString("```hcl\n")
|
b.WriteString("```hcl\n")
|
||||||
@@ -200,7 +200,7 @@ func buildExamplePage(spec types.ServiceSpec, nav, version string, apiEndpoint s
|
|||||||
return b.String()
|
return b.String()
|
||||||
}
|
}
|
||||||
|
|
||||||
func exampleBlock(spec types.ServiceSpec, version string, apiEndpoint string) string {
|
func exampleBlock(spec types.ServiceSpec, version string, apiEndpoint string, providerSource string) string {
|
||||||
createParams := FindParams(spec.Operations, "create")
|
createParams := FindParams(spec.Operations, "create")
|
||||||
requiredParams, defaultParams := SplitParams(createParams)
|
requiredParams, defaultParams := SplitParams(createParams)
|
||||||
|
|
||||||
@@ -208,7 +208,7 @@ func exampleBlock(spec types.ServiceSpec, version string, apiEndpoint string) st
|
|||||||
b.WriteString("terraform {\n")
|
b.WriteString("terraform {\n")
|
||||||
b.WriteString(" required_providers {\n")
|
b.WriteString(" required_providers {\n")
|
||||||
b.WriteString(" nubes = {\n")
|
b.WriteString(" nubes = {\n")
|
||||||
b.WriteString(" source = \"registry.kube5s.ru/nubes-test/nubes\"\n")
|
b.WriteString(fmt.Sprintf(" source = \"%s\"\n", providerSource))
|
||||||
b.WriteString(fmt.Sprintf(" version = \"%s\"\n", version))
|
b.WriteString(fmt.Sprintf(" version = \"%s\"\n", version))
|
||||||
b.WriteString(" }\n")
|
b.WriteString(" }\n")
|
||||||
b.WriteString(" }\n")
|
b.WriteString(" }\n")
|
||||||
@@ -452,7 +452,7 @@ func buildSubresourcePage(spec types.ServiceSpec, srName string, nav string) str
|
|||||||
return b.String()
|
return b.String()
|
||||||
}
|
}
|
||||||
|
|
||||||
func buildSubresourceExamplePage(spec types.ServiceSpec, srName string, nav string, version string, apiEndpoint string) string {
|
func buildSubresourceExamplePage(spec types.ServiceSpec, srName string, nav string, version string, apiEndpoint string, providerSource string) string {
|
||||||
var b strings.Builder
|
var b strings.Builder
|
||||||
srResourceName := fmt.Sprintf("nubes_%s_%s", spec.Name, Slug(srName))
|
srResourceName := fmt.Sprintf("nubes_%s_%s", spec.Name, Slug(srName))
|
||||||
b.WriteString(fmt.Sprintf("# Resource %s — Example\n\n", srResourceName))
|
b.WriteString(fmt.Sprintf("# Resource %s — Example\n\n", srResourceName))
|
||||||
@@ -464,7 +464,7 @@ func buildSubresourceExamplePage(spec types.ServiceSpec, srName string, nav stri
|
|||||||
b.WriteString("terraform {\n")
|
b.WriteString("terraform {\n")
|
||||||
b.WriteString(" required_providers {\n")
|
b.WriteString(" required_providers {\n")
|
||||||
b.WriteString(" nubes = {\n")
|
b.WriteString(" nubes = {\n")
|
||||||
b.WriteString(" source = \"registry.kube5s.ru/nubes-test/nubes\"\n")
|
b.WriteString(fmt.Sprintf(" source = \"%s\"\n", providerSource))
|
||||||
b.WriteString(fmt.Sprintf(" version = \"%s\"\n", version))
|
b.WriteString(fmt.Sprintf(" version = \"%s\"\n", version))
|
||||||
b.WriteString(" }\n")
|
b.WriteString(" }\n")
|
||||||
b.WriteString(" }\n")
|
b.WriteString(" }\n")
|
||||||
|
|||||||
@@ -27,6 +27,7 @@ func main() {
|
|||||||
// ⛔ LEGACY DEFAULT (index.cfm) — переопределяется через NUBES_API_ENDPOINT в profile.env.
|
// ⛔ LEGACY DEFAULT (index.cfm) — переопределяется через NUBES_API_ENDPOINT в profile.env.
|
||||||
// Никогда не использовать deck-api.ngcloud.ru напрямую.
|
// Никогда не использовать deck-api.ngcloud.ru напрямую.
|
||||||
apiEndpointFlag := flag.String("api-endpoint", "https://lk-api-gateway.ngcloud.ru/api/v1/svc", "API endpoint for example block")
|
apiEndpointFlag := flag.String("api-endpoint", "https://lk-api-gateway.ngcloud.ru/api/v1/svc", "API endpoint for example block")
|
||||||
|
providerSourceFlag := flag.String("provider-source", "registry.kube5s.ru/nubes-dev/nubes", "Provider source for example block")
|
||||||
opsFlag := flag.Bool("ops", false, "Generate per-service operations docs (resources_ops_yaml → docs/.../operations)")
|
opsFlag := flag.Bool("ops", false, "Generate per-service operations docs (resources_ops_yaml → docs/.../operations)")
|
||||||
flag.Parse()
|
flag.Parse()
|
||||||
|
|
||||||
@@ -51,6 +52,7 @@ func main() {
|
|||||||
panic("--version is required")
|
panic("--version is required")
|
||||||
}
|
}
|
||||||
apiEndpoint := *apiEndpointFlag
|
apiEndpoint := *apiEndpointFlag
|
||||||
|
providerSource := *providerSourceFlag
|
||||||
|
|
||||||
servicesOrder := loadServicesList(servicesList)
|
servicesOrder := loadServicesList(servicesList)
|
||||||
specs := loadSpecs(resourcesDir, servicesOrder)
|
specs := loadSpecs(resourcesDir, servicesOrder)
|
||||||
@@ -69,7 +71,7 @@ func main() {
|
|||||||
if excludeSet[spec.Name] {
|
if excludeSet[spec.Name] {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
writers.ResourceDocs(docsDir, spec, version, apiEndpoint)
|
writers.ResourceDocs(docsDir, spec, version, apiEndpoint, providerSource)
|
||||||
processedSpecs = append(processedSpecs, spec)
|
processedSpecs = append(processedSpecs, spec)
|
||||||
}
|
}
|
||||||
writers.IndexMD(docsDir, processedSpecs)
|
writers.IndexMD(docsDir, processedSpecs)
|
||||||
|
|||||||
@@ -77,7 +77,7 @@ build_and_zip() {
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
echo "Building for ${os}/${arch}..."
|
echo "Building for ${os}/${arch}..."
|
||||||
(cd "$PROVIDER_DIR" && CGO_ENABLED=0 GOOS="$os" GOARCH="$arch" go build -ldflags "-X main.version=${VERSION}" -o "${BUILD_DIR}/${binary}" .)
|
(cd "$PROVIDER_DIR" && CGO_ENABLED=0 GOOS="$os" GOARCH="$arch" go build -ldflags "-X main.version=${VERSION} -X main.address=${REGISTRY_HOSTNAME}/${NAMESPACE}/${PROVIDER_NAME}" -o "${BUILD_DIR}/${binary}" .)
|
||||||
|
|
||||||
(cd "$BUILD_DIR" && python3 -m zipfile -c "terraform-provider-nubes_${VERSION}_${os}_${arch}.zip" "$binary")
|
(cd "$BUILD_DIR" && python3 -m zipfile -c "terraform-provider-nubes_${VERSION}_${os}_${arch}.zip" "$binary")
|
||||||
rm -f "${BUILD_DIR:?}/${binary}"
|
rm -f "${BUILD_DIR:?}/${binary}"
|
||||||
|
|||||||
+3
-2
@@ -16,15 +16,16 @@ import (
|
|||||||
"github.com/hashicorp/terraform-plugin-framework/providerserver"
|
"github.com/hashicorp/terraform-plugin-framework/providerserver"
|
||||||
)
|
)
|
||||||
|
|
||||||
// version задаётся через ldflags при сборке: -ldflags "-X main.version=X.Y.Z"
|
// address задаётся через ldflags при сборке: -ldflags "-X main.address=host/ns/name"
|
||||||
// Значение по умолчанию — только для dev-сборок без скрипта.
|
// Значение по умолчанию — только для dev-сборок без скрипта.
|
||||||
var (
|
var (
|
||||||
version string = "0.0.0-dev"
|
version string = "0.0.0-dev"
|
||||||
|
address string = "registry.kube5s.ru/nubes-dev/nubes"
|
||||||
)
|
)
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
opts := providerserver.ServeOpts{
|
opts := providerserver.ServeOpts{
|
||||||
Address: "terra.k8c.ru/nubes-test/nubes",
|
Address: address,
|
||||||
}
|
}
|
||||||
|
|
||||||
err := providerserver.Serve(context.Background(), provider.New(version), opts)
|
err := providerserver.Serve(context.Background(), provider.New(version), opts)
|
||||||
|
|||||||
Reference in New Issue
Block a user