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{}
|
extraHosts := map[string]*string{}
|
||||||
if s.Build.ExtraHosts != nil {
|
if s.Build.ExtraHosts != nil {
|
||||||
for k, v := range s.Build.ExtraHosts {
|
for k, v := range s.Build.ExtraHosts {
|
||||||
for _, ip := range v {
|
vv := strings.Join(v, ",")
|
||||||
vv := ip
|
extraHosts[k] = &vv
|
||||||
extraHosts[k] = &vv
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -34,6 +34,7 @@ services:
|
||||||
- type=local,dest=path/to/cache
|
- type=local,dest=path/to/cache
|
||||||
extra_hosts:
|
extra_hosts:
|
||||||
- "somehost:162.242.195.82"
|
- "somehost:162.242.195.82"
|
||||||
|
- "somehost:162.242.195.83"
|
||||||
- "myhostv6:::1"
|
- "myhostv6:::1"
|
||||||
ssh:
|
ssh:
|
||||||
- key=/path/to/key
|
- key=/path/to/key
|
||||||
|
|
@ -79,7 +80,7 @@ secrets:
|
||||||
require.Equal(t, ptrstr("123"), c.Targets[1].Args["buildno"])
|
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,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, []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, "none", *c.Targets[1].NetworkMode)
|
||||||
require.Equal(t, []string{"default", "key=/path/to/key"}, stringify(c.Targets[1].SSH))
|
require.Equal(t, []string{"default", "key=/path/to/key"}, stringify(c.Targets[1].SSH))
|
||||||
require.Equal(t, []string{
|
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
|
// If the IP Address is a "host-gateway", replace this value with the
|
||||||
// IP address provided by the worker's label.
|
// IP address provided by the worker's label.
|
||||||
|
var ips []string
|
||||||
if ip == mobyHostGatewayName {
|
if ip == mobyHostGatewayName {
|
||||||
hgip, err := nodeDriver.HostGatewayIP(ctx)
|
hgip, err := nodeDriver.HostGatewayIP(ctx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", errors.Wrap(err, "unable to derive the IP value for host-gateway")
|
return "", errors.Wrap(err, "unable to derive the IP value for host-gateway")
|
||||||
}
|
}
|
||||||
ip = hgip.String()
|
ips = append(ips, hgip.String())
|
||||||
} else {
|
} else {
|
||||||
// If the address is enclosed in square brackets, extract it (for IPv6, but
|
for _, v := range strings.Split(ip, ",") {
|
||||||
// permit it for IPv4 as well; we don't know the address family here, but it's
|
// If the address is enclosed in square brackets, extract it
|
||||||
// unambiguous).
|
// (for IPv6, but permit it for IPv4 as well; we don't know the
|
||||||
if len(ip) > 2 && ip[0] == '[' && ip[len(ip)-1] == ']' {
|
// address family here, but it's unambiguous).
|
||||||
ip = ip[1 : len(ip)-1]
|
if len(v) > 2 && v[0] == '[' && v[len(v)-1] == ']' {
|
||||||
}
|
v = v[1 : len(v)-1]
|
||||||
if net.ParseIP(ip) == nil {
|
}
|
||||||
return "", errors.Errorf("invalid host %s", h)
|
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
|
return strings.Join(hosts, ","), nil
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -72,6 +72,11 @@ func TestToBuildkitExtraHosts(t *testing.T) {
|
||||||
doc: "IPv6 localhost, non-canonical, eq sep",
|
doc: "IPv6 localhost, non-canonical, eq sep",
|
||||||
input: []string{`ipv6local=0:0:0:0:0:0:0:1`},
|
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",
|
doc: "IPv6 localhost, non-canonical, eq sep, brackets",
|
||||||
input: []string{`ipv6local=[0:0:0:0:0:0:0:1]`},
|
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(`
|
dockerfile := []byte(`
|
||||||
FROM busybox
|
FROM busybox
|
||||||
RUN cat /etc/hosts | grep myhost | grep 1.2.3.4
|
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(`
|
bakefile := []byte(`
|
||||||
target "default" {
|
target "default" {
|
||||||
extra-hosts = {
|
extra-hosts = {
|
||||||
myhost = "1.2.3.4"
|
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,
|
testBuildDefaultLoad,
|
||||||
testBuildCall,
|
testBuildCall,
|
||||||
testCheckCallOutput,
|
testCheckCallOutput,
|
||||||
|
testBuildExtraHosts,
|
||||||
}
|
}
|
||||||
|
|
||||||
func testBuild(t *testing.T, sb integration.Sandbox) {
|
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 {
|
func createTestProject(t *testing.T) string {
|
||||||
dockerfile := []byte(`
|
dockerfile := []byte(`
|
||||||
FROM busybox:latest AS base
|
FROM busybox:latest AS base
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue