1234567891011121314151617181920212223242526272829303132333435363738 |
- package shimopts
- import (
- runhcsoptions "github.com/Microsoft/hcsshim/cmd/containerd-shim-runhcs-v1/options"
- runtimeoptions "github.com/containerd/containerd/pkg/runtimeoptions/v1"
- "github.com/containerd/containerd/plugin"
- runcoptions "github.com/containerd/containerd/runtime/v2/runc/options"
- "github.com/pelletier/go-toml"
- )
- // Generate converts opts into a runtime options value for the runtimeType which
- // can be passed into containerd.
- func Generate(runtimeType string, opts map[string]interface{}) (interface{}, error) {
- // This is horrible, but we have no other choice. The containerd client
- // can only handle options values which can be marshaled into a
- // typeurl.Any. And we're in good company: cri-containerd handles shim
- // options in the same way.
- var out interface{}
- switch runtimeType {
- case plugin.RuntimeRuncV1, plugin.RuntimeRuncV2:
- out = &runcoptions.Options{}
- case "io.containerd.runhcs.v1":
- out = &runhcsoptions.Options{}
- default:
- out = &runtimeoptions.Options{}
- }
- // We can't use mergo.Map as it is too strict about type-assignability
- // with numeric types.
- tree, err := toml.TreeFromMap(opts)
- if err != nil {
- return nil, err
- }
- if err := tree.Unmarshal(out); err != nil {
- return nil, err
- }
- return out, nil
- }
|