7
"github.com/containers/podman/v5/pkg/util"
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()
17
func exclusivePodOptions(opt1, opt2 string) error {
18
return fmt.Errorf("%s and %s are mutually exclusive pod options: %w", opt1, opt2, ErrInvalidPodSpecConfig)
21
// Validate verifies the input is valid
22
func (p *PodSpecGenerator) Validate() error {
25
if len(p.InfraCommand) > 0 {
26
return exclusivePodOptions("NoInfra", "InfraCommand")
28
if len(p.InfraImage) > 0 {
29
return exclusivePodOptions("NoInfra", "InfraImage")
31
if len(p.InfraName) > 0 {
32
return exclusivePodOptions("NoInfra", "InfraName")
34
if len(p.SharedNamespaces) > 0 {
35
return exclusivePodOptions("NoInfra", "SharedNamespaces")
40
if err := validateNetNS(&p.NetNS); err != nil {
44
if p.NetNS.NSMode != Default && p.NetNS.NSMode != "" {
45
return errors.New("NoInfra and network modes cannot be used together")
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")
52
if len(p.DNSOption) > 0 {
53
return exclusivePodOptions("NoInfra", "DNSOption")
55
if len(p.DNSSearch) > 0 {
56
return exclusivePodOptions("NoInfo", "DNSSearch")
58
if len(p.DNSServer) > 0 {
59
return exclusivePodOptions("NoInfra", "DNSServer")
61
if len(p.HostAdd) > 0 {
62
return exclusivePodOptions("NoInfra", "HostAdd")
64
if p.NoManageResolvConf {
65
return exclusivePodOptions("NoInfra", "NoManageResolvConf")
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")
74
if p.NoManageResolvConf {
75
if len(p.DNSServer) > 0 {
76
return exclusivePodOptions("NoManageResolvConf", "DNSServer")
78
if len(p.DNSSearch) > 0 {
79
return exclusivePodOptions("NoManageResolvConf", "DNSSearch")
81
if len(p.DNSOption) > 0 {
82
return exclusivePodOptions("NoManageResolvConf", "DNSOption")
85
if p.NoManageHosts && len(p.HostAdd) > 0 {
86
return exclusivePodOptions("NoManageHosts", "HostAdd")