podman

Форк
0
/
pod_validate.go 
90 строк · 2.6 Кб
1
package specgen
2

3
import (
4
	"errors"
5
	"fmt"
6

7
	"github.com/containers/podman/v5/pkg/util"
8
)
9

10
var (
11
	// ErrInvalidPodSpecConfig describes an error given when the podspecgenerator is invalid
12
	ErrInvalidPodSpecConfig = errors.New("invalid pod spec")
13
	// containerConfig has the default configurations defined in containers.conf
14
	containerConfig = util.DefaultContainerConfig()
15
)
16

17
func exclusivePodOptions(opt1, opt2 string) error {
18
	return fmt.Errorf("%s and %s are mutually exclusive pod options: %w", opt1, opt2, ErrInvalidPodSpecConfig)
19
}
20

21
// Validate verifies the input is valid
22
func (p *PodSpecGenerator) Validate() error {
23
	// PodBasicConfig
24
	if p.NoInfra {
25
		if len(p.InfraCommand) > 0 {
26
			return exclusivePodOptions("NoInfra", "InfraCommand")
27
		}
28
		if len(p.InfraImage) > 0 {
29
			return exclusivePodOptions("NoInfra", "InfraImage")
30
		}
31
		if len(p.InfraName) > 0 {
32
			return exclusivePodOptions("NoInfra", "InfraName")
33
		}
34
		if len(p.SharedNamespaces) > 0 {
35
			return exclusivePodOptions("NoInfra", "SharedNamespaces")
36
		}
37
	}
38

39
	// PodNetworkConfig
40
	if err := validateNetNS(&p.NetNS); err != nil {
41
		return err
42
	}
43
	if p.NoInfra {
44
		if p.NetNS.NSMode != Default && p.NetNS.NSMode != "" {
45
			return errors.New("NoInfra and network modes cannot be used together")
46
		}
47
		// Note that networks might be set when --ip or --mac was set
48
		// so we need to check that no networks are set without the infra
49
		if len(p.Networks) > 0 {
50
			return errors.New("cannot set networks options without infra container")
51
		}
52
		if len(p.DNSOption) > 0 {
53
			return exclusivePodOptions("NoInfra", "DNSOption")
54
		}
55
		if len(p.DNSSearch) > 0 {
56
			return exclusivePodOptions("NoInfo", "DNSSearch")
57
		}
58
		if len(p.DNSServer) > 0 {
59
			return exclusivePodOptions("NoInfra", "DNSServer")
60
		}
61
		if len(p.HostAdd) > 0 {
62
			return exclusivePodOptions("NoInfra", "HostAdd")
63
		}
64
		if p.NoManageResolvConf {
65
			return exclusivePodOptions("NoInfra", "NoManageResolvConf")
66
		}
67
	}
68
	if p.NetNS.NSMode != "" && p.NetNS.NSMode != Bridge && p.NetNS.NSMode != Slirp && p.NetNS.NSMode != Pasta && p.NetNS.NSMode != Default {
69
		if len(p.PortMappings) > 0 {
70
			return errors.New("PortMappings can only be used with Bridge, slirp4netns, or pasta networking")
71
		}
72
	}
73

74
	if p.NoManageResolvConf {
75
		if len(p.DNSServer) > 0 {
76
			return exclusivePodOptions("NoManageResolvConf", "DNSServer")
77
		}
78
		if len(p.DNSSearch) > 0 {
79
			return exclusivePodOptions("NoManageResolvConf", "DNSSearch")
80
		}
81
		if len(p.DNSOption) > 0 {
82
			return exclusivePodOptions("NoManageResolvConf", "DNSOption")
83
		}
84
	}
85
	if p.NoManageHosts && len(p.HostAdd) > 0 {
86
		return exclusivePodOptions("NoManageHosts", "HostAdd")
87
	}
88

89
	return nil
90
}
91

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

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

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

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