mirror of https://github.com/docker/buildx.git
bake: multi ips support for extra hosts
Signed-off-by: CrazyMax <1951866+crazy-max@users.noreply.github.com>
(cherry picked from commit 989978a42b)
This commit is contained in:
parent
51db06ee9a
commit
35d10a9655
|
|
@ -125,10 +125,8 @@ func ParseCompose(cfgs []composetypes.ConfigFile, envs map[string]string) (*Conf
|
|||
extraHosts := map[string]*string{}
|
||||
if s.Build.ExtraHosts != nil {
|
||||
for k, v := range s.Build.ExtraHosts {
|
||||
for _, ip := range v {
|
||||
vv := ip
|
||||
extraHosts[k] = &vv
|
||||
}
|
||||
vv := strings.Join(v, ",")
|
||||
extraHosts[k] = &vv
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -34,6 +34,7 @@ services:
|
|||
- type=local,dest=path/to/cache
|
||||
extra_hosts:
|
||||
- "somehost:162.242.195.82"
|
||||
- "somehost:162.242.195.83"
|
||||
- "myhostv6:::1"
|
||||
ssh:
|
||||
- key=/path/to/key
|
||||
|
|
@ -79,7 +80,7 @@ secrets:
|
|||
require.Equal(t, ptrstr("123"), c.Targets[1].Args["buildno"])
|
||||
require.Equal(t, []string{"type=local,src=path/to/cache"}, stringify(c.Targets[1].CacheFrom))
|
||||
require.Equal(t, []string{"type=local,dest=path/to/cache"}, stringify(c.Targets[1].CacheTo))
|
||||
require.Equal(t, map[string]*string{"myhostv6": ptrstr("::1"), "somehost": ptrstr("162.242.195.82")}, c.Targets[1].ExtraHosts)
|
||||
require.Equal(t, map[string]*string{"myhostv6": ptrstr("::1"), "somehost": ptrstr("162.242.195.82,162.242.195.83")}, c.Targets[1].ExtraHosts)
|
||||
require.Equal(t, "none", *c.Targets[1].NetworkMode)
|
||||
require.Equal(t, []string{"default", "key=/path/to/key"}, stringify(c.Targets[1].SSH))
|
||||
require.Equal(t, []string{
|
||||
|
|
|
|||
|
|
@ -77,24 +77,30 @@ func toBuildkitExtraHosts(ctx context.Context, inp []string, nodeDriver *driver.
|
|||
}
|
||||
// If the IP Address is a "host-gateway", replace this value with the
|
||||
// IP address provided by the worker's label.
|
||||
var ips []string
|
||||
if ip == mobyHostGatewayName {
|
||||
hgip, err := nodeDriver.HostGatewayIP(ctx)
|
||||
if err != nil {
|
||||
return "", errors.Wrap(err, "unable to derive the IP value for host-gateway")
|
||||
}
|
||||
ip = hgip.String()
|
||||
ips = append(ips, hgip.String())
|
||||
} else {
|
||||
// If the address is enclosed in square brackets, extract it (for IPv6, but
|
||||
// permit it for IPv4 as well; we don't know the address family here, but it's
|
||||
// unambiguous).
|
||||
if len(ip) > 2 && ip[0] == '[' && ip[len(ip)-1] == ']' {
|
||||
ip = ip[1 : len(ip)-1]
|
||||
}
|
||||
if net.ParseIP(ip) == nil {
|
||||
return "", errors.Errorf("invalid host %s", h)
|
||||
for _, v := range strings.Split(ip, ",") {
|
||||
// If the address is enclosed in square brackets, extract it
|
||||
// (for IPv6, but permit it for IPv4 as well; we don't know the
|
||||
// address family here, but it's unambiguous).
|
||||
if len(v) > 2 && v[0] == '[' && v[len(v)-1] == ']' {
|
||||
v = v[1 : len(v)-1]
|
||||
}
|
||||
if net.ParseIP(v) == nil {
|
||||
return "", errors.Errorf("invalid host %s", h)
|
||||
}
|
||||
ips = append(ips, v)
|
||||
}
|
||||
}
|
||||
hosts = append(hosts, host+"="+ip)
|
||||
for _, v := range ips {
|
||||
hosts = append(hosts, host+"="+v)
|
||||
}
|
||||
}
|
||||
return strings.Join(hosts, ","), nil
|
||||
}
|
||||
|
|
|
|||
|
|
@ -72,6 +72,11 @@ func TestToBuildkitExtraHosts(t *testing.T) {
|
|||
doc: "IPv6 localhost, non-canonical, eq sep",
|
||||
input: []string{`ipv6local=0:0:0:0:0:0:0:1`},
|
||||
},
|
||||
{
|
||||
doc: "Multi IPs",
|
||||
input: []string{`myhost=162.242.195.82,162.242.195.83`},
|
||||
expectedOut: `myhost=162.242.195.82,myhost=162.242.195.83`,
|
||||
},
|
||||
{
|
||||
doc: "IPv6 localhost, non-canonical, eq sep, brackets",
|
||||
input: []string{`ipv6local=[0:0:0:0:0:0:0:1]`},
|
||||
|
|
|
|||
|
|
@ -2167,11 +2167,14 @@ func testBakeExtraHosts(t *testing.T, sb integration.Sandbox) {
|
|||
dockerfile := []byte(`
|
||||
FROM busybox
|
||||
RUN cat /etc/hosts | grep myhost | grep 1.2.3.4
|
||||
RUN cat /etc/hosts | grep myhostmulti | grep 162.242.195.81
|
||||
RUN cat /etc/hosts | grep myhostmulti | grep 162.242.195.82
|
||||
`)
|
||||
bakefile := []byte(`
|
||||
target "default" {
|
||||
extra-hosts = {
|
||||
myhost = "1.2.3.4"
|
||||
myhostmulti = "162.242.195.81,162.242.195.82"
|
||||
}
|
||||
}
|
||||
`)
|
||||
|
|
|
|||
|
|
@ -77,6 +77,7 @@ var buildTests = []func(t *testing.T, sb integration.Sandbox){
|
|||
testBuildDefaultLoad,
|
||||
testBuildCall,
|
||||
testCheckCallOutput,
|
||||
testBuildExtraHosts,
|
||||
}
|
||||
|
||||
func testBuild(t *testing.T, sb integration.Sandbox) {
|
||||
|
|
@ -1322,6 +1323,24 @@ cOpy Dockerfile .
|
|||
})
|
||||
}
|
||||
|
||||
func testBuildExtraHosts(t *testing.T, sb integration.Sandbox) {
|
||||
dockerfile := []byte(`
|
||||
FROM busybox
|
||||
RUN cat /etc/hosts | grep myhost | grep 1.2.3.4
|
||||
RUN cat /etc/hosts | grep myhostmulti | grep 162.242.195.81
|
||||
RUN cat /etc/hosts | grep myhostmulti | grep 162.242.195.82
|
||||
`)
|
||||
dir := tmpdir(t, fstest.CreateFile("Dockerfile", dockerfile, 0600))
|
||||
cmd := buildxCmd(sb, withArgs("build",
|
||||
"--add-host=myhost=1.2.3.4",
|
||||
"--add-host=myhostmulti=162.242.195.81",
|
||||
"--add-host=myhostmulti=162.242.195.82",
|
||||
"--output=type=cacheonly", dir),
|
||||
)
|
||||
out, err := cmd.CombinedOutput()
|
||||
require.NoError(t, err, string(out))
|
||||
}
|
||||
|
||||
func createTestProject(t *testing.T) string {
|
||||
dockerfile := []byte(`
|
||||
FROM busybox:latest AS base
|
||||
|
|
|
|||
Loading…
Reference in New Issue