
On 08/07/2013 09:34 PM, Daniel P. Berrange wrote:
On Wed, Aug 07, 2013 at 09:24:14PM +0800, Wayne Sun wrote:
Delete running container is not supprted and will report an error.
Related to bug: https://bugzilla.redhat.com/show_bug.cgi?id=994495
Signed-off-by: Wayne Sun <gsun@redhat.com> --- bin/virt-sandbox-service | 15 ++++++++++----- 1 files changed, 10 insertions(+), 5 deletions(-)
diff --git a/bin/virt-sandbox-service b/bin/virt-sandbox-service index 550d46c..c07c33b 100755 --- a/bin/virt-sandbox-service +++ b/bin/virt-sandbox-service @@ -254,11 +254,16 @@ class Container:
def delete(self): self.connect() - # Stop service if it is running - try: - self.stop() - except: - pass + # Check container is running or not + cmd = "/usr/bin/virsh -c %s list | sed '1d;2d;$d' | awk -F' '\ + '{ print $2}'" % self.uri + p = Popen(cmd, shell=True, stdout=PIPE, stderr=PIPE) + out, err = p.communicate() + if p.returncode and p.returncode != 0: + raise OSError(_("Failed to list running domain")) + + if self.name in out.splitlines(): + raise ValueError([_("Delete running container is not supported")]) virt-sandbox-service already has a connection to libvirt - no need to spawn virsh here. Just do something like this (untested):
self.conn.fetch_domains() dom = self.conn.find_domain_by_name(self.name) info = dom.get_info() if info.state == LibvirtGObject.DomainState.RUNNING: .....error...
Daniel My limit thought is use virsh or libvirt python api to check domain state, apparently this is better here. This totally works as I tested, v3 on the way. Thanks!
Wayne Sun 2013-08-08