--- name: write_dockerfile kind: function lang: go domain: infra version: "1.0.0" purity: impure signature: "func WriteDockerfile(dir, content string) (string, error)" description: "Escribe content en dir/Dockerfile. Crea el directorio si no existe. Retorna el path absoluto del archivo escrito. CompaƱera impura de generate_dockerfile." tags: [docker, dockerfile, io, write, deploy, infra] uses_functions: [generate_dockerfile_go_infra] uses_types: [] returns: [] returns_optional: false error_type: "error_go_core" imports: [fmt, os, path/filepath] params: - name: dir desc: "directorio donde crear el archivo Dockerfile (se crea si no existe)" - name: content desc: "contenido del Dockerfile como string" output: "ruta absoluta del archivo Dockerfile escrito" tested: true tests: ["escribe Dockerfile en directorio existente", "crea directorio si no existe", "retorna path absoluto correcto", "error si dir es path invalido"] test_file_path: "functions/infra/write_dockerfile_test.go" file_path: "functions/infra/write_dockerfile.go" --- ## Ejemplo ```go // Patron puro+impuro: generar contenido y luego escribir content := GenerateDockerfile("myapp", 8080, map[string]string{"PORT": "8080"}) path, err := WriteDockerfile("/home/user/apps/myapp", content) if err != nil { log.Fatal(err) } fmt.Println("Dockerfile escrito en:", path) // /home/user/apps/myapp/Dockerfile ``` ## Notas Patron puro+impuro: generate_dockerfile produce el texto (pura, testeable sin I/O), write_dockerfile lo persiste (impura, efecto secundario aislado). Esto facilita testear la generacion del contenido independientemente de la escritura. Sobreescribe cualquier Dockerfile existente en el directorio.