39 lines
951 B
Go
39 lines
951 B
Go
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
"path/filepath"
|
|
)
|
|
|
|
type InstanceState string
|
|
|
|
const (
|
|
StateStopped InstanceState = "STOPPED"
|
|
StateRunning InstanceState = "RUNNING"
|
|
)
|
|
|
|
func CreateNewInstance(name string, version string, meta InstanceMetadata, cfg *AppConfig) error {
|
|
instanceDir := filepath.Join(cfg.Storage.InstancesDir, name)
|
|
|
|
dirs := []string{
|
|
instanceDir,
|
|
filepath.Join(instanceDir, "Saves"),
|
|
filepath.Join(instanceDir, "Mods"),
|
|
}
|
|
|
|
for _, dir := range dirs {
|
|
if err := os.MkdirAll(dir, 0755); err != nil {
|
|
return fmt.Errorf("Failed creating core instance directory layout: %w", err)
|
|
}
|
|
}
|
|
|
|
instanceConfigPath := filepath.Join(instanceDir, "serverconfig.json")
|
|
if err := PrepareInstanceConfig(version, instanceConfigPath, meta, cfg); err != nil {
|
|
return fmt.Errorf("Failed provisioning server baseline configuration: %w", err)
|
|
}
|
|
|
|
fmt.Printf("Instance '%s' (v%s) successfully initialized\n", name, version)
|
|
return nil
|
|
}
|