Merge pull request #2177 from devimc/topic/libcontainer/kata-containers

libcontainer: export and add new methods to allow cgroups manipulation
This commit is contained in:
Michael Crosby 2020-01-02 11:47:12 -05:00 committed by GitHub
commit 2b52db7527
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 34 additions and 8 deletions

View File

@ -46,6 +46,9 @@ type Manager interface {
// Sets the cgroup as configured. // Sets the cgroup as configured.
Set(container *configs.Config) error Set(container *configs.Config) error
// Gets the cgroup as configured.
GetCgroups() (*configs.Cgroup, error)
} }
type NotFoundError struct { type NotFoundError struct {

View File

@ -467,3 +467,7 @@ func CheckCpushares(path string, c uint64) error {
return nil return nil
} }
func (m *Manager) GetCgroups() (*configs.Cgroup, error) {
return m.Cgroups, nil
}

View File

@ -61,3 +61,7 @@ func (m *Manager) Freeze(state configs.FreezerState) error {
func Freeze(c *configs.Cgroup, state configs.FreezerState) error { func Freeze(c *configs.Cgroup, state configs.FreezerState) error {
return fmt.Errorf("Systemd not supported") return fmt.Errorf("Systemd not supported")
} }
func (m *Manager) GetCgroups() (*configs.Cgroup, error) {
return nil, fmt.Errorf("Systemd not supported")
}

View File

@ -528,3 +528,7 @@ func isUnitExists(err error) bool {
} }
return false return false
} }
func (m *LegacyManager) GetCgroups() (*configs.Cgroup, error) {
return m.Cgroups, nil
}

View File

@ -346,3 +346,7 @@ func (m *UnifiedManager) Set(container *configs.Config) error {
} }
return nil return nil
} }
func (m *UnifiedManager) GetCgroups() (*configs.Cgroup, error) {
return m.Cgroups, nil
}

View File

@ -61,6 +61,9 @@ func (m *mockCgroupManager) GetUnifiedPath() (string, error) {
func (m *mockCgroupManager) Freeze(state configs.FreezerState) error { func (m *mockCgroupManager) Freeze(state configs.FreezerState) error {
return nil return nil
} }
func (m *mockCgroupManager) GetCgroups() (*configs.Cgroup, error) {
return nil, nil
}
func (m *mockIntelRdtManager) Apply(pid int) error { func (m *mockIntelRdtManager) Apply(pid int) error {
return nil return nil
@ -82,6 +85,10 @@ func (m *mockIntelRdtManager) Set(container *configs.Config) error {
return nil return nil
} }
func (m *mockIntelRdtManager) GetCgroups() (*configs.Cgroup, error) {
return nil, nil
}
type mockProcess struct { type mockProcess struct {
_pid int _pid int
started uint64 started uint64

View File

@ -196,7 +196,7 @@ func CreateLibcontainerConfig(opts *CreateOpts) (*configs.Config, error) {
if err := createDevices(spec, config); err != nil { if err := createDevices(spec, config); err != nil {
return nil, err return nil, err
} }
c, err := createCgroupConfig(opts) c, err := CreateCgroupConfig(opts)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@ -297,7 +297,7 @@ func createLibcontainerMount(cwd string, m specs.Mount) *configs.Mount {
} }
} }
func createCgroupConfig(opts *CreateOpts) (*configs.Cgroup, error) { func CreateCgroupConfig(opts *CreateOpts) (*configs.Cgroup, error) {
var ( var (
myCgroupPath string myCgroupPath string

View File

@ -213,7 +213,7 @@ func TestLinuxCgroupWithMemoryResource(t *testing.T) {
Spec: spec, Spec: spec,
} }
cgroup, err := createCgroupConfig(opts) cgroup, err := CreateCgroupConfig(opts)
if err != nil { if err != nil {
t.Errorf("Couldn't create Cgroup config: %v", err) t.Errorf("Couldn't create Cgroup config: %v", err)
} }
@ -257,7 +257,7 @@ func TestLinuxCgroupSystemd(t *testing.T) {
Spec: spec, Spec: spec,
} }
cgroup, err := createCgroupConfig(opts) cgroup, err := CreateCgroupConfig(opts)
if err != nil { if err != nil {
t.Errorf("Couldn't create Cgroup config: %v", err) t.Errorf("Couldn't create Cgroup config: %v", err)
@ -293,7 +293,7 @@ func TestLinuxCgroupSystemdWithEmptyPath(t *testing.T) {
Spec: spec, Spec: spec,
} }
cgroup, err := createCgroupConfig(opts) cgroup, err := CreateCgroupConfig(opts)
if err != nil { if err != nil {
t.Errorf("Couldn't create Cgroup config: %v", err) t.Errorf("Couldn't create Cgroup config: %v", err)
@ -328,7 +328,7 @@ func TestLinuxCgroupSystemdWithInvalidPath(t *testing.T) {
Spec: spec, Spec: spec,
} }
_, err := createCgroupConfig(opts) _, err := CreateCgroupConfig(opts)
if err == nil { if err == nil {
t.Error("Expected to produce an error if not using the correct format for cgroup paths belonging to systemd") t.Error("Expected to produce an error if not using the correct format for cgroup paths belonging to systemd")
} }
@ -347,7 +347,7 @@ func TestLinuxCgroupsPathSpecified(t *testing.T) {
Spec: spec, Spec: spec,
} }
cgroup, err := createCgroupConfig(opts) cgroup, err := CreateCgroupConfig(opts)
if err != nil { if err != nil {
t.Errorf("Couldn't create Cgroup config: %v", err) t.Errorf("Couldn't create Cgroup config: %v", err)
} }
@ -365,7 +365,7 @@ func TestLinuxCgroupsPathNotSpecified(t *testing.T) {
Spec: spec, Spec: spec,
} }
cgroup, err := createCgroupConfig(opts) cgroup, err := CreateCgroupConfig(opts)
if err != nil { if err != nil {
t.Errorf("Couldn't create Cgroup config: %v", err) t.Errorf("Couldn't create Cgroup config: %v", err)
} }