]> git.proxmox.com Git - pve-container.git/log
pve-container.git
8 years agouse run_cli instead of run (name changed in pve-common)
Dietmar Maurer [Fri, 4 Sep 2015 09:14:24 +0000 (11:14 +0200)]
use run_cli instead of run (name changed in pve-common)

8 years agouse PVE::Cluster::complete_next_vmid
Dietmar Maurer [Fri, 4 Sep 2015 07:15:07 +0000 (09:15 +0200)]
use PVE::Cluster::complete_next_vmid

8 years agoauto-generate bash completion config
Dietmar Maurer [Fri, 4 Sep 2015 04:20:15 +0000 (06:20 +0200)]
auto-generate bash completion config

8 years agopct: use separate class for CLIHandler (src/PVE/CLI/pct.pm)
Dietmar Maurer [Thu, 3 Sep 2015 17:03:02 +0000 (19:03 +0200)]
pct: use separate class for CLIHandler (src/PVE/CLI/pct.pm)

do not generate pod files for lxc hooks

8 years agoadded pct exec
Wolfgang Bumiller [Tue, 1 Sep 2015 07:16:49 +0000 (09:16 +0200)]
added pct exec

Using the new 'extra-args' options for command arguments.

Examples:
 # pct exec 100 ls /
 # pct exec 100 -- ls -l /

8 years agoConvert to disksize to GB after reading the config file
Emmanuel Kasper [Wed, 2 Sep 2015 14:18:00 +0000 (16:18 +0200)]
Convert to disksize to GB after reading the config file

This fixes a bug when calling pct restore a vzdump backup:
we store the rootfs size in KB, but create_disks expects that a GB parameter.
So the restore was failing trying to create something of a Petabyte image.

Formatting '/var/lib/vz/images/110/vm-110-disk-1.raw', fmt=raw size=4503599627370496
unable to create image: qemu-img: /var/lib/vz/images/110/vm-110-disk-1.raw: The image size is too large for file format 'raw'

8 years agoEnhance pct man page with DESCRIPTION, EXAMPLES, FILES, SEE ALSO sections
Emmanuel Kasper [Tue, 1 Sep 2015 11:35:05 +0000 (13:35 +0200)]
Enhance pct man page with DESCRIPTION, EXAMPLES, FILES, SEE ALSO sections

8 years agotypo fixup: dettach -> detach
Dietmar Maurer [Thu, 3 Sep 2015 09:44:14 +0000 (11:44 +0200)]
typo fixup: dettach -> detach

8 years agoadd missing archlinux ostype confdesc enum entry
Wolfgang Bumiller [Wed, 2 Sep 2015 06:36:38 +0000 (08:36 +0200)]
add missing archlinux ostype confdesc enum entry

8 years agofix some warnings shown during 'make dinstall'
Wolfgang Bumiller [Wed, 2 Sep 2015 06:10:46 +0000 (08:10 +0200)]
fix some warnings shown during 'make dinstall'

8 years agodestroy owned mountpoints on pct destroy
Wolfgang Bumiller [Tue, 1 Sep 2015 14:33:54 +0000 (16:33 +0200)]
destroy owned mountpoints on pct destroy

8 years agolxc-stop fails when 'kill' and 'timeout' options are used together
Thomas Lamprecht [Wed, 2 Sep 2015 12:54:07 +0000 (14:54 +0200)]
lxc-stop fails when 'kill' and 'timeout' options are used together

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
8 years agoadd bash completion support
Dietmar Maurer [Wed, 2 Sep 2015 13:27:43 +0000 (15:27 +0200)]
add bash completion support

8 years agouse multiple mount protection (mmp)
Dietmar Maurer [Tue, 1 Sep 2015 11:01:41 +0000 (13:01 +0200)]
use multiple mount protection (mmp)

8 years agonormalize mount path
Dietmar Maurer [Tue, 1 Sep 2015 10:06:06 +0000 (12:06 +0200)]
normalize mount path

8 years agomount_all: unly call umount on error
Dietmar Maurer [Tue, 1 Sep 2015 10:04:50 +0000 (12:04 +0200)]
mount_all: unly call umount on error

