Skip to content

Commit b5c03a7

Browse files
committed
fix: docker talosctl cluster create provisioner
Recent Docker versions seem to have changed the API in the way container IP addresses are reported. Also fix running Talos 1.3 image under talosctl 1.4. Signed-off-by: Andrey Smirnov <andrey.smirnov@talos-systems.com>
1 parent 6e8f135 commit b5c03a7

File tree

2 files changed

+21
-5
lines changed

2 files changed

+21
-5
lines changed

pkg/provision/providers/docker/node.go

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,8 @@ func (p *provisioner) createNode(ctx context.Context, clusterReq provision.Clust
101101
})
102102
}
103103

104-
for _, path := range append(constants.Overlays, "/var", "/system/state") {
104+
// constants.UdevDir is in the list to support pre-1.4 Talos versions which had it in constants.Overlays
105+
for _, path := range append(constants.Overlays, constants.UdevDir, "/var", "/system/state") {
105106
mounts = append(mounts, mount.Mount{
106107
Type: mount.TypeVolume,
107108
Target: path,
@@ -182,9 +183,19 @@ func (p *provisioner) createNode(ctx context.Context, clusterReq provision.Clust
182183
}
183184

184185
// Get the container's IP address.
185-
addr, err := netip.ParseAddr(info.NetworkSettings.Networks[clusterReq.Network.Name].IPAddress)
186-
if err != nil {
187-
return provision.NodeInfo{}, err
186+
var addr netip.Addr
187+
188+
if network, ok := info.NetworkSettings.Networks[clusterReq.Network.Name]; ok {
189+
ip := network.IPAddress
190+
191+
if ip == "" && network.IPAMConfig != nil {
192+
ip = network.IPAMConfig.IPv4Address
193+
}
194+
195+
addr, err = netip.ParseAddr(ip)
196+
if err != nil {
197+
return provision.NodeInfo{}, err
198+
}
188199
}
189200

190201
nodeInfo := provision.NodeInfo{

pkg/provision/providers/docker/reflect.go

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,12 @@ func (p *provisioner) Reflect(ctx context.Context, clusterName, stateDirectory s
7171
var ips []netip.Addr
7272

7373
if network, ok := node.NetworkSettings.Networks[res.clusterInfo.Network.Name]; ok {
74-
addr, err := netip.ParseAddr(network.IPAddress)
74+
ip := network.IPAddress
75+
if ip == "" && network.IPAMConfig != nil {
76+
ip = network.IPAMConfig.IPv4Address
77+
}
78+
79+
addr, err := netip.ParseAddr(ip)
7580
if err != nil {
7681
return nil, err
7782
}

0 commit comments

Comments
 (0)