podman
121 строка · 4.1 Кб
1package config
2
3import (
4"github.com/containers/image/v5/manifest"
5dockerclient "github.com/fsouza/go-dockerclient"
6)
7
8// Schema2ConfigFromGoDockerclientConfig converts a go-dockerclient Config
9// structure to a manifest Schema2Config.
10func Schema2ConfigFromGoDockerclientConfig(config *dockerclient.Config) *manifest.Schema2Config {
11overrideExposedPorts := make(map[manifest.Schema2Port]struct{})
12for port := range config.ExposedPorts {
13overrideExposedPorts[manifest.Schema2Port(port)] = struct{}{}
14}
15var overrideHealthCheck *manifest.Schema2HealthConfig
16if config.Healthcheck != nil {
17overrideHealthCheck = &manifest.Schema2HealthConfig{
18Test: config.Healthcheck.Test,
19StartPeriod: config.Healthcheck.StartPeriod,
20Interval: config.Healthcheck.Interval,
21Timeout: config.Healthcheck.Timeout,
22Retries: config.Healthcheck.Retries,
23}
24}
25labels := make(map[string]string)
26for k, v := range config.Labels {
27labels[k] = v
28}
29volumes := make(map[string]struct{})
30for v := range config.Volumes {
31volumes[v] = struct{}{}
32}
33s2config := &manifest.Schema2Config{
34Hostname: config.Hostname,
35Domainname: config.Domainname,
36User: config.User,
37AttachStdin: config.AttachStdin,
38AttachStdout: config.AttachStdout,
39AttachStderr: config.AttachStderr,
40ExposedPorts: overrideExposedPorts,
41Tty: config.Tty,
42OpenStdin: config.OpenStdin,
43StdinOnce: config.StdinOnce,
44Env: append([]string{}, config.Env...),
45Cmd: append([]string{}, config.Cmd...),
46Healthcheck: overrideHealthCheck,
47ArgsEscaped: config.ArgsEscaped,
48Image: config.Image,
49Volumes: volumes,
50WorkingDir: config.WorkingDir,
51Entrypoint: append([]string{}, config.Entrypoint...),
52NetworkDisabled: config.NetworkDisabled,
53MacAddress: config.MacAddress,
54OnBuild: append([]string{}, config.OnBuild...),
55Labels: labels,
56StopSignal: config.StopSignal,
57Shell: config.Shell,
58}
59if config.StopTimeout != 0 {
60s2config.StopTimeout = &config.StopTimeout
61}
62return s2config
63}
64
65// GoDockerclientConfigFromSchema2Config converts a manifest Schema2Config
66// to a go-dockerclient config structure.
67func GoDockerclientConfigFromSchema2Config(s2config *manifest.Schema2Config) *dockerclient.Config {
68overrideExposedPorts := make(map[dockerclient.Port]struct{})
69for port := range s2config.ExposedPorts {
70overrideExposedPorts[dockerclient.Port(port)] = struct{}{}
71}
72var healthCheck *dockerclient.HealthConfig
73if s2config.Healthcheck != nil {
74healthCheck = &dockerclient.HealthConfig{
75Test: s2config.Healthcheck.Test,
76StartPeriod: s2config.Healthcheck.StartPeriod,
77Interval: s2config.Healthcheck.Interval,
78Timeout: s2config.Healthcheck.Timeout,
79Retries: s2config.Healthcheck.Retries,
80}
81}
82labels := make(map[string]string)
83for k, v := range s2config.Labels {
84labels[k] = v
85}
86volumes := make(map[string]struct{})
87for v := range s2config.Volumes {
88volumes[v] = struct{}{}
89}
90config := &dockerclient.Config{
91Hostname: s2config.Hostname,
92Domainname: s2config.Domainname,
93User: s2config.User,
94AttachStdin: s2config.AttachStdin,
95AttachStdout: s2config.AttachStdout,
96AttachStderr: s2config.AttachStderr,
97PortSpecs: nil,
98ExposedPorts: overrideExposedPorts,
99Tty: s2config.Tty,
100OpenStdin: s2config.OpenStdin,
101StdinOnce: s2config.StdinOnce,
102Env: append([]string{}, s2config.Env...),
103Cmd: append([]string{}, s2config.Cmd...),
104Healthcheck: healthCheck,
105ArgsEscaped: s2config.ArgsEscaped,
106Image: s2config.Image,
107Volumes: volumes,
108WorkingDir: s2config.WorkingDir,
109Entrypoint: append([]string{}, s2config.Entrypoint...),
110NetworkDisabled: s2config.NetworkDisabled,
111MacAddress: s2config.MacAddress,
112OnBuild: append([]string{}, s2config.OnBuild...),
113Labels: labels,
114StopSignal: s2config.StopSignal,
115Shell: s2config.Shell,
116}
117if s2config.StopTimeout != nil {
118config.StopTimeout = *s2config.StopTimeout
119}
120return config
121}
122