8 years agofixed call for cfg file and error when CT is running and on local storage
Thomas Lamprecht [Tue, 1 Sep 2015 07:59:55 +0000 (09:59 +0200)]
fixed call for cfg file and error when CT is running and on local storage

When trying to migrate only throw an error when the CT is on an non
shared storage AND running.
Also fixed an remaining PVE::OpenVZ call to LXC.

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
8 years agoRemoving dead code from CT stop call and fixing typo
Thomas Lamprecht [Tue, 1 Sep 2015 07:59:54 +0000 (09:59 +0200)]
Removing dead code from CT stop call and fixing typo

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
8 years agocreate_rootfs: correctly deactivate volumes (fix previous commit)
Dietmar Maurer [Tue, 1 Sep 2015 06:16:05 +0000 (08:16 +0200)]
create_rootfs: correctly deactivate volumes (fix previous commit)

8 years agoumount_all: fix previous commit
Dietmar Maurer [Tue, 1 Sep 2015 06:12:10 +0000 (08:12 +0200)]
umount_all: fix previous commit

8 years agoadd offline migration code
Dietmar Maurer [Tue, 1 Sep 2015 06:08:06 +0000 (08:08 +0200)]
add offline migration code

8 years agoskip lxc hooks on non-PVE containers
Wolfgang Bumiller [Mon, 31 Aug 2015 14:21:41 +0000 (16:21 +0200)]
skip lxc hooks on non-PVE containers

Our containers all only have a number as name. If any other
character appears in a container name, skip our hooks in
order to allow lxc to be used manually without interference
from PVE.

8 years agouse loop device for all 'raw' formated disks on directory based storage
Dietmar Maurer [Mon, 31 Aug 2015 14:42:34 +0000 (16:42 +0200)]
use loop device for all 'raw' formated disks on directory based storage

8 years agolxc detect error message changed
Alen Grizonic [Mon, 31 Aug 2015 13:37:47 +0000 (15:37 +0200)]
lxc detect error message changed

8 years agounderscore is a valid lxc config key character
Wolfgang Bumiller [Mon, 31 Aug 2015 13:03:25 +0000 (15:03 +0200)]
underscore is a valid lxc config key character

8 years agoimplement mount_all/umount_all
Dietmar Maurer [Mon, 31 Aug 2015 13:59:55 +0000 (15:59 +0200)]
implement mount_all/umount_all

8 years agoparse_ct_mountpoint: allow to parse "--rootfs 0"
Dietmar Maurer [Mon, 31 Aug 2015 04:16:11 +0000 (06:16 +0200)]
parse_ct_mountpoint: allow to parse "--rootfs 0"

8 years agocleanup error message
Dietmar Maurer [Fri, 28 Aug 2015 16:18:44 +0000 (18:18 +0200)]
cleanup error message

8 years agoHA resources check before destroying lxc
Alen Grizonic [Fri, 28 Aug 2015 13:18:52 +0000 (15:18 +0200)]
HA resources check before destroying lxc

8 years agobump version to 0.9-14
Dietmar Maurer [Fri, 28 Aug 2015 09:47:53 +0000 (11:47 +0200)]
bump version to 0.9-14

8 years agorun spiceterm and return spiceproxy config only if CT is running
Thomas Lamprecht [Thu, 27 Aug 2015 14:42:44 +0000 (16:42 +0200)]
run spiceterm and return spiceproxy config only if CT is running

This mirrors the behavior of qemu VMs, if the container is not
running, return an error when trying to launch the spiceproxy
API call.

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
8 years agovzdump: correctly implement snapshot backup
Dietmar Maurer [Fri, 28 Aug 2015 08:00:01 +0000 (10:00 +0200)]
vzdump: correctly implement snapshot backup

use normal snapshot code to generate snapshots.

8 years agomerge volid_path into mountpount_mount
Dietmar Maurer [Fri, 28 Aug 2015 06:35:19 +0000 (08:35 +0200)]
merge volid_path into mountpount_mount

It is easier to handle special cases like zfs subvol mounts this way.
Also pass snapshot names to enable mounting of snapshots (required
by vzdump)

8 years agolock_aquire: fix reference counting and lock name
Dietmar Maurer [Thu, 27 Aug 2015 12:02:11 +0000 (14:02 +0200)]
lock_aquire: fix reference counting and lock name

