Commit Graph

537 Commits

Author SHA1 Message Date
Samuel Ortiz
2ecffda170 virtcontainers: store: Add a ItemLock API
The ItemLock API allows for taking shared and exclusive locks on all
items.
For virtcontainers, this is specialized into taking locks on the Lock
item, and will be used for sandbox locking.

Signed-off-by: Samuel Ortiz <sameo@linux.intel.com>
2019-02-06 14:19:18 +01:00
Samuel Ortiz
6e9256f483 virtcontainers: store: Add a Raw API
The Raw API creates a raw item, i.e. an item that must be handled
directly by the caller. A raw item is one that's not defined by the
store.Item enum, i.e. it is a custom, caller defined one.
The caller gets a URL back and is responsible for handling the item
directly from this URL.

Signed-off-by: Samuel Ortiz <sameo@linux.intel.com>
2019-02-06 14:19:18 +01:00
Samuel Ortiz
c25c60898b virtcontainers: store: Add a VC specific Store
This is basically a Store dispatcher, for storing items into their right
Store (either configuration or state).
There's very little logic here, except for finding out which store an
item belongs to in the virtcontainers context.

vc.go also provides virtcontainers specific utilities.

Signed-off-by: Samuel Ortiz <sameo@linux.intel.com>
2019-02-06 14:19:18 +01:00
Samuel Ortiz
ef11bf52a6 virtcontainers: store: Add a Delete API
It's going to be used to completely clean a Store away.

Signed-off-by: Samuel Ortiz <sameo@linux.intel.com>
2019-02-06 14:19:18 +01:00
Samuel Ortiz
f2ab58d841 virtcontainers: store: Implement the filesystem backend
new() only creates the backend and initialized the first layout.

Signed-off-by: Samuel Ortiz <sameo@linux.intel.com>
2019-02-06 14:19:18 +01:00
Samuel Ortiz
d22cdf2dd9 virtcontainers: store: Add an internal backend interface
All Store backends will have to implement that simple interface.

Signed-off-by: Samuel Ortiz <sameo@linux.intel.com>
2019-02-06 14:19:18 +01:00
Samuel Ortiz
6b87ecfc1b virtcontainers: store: Keep track of newly created Stores
When a component creates a new store from a given root path, we add it
to the store manager and return it back when another component asks for
it.

Signed-off-by: Samuel Ortiz <sameo@linux.intel.com>
2019-02-06 14:19:18 +01:00
Samuel Ortiz
efd50ecac9 virtcontainers: Add a Store manager
Each virtcontainers module/component should be able to get a handler on
a Store for loading component specific items. The Store manager is an
internal Store layer for tracking all created Stores.

Signed-off-by: Samuel Ortiz <sameo@linux.intel.com>
2019-02-06 14:19:18 +01:00
Samuel Ortiz
4be76e9969 virtcontainers: Initial Store implementation
Store is a replacement for the current resource storage virtcontainers
implementation and the Manager is the front-end for it. The back-ends
will provide actual storage capabilities and the first one will be the
filesystem one, for storing virtcontainers Items on a local filesystem.

The main design goals for Store are the following ones:

- Simplicity: The API should be short and simple.
- Transparency: The core virtcontainers code should not care about
  the storage backend details.
- Extensibility: It should be easily extensible to add non local and in
  memory backends.

Manger provides a very short and simple API for the rest of the virtcontainers
code base to consume:

New: Creates a new Store, if needed.
Load: Loads an Item from a Store
Store: Stores an Item into a Store.

Signed-off-by: Samuel Ortiz <sameo@linux.intel.com>
2019-02-06 14:19:18 +01:00
Samuel Ortiz
2affa1fe26 virtcontainers: Reduce hyperstart agent test noise
We need to pass a context to the filesystem handle.

Fixes: #1211

Signed-off-by: Samuel Ortiz <sameo@linux.intel.com>
2019-02-05 16:33:06 +01:00
Samuel Ortiz
a3eff87e80 virtcontainers: Make proxy startup sequence less noisy
We only want to know which proxy started when debugging.

Fixes: #1211

