diff --git a/loader/loader_test.go b/loader/loader_test.go index a4b5dd02..f51c0e8a 100644 --- a/loader/loader_test.go +++ b/loader/loader_test.go @@ -1484,6 +1484,67 @@ networks: assert.DeepEqual(t, config, expected, cmpopts.EquateEmpty()) } +func TestLoadNetworkLinkLocalIPs(t *testing.T) { + config, err := loadYAML(` +services: + foo: + image: alpine + networks: + network1: + ipv4_address: 10.1.0.100 + ipv6_address: 2001:db8:0:1::100 + link_local_ips: + - fe80::1:95ff:fe20:100 +networks: + network1: + driver: bridge + enable_ipv6: true + name: network1 + ipam: + config: + - subnet: 10.1.0.0/16 + - subnet: 2001:db8:0:1::/64 +`) + assert.NilError(t, err) + + workingDir, err := os.Getwd() + assert.NilError(t, err) + expected := &types.Project{ + Name: "", + WorkingDir: workingDir, + Services: types.Services{ + { + Name: "foo", + Image: "alpine", + Scale: 1, + Networks: map[string]*types.ServiceNetworkConfig{ + "network1": { + Ipv4Address: "10.1.0.100", + Ipv6Address: "2001:db8:0:1::100", + LinkLocalIPs: []string{ + "fe80::1:95ff:fe20:100", + }, + }, + }, + }, + }, + Networks: map[string]types.NetworkConfig{ + "network1": { + Name: "network1", + Driver: "bridge", + EnableIPv6: true, + Ipam: types.IPAMConfig{ + Config: []*types.IPAMPool{ + {Subnet: "10.1.0.0/16"}, + {Subnet: "2001:db8:0:1::/64"}, + }, + }, + }, + }, + } + assert.DeepEqual(t, config, expected, cmpopts.EquateEmpty()) +} + func TestLoadInit(t *testing.T) { booleanTrue := true booleanFalse := false diff --git a/types/types.go b/types/types.go index 1b62505c..fc5ac956 100644 --- a/types/types.go +++ b/types/types.go @@ -617,10 +617,11 @@ type PlacementPreferences struct { // ServiceNetworkConfig is the network configuration for a service type ServiceNetworkConfig struct { - Priority int `yaml:",omitempty" json:"priotirt,omitempty"` - Aliases []string `yaml:",omitempty" json:"aliases,omitempty"` - Ipv4Address string `mapstructure:"ipv4_address" yaml:"ipv4_address,omitempty" json:"ipv4_address,omitempty"` - Ipv6Address string `mapstructure:"ipv6_address" yaml:"ipv6_address,omitempty" json:"ipv6_address,omitempty"` + Priority int `yaml:",omitempty" json:"priority,omitempty"` + Aliases []string `yaml:",omitempty" json:"aliases,omitempty"` + Ipv4Address string `mapstructure:"ipv4_address" yaml:"ipv4_address,omitempty" json:"ipv4_address,omitempty"` + Ipv6Address string `mapstructure:"ipv6_address" yaml:"ipv6_address,omitempty" json:"ipv6_address,omitempty"` + LinkLocalIPs []string `mapstructure:"link_local_ips" yaml:"link_local_ips,omitempty" json:"link_local_ips,omitempty"` Extensions map[string]interface{} `yaml:",inline" json:"-"` }