mirror of
https://github.com/containers/podman.git
synced 2025-11-30 18:18:18 +08:00
121 lines
4.0 KiB
Go
121 lines
4.0 KiB
Go
package config
|
|
|
|
import (
|
|
"maps"
|
|
"slices"
|
|
|
|
dockerclient "github.com/fsouza/go-dockerclient"
|
|
"go.podman.io/image/v5/manifest"
|
|
)
|
|
|
|
// Schema2ConfigFromGoDockerclientConfig converts a go-dockerclient Config
|
|
// structure to a manifest Schema2Config.
|
|
func Schema2ConfigFromGoDockerclientConfig(config *dockerclient.Config) *manifest.Schema2Config {
|
|
overrideExposedPorts := make(map[manifest.Schema2Port]struct{})
|
|
for port := range config.ExposedPorts {
|
|
overrideExposedPorts[manifest.Schema2Port(port)] = struct{}{}
|
|
}
|
|
var overrideHealthCheck *manifest.Schema2HealthConfig
|
|
if config.Healthcheck != nil {
|
|
overrideHealthCheck = &manifest.Schema2HealthConfig{
|
|
Test: config.Healthcheck.Test,
|
|
StartPeriod: config.Healthcheck.StartPeriod,
|
|
Interval: config.Healthcheck.Interval,
|
|
Timeout: config.Healthcheck.Timeout,
|
|
Retries: config.Healthcheck.Retries,
|
|
}
|
|
}
|
|
labels := make(map[string]string)
|
|
maps.Copy(labels, config.Labels)
|
|
volumes := make(map[string]struct{})
|
|
for v := range config.Volumes {
|
|
volumes[v] = struct{}{}
|
|
}
|
|
s2config := &manifest.Schema2Config{
|
|
Hostname: config.Hostname,
|
|
Domainname: config.Domainname,
|
|
User: config.User,
|
|
AttachStdin: config.AttachStdin,
|
|
AttachStdout: config.AttachStdout,
|
|
AttachStderr: config.AttachStderr,
|
|
ExposedPorts: overrideExposedPorts,
|
|
Tty: config.Tty,
|
|
OpenStdin: config.OpenStdin,
|
|
StdinOnce: config.StdinOnce,
|
|
Env: slices.Clone(config.Env),
|
|
Cmd: slices.Clone(config.Cmd),
|
|
Healthcheck: overrideHealthCheck,
|
|
ArgsEscaped: config.ArgsEscaped,
|
|
Image: config.Image,
|
|
Volumes: volumes,
|
|
WorkingDir: config.WorkingDir,
|
|
Entrypoint: slices.Clone(config.Entrypoint),
|
|
NetworkDisabled: config.NetworkDisabled,
|
|
MacAddress: config.MacAddress,
|
|
OnBuild: slices.Clone(config.OnBuild),
|
|
Labels: labels,
|
|
StopSignal: config.StopSignal,
|
|
Shell: config.Shell,
|
|
}
|
|
if config.StopTimeout != 0 {
|
|
s2config.StopTimeout = &config.StopTimeout
|
|
}
|
|
return s2config
|
|
}
|
|
|
|
// GoDockerclientConfigFromSchema2Config converts a manifest Schema2Config
|
|
// to a go-dockerclient config structure.
|
|
func GoDockerclientConfigFromSchema2Config(s2config *manifest.Schema2Config) *dockerclient.Config {
|
|
overrideExposedPorts := make(map[dockerclient.Port]struct{})
|
|
for port := range s2config.ExposedPorts {
|
|
overrideExposedPorts[dockerclient.Port(port)] = struct{}{}
|
|
}
|
|
var healthCheck *dockerclient.HealthConfig
|
|
if s2config.Healthcheck != nil {
|
|
healthCheck = &dockerclient.HealthConfig{
|
|
Test: s2config.Healthcheck.Test,
|
|
StartPeriod: s2config.Healthcheck.StartPeriod,
|
|
Interval: s2config.Healthcheck.Interval,
|
|
Timeout: s2config.Healthcheck.Timeout,
|
|
Retries: s2config.Healthcheck.Retries,
|
|
}
|
|
}
|
|
labels := make(map[string]string)
|
|
maps.Copy(labels, s2config.Labels)
|
|
volumes := make(map[string]struct{})
|
|
for v := range s2config.Volumes {
|
|
volumes[v] = struct{}{}
|
|
}
|
|
config := &dockerclient.Config{
|
|
Hostname: s2config.Hostname,
|
|
Domainname: s2config.Domainname,
|
|
User: s2config.User,
|
|
AttachStdin: s2config.AttachStdin,
|
|
AttachStdout: s2config.AttachStdout,
|
|
AttachStderr: s2config.AttachStderr,
|
|
PortSpecs: nil,
|
|
ExposedPorts: overrideExposedPorts,
|
|
Tty: s2config.Tty,
|
|
OpenStdin: s2config.OpenStdin,
|
|
StdinOnce: s2config.StdinOnce,
|
|
Env: slices.Clone(s2config.Env),
|
|
Cmd: slices.Clone(s2config.Cmd),
|
|
Healthcheck: healthCheck,
|
|
ArgsEscaped: s2config.ArgsEscaped,
|
|
Image: s2config.Image,
|
|
Volumes: volumes,
|
|
WorkingDir: s2config.WorkingDir,
|
|
Entrypoint: slices.Clone(s2config.Entrypoint),
|
|
NetworkDisabled: s2config.NetworkDisabled,
|
|
MacAddress: s2config.MacAddress,
|
|
OnBuild: slices.Clone(s2config.OnBuild),
|
|
Labels: labels,
|
|
StopSignal: s2config.StopSignal,
|
|
Shell: s2config.Shell,
|
|
}
|
|
if s2config.StopTimeout != nil {
|
|
config.StopTimeout = *s2config.StopTimeout
|
|
}
|
|
return config
|
|
}
|