Signed-off-by: Samuel Ortiz <sameo@linux.intel.com>
2019-02-05 16:33:06 +01:00
Samuel Ortiz
f0312f607b virtcontainers: Reduce filesystem test noise
We need to set the context before calling into the API.

Fixes: #1211

Signed-off-by: Samuel Ortiz <sameo@linux.intel.com>
2019-02-05 16:33:06 +01:00
Samuel Ortiz
e402601cf8 virtcontainers: Reduce sandbox test noise
We need to set the sandbox context before calling into its API.

Fixes: #1211

Signed-off-by: Samuel Ortiz <sameo@linux.intel.com>
2019-02-05 16:33:06 +01:00
Samuel Ortiz
799ac6edf6 virtcontainers: Reduce qemu test noise
We only need to set the context before calling into qemu's API.

Fixes: #1211

Signed-off-by: Samuel Ortiz <sameo@linux.intel.com>
2019-02-05 16:33:06 +01:00
Samuel Ortiz
560902c8f1 virtcontainers: Reduce kata_agent test noise
We only need to set the agent context before calling into its API.

Fixes: #1211

Signed-off-by: Samuel Ortiz <sameo@linux.intel.com>
2019-02-05 16:33:05 +01:00
Samuel Ortiz
2093fe6bfd virtcontainers: Reduce cc_proxy mock test noise
We don't need that many logs, especially for the positive path.

Fixes: #1211

Signed-off-by: Samuel Ortiz <sameo@linux.intel.com>
2019-02-05 16:33:05 +01:00
Samuel Ortiz
79ed0886c6 virtcontainers: Reduce hyperstart mock test noise
We don't need that many logs, especially for the positive path.

Fixes: #1211

Signed-off-by: Samuel Ortiz <sameo@linux.intel.com>
2019-02-05 16:32:58 +01:00
James O. D. Hunt
530360d515 Merge pull request #1186 from nitkon/Hotplug
ppc64le: Fix hotplug issue
2019-01-31 09:26:25 +00:00
Nitesh Konkar
b0986a5f7f ppc64le: Fix vCPU hotplug issue
ppc64le qemu does not need threadID and
socketID parameters when hotplugging.

Fixes: #1155

Signed-off-by: Nitesh Konkar niteshkonkar@in.ibm.com
2019-01-28 23:42:20 +05:30
Samuel Ortiz
18dcd2c2f7 virtcontainers: Decouple the network API from the sandbox one
In order to fix #1059, we want to create a hypervisor package. Some of
the hypervisor implementations (qemu) depend on the network and endpoint
interfaces. We can not have a virtcontainers -> hypervisor -> network,
endpoint -> virtcontainers cyclic dependency.
So before creating the hypervisor package, we need to decouple the
network API from the virtcontainers one.

Fixes: #1180

Signed-off-by: Samuel Ortiz <sameo@linux.intel.com>
2019-01-25 15:25:49 +01:00
Samuel Ortiz
b39cb1d13a virtcontainers: Remove the network interface
There's only one real implementer of the network interface and no real
need to implement anything else. We can just go ahead and remove this
abstraction.

Fixes: #1179

Signed-off-by: Samuel Ortiz <sameo@linux.intel.com>
2019-01-25 15:25:46 +01:00
James O. D. Hunt
c271d1c055 Merge pull request #1142 from alicefr/pci_type
s390x: change pci bridge type
2019-01-22 15:31:25 +00:00
Xu Wang
3b0b0147bd Merge pull request #1139 from bergwolf/delete
clean up container dir
2019-01-22 10:16:34 +08:00
Frank Cao
d1cd82d0c1 Merge pull request #1143 from alicefr/missing_root
s390x: root parameter is missing
2019-01-21 19:40:38 +08:00
Peng Tao
e8788bebd5 Merge pull request #1121 from jcvenegas/fix-memory-max-message
vc: qemu: fix error message on hotplug.
2019-01-21 14:16:41 +08:00
Peng Tao
d75f26d719 vc: set detach flag when umounting rootfs
docker might bind mount some files/dirs under container rootfs
without notifying runtime. We need to unmount them otherwise
docker will fail to clean up containers.

man umount(2):
MNT_DETACH (since Linux 2.4.11)
     Perform a lazy unmount: make the mount point unavailable for new accesses, immediately
     disconnect the filesystem and all filesystems mounted below it from each other and
     from the mount table, and actually perform the unmount when the mount point ceases to be busy.

Signed-off-by: Peng Tao <bergwolf@gmail.com>
2019-01-21 14:11:35 +08:00
Peng Tao
d314e2d0b7 agent: clean up share path created by the agent
The agent code creates a directory at
`/run/kata-containers/shared/sandboxes/sbid/` to hold shared data
between host and guest. We need to clean it up when removing a sandbox.

Fixes: #1138

Signed-off-by: Peng Tao <bergwolf@gmail.com>
2019-01-21 14:10:59 +08:00
Peng Tao
36762c7cad qemu: cleanup vm template path properly
VM templates creates a symlink from `/run/vc/vm/sbid` to
`/run/vc/vm/vmid`. We need to clean up both of them.

Signed-off-by: Peng Tao <bergwolf@gmail.com>
2019-01-21 14:10:51 +08:00
Peng Tao
0c09d2bf9a Merge pull request #980 from devimc/topic/left_mount_points
virtcontainers: set private propagation in rootfs
2019-01-21 13:28:23 +08:00
Graham Whaley
150a44fa6c Merge pull request #1137 from nitkon/patch-1
virtcontainers: ppc64le qemu does not have nvdimm capabilities yet
2019-01-18 10:46:32 +00:00
Eric Ernst
50650e9342 Merge pull request #1146 from sameo/topic/typo
virtcontainers: Fix unit test typo
2019-01-17 21:41:42 -08:00
Frank Cao
6c3277e013 Merge pull request #1126 from jcvenegas/allow-update-on-ready
update: allow do update on ready.
2019-01-18 11:03:12 +08:00
Samuel Ortiz
a07b4cd57f virtcontainers: Fix unit test typo
s/Emtpy/Empty/g

Fixes: #1145

Signed-off-by: Samuel Ortiz <sameo@linux.intel.com>
2019-01-17 15:55:56 +01:00
Alice Frosi
02261f9b40 s390x: change pci bridge type
Change type name for PCIBridge

Fixes: #1141

Signed-off-by: Alice Frosi <afrosi@de.ibm.com>
2019-01-17 15:52:20 +01:00
Alice Frosi
f542233cbd s390x: root parameter is missing
Fixes: #1140

Signed-off-by: Alice Frosi <afrosi@de.ibm.com>
2019-01-17 15:41:12 +01:00
nitkon
18c7aa44a8 virtcontainers: ppc64le qemu does not have nvdimm capabilities yet
Remove `nvdimm` from qemu command line
as the upstream qemu on ppc64le does not have
nvdimm capabilities yet.

Fixes: #1136

Signed-off-by: Nitesh Konkar niteshkonkar@in.ibm.com
2019-01-17 14:29:28 +05:30
Jose Carlos Venegas Munoz
7228bab79b container: update: Allow updates once container is created
Before, we would only allow for a container-update command
to proceed if the container was in the running state. So
long as the container is created, this should be allowed.

This was found using the `static` policy for Kubernetes CPU
manager[1]. Where the `update` command is called after the
`create` runtime command (when the container state is `ready`).

[1] https://github.com/kubernetes/community/blob/95a4a1/contributors/design-proposals/node/cpu-manager.md#example-scenarios-and-interactions

Fixes: #1083

Signed-off-by: Jose Carlos Venegas Munoz <jose.carlos.venegas.munoz@intel.com>
2019-01-16 17:15:00 -05:00
Samuel Ortiz
2e1ddbc725 virtcontainers: Add Bridge to the types package
Bridge is representing a PCI/E bridge, so we're moving the bridge*.go
to types/pci*.go.

Fixes: #1119

Signed-off-by: Samuel Ortiz <sameo@linux.intel.com>
2019-01-16 15:45:08 +01:00
Samuel Ortiz
b25f43e865 virtcontainers: Add Capabilities to the types package
In order to move the hypervisor implementations into their own package,
we need to put the capabilities type into the types package.

Fixes: #1119

