Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

libnetwork: Add support for host-gatway #1549

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 11 additions & 3 deletions libnetwork/etchosts/hosts.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ import (

const (
HostContainersInternal = "host.containers.internal"
HostGateway = "host-gateway"
localhost = "localhost"
)

Expand Down Expand Up @@ -98,7 +99,7 @@ func Remove(file string, entries HostEntries) error {

// new see comment on New()
func newHost(params *Params) error {
entries, err := parseExtraHosts(params.ExtraHosts)
entries, err := parseExtraHosts(params.ExtraHosts, params.HostContainersInternalIP)
if err != nil {
return err
}
Expand Down Expand Up @@ -230,7 +231,7 @@ func checkIfEntryExists(current HostEntry, entries HostEntries) bool {
// parseExtraHosts converts a slice of "name:ip" string to entries.
// Because podman and buildah both store the extra hosts in this format
// we convert it here instead of having to this on the caller side.
func parseExtraHosts(extraHosts []string) (HostEntries, error) {
func parseExtraHosts(extraHosts []string, hostContainersInternalIP string) (HostEntries, error) {
entries := make(HostEntries, 0, len(extraHosts))
for _, entry := range extraHosts {
values := strings.SplitN(entry, ":", 2)
Expand All @@ -243,7 +244,14 @@ func parseExtraHosts(extraHosts []string) (HostEntries, error) {
if values[1] == "" {
return nil, fmt.Errorf("IP address in host entry %q is empty", entry)
}
e := HostEntry{IP: values[1], Names: []string{values[0]}}
ip := values[1]
if values[1] == HostGateway {
if hostContainersInternalIP == "" {
return nil, fmt.Errorf("unable to replace %q of host entry %q: host containers internal IP address is empty", HostGateway, entry)
}
ip = hostContainersInternalIP
}
e := HostEntry{IP: ip, Names: []string{values[0]}}
entries = append(entries, e)
}
return entries, nil
Expand Down
13 changes: 13 additions & 0 deletions libnetwork/etchosts/hosts_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -218,6 +218,13 @@ func TestNew(t *testing.T) {
hostContainersInternal: "10.0.0.1",
expectedTargetFileContent: targetFileContent1 + "10.0.0.1\thost.containers.internal\n",
},
{
name: "with host.containers.internal ip and host-gateway",
baseFileContent: baseFileContent1Spaces,
extraHosts: []string{"gatewayname:host-gateway"},
hostContainersInternal: "10.0.0.1",
expectedTargetFileContent: "10.0.0.1\tgatewayname\n" + targetFileContent1 + "10.0.0.1\thost.containers.internal\n",
},
{
name: "host.containers.internal not added when already present in extra hosts",
baseFileContent: baseFileContent1Spaces,
Expand Down Expand Up @@ -267,6 +274,12 @@ func TestNew(t *testing.T) {
extraHosts: []string{"name"},
wantErrString: "unable to parse host entry \"name\": incorrect format",
},
{
name: "invalid host-gateway",
baseFileContent: baseFileContent1Spaces,
extraHosts: []string{"gatewayname:host-gateway"},
wantErrString: "host containers internal IP address is empty",
},
}

for _, tt := range tests {
Expand Down