Spencer Smith c63c7f15e2 fix: respect nameservers when using docker cluster
This PR will fix some unexpected user behavior where nameservers were
always getting written to 8.8.8.8,1.1.1.1 for the docker-based talos
clusters. This occurred even when updating the docker daemon's config.
This PR will make the docker provisioner respect the --nameserver flag
and allow that to be used to override the defaults.

Signed-off-by: Spencer Smith <robertspencersmith@gmail.com>
2020-05-15 13:58:30 -07:00

73 lines
1.8 KiB
Go

// This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this
// file, You can obtain one at http://mozilla.org/MPL/2.0/.
// Package docker implements Provisioner via docker.
package docker
import (
"context"
"github.com/docker/docker/client"
"github.com/talos-systems/talos/internal/pkg/provision"
"github.com/talos-systems/talos/pkg/config/types/v1alpha1"
"github.com/talos-systems/talos/pkg/config/types/v1alpha1/generate"
)
type provisioner struct {
client *client.Client
}
// NewProvisioner initializes docker provisioner.
func NewProvisioner(ctx context.Context) (provision.Provisioner, error) {
p := &provisioner{}
var err error
p.client, err = client.NewEnvClient()
if err != nil {
return nil, err
}
return p, nil
}
// Close and release resources.
func (p *provisioner) Close() error {
if p.client != nil {
return p.client.Close()
}
return nil
}
// GenOptions provides a list of additional config generate options.
func (p *provisioner) GenOptions(networkReq provision.NetworkRequest) []generate.GenOption {
ret := []generate.GenOption{
generate.WithPersist(false),
}
if len(networkReq.Nameservers) > 0 {
nameservers := make([]string, len(networkReq.Nameservers))
for i := range nameservers {
nameservers[i] = networkReq.Nameservers[i].String()
}
ret = append(ret, generate.WithNetworkConfig(
&v1alpha1.NetworkConfig{
NameServers: nameservers,
}),
)
}
return ret
}
// GetLoadBalancers returns internal/external loadbalancer endpoints.
func (p *provisioner) GetLoadBalancers(networkReq provision.NetworkRequest) (internalEndpoint, externalEndpoint string) {
// docker doesn't provide internal LB, so return empty string
// external LB is always localhost where docker exposes ports
return "", "127.0.0.1"
}