feat: support JS and Go source files in fission package loader
This commit is contained in:
@@ -69,11 +69,11 @@ func (r *PackageResource) Schema(_ context.Context, _ resource.SchemaRequest, re
|
||||
},
|
||||
"source_dir": schema.StringAttribute{
|
||||
Optional: true,
|
||||
Description: "Путь к директории с кодом, которая будет упакована в zip.",
|
||||
Description: "Путь к директории с кодом (поддерживаются main.py, main.js, main.go).",
|
||||
},
|
||||
"code_path": schema.StringAttribute{
|
||||
Optional: true,
|
||||
Description: "Путь к готовому zip-архиву с кодом.",
|
||||
Description: "Путь к готовому файлу исходника для literal deployment.",
|
||||
},
|
||||
"code_hash": schema.StringAttribute{
|
||||
Optional: true,
|
||||
@@ -271,10 +271,14 @@ func resolveNamespace(resourceNamespace types.String, providerNamespace string)
|
||||
// loadPackageLiteral читает bytes для spec.deployment.literal.
|
||||
func loadPackageLiteral(sourceDir, codePath string) ([]byte, error) {
|
||||
if sourceDir != "" {
|
||||
mainFilePath := filepath.Join(sourceDir, "main.py")
|
||||
mainFilePath, err := resolveMainSourceFile(sourceDir)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
mainFileBytes, err := os.ReadFile(mainFilePath)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("read source_dir main.py %q: %w", mainFilePath, err)
|
||||
return nil, fmt.Errorf("read source_dir source file %q: %w", mainFilePath, err)
|
||||
}
|
||||
|
||||
return mainFileBytes, nil
|
||||
@@ -288,6 +292,20 @@ func loadPackageLiteral(sourceDir, codePath string) ([]byte, error) {
|
||||
return literalBytes, nil
|
||||
}
|
||||
|
||||
// resolveMainSourceFile выбирает основной файл исходника из source_dir.
|
||||
func resolveMainSourceFile(sourceDir string) (string, error) {
|
||||
candidates := []string{"main.py", "main.js", "main.go"}
|
||||
for _, candidate := range candidates {
|
||||
candidatePath := filepath.Join(sourceDir, candidate)
|
||||
fileInfo, err := os.Stat(candidatePath)
|
||||
if err == nil && !fileInfo.IsDir() {
|
||||
return candidatePath, nil
|
||||
}
|
||||
}
|
||||
|
||||
return "", fmt.Errorf("source_dir %q must contain one of: main.py, main.js, main.go", sourceDir)
|
||||
}
|
||||
|
||||
// packageToUnstructured преобразует Terraform model в Kubernetes CRD payload.
|
||||
func packageToUnstructured(model packageResourceModel, namespace string, literalBytes []byte) *unstructured.Unstructured {
|
||||
literalSource := base64.StdEncoding.EncodeToString(literalBytes)
|
||||
|
||||
Reference in New Issue
Block a user