various improvements
This commit is contained in:
@ -1,3 +1,18 @@
|
||||
# This file is part of Compute
|
||||
#
|
||||
# Compute is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# Ansible is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with Ansible. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
from .guest_agent import GuestAgent
|
||||
from .instance import Instance, InstanceConfig
|
||||
from .schemas import InstanceSchema
|
||||
|
@ -1,3 +1,18 @@
|
||||
# This file is part of Compute
|
||||
#
|
||||
# Compute is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# Ansible is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with Ansible. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
"""Interacting with the QEMU Guest Agent."""
|
||||
|
||||
import json
|
||||
|
@ -1,3 +1,18 @@
|
||||
# This file is part of Compute
|
||||
#
|
||||
# Compute is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# Ansible is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with Ansible. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
"""Manage compute instances."""
|
||||
|
||||
__all__ = ['Instance', 'InstanceConfig', 'InstanceInfo']
|
||||
@ -9,6 +24,7 @@ import libvirt
|
||||
from lxml import etree
|
||||
from lxml.builder import E
|
||||
|
||||
from compute.common import DeviceConfig, EntityConfig
|
||||
from compute.exceptions import (
|
||||
GuestAgentCommandNotSupportedError,
|
||||
InstanceError,
|
||||
@ -28,8 +44,8 @@ from .schemas import (
|
||||
log = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class InstanceConfig:
|
||||
"""Compute instance config builder."""
|
||||
class InstanceConfig(EntityConfig):
|
||||
"""Compute instance XML config builder."""
|
||||
|
||||
def __init__(self, schema: InstanceSchema):
|
||||
"""
|
||||
@ -181,10 +197,6 @@ class InstanceInfo(NamedTuple):
|
||||
cputime: int
|
||||
|
||||
|
||||
class DeviceConfig:
|
||||
"""Abstract device config class."""
|
||||
|
||||
|
||||
class Instance:
|
||||
"""Manage compute instances."""
|
||||
|
||||
@ -492,7 +504,7 @@ class Instance:
|
||||
return child[0].getparent() if child else None
|
||||
|
||||
def attach_device(
|
||||
self, device: 'DeviceConfig', *, live: bool = False
|
||||
self, device: DeviceConfig, *, live: bool = False
|
||||
) -> None:
|
||||
"""
|
||||
Attach device to compute instance.
|
||||
@ -517,7 +529,7 @@ class Instance:
|
||||
self.domain.attachDeviceFlags(device.to_xml(), flags=flags)
|
||||
|
||||
def detach_device(
|
||||
self, device: 'DeviceConfig', *, live: bool = False
|
||||
self, device: DeviceConfig, *, live: bool = False
|
||||
) -> None:
|
||||
"""
|
||||
Dettach device from compute instance.
|
||||
@ -545,8 +557,8 @@ class Instance:
|
||||
"""
|
||||
Detach disk device by target name.
|
||||
|
||||
There is no ``attach_disk()`` method. Use :method:`attach_device`
|
||||
with :class:`DiskConfig` as parameter.
|
||||
There is no ``attach_disk()`` method. Use :func:`attach_device`
|
||||
with :class:`DiskConfig` as argument.
|
||||
|
||||
:param name: Disk name e.g. 'vda', 'sda', etc. This name may
|
||||
not match the name of the disk inside the guest OS.
|
||||
@ -574,14 +586,14 @@ class Instance:
|
||||
raise InstanceError(msg)
|
||||
self.detach_device(DiskConfig(**disk_params), live=True)
|
||||
|
||||
def resize_volume(
|
||||
def resize_disk(
|
||||
self, name: str, capacity: int, unit: units.DataUnit
|
||||
) -> None:
|
||||
"""
|
||||
Resize attached block device.
|
||||
|
||||
:param name: Disk device name e.g. `vda`, `sda`, etc.
|
||||
:param capacity: New volume capacity.
|
||||
:param capacity: New capacity.
|
||||
:param unit: Capacity unit.
|
||||
"""
|
||||
self.domain.blockResize(
|
||||
@ -590,6 +602,10 @@ class Instance:
|
||||
flags=libvirt.VIR_DOMAIN_BLOCK_RESIZE_BYTES,
|
||||
)
|
||||
|
||||
def get_disks(self) -> list[DiskConfig]:
|
||||
"""Return list of attached disks."""
|
||||
raise NotImplementedError
|
||||
|
||||
def pause(self) -> None:
|
||||
"""Pause instance."""
|
||||
if not self.is_running():
|
||||
@ -600,9 +616,9 @@ class Instance:
|
||||
"""Resume paused instance."""
|
||||
self.domain.resume()
|
||||
|
||||
def list_ssh_keys(self, user: str) -> list[str]:
|
||||
def get_ssh_keys(self, user: str) -> list[str]:
|
||||
"""
|
||||
Get list of SSH keys on guest for specific user.
|
||||
Return list of SSH keys on guest for specific user.
|
||||
|
||||
:param user: Username.
|
||||
"""
|
||||
@ -617,7 +633,7 @@ class Instance:
|
||||
"""
|
||||
raise NotImplementedError
|
||||
|
||||
def remove_ssh_keys(self, user: str, ssh_keys: list[str]) -> None:
|
||||
def delete_ssh_keys(self, user: str, ssh_keys: list[str]) -> None:
|
||||
"""
|
||||
Remove SSH keys from guest for specific user.
|
||||
|
||||
@ -632,7 +648,7 @@ class Instance:
|
||||
"""
|
||||
Set new user password in guest OS.
|
||||
|
||||
This action performs by guest agent inside guest.
|
||||
This action performs by guest agent inside the guest.
|
||||
|
||||
:param user: Username.
|
||||
:param password: Password.
|
||||
@ -653,6 +669,7 @@ class Instance:
|
||||
return self.domain.XMLDesc(flags)
|
||||
|
||||
def delete(self) -> None:
|
||||
"""Undefine instance and delete local volumes."""
|
||||
"""Undefine instance."""
|
||||
# TODO @ge: delete local disks
|
||||
self.shutdown(method='HARD')
|
||||
self.domain.undefine()
|
||||
|
@ -1,3 +1,18 @@
|
||||
# This file is part of Compute
|
||||
#
|
||||
# Compute is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# Ansible is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with Ansible. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
"""Compute instance related objects schemas."""
|
||||
|
||||
import re
|
||||
|
Reference in New Issue
Block a user