8 years agovzdump: use correct pid to access container root
Dietmar Maurer [Thu, 27 Aug 2015 08:32:32 +0000 (10:32 +0200)]
vzdump: use correct pid to access container root

8 years agohas_feature: skip further tests if we already detected an error
Dietmar Maurer [Thu, 27 Aug 2015 08:10:02 +0000 (10:10 +0200)]
has_feature: skip further tests if we already detected an error

8 years agohas_feature: check all mountpoints
Dietmar Maurer [Thu, 27 Aug 2015 08:05:59 +0000 (10:05 +0200)]
has_feature: check all mountpoints

8 years agocleanup: remove useless PVE::LXC prefix
Dietmar Maurer [Thu, 27 Aug 2015 07:07:39 +0000 (09:07 +0200)]
cleanup: remove useless PVE::LXC prefix

8 years agocreate_rootfs: force rootfs mp to '/'
Dietmar Maurer [Thu, 27 Aug 2015 06:58:43 +0000 (08:58 +0200)]
create_rootfs: force rootfs mp to '/'

8 years agorestore: do not restore mpX, arch and ostype options from previous config
Dietmar Maurer [Thu, 27 Aug 2015 06:54:48 +0000 (08:54 +0200)]
restore: do not restore mpX, arch and ostype options from previous config

8 years agocreate_disks: removed default_storage parameter
Dietmar Maurer [Thu, 27 Aug 2015 06:48:32 +0000 (08:48 +0200)]
create_disks: removed default_storage parameter

8 years agocreate: do not pass mointpoints to update_pct_config, simplify restore logic
Dietmar Maurer [Thu, 27 Aug 2015 06:24:50 +0000 (08:24 +0200)]
create: do not pass mointpoints to update_pct_config, simplify restore logic

8 years agocreate_disks: correctly protect code with eval
Dietmar Maurer [Thu, 27 Aug 2015 05:20:23 +0000 (07:20 +0200)]
create_disks: correctly protect code with eval

The previous code simply ignores errors.

8 years agovm_create : add support for mountpoints
Alexandre Derumier [Mon, 24 Aug 2015 13:01:16 +0000 (15:01 +0200)]
vm_create : add support for mountpoints

rename alloc_roofs with create_disks,
to handle multiple disks.

$size param is removed, and must be provide like for qemuserver:

example:
pct create vmid template -rootfs local:5 -mp0 local:10

Signed-off-by: Alexandre Derumier <aderumier@odiso.com>
8 years agoCorrect package name in sub update_ipconfig()
Emmanuel Kasper [Wed, 26 Aug 2015 14:12:57 +0000 (16:12 +0200)]
Correct package name in sub update_ipconfig()

8 years agoallow to load configs from CTs located on other nodes
Thomas Lamprecht [Wed, 26 Aug 2015 13:36:28 +0000 (15:36 +0200)]
allow to load configs from CTs located on other nodes

This allows load_config to load also configs from LXC container
which arent't located on the same node.

This is needed to fix the bug that doesn't let view the noVNC
console from an CT located on another node, whereas viewing it on
the same node as the container is located works fine.

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
8 years agoremove tests for /dev/xxx and use get_vm_volumes
Alexandre Derumier [Mon, 24 Aug 2015 08:13:21 +0000 (10:13 +0200)]
remove tests for /dev/xxx and use get_vm_volumes

Signed-off-by: Alexandre Derumier <aderumier@odiso.com>
8 years agoadd get_vm_volumes sub
Alexandre Derumier [Mon, 24 Aug 2015 08:13:20 +0000 (10:13 +0200)]
add get_vm_volumes sub

similar to qemu-server, return only volids with storeid

Signed-off-by: Alexandre Derumier <aderumier@odiso.com>
8 years agoupdate_lxc_config : remove foreach_mountpoint
Alexandre Derumier [Mon, 24 Aug 2015 08:13:19 +0000 (10:13 +0200)]
update_lxc_config : remove foreach_mountpoint

- we only define rootfs.
- also add support for /dev/.. and directory as rootfs

Signed-off-by: Alexandre Derumier <aderumier@odiso.com>
8 years agowhite space cleanups
Dietmar Maurer [Wed, 26 Aug 2015 13:54:05 +0000 (15:54 +0200)]
white space cleanups

