@@ -32,16 +32,18 @@ type Restarter interface {
3232}
3333
3434type Config struct {
35- hostFs afero.Fs
36- configPath string
37- restarter Restarter
35+ hostFs afero.Fs
36+ configPath string
37+ restarter Restarter
38+ runtimeOptions map [string ]string
3839}
3940
40- func NewConfig (hostFs afero.Fs , configPath string , restarter Restarter ) * Config {
41+ func NewConfig (hostFs afero.Fs , configPath string , restarter Restarter , runtimeOptions map [ string ] string ) * Config {
4142 return & Config {
42- hostFs : hostFs ,
43- configPath : configPath ,
44- restarter : restarter ,
43+ hostFs : hostFs ,
44+ configPath : configPath ,
45+ restarter : restarter ,
46+ runtimeOptions : runtimeOptions ,
4547 }
4648}
4749
@@ -61,7 +63,7 @@ func (c *Config) AddRuntime(shimPath string) error {
6163 return nil
6264 }
6365
64- cfg := generateConfig (shimPath , runtimeName , data )
66+ cfg := generateConfig (shimPath , runtimeName , c . runtimeOptions , data )
6567
6668 // Open file in append mode
6769 file , err := c .hostFs .OpenFile (c .configPath , os .O_APPEND | os .O_WRONLY , 0o644 ) //nolint:mnd // file permissions
@@ -95,7 +97,7 @@ func (c *Config) RemoveRuntime(shimPath string) (changed bool, err error) {
9597 return false , nil
9698 }
9799
98- cfg := generateConfig (shimPath , runtimeName , data )
100+ cfg := generateConfig (shimPath , runtimeName , c . runtimeOptions , data )
99101
100102 // Convert the file data to a string and replace the target string with an empty string.
101103 modifiedData := strings .ReplaceAll (string (data ), cfg , "" )
@@ -113,17 +115,27 @@ func (c *Config) RestartRuntime() error {
113115 return c .restarter .Restart ()
114116}
115117
116- func generateConfig (shimPath string , runtimeName string , configData []byte ) string {
118+ func generateConfig (shimPath string , runtimeName string , runtimeOptions map [ string ] string , configData []byte ) string {
117119 // Config domain for containerd 1.0 (config version 2)
118120 domain := "io.containerd.grpc.v1.cri"
119121 if strings .Contains (string (configData ), "version = 3" ) {
120122 // Config domain for containerd 2.0 (config version 3)
121123 domain = "io.containerd.cri.v1.runtime"
122124 }
123125
124- return fmt .Sprintf (`
126+ runtimeConfiguration := fmt .Sprintf (`
125127# RCM runtime config for %s
126128[plugins."%s".containerd.runtimes.%s]
127129runtime_type = "%s"
128130` , runtimeName , domain , runtimeName , shimPath )
131+ // Add runtime options if any are provided
132+ if len (runtimeOptions ) > 0 {
133+ options := fmt .Sprintf (`[plugins."%s".containerd.runtimes."%s".options]` , domain , runtimeName )
134+ for k , v := range runtimeOptions {
135+ options += fmt .Sprintf (`
136+ %s = "%s"\n` , k , v )
137+ }
138+ runtimeConfiguration += "\n " + options
139+ }
140+ return runtimeConfiguration
129141}
0 commit comments