Signed-off-by: Samuel Ortiz <sameo@linux.intel.com>
2019-01-14 20:30:06 +01:00
Samuel Ortiz
67e696bf62 virtcontainers: Add Asset to the types package
In order to move the hypervisor implementations into their own package,
we need to put the asset type into the types package and break the
hypervisor->asset->virtcontainers->hypervisor cyclic dependency.

Fixes: #1119

Signed-off-by: Samuel Ortiz <sameo@linux.intel.com>
2019-01-14 20:30:06 +01:00
Jose Carlos Venegas Munoz
a5a74f6d20 vc: qemu: fix error message on hotplug.
The error message does not provide the max memory that is exceeded.

Fix it for better error information.

Fixes: #1120

Signed-off-by: Jose Carlos Venegas Munoz <jose.carlos.venegas.munoz@intel.com>
2019-01-11 13:34:32 -06:00
Jose Carlos Venegas Munoz
d4dd5f1508 qemu: fix gofmt import order.
use gofmt changes the import order.

Signed-off-by: Jose Carlos Venegas Munoz <jose.carlos.venegas.munoz@intel.com>
2019-01-11 13:33:01 -06:00
Julio Montes
b029e442b2 virtcontainers: set private propagation in rootfs
When overlay is used as storage driver, kata runtime creates a new bind mount
point to the merged directory, that way this directory can be shared with the
VM through 9p. By default the mount propagation is shared, that means mount
events are propagated, but umount events not, to deal with this problem and to
avoid left mount points in the host once container finishes, the mount
propagation of bind mounts should be set to private.

Depends-on: github.com/kata-containers/tests#971

fixes #794

Signed-off-by: Julio Montes <julio.montes@intel.com>
2019-01-08 13:07:08 -06:00
Samuel Ortiz
a02fd5982c virtcontainers: Remove code duplication in the test setup
And add some additional log output for displaying the directories and
files created when kicking the virtcontainers tests.

Signed-off-by: Samuel Ortiz <sameo@linux.intel.com>
2019-01-08 19:38:33 +01:00
Samuel Ortiz
cf22f402d8 virtcontainers: Remove the hypervisor waitSandbox method
We always call waitSandbox after we start the VM (startSandbox), so
let's simplify the hypervisor interface and integrate waiting for the VM
into startSandbox.
This makes startSandbox a blocking call, but that is practically the
case today.

Fixes: #1009

Signed-off-by: Samuel Ortiz <sameo@linux.intel.com>
2019-01-08 19:38:33 +01:00
Samuel Ortiz
763bf18daa virtcontainers: Remove the hypervisor init method
We always combine the hypervisor init and createSandbox, because what
we're trying to do is simply that: Set the hypervisor and have it create
a sandbox.

Instead of keeping a method with vague semantics, remove init and
integrate the actual hypervisor setup phase into the createSandbox one.

Signed-off-by: Samuel Ortiz <sameo@linux.intel.com>
2019-01-08 19:37:20 +01:00
Samuel Ortiz
b05dbe3886 runtime: Convert to the new internal types package
We can now remove all the sandbox shared types and convert the rest of
the code to using the new internal types package.

This commit includes virtcontainers, cli and containerd-shim changes in
one atomic change in order to not break bisect'ibility.

Fixes: #1095

Signed-off-by: Samuel Ortiz <sameo@linux.intel.com>
2019-01-08 14:43:33 +01:00
Samuel Ortiz
701afe9e60 virtcontainers: First types package
The types package holds all shared virtcontainers types.
With the separation of the virtcontainers code into separate packages,
we need a types one to not create circular dependencies.

This package holds sandbox related types and structures for now. It will
grow as virtcontainers code is moved into their own internal packages.

Signed-off-by: Samuel Ortiz <sameo@linux.intel.com>
2019-01-08 14:24:42 +01:00
Samuel Ortiz
3ab7d077d1 virtcontainers: Alias for pkg/types
Since we're going to have both external and internal types packages, we
alias the external one as vcTypes. And the internal one will be usable
through the types namespace.

Signed-off-by: Samuel Ortiz <sameo@linux.intel.com>
2019-01-08 14:24:06 +01:00
James O. D. Hunt
36c267a1d2 Merge pull request #1085 from bergwolf/containerd
cli: allow to kill a stopped container and sandbox
2019-01-08 08:44:10 +00:00