Bump moby to 0ede01237c9ab871f1b8db0364427407f3e46541

Includes:

- [client] Remove duplicate NewClient functions
- Add API support for templated secrets and configs
- Adjust minimum API version for templated configs/secrets

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
This commit is contained in:
Sebastiaan van Stijn 2018-02-21 18:14:35 +01:00
parent 939938b976
commit 60930d309c
No known key found for this signature in database
GPG Key ID: 76698F39D527CE8C
8 changed files with 68 additions and 48 deletions

View File

@ -300,12 +300,12 @@ func newHTTPClient(host string, tlsOptions *tlsconfig.Options) (*http.Client, er
Timeout: 30 * time.Second, Timeout: 30 * time.Second,
}).DialContext, }).DialContext,
} }
proto, addr, _, err := client.ParseHost(host) hostURL, err := client.ParseHostURL(host)
if err != nil { if err != nil {
return nil, err return nil, err
} }
sockets.ConfigureTransport(tr, proto, addr) sockets.ConfigureTransport(tr, hostURL.Scheme, hostURL.Host)
return &http.Client{ return &http.Client{
Transport: tr, Transport: tr,

View File

@ -5,7 +5,7 @@ github.com/coreos/etcd v3.2.1
github.com/cpuguy83/go-md2man v1.0.8 github.com/cpuguy83/go-md2man v1.0.8
github.com/davecgh/go-spew 346938d642f2ec3594ed81d874461961cd0faa76 github.com/davecgh/go-spew 346938d642f2ec3594ed81d874461961cd0faa76
github.com/docker/distribution edc3ab29cdff8694dd6feb85cfeb4b5f1b38ed9c github.com/docker/distribution edc3ab29cdff8694dd6feb85cfeb4b5f1b38ed9c
github.com/docker/docker 079ed017b61eb819b8184b90013ce89465d3aaba github.com/docker/docker 0ede01237c9ab871f1b8db0364427407f3e46541
github.com/docker/docker-credential-helpers 3c90bd29a46b943b2a9842987b58fb91a7c1819b github.com/docker/docker-credential-helpers 3c90bd29a46b943b2a9842987b58fb91a7c1819b
# the docker/go package contains a customized version of canonical/json # the docker/go package contains a customized version of canonical/json
# and is used by Notary. The package is periodically rebased on current Go versions. # and is used by Notary. The package is periodically rebased on current Go versions.

View File

@ -3,7 +3,7 @@ package api // import "github.com/docker/docker/api"
// Common constants for daemon and client. // Common constants for daemon and client.
const ( const (
// DefaultVersion of Current REST API // DefaultVersion of Current REST API
DefaultVersion string = "1.36" DefaultVersion string = "1.37"
// NoBaseImageSpecifier is the symbol used by the FROM // NoBaseImageSpecifier is the symbol used by the FROM
// command to specify that no base image is to be used. // command to specify that no base image is to be used.

View File

@ -13,6 +13,10 @@ type Config struct {
type ConfigSpec struct { type ConfigSpec struct {
Annotations Annotations
Data []byte `json:",omitempty"` Data []byte `json:",omitempty"`
// Templating controls whether and how to evaluate the config payload as
// a template. If it is not set, no templating is used.
Templating *Driver `json:",omitempty"`
} }
// ConfigReferenceFileTarget is a file target in a config reference // ConfigReferenceFileTarget is a file target in a config reference

View File

@ -14,6 +14,10 @@ type SecretSpec struct {
Annotations Annotations
Data []byte `json:",omitempty"` Data []byte `json:",omitempty"`
Driver *Driver `json:",omitempty"` // name of the secrets driver used to fetch the secret's value from an external secret store Driver *Driver `json:",omitempty"` // name of the secrets driver used to fetch the secret's value from an external secret store
// Templating controls whether and how to evaluate the secret payload as
// a template. If it is not set, no templating is used.
Templating *Driver `json:",omitempty"`
} }
// SecretReferenceFileTarget is a file target in a secret reference // SecretReferenceFileTarget is a file target in a secret reference

View File

@ -42,8 +42,8 @@ For example, to list running containers (the equivalent of "docker ps"):
package client // import "github.com/docker/docker/client" package client // import "github.com/docker/docker/client"
import ( import (
"errors"
"fmt" "fmt"
"net"
"net/http" "net/http"
"net/url" "net/url"
"os" "os"
@ -56,6 +56,7 @@ import (
"github.com/docker/docker/api/types/versions" "github.com/docker/docker/api/types/versions"
"github.com/docker/go-connections/sockets" "github.com/docker/go-connections/sockets"
"github.com/docker/go-connections/tlsconfig" "github.com/docker/go-connections/tlsconfig"
"github.com/pkg/errors"
"golang.org/x/net/context" "golang.org/x/net/context"
) )
@ -103,18 +104,21 @@ func CheckRedirect(req *http.Request, via []*http.Request) error {
} }
// NewEnvClient initializes a new API client based on environment variables. // NewEnvClient initializes a new API client based on environment variables.
// Use DOCKER_HOST to set the url to the docker server. // See FromEnv for a list of support environment variables.
// Use DOCKER_API_VERSION to set the version of the API to reach, leave empty for latest. //
// Use DOCKER_CERT_PATH to load the TLS certificates from. // Deprecated: use NewClientWithOpts(FromEnv)
// Use DOCKER_TLS_VERIFY to enable or disable TLS verification, off by default.
// deprecated: use NewClientWithOpts(FromEnv)
func NewEnvClient() (*Client, error) { func NewEnvClient() (*Client, error) {
return NewClientWithOpts(FromEnv) return NewClientWithOpts(FromEnv)
} }
// FromEnv enhance the default client with values from environment variables // FromEnv configures the client with values from environment variables.
//
// Supported environment variables:
// DOCKER_HOST to set the url to the docker server.
// DOCKER_API_VERSION to set the version of the API to reach, leave empty for latest.
// DOCKER_CERT_PATH to load the TLS certificates from.
// DOCKER_TLS_VERIFY to enable or disable TLS verification, off by default.
func FromEnv(c *Client) error { func FromEnv(c *Client) error {
var httpClient *http.Client
if dockerCertPath := os.Getenv("DOCKER_CERT_PATH"); dockerCertPath != "" { if dockerCertPath := os.Getenv("DOCKER_CERT_PATH"); dockerCertPath != "" {
options := tlsconfig.Options{ options := tlsconfig.Options{
CAFile: filepath.Join(dockerCertPath, "ca.pem"), CAFile: filepath.Join(dockerCertPath, "ca.pem"),
@ -127,30 +131,58 @@ func FromEnv(c *Client) error {
return err return err
} }
httpClient = &http.Client{ c.client = &http.Client{
Transport: &http.Transport{ Transport: &http.Transport{TLSClientConfig: tlsc},
TLSClientConfig: tlsc,
},
CheckRedirect: CheckRedirect, CheckRedirect: CheckRedirect,
} }
WithHTTPClient(httpClient)(c)
} }
host := os.Getenv("DOCKER_HOST") if host := os.Getenv("DOCKER_HOST"); host != "" {
if host != "" {
// WithHost will create an API client if it doesn't exist
if err := WithHost(host)(c); err != nil { if err := WithHost(host)(c); err != nil {
return err return err
} }
} }
version := os.Getenv("DOCKER_API_VERSION")
if version != "" { if version := os.Getenv("DOCKER_API_VERSION"); version != "" {
c.version = version c.version = version
c.manualOverride = true c.manualOverride = true
} }
return nil return nil
} }
// WithTLSClientConfig applies a tls config to the client transport.
func WithTLSClientConfig(cacertPath, certPath, keyPath string) func(*Client) error {
return func(c *Client) error {
opts := tlsconfig.Options{
CAFile: cacertPath,
CertFile: certPath,
KeyFile: keyPath,
ExclusiveRootPools: true,
}
config, err := tlsconfig.Client(opts)
if err != nil {
return errors.Wrap(err, "failed to create tls config")
}
if transport, ok := c.client.Transport.(*http.Transport); ok {
transport.TLSClientConfig = config
return nil
}
return errors.Errorf("cannot apply tls config to transport: %T", c.client.Transport)
}
}
// WithDialer applies the dialer.DialContext to the client transport. This can be
// used to set the Timeout and KeepAlive settings of the client.
func WithDialer(dialer *net.Dialer) func(*Client) error {
return func(c *Client) error {
if transport, ok := c.client.Transport.(*http.Transport); ok {
transport.DialContext = dialer.DialContext
return nil
}
return errors.Errorf("cannot apply dialer to transport: %T", c.client.Transport)
}
}
// WithVersion overrides the client version with the specified one // WithVersion overrides the client version with the specified one
func WithVersion(version string) func(*Client) error { func WithVersion(version string) func(*Client) error {
return func(c *Client) error { return func(c *Client) error {
@ -159,8 +191,7 @@ func WithVersion(version string) func(*Client) error {
} }
} }
// WithHost overrides the client host with the specified one, creating a new // WithHost overrides the client host with the specified one.
// http client if one doesn't exist
func WithHost(host string) func(*Client) error { func WithHost(host string) func(*Client) error {
return func(c *Client) error { return func(c *Client) error {
hostURL, err := ParseHostURL(host) hostURL, err := ParseHostURL(host)
@ -171,17 +202,10 @@ func WithHost(host string) func(*Client) error {
c.proto = hostURL.Scheme c.proto = hostURL.Scheme
c.addr = hostURL.Host c.addr = hostURL.Host
c.basePath = hostURL.Path c.basePath = hostURL.Path
if c.client == nil {
client, err := defaultHTTPClient(host)
if err != nil {
return err
}
return WithHTTPClient(client)(c)
}
if transport, ok := c.client.Transport.(*http.Transport); ok { if transport, ok := c.client.Transport.(*http.Transport); ok {
return sockets.ConfigureTransport(transport, c.proto, c.addr) return sockets.ConfigureTransport(transport, c.proto, c.addr)
} }
return fmt.Errorf("cannot apply host to http transport") return errors.Errorf("cannot apply host to transport: %T", c.client.Transport)
} }
} }
@ -266,7 +290,7 @@ func defaultHTTPClient(host string) (*http.Client, error) {
// It won't send any version information if the version number is empty. It is // It won't send any version information if the version number is empty. It is
// highly recommended that you set a version or your client may break if the // highly recommended that you set a version or your client may break if the
// server is upgraded. // server is upgraded.
// deprecated: use NewClientWithOpts // Deprecated: use NewClientWithOpts
func NewClient(host string, version string, client *http.Client, httpHeaders map[string]string) (*Client, error) { func NewClient(host string, version string, client *http.Client, httpHeaders map[string]string) (*Client, error) {
return NewClientWithOpts(WithHost(host), WithVersion(version), WithHTTPClient(client), WithHTTPHeaders(httpHeaders)) return NewClientWithOpts(WithHost(host), WithVersion(version), WithHTTPClient(client), WithHTTPHeaders(httpHeaders))
} }
@ -332,17 +356,6 @@ func (cli *Client) DaemonHost() string {
return cli.host return cli.host
} }
// ParseHost parses a url string, validates the strings is a host url, and returns
// the parsed host as: protocol, address, and base path
// Deprecated: use ParseHostURL
func ParseHost(host string) (string, string, string, error) {
hostURL, err := ParseHostURL(host)
if err != nil {
return "", "", "", err
}
return hostURL.Scheme, hostURL.Host, hostURL.Path, nil
}
// ParseHostURL parses a url string, validates the string is a host url, and // ParseHostURL parses a url string, validates the string is a host url, and
// returns the parsed URL // returns the parsed URL
func ParseHostURL(host string) (*url.URL, error) { func ParseHostURL(host string) (*url.URL, error) {
@ -378,6 +391,7 @@ func (cli *Client) CustomHTTPHeaders() map[string]string {
} }
// SetCustomHTTPHeaders that will be set on every HTTP request made by the client. // SetCustomHTTPHeaders that will be set on every HTTP request made by the client.
// Deprecated: use WithHTTPHeaders when creating the client.
func (cli *Client) SetCustomHTTPHeaders(headers map[string]string) { func (cli *Client) SetCustomHTTPHeaders(headers map[string]string) {
cli.customHTTPHeaders = headers cli.customHTTPHeaders = headers
} }

View File

@ -37,6 +37,7 @@ type CommonAPIClient interface {
NegotiateAPIVersion(ctx context.Context) NegotiateAPIVersion(ctx context.Context)
NegotiateAPIVersionPing(types.Ping) NegotiateAPIVersionPing(types.Ping)
DialSession(ctx context.Context, proto string, meta map[string][]string) (net.Conn, error) DialSession(ctx context.Context, proto string, meta map[string][]string) (net.Conn, error)
Close() error
} }
// ContainerAPIClient defines API client methods for the containers // ContainerAPIClient defines API client methods for the containers

View File

@ -123,10 +123,7 @@ func (cli *Client) sendRequest(ctx context.Context, method, path string, query u
if err != nil { if err != nil {
return resp, err return resp, err
} }
if err := cli.checkResponseErr(resp); err != nil { return resp, cli.checkResponseErr(resp)
return resp, err
}
return resp, nil
} }
func (cli *Client) doRequest(ctx context.Context, req *http.Request) (serverResponse, error) { func (cli *Client) doRequest(ctx context.Context, req *http.Request) (serverResponse, error) {