8 years agovolid_path : test device and local directory
Alexandre Derumier [Mon, 24 Aug 2015 08:13:18 +0000 (10:13 +0200)]
volid_path : test device and local directory

Signed-off-by: Alexandre Derumier <aderumier@odiso.com>
8 years agovzdump: always store config inside $task->{tmpdir}
Dietmar Maurer [Wed, 26 Aug 2015 09:53:47 +0000 (11:53 +0200)]
vzdump: always store config inside $task->{tmpdir}

Which may be different than $task->{snapdir}. We avoid
to modify the original filesystem (which can be a
readonly snapshot).

8 years agofix bug #691 part1: fix vzdump stop mode backup on zfs
Dietmar Maurer [Wed, 26 Aug 2015 08:43:02 +0000 (10:43 +0200)]
fix bug #691 part1: fix vzdump stop mode backup on zfs

8 years agomountpoint_mount: die if something fails
Dietmar Maurer [Wed, 26 Aug 2015 08:38:53 +0000 (10:38 +0200)]
mountpoint_mount: die if something fails

8 years agocode cleanup
Dietmar Maurer [Wed, 26 Aug 2015 07:01:45 +0000 (09:01 +0200)]
code cleanup

8 years agovzdump: always check if we have a valid rootfs volid
Dietmar Maurer [Wed, 26 Aug 2015 06:27:51 +0000 (08:27 +0200)]
vzdump: always check if we have a valid rootfs volid

8 years agodo not pass 'noerr' flags to parse_volume_id
Dietmar Maurer [Wed, 26 Aug 2015 06:04:56 +0000 (08:04 +0200)]
do not pass 'noerr' flags to parse_volume_id

8 years agovzdump: fail if we have mountpoints
Dietmar Maurer [Wed, 26 Aug 2015 05:46:05 +0000 (07:46 +0200)]
vzdump: fail if we have mountpoints

8 years agocode cleanup
Dietmar Maurer [Wed, 26 Aug 2015 05:41:59 +0000 (07:41 +0200)]
code cleanup

8 years agobump version to 0.9-13
Dietmar Maurer [Tue, 25 Aug 2015 10:55:48 +0000 (12:55 +0200)]
bump version to 0.9-13

8 years agodetect ostype when restoring OpenVZ containers
Wolfgang Bumiller [Mon, 24 Aug 2015 12:05:53 +0000 (14:05 +0200)]
detect ostype when restoring OpenVZ containers

Fixes #692

8 years agoTypo in create_rootfs() subroutine
Emmanuel Kasper [Mon, 24 Aug 2015 15:58:38 +0000 (17:58 +0200)]
Typo in create_rootfs() subroutine

8 years agobump version to 0.9-12
Dietmar Maurer [Mon, 24 Aug 2015 04:33:04 +0000 (06:33 +0200)]
bump version to 0.9-12

8 years agomountpoint_mount: remove unused parameter $ms
Dietmar Maurer [Fri, 21 Aug 2015 15:32:13 +0000 (17:32 +0200)]
mountpoint_mount: remove unused parameter $ms

8 years agomake create_rootfs sub generic
Alexandre Derumier [Fri, 21 Aug 2015 15:10:19 +0000 (17:10 +0200)]
make create_rootfs sub generic

Signed-off-by: Alexandre Derumier <aderumier@odiso.com>
8 years agovolid_path: don't format $path with loop:/
Alexandre Derumier [Fri, 21 Aug 2015 15:10:18 +0000 (17:10 +0200)]
volid_path: don't format $path with loop:/

This is only used in lxc config and not a real path

Signed-off-by: Alexandre Derumier <aderumier@odiso.com>
8 years agoadd mountpoint_mount sub
Alexandre Derumier [Fri, 21 Aug 2015 15:10:17 +0000 (17:10 +0200)]
add mountpoint_mount sub

Signed-off-by: Alexandre Derumier <aderumier@odiso.com>
8 years agoadd dettach_loops sub
Alexandre Derumier [Fri, 21 Aug 2015 15:10:16 +0000 (17:10 +0200)]
add dettach_loops sub

an move code from vm_stop_cleanup inside it

