enable dnsplugin for network create

when users create a new network and the dnsname plugin can be found by
podman, we will enable container name resolution on the new network.
there is an option to opt *out* as well.

tests cannot be added until we solve the packaging portion of the
dnsname plugin.

Signed-off-by: baude <bbaude@redhat.com>
This commit is contained in:
baude
2019-10-03 15:22:40 -05:00
parent ac73fd3fe5
commit 2f6b8b94e8
7 changed files with 52 additions and 6 deletions

View File

@ -14,6 +14,9 @@ const (
// CNIDeviceName is the default network device name and in
// reality should have an int appended to it (cni-podman4)
CNIDeviceName = "cni-podman"
// DefaultPodmanDomainName is used for the dnsname plugin to define
// a localized domain name for a created network
DefaultPodmanDomainName = "dns.podman"
)
// GetDefaultPodmanNetwork outputs the default network for podman
@ -97,3 +100,14 @@ type FirewallConfig struct {
func (f FirewallConfig) Bytes() ([]byte, error) {
return json.MarshalIndent(f, "", "\t")
}
// DNSNameConfig describes the dns container name resolution plugin config
type DNSNameConfig struct {
PluginType string `json:"type"`
DomainName string `json:"domainName"`
}
// Bytes outputs the configuration as []byte
func (d DNSNameConfig) Bytes() ([]byte, error) {
return json.MarshalIndent(d, "", "\t")
}

View File

@ -2,6 +2,8 @@ package network
import (
"net"
"os"
"path/filepath"
)
// NcList describes a generic map
@ -111,3 +113,22 @@ func NewFirewallPlugin() FirewallConfig {
Backend: "iptables",
}
}
// NewDNSNamePlugin creates the dnsname config with a given
// domainname
func NewDNSNamePlugin(domainName string) DNSNameConfig {
return DNSNameConfig{
PluginType: "dnsname",
DomainName: domainName,
}
}
// HasDNSNamePlugin looks to see if the dnsname cni plugin is present
func HasDNSNamePlugin(paths []string) bool {
for _, p := range paths {
if _, err := os.Stat(filepath.Join(p, "dnsname")); err == nil {
return true
}
}
return false
}