mirror of
https://github.com/kata-containers/kata-containers.git
synced 2025-07-07 04:19:58 +00:00
api: add sandbox CreateContainer API
And make CreateContainer in api.go a wrapper of it. Signed-off-by: Peng Tao <bergwolf@gmail.com>
This commit is contained in:
parent
ef89131b85
commit
f6aa8a23fc
@ -299,36 +299,17 @@ func CreateContainer(sandboxID string, containerConfig ContainerConfig) (VCSandb
|
|||||||
}
|
}
|
||||||
defer unlockSandbox(lockFile)
|
defer unlockSandbox(lockFile)
|
||||||
|
|
||||||
p, err := fetchSandbox(sandboxID)
|
s, err := fetchSandbox(sandboxID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, nil, err
|
return nil, nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
// Create the container.
|
c, err := s.CreateContainer(containerConfig)
|
||||||
c, err := createContainer(p, containerConfig)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, nil, err
|
return nil, nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
// Add the container to the containers list in the sandbox.
|
return s, c, nil
|
||||||
if err := p.addContainer(c); err != nil {
|
|
||||||
return nil, nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
// Store it.
|
|
||||||
err = c.storeContainer()
|
|
||||||
if err != nil {
|
|
||||||
return nil, nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
// Update sandbox config.
|
|
||||||
p.config.Containers = append(p.config.Containers, containerConfig)
|
|
||||||
err = p.storage.storeSandboxResource(sandboxID, configFileType, *(p.config))
|
|
||||||
if err != nil {
|
|
||||||
return nil, nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
return p, c, nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// DeleteContainer is the virtcontainers container deletion entry point.
|
// DeleteContainer is the virtcontainers container deletion entry point.
|
||||||
|
@ -50,6 +50,7 @@ type VCSandbox interface {
|
|||||||
Resume() error
|
Resume() error
|
||||||
Release() error
|
Release() error
|
||||||
Delete() error
|
Delete() error
|
||||||
|
CreateContainer(contConfig ContainerConfig) (VCContainer, error)
|
||||||
}
|
}
|
||||||
|
|
||||||
// VCContainer is the Container interface
|
// VCContainer is the Container interface
|
||||||
|
@ -69,3 +69,8 @@ func (p *Sandbox) Resume() error {
|
|||||||
func (p *Sandbox) Delete() error {
|
func (p *Sandbox) Delete() error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// CreateContainer implements the VCSandbox function of the same name.
|
||||||
|
func (p *Sandbox) CreateContainer(conf vc.ContainerConfig) (vc.VCContainer, error) {
|
||||||
|
return &Container{}, nil
|
||||||
|
}
|
||||||
|
@ -865,6 +865,35 @@ func (s *Sandbox) newContainers() error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// CreateContainer creates a new container in the sandbox
|
||||||
|
func (s *Sandbox) CreateContainer(contConfig ContainerConfig) (VCContainer, error) {
|
||||||
|
// Create the container.
|
||||||
|
c, err := createContainer(s, contConfig)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
// Add the container to the containers list in the sandbox.
|
||||||
|
if err := s.addContainer(c); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
// Store it.
|
||||||
|
err = c.storeContainer()
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
// Update sandbox config.
|
||||||
|
s.config.Containers = append(s.config.Containers, contConfig)
|
||||||
|
err = s.storage.storeSandboxResource(s.id, configFileType, *(s.config))
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return c, nil
|
||||||
|
}
|
||||||
|
|
||||||
// createContainers registers all containers to the proxy, create the
|
// createContainers registers all containers to the proxy, create the
|
||||||
// containers in the guest and starts one shim per container.
|
// containers in the guest and starts one shim per container.
|
||||||
func (s *Sandbox) createContainers() error {
|
func (s *Sandbox) createContainers() error {
|
||||||
|
@ -1288,3 +1288,14 @@ func TestRemoveContainerSuccess(t *testing.T) {
|
|||||||
|
|
||||||
assert.Equal(t, len(sandbox.containers), 0, "Containers list from sandbox structure should be empty")
|
assert.Equal(t, len(sandbox.containers), 0, "Containers list from sandbox structure should be empty")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestCreateContainer(t *testing.T) {
|
||||||
|
s, err := testCreateSandbox(t, testSandboxID, MockHypervisor, newHypervisorConfig(nil, nil), NoopAgentType, NoopNetworkModel, NetworkConfig{}, nil, nil)
|
||||||
|
assert.Nil(t, err, "VirtContainers should not allow empty sandboxes")
|
||||||
|
defer cleanUp()
|
||||||
|
|
||||||
|
contID := "999"
|
||||||
|
contConfig := newTestContainerConfigNoop(contID)
|
||||||
|
_, err = s.CreateContainer(contConfig)
|
||||||
|
assert.Nil(t, err, "Failed to create container %+v in sandbox %+v: %v", contConfig, s, err)
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user