LGTM, thanks

On Wed, Aug 27, 2014 at 10:17 PM, Yuto KAWAMURA(kawamuray) <
[email protected]> wrote:

> This patch implements the RebootInstance functionality of the
> LXCHypervisor.
> Reboot of the LXC container can be done by using the lxc-stop command
> with the --reboot switch. Internally this just sends SIGINT to the
> init process of the container.
> Since the init process is working on the host machine natively, it
> requires CAP_SYS_BOOT capability to call the reboot(2) system call.
> This function detects if CAP_SYS_BOOT was dropped from the container
> and raises an error to enforce that requirement.
> It is up to users to decide if they use the soft reboot of the LXC
> container by allowing CAP_SYS_BOOT or drop it and do not use the soft
> reboot.
>
> Signed-off-by: Yuto KAWAMURA(kawamuray) <[email protected]>
> ---
>  lib/hypervisor/hv_lxc.py | 19 ++++++++++++++-----
>  1 file changed, 14 insertions(+), 5 deletions(-)
>
> diff --git a/lib/hypervisor/hv_lxc.py b/lib/hypervisor/hv_lxc.py
> index dfd47e6..52007b5 100644
> --- a/lib/hypervisor/hv_lxc.py
> +++ b/lib/hypervisor/hv_lxc.py
> @@ -94,6 +94,7 @@ class LXCHypervisor(hv_base.BaseHypervisor):
>
>    # Let beta version following micro version, but don't care about it
>    _LXC_VERSION_RE = re.compile(r"^(\d+)\.(\d+)\.(\d+)")
> +  _REBOOT_TIMEOUT = 120 # secs
>
>    def __init__(self):
>      hv_base.BaseHypervisor.__init__(self)
> @@ -686,12 +687,20 @@ class LXCHypervisor(hv_base.BaseHypervisor):
>    def RebootInstance(self, instance):
>      """Reboot an instance.
>
> -    This is not (yet) implemented (in Ganeti) for the LXC hypervisor.
> -
>      """
> -    # TODO: implement reboot
> -    raise HypervisorError("The LXC hypervisor doesn't implement the"
> -                          " reboot functionality")
> +    if "sys_boot" in self._GetInstanceDropCapabilities(instance.hvparams):
> +      raise HypervisorError("The LXC container can't perform a reboot
> with the"
> +                            " SYS_BOOT capability dropped.")
> +
> +    # We can't use the --timeout=-1 approach as same as the StopInstance
> due to
> +    # the following patch was applied in lxc-1.0.5 and we are supporting
> +    # LXC >= 1.0.0.
> +    #
> http://lists.linuxcontainers.org/pipermail/lxc-devel/2014-July/009742.html
> +    result = utils.RunCmd(["lxc-stop", "-n", instance.name, "--reboot",
> +                           "--timeout", str(self._REBOOT_TIMEOUT)])
> +    if result.failed:
> +      raise HypervisorError("Failed to reboot instance %s: %s" %
> +                            (instance.name, result.output))
>
>    def BalloonInstanceMemory(self, instance, mem):
>      """Balloon an instance memory to a certain value.
> --
> 2.0.4
>
>


Hrvoje Ribicic
Ganeti Engineering
Google Germany GmbH
Dienerstr. 12, 80331, München

Registergericht und -nummer: Hamburg, HRB 86891
Sitz der Gesellschaft: Hamburg
Geschäftsführer: Graham Law, Christine Elizabeth Flores
Steuernummer: 48/725/00206
Umsatzsteueridentifikationsnummer: DE813741370

Reply via email to