diff --git a/virtcontainers/api.go b/virtcontainers/api.go index abaebb50ed..ddbb16801d 100644 --- a/virtcontainers/api.go +++ b/virtcontainers/api.go @@ -39,6 +39,8 @@ func CreateSandbox(sandboxConfig SandboxConfig, factory Factory) (VCSandbox, err } func createSandboxFromConfig(sandboxConfig SandboxConfig, factory Factory) (*Sandbox, error) { + var err error + // Create the sandbox. s, err := createSandbox(sandboxConfig, factory) if err != nil { @@ -46,22 +48,29 @@ func createSandboxFromConfig(sandboxConfig SandboxConfig, factory Factory) (*San } // Create the sandbox network - if err := s.createNetwork(); err != nil { + if err = s.createNetwork(); err != nil { return nil, err } + // network rollback + defer func() { + if err != nil && s.networkNS.NetNsCreated { + s.removeNetwork() + } + }() + // Start the VM - if err := s.startVM(); err != nil { + if err = s.startVM(); err != nil { return nil, err } // Create Containers - if err := s.createContainers(); err != nil { + if err = s.createContainers(); err != nil { return nil, err } // The sandbox is completely created now, we can store it. - if err := s.storeSandbox(); err != nil { + if err = s.storeSandbox(); err != nil { return nil, err }