Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
songlinfeng
container-toolkit
Commits
4b476de4
Commit
4b476de4
authored
Oct 11, 2025
by
songlf
Browse files
add engine but cdi is commented out
parent
106d6282
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
185 additions
and
0 deletions
+185
-0
cmd/dcu-ctk/runtime/engine/docker/docker.go
cmd/dcu-ctk/runtime/engine/docker/docker.go
+161
-0
cmd/dcu-ctk/runtime/engine/engine.go
cmd/dcu-ctk/runtime/engine/engine.go
+24
-0
No files found.
cmd/dcu-ctk/runtime/engine/docker/docker.go
0 → 100644
View file @
4b476de4
/**
# Copyright (c) Advanced Micro Devices, Inc. All rights reserved.
#
# Licensed under the Apache License, Version 2.0 (the \"License\");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an \"AS IS\" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
**/
package
docker
import
(
"bytes"
"encoding/json"
"fmt"
"os"
)
const
(
runtimesKey
=
"runtimes"
defaultRuntimeKey
=
"default-runtime"
featuresKey
=
"features"
//defaultCDISpecPath = "/etc/cdi"
)
type
dockerConfig
map
[
string
]
interface
{}
func
New
(
path
string
)
(
*
dockerConfig
,
error
){
return
loadConfigFile
(
path
)
}
func
loadConfigFile
(
path
string
)
(
*
dockerConfig
,
error
)
{
//check if the file exists
f
,
err
:=
os
.
Stat
(
path
)
if
os
.
IsExist
(
err
)
&&
f
.
IsDir
(){
return
nil
,
fmt
.
Errorf
(
"file path is a directory"
)
}
config
:=
dockerConfig
{}
if
os
.
IsNotExist
(
err
)
{
//return empty config
return
&
config
,
nil
}
fmt
.
Printf
(
"Loading configuration from: %v
\n
"
,
path
)
readB
,
err
:=
os
.
ReadFile
(
path
)
if
err
!=
nil
{
return
nil
,
fmt
.
Errorf
(
"error reading configuration file: %v | err: %v"
,
path
,
err
)
}
reader
:=
bytes
.
NewReader
(
readB
)
err
=
json
.
NewDecoder
(
reader
)
.
Decode
(
&
config
)
if
err
!=
nil
{
return
nil
,
fmt
.
Errorf
(
"error decoding configuration file: %v | err: %v"
,
path
,
err
)
}
return
&
config
,
nil
}
func
(
d
*
dockerConfig
)
ConfigRuntime
(
name
string
,
path
string
,
isDefault
bool
)
error
{
if
d
==
nil
{
return
fmt
.
Errorf
(
"configuration is empty"
)
}
currentCfg
:=
*
d
//check any existing "runtimes"
runtimes
:=
map
[
string
]
interface
{}{}
if
_
,
exists
:=
currentCfg
[
runtimesKey
];
exists
{
runtimes
=
currentCfg
[
runtimesKey
]
.
(
map
[
string
]
interface
{})
}
runtimes
[
name
]
=
map
[
string
]
interface
{}{
"path"
:
path
,
"args"
:
[]
string
{},
}
currentCfg
[
runtimesKey
]
=
runtimes
// Enable CDI by default
/*
currentCfg[featuresKey] = map[string]interface{}{
"cdi": true,
}
*/
if
isDefault
{
currentCfg
[
defaultRuntimeKey
]
=
name
}
*
d
=
currentCfg
return
nil
}
// RemoveRuntime removes the runtime configuration and returns
// an error and a do not update flag in case daemon.json doesn't need
// to be updated
func
(
d
*
dockerConfig
)
RemoveRuntime
(
name
string
)
(
error
,
bool
){
//_ = os.RemoveAll(defaultCDISpecPath)
if
d
==
nil
{
return
fmt
.
Errorf
(
"configuration is empyt"
),
true
}
updated
:=
false
currentCfg
:=
*
daemon
//check any existing "runtimes"
if
_
,
exists
:=
currentCfg
[
runtimesKey
];
exists
{
runtimes
:=
currentCfg
[
runtimesKey
]
.
(
map
[
string
]
interface
{})
delete
(
runtimes
,
name
)
delete
(
currentCfg
,
featuresKey
)
_
,
defExists
:=
currentCfg
[
defaultRuntimeKey
]
if
defExists
{
defCfg
:=
currentCfg
[
defaultRuntimeKey
]
.
(
string
)
if
defCfg
==
name
{
delete
(
currentCfg
,
defaultRuntimeKey
)
}
}
if
len
(
runtimes
)
==
0
{
delete
(
currentCfg
,
runtimesKey
)
}
updated
=
true
}
if
updated
{
*
d
=
currentCfg
return
nil
,
false
}
return
nil
,
true
}
func
(
d
dockerConfig
)
Update
(
path
string
)
(
int
,
error
)
{
toWrite
,
err
:=
json
.
MarshalIndent
(
d
,
""
,
" "
)
if
err
!=
nil
{
return
0
,
fmt
.
Errorf
(
"json marshal failed: %v"
,
err
)
}
if
path
==
""
{
num
,
err
:=
os
.
Stdout
.
Write
(
toWrite
)
return
num
,
err
}
f
,
err
:=
os
.
Create
(
path
)
if
err
!=
nil
{
return
0
,
fmt
.
Errorf
(
"failed to open file: %v | err: %v"
,
path
,
err
)
}
defer
f
.
Close
()
return
f
.
Write
(
toWrite
)
}
}
\ No newline at end of file
cmd/dcu-ctk/runtime/engine/engine.go
0 → 100644
View file @
4b476de4
/**
# Copyright (c) Advanced Micro Devices, Inc. All rights reserved.
#
# Licensed under the Apache License, Version 2.0 (the \"License\");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an \"AS IS\" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
**/
package
engine
type
Interface
interface
{
ConfigRuntime
(
string
,
string
,
bool
)
error
UnsetDefaultRuntime
()
error
Update
(
string
)
(
int
,
error
)
RemoveRuntime
(
string
)
(
error
,
bool
)
}
\ No newline at end of file
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment