67 lines
1.7 KiB
Go
67 lines
1.7 KiB
Go
package service_definition
|
|
|
|
import (
|
|
"os"
|
|
|
|
"github.com/goccy/go-yaml"
|
|
)
|
|
|
|
type BuildImage struct {
|
|
Path string `yaml:"path"`
|
|
TagPrefix string `yaml:"tag"`
|
|
}
|
|
|
|
type BuildConfiguration struct {
|
|
Images []BuildImage
|
|
}
|
|
|
|
type VolumeDefinition struct {
|
|
Name string `yaml:"name"`
|
|
}
|
|
|
|
type PortMapping struct {
|
|
Host string `yaml:"host"`
|
|
Container string `yaml:"container"`
|
|
Type string `yaml:"type"`
|
|
}
|
|
|
|
type VolumeConfiguration struct {
|
|
Name string `yaml:"name"`
|
|
Container string `yaml:"container"`
|
|
Host string `yaml:"host"`
|
|
ReadOnly bool `yaml:"readonly"`
|
|
}
|
|
|
|
type ContainerDefinition struct {
|
|
Name string `yaml:"name"`
|
|
Image string `yaml:"image"`
|
|
Volumes []VolumeConfiguration `yaml:"volumes"`
|
|
EnvFile string `yaml:"env-file"`
|
|
Network string `yaml:"network"`
|
|
PIDNamespace string `yaml:"pid-namespace"`
|
|
ExtraArgs []string `yaml:"extra-args"`
|
|
}
|
|
|
|
type ServiceDefinition struct {
|
|
Name string `yaml:"name"`
|
|
Build BuildConfiguration `yaml:"build"`
|
|
Volumes []VolumeDefinition `yaml:"volumes"`
|
|
Containers []ContainerDefinition `yaml:"containers"`
|
|
Ports []PortMapping `yaml:"ports"`
|
|
}
|
|
|
|
func GetServiceDefinitionFromFile(path string) (ServiceDefinition, error) {
|
|
var definition ServiceDefinition
|
|
|
|
defData, err := os.ReadFile(path)
|
|
|
|
if err != nil {
|
|
return ServiceDefinition{}, &FileDoesNotExistError{Message: "Could not find service configuration file", ExpectedPath: path}
|
|
}
|
|
|
|
if err = yaml.Unmarshal(defData, &definition); err != nil {
|
|
return ServiceDefinition{}, &InvalidServiceDefinitionError{Path: path}
|
|
}
|
|
|
|
return definition, nil
|
|
}
|