podman

Форк
0
121 строка · 4.1 Кб
1
package config
2

3
import (
4
	"github.com/containers/image/v5/manifest"
5
	dockerclient "github.com/fsouza/go-dockerclient"
6
)
7

8
// Schema2ConfigFromGoDockerclientConfig converts a go-dockerclient Config
9
// structure to a manifest Schema2Config.
10
func Schema2ConfigFromGoDockerclientConfig(config *dockerclient.Config) *manifest.Schema2Config {
11
	overrideExposedPorts := make(map[manifest.Schema2Port]struct{})
12
	for port := range config.ExposedPorts {
13
		overrideExposedPorts[manifest.Schema2Port(port)] = struct{}{}
14
	}
15
	var overrideHealthCheck *manifest.Schema2HealthConfig
16
	if config.Healthcheck != nil {
17
		overrideHealthCheck = &manifest.Schema2HealthConfig{
18
			Test:        config.Healthcheck.Test,
19
			StartPeriod: config.Healthcheck.StartPeriod,
20
			Interval:    config.Healthcheck.Interval,
21
			Timeout:     config.Healthcheck.Timeout,
22
			Retries:     config.Healthcheck.Retries,
23
		}
24
	}
25
	labels := make(map[string]string)
26
	for k, v := range config.Labels {
27
		labels[k] = v
28
	}
29
	volumes := make(map[string]struct{})
30
	for v := range config.Volumes {
31
		volumes[v] = struct{}{}
32
	}
33
	s2config := &manifest.Schema2Config{
34
		Hostname:        config.Hostname,
35
		Domainname:      config.Domainname,
36
		User:            config.User,
37
		AttachStdin:     config.AttachStdin,
38
		AttachStdout:    config.AttachStdout,
39
		AttachStderr:    config.AttachStderr,
40
		ExposedPorts:    overrideExposedPorts,
41
		Tty:             config.Tty,
42
		OpenStdin:       config.OpenStdin,
43
		StdinOnce:       config.StdinOnce,
44
		Env:             append([]string{}, config.Env...),
45
		Cmd:             append([]string{}, config.Cmd...),
46
		Healthcheck:     overrideHealthCheck,
47
		ArgsEscaped:     config.ArgsEscaped,
48
		Image:           config.Image,
49
		Volumes:         volumes,
50
		WorkingDir:      config.WorkingDir,
51
		Entrypoint:      append([]string{}, config.Entrypoint...),
52
		NetworkDisabled: config.NetworkDisabled,
53
		MacAddress:      config.MacAddress,
54
		OnBuild:         append([]string{}, config.OnBuild...),
55
		Labels:          labels,
56
		StopSignal:      config.StopSignal,
57
		Shell:           config.Shell,
58
	}
59
	if config.StopTimeout != 0 {
60
		s2config.StopTimeout = &config.StopTimeout
61
	}
62
	return s2config
63
}
64

65
// GoDockerclientConfigFromSchema2Config converts a manifest Schema2Config
66
// to a go-dockerclient config structure.
67
func GoDockerclientConfigFromSchema2Config(s2config *manifest.Schema2Config) *dockerclient.Config {
68
	overrideExposedPorts := make(map[dockerclient.Port]struct{})
69
	for port := range s2config.ExposedPorts {
70
		overrideExposedPorts[dockerclient.Port(port)] = struct{}{}
71
	}
72
	var healthCheck *dockerclient.HealthConfig
73
	if s2config.Healthcheck != nil {
74
		healthCheck = &dockerclient.HealthConfig{
75
			Test:        s2config.Healthcheck.Test,
76
			StartPeriod: s2config.Healthcheck.StartPeriod,
77
			Interval:    s2config.Healthcheck.Interval,
78
			Timeout:     s2config.Healthcheck.Timeout,
79
			Retries:     s2config.Healthcheck.Retries,
80
		}
81
	}
82
	labels := make(map[string]string)
83
	for k, v := range s2config.Labels {
84
		labels[k] = v
85
	}
86
	volumes := make(map[string]struct{})
87
	for v := range s2config.Volumes {
88
		volumes[v] = struct{}{}
89
	}
90
	config := &dockerclient.Config{
91
		Hostname:        s2config.Hostname,
92
		Domainname:      s2config.Domainname,
93
		User:            s2config.User,
94
		AttachStdin:     s2config.AttachStdin,
95
		AttachStdout:    s2config.AttachStdout,
96
		AttachStderr:    s2config.AttachStderr,
97
		PortSpecs:       nil,
98
		ExposedPorts:    overrideExposedPorts,
99
		Tty:             s2config.Tty,
100
		OpenStdin:       s2config.OpenStdin,
101
		StdinOnce:       s2config.StdinOnce,
102
		Env:             append([]string{}, s2config.Env...),
103
		Cmd:             append([]string{}, s2config.Cmd...),
104
		Healthcheck:     healthCheck,
105
		ArgsEscaped:     s2config.ArgsEscaped,
106
		Image:           s2config.Image,
107
		Volumes:         volumes,
108
		WorkingDir:      s2config.WorkingDir,
109
		Entrypoint:      append([]string{}, s2config.Entrypoint...),
110
		NetworkDisabled: s2config.NetworkDisabled,
111
		MacAddress:      s2config.MacAddress,
112
		OnBuild:         append([]string{}, s2config.OnBuild...),
113
		Labels:          labels,
114
		StopSignal:      s2config.StopSignal,
115
		Shell:           s2config.Shell,
116
	}
117
	if s2config.StopTimeout != nil {
118
		config.StopTimeout = *s2config.StopTimeout
119
	}
120
	return config
121
}
122

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.