Files
docker-cli/components/engine/vendor/github.com/docker/swarmkit/template/getter.go
Aaron Lehmann 61e4b54502 Vendor swarmkit 79381d0
Signed-off-by: Aaron Lehmann <aaron.lehmann@docker.com>
Upstream-commit: 79b940feee9cf18893ead7269cfd59ec41bd7297
Component: engine
2017-06-21 15:32:53 -07:00

99 lines
2.6 KiB
Go

package template
import (
"github.com/docker/swarmkit/agent/exec"
"github.com/docker/swarmkit/api"
"github.com/pkg/errors"
)
type templatedSecretGetter struct {
dependencies exec.DependencyGetter
t *api.Task
}
// NewTemplatedSecretGetter returns a SecretGetter that evaluates templates.
func NewTemplatedSecretGetter(dependencies exec.DependencyGetter, t *api.Task) exec.SecretGetter {
return templatedSecretGetter{dependencies: dependencies, t: t}
}
func (t templatedSecretGetter) Get(secretID string) (*api.Secret, error) {
if t.dependencies == nil {
return nil, errors.New("no secret provider available")
}
secrets := t.dependencies.Secrets()
if secrets == nil {
return nil, errors.New("no secret provider available")
}
secret, err := secrets.Get(secretID)
if err != nil {
return secret, err
}
newSpec, err := ExpandSecretSpec(secret, t.t, t.dependencies)
if err != nil {
return secret, errors.Wrapf(err, "failed to expand templated secret %s", secretID)
}
secretCopy := *secret
secretCopy.Spec = *newSpec
return &secretCopy, nil
}
type templatedConfigGetter struct {
dependencies exec.DependencyGetter
t *api.Task
}
// NewTemplatedConfigGetter returns a ConfigGetter that evaluates templates.
func NewTemplatedConfigGetter(dependencies exec.DependencyGetter, t *api.Task) exec.ConfigGetter {
return templatedConfigGetter{dependencies: dependencies, t: t}
}
func (t templatedConfigGetter) Get(configID string) (*api.Config, error) {
if t.dependencies == nil {
return nil, errors.New("no config provider available")
}
configs := t.dependencies.Configs()
if configs == nil {
return nil, errors.New("no config provider available")
}
config, err := configs.Get(configID)
if err != nil {
return config, err
}
newSpec, err := ExpandConfigSpec(config, t.t, t.dependencies)
if err != nil {
return config, errors.Wrapf(err, "failed to expand templated config %s", configID)
}
configCopy := *config
configCopy.Spec = *newSpec
return &configCopy, nil
}
type templatedDependencyGetter struct {
secrets exec.SecretGetter
configs exec.ConfigGetter
}
// NewTemplatedDependencyGetter returns a DependencyGetter that evaluates templates.
func NewTemplatedDependencyGetter(dependencies exec.DependencyGetter, t *api.Task) exec.DependencyGetter {
return templatedDependencyGetter{
secrets: NewTemplatedSecretGetter(dependencies, t),
configs: NewTemplatedConfigGetter(dependencies, t),
}
}
func (t templatedDependencyGetter) Secrets() exec.SecretGetter {
return t.secrets
}
func (t templatedDependencyGetter) Configs() exec.ConfigGetter {
return t.configs
}