Signed-off-by: Alexandre Derumier <aderumier@odiso.com>
8 years agoadd attach_loops sub
Alexandre Derumier [Fri, 21 Aug 2015 15:10:15 +0000 (17:10 +0200)]
add attach_loops sub

and move code from prestart hook inside it

Signed-off-by: Alexandre Derumier <aderumier@odiso.com>
8 years agomount hook : code cleanup
Alexandre Derumier [Fri, 21 Aug 2015 03:14:46 +0000 (05:14 +0200)]
mount hook : code cleanup

- use sub path
- manage bind mount for non devices
- split mount and device_cgroup  (we'll need mount later for backup for example)

Signed-off-by: Alexandre Derumier <aderumier@odiso.com>
8 years agoupdate_lxc_config : code_clenaup
Alexandre Derumier [Fri, 21 Aug 2015 03:14:45 +0000 (05:14 +0200)]
update_lxc_config : code_clenaup

- use volid_path sub
- we now manage only rootfs, subvol mount.entry will be manage in mount hook

Signed-off-by: Alexandre Derumier <aderumier@odiso.com>
8 years agoadd volid_path
Alexandre Derumier [Fri, 21 Aug 2015 03:14:44 +0000 (05:14 +0200)]
add volid_path

Signed-off-by: Alexandre Derumier <aderumier@odiso.com>
8 years agoimplement pct listsnapshot cli command
Dietmar Maurer [Thu, 20 Aug 2015 14:55:36 +0000 (16:55 +0200)]
implement pct listsnapshot cli command

8 years agosplit PVE::API2::LXC into smaller parts
Dietmar Maurer [Thu, 20 Aug 2015 11:20:06 +0000 (13:20 +0200)]
split PVE::API2::LXC into smaller parts

8 years agobump version to 0.9-11
Dietmar Maurer [Wed, 19 Aug 2015 13:51:19 +0000 (15:51 +0200)]
bump version to 0.9-11

8 years agoremove <vmid>.fw file after lxc vm destroy
Alen Grizonic [Wed, 19 Aug 2015 08:34:52 +0000 (10:34 +0200)]
remove <vmid>.fw file after lxc vm destroy

Related to Bugfix 603: vmid.fw file not deleted

Signed-off-by: Alen Grizonic <a.grizonic@proxmox.com>
8 years agocleanup directory structure
Dietmar Maurer [Wed, 19 Aug 2015 05:46:17 +0000 (07:46 +0200)]
cleanup directory structure

8 years agoadd file access methods to LXCSetup::Base
Wolfgang Bumiller [Wed, 19 Aug 2015 05:57:56 +0000 (07:57 +0200)]
add file access methods to LXCSetup::Base

These should be used for all container file access as in the
future they'll support user-id mapping.

8 years agomountpoint: add support for host /dev/xxx block device passthrough
Alexandre Derumier [Tue, 18 Aug 2015 08:24:24 +0000 (10:24 +0200)]
mountpoint: add support for host /dev/xxx block device passthrough

example:
mp0: volume=/dev/sda,mp=/home/

Fix this request:
http://forum.proxmox.com/threads/23256-LXC-Cannot-assign-a-block-device-to-container

Signed-off-by: Alexandre Derumier <aderumier@odiso.com>
8 years agoAdded PVE::LXCSetup::Base::setup_securetty
Wolfgang Bumiller [Tue, 18 Aug 2015 14:56:31 +0000 (16:56 +0200)]
Added PVE::LXCSetup::Base::setup_securetty

8 years agoarchlinux template support
Wolfgang Bumiller [Tue, 18 Aug 2015 14:56:30 +0000 (16:56 +0200)]
archlinux template support

8 years agomark mp[N] as experimental feature
Dietmar Maurer [Tue, 18 Aug 2015 07:14:51 +0000 (09:14 +0200)]
mark mp[N] as experimental feature

8 years agocheck quorum inside pre-start hook
Dietmar Maurer [Tue, 18 Aug 2015 07:12:39 +0000 (09:12 +0200)]
check quorum inside pre-start hook

8 years agomove setup_mountpoint into mount hook
Dietmar Maurer [Tue, 18 Aug 2015 05:59:03 +0000 (07:59 +0200)]
move setup_mountpoint into mount hook

I want to keep that code private.

8 years agocleanup docs
Dietmar Maurer [Tue, 18 Aug 2015 05:32:36 +0000 (07:32 +0200)]
cleanup docs

8 years agouse standard code inside post stop hook
Dietmar Maurer [Tue, 18 Aug 2015 05:25:08 +0000 (07:25 +0200)]
use standard code inside post stop hook

8 years agouse standard code inside pre-start hook
Dietmar Maurer [Tue, 18 Aug 2015 05:18:15 +0000 (07:18 +0200)]
use standard code inside pre-start hook

no need to use those hacks.

8 years agomount hook : setup_mountpoints
Alexandre Derumier [Tue, 18 Aug 2015 03:56:09 +0000 (05:56 +0200)]
mount hook : setup_mountpoints

Signed-off-by: Alexandre Derumier <aderumier@odiso.com>
8 years agoadd lxc.mount.entry for subvol
Alexandre Derumier [Tue, 18 Aug 2015 03:56:08 +0000 (05:56 +0200)]
add lxc.mount.entry for subvol

Signed-off-by: Alexandre Derumier <aderumier@odiso.com>
8 years agoadd pve-prestart-hook and move activate volumes inside it
Alexandre Derumier [Tue, 18 Aug 2015 03:56:07 +0000 (05:56 +0200)]
add pve-prestart-hook and move activate volumes inside it

Signed-off-by: Alexandre Derumier <aderumier@odiso.com>
8 years agoadd lxc-pve-poststop-hook and move vm_stop_cleanup
Alexandre Derumier [Tue, 18 Aug 2015 03:56:06 +0000 (05:56 +0200)]
add lxc-pve-poststop-hook and move vm_stop_cleanup

It's better to vm_stop_cleanup inside poststop hook,
in case of CT failure (wrong start for example)

Signed-off-by: Alexandre Derumier <aderumier@odiso.com>
8 years agovm_stop_cleanup : detach loopdevices for non rootfs mountpoint
Alexandre Derumier [Tue, 18 Aug 2015 03:56:05 +0000 (05:56 +0200)]
vm_stop_cleanup : detach loopdevices for non rootfs mountpoint

Signed-off-by: Alexandre Derumier <aderumier@odiso.com>
8 years agovm_start : attach loop devices for non rootfs mountpoint
Alexandre Derumier [Tue, 18 Aug 2015 03:56:04 +0000 (05:56 +0200)]
vm_start : attach loop devices for non rootfs mountpoint

Signed-off-by: Alexandre Derumier <aderumier@odiso.com>
8 years agodo not allow hotplug of cmode option
Dietmar Maurer [Mon, 17 Aug 2015 10:54:12 +0000 (12:54 +0200)]
do not allow hotplug of cmode option

Hotplug does not work because we use dtach.

8 years agoadd find_loopdev sub
Alexandre Derumier [Sun, 16 Aug 2015 17:43:00 +0000 (19:43 +0200)]
add find_loopdev sub

Signed-off-by: Alexandre Derumier <aderumier@odiso.com>
8 years agoadd blockdevices_list sub
Alexandre Derumier [Sun, 16 Aug 2015 17:42:59 +0000 (19:42 +0200)]
add blockdevices_list sub

Signed-off-by: Alexandre Derumier <aderumier@odiso.com>
8 years agoadd loopdevices_list sub
Alexandre Derumier [Sun, 16 Aug 2015 17:42:58 +0000 (19:42 +0200)]
add loopdevices_list sub

Signed-off-by: Alexandre Derumier <aderumier@odiso.com>
8 years agoimplement new cmode option
Dietmar Maurer [Sat, 15 Aug 2015 07:56:37 +0000 (09:56 +0200)]
implement new cmode option

So that the user can choose to use /dev/ttyX or /dev/console or /bin/sh.

8 years agoforeach_mountpoint: loop with defined order
Dietmar Maurer [Fri, 14 Aug 2015 14:33:52 +0000 (16:33 +0200)]
foreach_mountpoint: loop with defined order

8 years agodeactivate all mountpoint at ct stop
Alexandre Derumier [Fri, 14 Aug 2015 12:56:45 +0000 (14:56 +0200)]
deactivate all mountpoint at ct stop

Signed-off-by: Alexandre Derumier <aderumier@odiso.com>