@@ -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