diff options
Diffstat (limited to 'pkg')
-rw-r--r-- | pkg/api/handlers/libpod/secrets.go | 16 | ||||
-rw-r--r-- | pkg/bindings/internal/util/util.go | 4 | ||||
-rw-r--r-- | pkg/bindings/secrets/types.go | 5 | ||||
-rw-r--r-- | pkg/bindings/secrets/types_create_options.go | 36 | ||||
-rw-r--r-- | pkg/domain/entities/secrets.go | 3 | ||||
-rw-r--r-- | pkg/domain/infra/abi/secrets.go | 26 | ||||
-rw-r--r-- | pkg/domain/infra/tunnel/secrets.go | 10 |
7 files changed, 76 insertions, 24 deletions
diff --git a/pkg/api/handlers/libpod/secrets.go b/pkg/api/handlers/libpod/secrets.go index e7f4397ea..7086d9e38 100644 --- a/pkg/api/handlers/libpod/secrets.go +++ b/pkg/api/handlers/libpod/secrets.go @@ -1,7 +1,9 @@ package libpod import ( + "encoding/json" "net/http" + "reflect" "github.com/containers/podman/v3/libpod" "github.com/containers/podman/v3/pkg/api/handlers/utils" @@ -16,9 +18,17 @@ func CreateSecret(w http.ResponseWriter, r *http.Request) { runtime = r.Context().Value("runtime").(*libpod.Runtime) decoder = r.Context().Value("decoder").(*schema.Decoder) ) + + decoder.RegisterConverter(map[string]string{}, func(str string) reflect.Value { + res := make(map[string]string) + json.Unmarshal([]byte(str), &res) + return reflect.ValueOf(res) + }) + query := struct { - Name string `schema:"name"` - Driver string `schema:"driver"` + Name string `schema:"name"` + Driver string `schema:"driver"` + DriverOpts map[string]string `schema:"driveropts"` }{ // override any golang type defaults } @@ -28,7 +38,9 @@ func CreateSecret(w http.ResponseWriter, r *http.Request) { errors.Wrapf(err, "failed to parse parameters for %s", r.URL.String())) return } + opts.Driver = query.Driver + opts.DriverOpts = query.DriverOpts ic := abi.ContainerEngine{Libpod: runtime} report, err := ic.SecretCreate(r.Context(), query.Name, r.Body, opts) diff --git a/pkg/bindings/internal/util/util.go b/pkg/bindings/internal/util/util.go index c1961308e..ef93d6e25 100644 --- a/pkg/bindings/internal/util/util.go +++ b/pkg/bindings/internal/util/util.go @@ -85,10 +85,10 @@ func ToParams(o interface{}) (url.Values, error) { } } case f.Kind() == reflect.Map: - lowerCaseKeys := make(map[string][]string) + lowerCaseKeys := make(map[string]interface{}) iter := f.MapRange() for iter.Next() { - lowerCaseKeys[iter.Key().Interface().(string)] = iter.Value().Interface().([]string) + lowerCaseKeys[iter.Key().Interface().(string)] = iter.Value().Interface() } s, err := json.MarshalToString(lowerCaseKeys) if err != nil { diff --git a/pkg/bindings/secrets/types.go b/pkg/bindings/secrets/types.go index a98e894dc..a64dea1b4 100644 --- a/pkg/bindings/secrets/types.go +++ b/pkg/bindings/secrets/types.go @@ -18,6 +18,7 @@ type RemoveOptions struct { //go:generate go run ../generator/generator.go CreateOptions // CreateOptions are optional options for Creating secrets type CreateOptions struct { - Driver *string - Name *string + Name *string + Driver *string + DriverOpts map[string]string } diff --git a/pkg/bindings/secrets/types_create_options.go b/pkg/bindings/secrets/types_create_options.go index ea5bd3039..28d0c4e83 100644 --- a/pkg/bindings/secrets/types_create_options.go +++ b/pkg/bindings/secrets/types_create_options.go @@ -20,6 +20,22 @@ func (o *CreateOptions) ToParams() (url.Values, error) { return util.ToParams(o) } +// WithName +func (o *CreateOptions) WithName(value string) *CreateOptions { + v := &value + o.Name = v + return o +} + +// GetName +func (o *CreateOptions) GetName() string { + var name string + if o.Name == nil { + return name + } + return *o.Name +} + // WithDriver func (o *CreateOptions) WithDriver(value string) *CreateOptions { v := &value @@ -36,18 +52,18 @@ func (o *CreateOptions) GetDriver() string { return *o.Driver } -// WithName -func (o *CreateOptions) WithName(value string) *CreateOptions { - v := &value - o.Name = v +// WithDriverOpts +func (o *CreateOptions) WithDriverOpts(value map[string]string) *CreateOptions { + v := value + o.DriverOpts = v return o } -// GetName -func (o *CreateOptions) GetName() string { - var name string - if o.Name == nil { - return name +// GetDriverOpts +func (o *CreateOptions) GetDriverOpts() map[string]string { + var driverOpts map[string]string + if o.DriverOpts == nil { + return driverOpts } - return *o.Name + return o.DriverOpts } diff --git a/pkg/domain/entities/secrets.go b/pkg/domain/entities/secrets.go index 8ede981da..56a1465b7 100644 --- a/pkg/domain/entities/secrets.go +++ b/pkg/domain/entities/secrets.go @@ -11,7 +11,8 @@ type SecretCreateReport struct { } type SecretCreateOptions struct { - Driver string + Driver string + DriverOpts map[string]string } type SecretListRequest struct { diff --git a/pkg/domain/infra/abi/secrets.go b/pkg/domain/infra/abi/secrets.go index 1e1cbc70f..0bdb4ce60 100644 --- a/pkg/domain/infra/abi/secrets.go +++ b/pkg/domain/infra/abi/secrets.go @@ -17,15 +17,30 @@ func (ic *ContainerEngine) SecretCreate(ctx context.Context, name string, reader if err != nil { return nil, err } - driverOptions := make(map[string]string) + // set defaults from config for the case they are not set by an upper layer + // (-> i.e. tests that talk directly to the api) + cfg, err := ic.Libpod.GetConfig() + if err != nil { + return nil, err + } if options.Driver == "" { - options.Driver = "file" + options.Driver = cfg.Secrets.Driver + } + if len(options.DriverOpts) == 0 { + options.DriverOpts = cfg.Secrets.Opts + } + if options.DriverOpts == nil { + options.DriverOpts = make(map[string]string) } + if options.Driver == "file" { - driverOptions["path"] = filepath.Join(secretsPath, "filedriver") + if _, ok := options.DriverOpts["path"]; !ok { + options.DriverOpts["path"] = filepath.Join(secretsPath, "filedriver") + } } - secretID, err := manager.Store(name, data, options.Driver, driverOptions) + + secretID, err := manager.Store(name, data, options.Driver, options.DriverOpts) if err != nil { return nil, err } @@ -58,7 +73,8 @@ func (ic *ContainerEngine) SecretInspect(ctx context.Context, nameOrIDs []string Spec: entities.SecretSpec{ Name: secret.Name, Driver: entities.SecretDriverSpec{ - Name: secret.Driver, + Name: secret.Driver, + Options: secret.DriverOptions, }, }, } diff --git a/pkg/domain/infra/tunnel/secrets.go b/pkg/domain/infra/tunnel/secrets.go index 1153f490e..ecbb80931 100644 --- a/pkg/domain/infra/tunnel/secrets.go +++ b/pkg/domain/infra/tunnel/secrets.go @@ -11,8 +11,14 @@ import ( ) func (ic *ContainerEngine) SecretCreate(ctx context.Context, name string, reader io.Reader, options entities.SecretCreateOptions) (*entities.SecretCreateReport, error) { - opts := new(secrets.CreateOptions).WithDriver(options.Driver).WithName(name) - created, _ := secrets.Create(ic.ClientCtx, reader, opts) + opts := new(secrets.CreateOptions). + WithDriver(options.Driver). + WithDriverOpts(options.DriverOpts). + WithName(name) + created, err := secrets.Create(ic.ClientCtx, reader, opts) + if err != nil { + return nil, err + } return created, nil } |