You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by ts...@apache.org on 2013/05/24 10:54:50 UTC

[1/3] git commit: updated refs/heads/master to 09c6030

Updated Branches:
  refs/heads/master 3b48299a0 -> 09c6030ae


Correct the resize volume tests

Resize would fail on XenServer if the VM isn't stopped before resizing.
Ensuring VM stop based on the hypervisor host detected that the VM is
resident on.

Signed-off-by: Prasanna Santhanam <ts...@apache.org>


Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/09c6030a
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/09c6030a
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/09c6030a

Branch: refs/heads/master
Commit: 09c6030ae9fd759b59634a10e98eb2698a848539
Parents: a6d13cb
Author: Prasanna Santhanam <ts...@apache.org>
Authored: Fri May 24 14:23:14 2013 +0530
Committer: Prasanna Santhanam <ts...@apache.org>
Committed: Fri May 24 14:24:06 2013 +0530

----------------------------------------------------------------------
 test/integration/smoke/test_volumes.py |   24 ++++++++++++++++++------
 1 files changed, 18 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/09c6030a/test/integration/smoke/test_volumes.py
----------------------------------------------------------------------
diff --git a/test/integration/smoke/test_volumes.py b/test/integration/smoke/test_volumes.py
index 7987136..d9c808a 100644
--- a/test/integration/smoke/test_volumes.py
+++ b/test/integration/smoke/test_volumes.py
@@ -536,7 +536,7 @@ class TestVolumes(cloudstackTestCase):
 
     @attr(tags = ["advanced", "advancedns", "smoke", "basic"])
     def test_07_resize_fail(self):
-        """Verify invalid options fail to Resize a volume"""
+        """Test resize (negative) non-existent volume"""
         # Verify the size is the new size is what we wanted it to be.
         self.debug("Fail Resize Volume ID: %s" % self.volume.id)
 
@@ -584,7 +584,12 @@ class TestVolumes(cloudstackTestCase):
         self.virtual_machine.attach_volume(self.apiClient, self.volume)
         self.attached = True
         #stop the vm if it is on xenserver
-        if self.services['hypervisor'].lower() == "xenserver":
+        hosts = Host.list(self.apiClient, id=self.virtual_machine.hostid)
+        self.assertTrue(isinstance(hosts, list))
+        self.assertTrue(len(hosts) > 0)
+        self.debug("Found %s host" % hosts[0].hypervisor)
+
+        if hosts[0].hypervisor == "XenServer":
             self.virtual_machine.stop(self.apiClient)
 
         self.apiClient.resizeVolume(cmd)
@@ -610,23 +615,28 @@ class TestVolumes(cloudstackTestCase):
                          True,
                          "Verify the volume did not resize"
                          )
-        if self.services['hypervisor'].lower() == "xenserver":
+        if hosts[0].hypervisor == "XenServer":
             self.virtual_machine.start(self.apiClient)
 
 
     @attr(tags = ["advanced", "advancedns", "smoke", "basic"])
     def test_08_resize_volume(self):
-        """Resize a volume"""
+        """Test resize a volume"""
         # Verify the size is the new size is what we wanted it to be.
         self.debug(
                 "Attaching volume (ID: %s) to VM (ID: %s)" % (
                                                     self.volume.id,
                                                     self.virtual_machine.id
                                                     ))
+
         self.virtual_machine.attach_volume(self.apiClient, self.volume)
         self.attached = True
+        hosts = Host.list(self.apiClient, id=self.virtual_machine.hostid)
+        self.assertTrue(isinstance(hosts, list))
+        self.assertTrue(len(hosts) > 0)
+        self.debug("Found %s host" % hosts[0].hypervisor)
 
-        if self.services['hypervisor'].lower() == "xenserver":
+        if hosts[0].hypervisor == "XenServer":
             self.virtual_machine.stop(self.apiClient)
         self.debug("Resize Volume ID: %s" % self.volume.id)
 
@@ -659,7 +669,9 @@ class TestVolumes(cloudstackTestCase):
                          "Check if the volume resized appropriately"
                          )
 
-        if self.services['hypervisor'].lower() == "xenserver":
+        #start the vm if it is on xenserver
+
+        if hosts[0].hypervisor == "XenServer":
             self.virtual_machine.start(self.apiClient)
 
     @attr(tags = ["advanced", "advancedns", "smoke","basic"])


[2/3] git commit: updated refs/heads/master to 09c6030

Posted by ts...@apache.org.
Unwrap the test docstring for the testrunner

Signed-off-by: Prasanna Santhanam <ts...@apache.org>


Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/a6d13cb7
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/a6d13cb7
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/a6d13cb7

Branch: refs/heads/master
Commit: a6d13cb7994e99203f99113ae901d110af8ba417
Parents: b2be0db
Author: Prasanna Santhanam <ts...@apache.org>
Authored: Fri May 24 14:22:47 2013 +0530
Committer: Prasanna Santhanam <ts...@apache.org>
Committed: Fri May 24 14:24:06 2013 +0530

----------------------------------------------------------------------
 test/integration/smoke/test_network.py |  222 +++++++++++++--------------
 1 files changed, 110 insertions(+), 112 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/a6d13cb7/test/integration/smoke/test_network.py
----------------------------------------------------------------------
diff --git a/test/integration/smoke/test_network.py b/test/integration/smoke/test_network.py
index 9dfdc6e..eb33c63 100644
--- a/test/integration/smoke/test_network.py
+++ b/test/integration/smoke/test_network.py
@@ -189,8 +189,7 @@ class TestPublicIP(cloudstackTestCase):
 
     @attr(tags = ["advanced", "advancedns", "smoke"])
     def test_public_ip_admin_account(self):
-        """Test for Associate/Disassociate
-        public IP address for admin account"""
+        """Test for Associate/Disassociate public IP address for admin account"""
 
         # Validate the following:
         # 1. listPubliIpAddresses API returns the list of acquired addresses
@@ -240,8 +239,7 @@ class TestPublicIP(cloudstackTestCase):
 
     @attr(tags = ["advanced", "advancedns", "smoke"])
     def test_public_ip_user_account(self):
-        """Test for Associate/Disassociate
-            public IP address for user account"""
+        """Test for Associate/Disassociate public IP address for user account"""
 
         # Validate the following:
         # 1. listPubliIpAddresses API returns the list of acquired addresses
@@ -885,102 +883,102 @@ class TestLoadBalancingRule(cloudstackTestCase):
 
         # Check if VM is in Running state before creating LB rule
         vm_response = VirtualMachine.list(
-                                          self.apiclient,
-                                          account=self.account.name,
-                                          domainid=self.account.domainid
-                                          )
+            self.apiclient,
+            account=self.account.name,
+            domainid=self.account.domainid
+        )
 
         self.assertEqual(
-                            isinstance(vm_response, list),
-                            True,
-                            "Check list VM returns a valid list"
-                        )
+            isinstance(vm_response, list),
+            True,
+            "Check list VM returns a valid list"
+        )
 
         self.assertNotEqual(
-                            len(vm_response),
-                            0,
-                            "Check Port Forwarding Rule is created"
-                            )
+            len(vm_response),
+            0,
+            "Check Port Forwarding Rule is created"
+        )
         for vm in vm_response:
             self.assertEqual(
-                            vm.state,
-                            'Running',
-                            "VM state should be Running before creating a NAT rule."
-                        )
+                vm.state,
+                'Running',
+                "VM state should be Running before creating a NAT rule."
+            )
 
         #Create Load Balancer rule and assign VMs to rule
         lb_rule = LoadBalancerRule.create(
-                                          self.apiclient,
-                                          self.services["lbrule"],
-                                          self.non_src_nat_ip.ipaddress.id,
-                                          accountid=self.account.name
-                                          )
+            self.apiclient,
+            self.services["lbrule"],
+            self.non_src_nat_ip.ipaddress.id,
+            accountid=self.account.name
+        )
         self.cleanup.append(lb_rule)
 
         lb_rule.assign(self.apiclient, [self.vm_1, self.vm_2])
 
         lb_rules = list_lb_rules(
-                                 self.apiclient,
-                                 id=lb_rule.id
-                                 )
+            self.apiclient,
+            id=lb_rule.id
+        )
 
         self.assertEqual(
-                            isinstance(lb_rules, list),
-                            True,
-                            "Check list response returns a valid list"
-                        )
+            isinstance(lb_rules, list),
+            True,
+            "Check list response returns a valid list"
+        )
         #verify listLoadBalancerRules lists the added load balancing rule
         self.assertNotEqual(
-                            len(lb_rules),
-                            0,
-                            "Check Load Balancer Rule in its List"
-                        )
+            len(lb_rules),
+            0,
+            "Check Load Balancer Rule in its List"
+        )
         self.assertEqual(
-                            lb_rules[0].id,
-                            lb_rule.id,
-                            "Check List Load Balancer Rules returns valid Rule"
-                        )
+            lb_rules[0].id,
+            lb_rule.id,
+            "Check List Load Balancer Rules returns valid Rule"
+        )
         # listLoadBalancerRuleInstances should list
         # all instances associated with that LB rule
         lb_instance_rules = list_lb_instances(
-                                              self.apiclient,
-                                              id=lb_rule.id
-                                              )
+            self.apiclient,
+            id=lb_rule.id
+        )
         self.assertEqual(
-                            isinstance(lb_instance_rules, list),
-                            True,
-                            "Check list response returns a valid list"
-                        )
+            isinstance(lb_instance_rules, list),
+            True,
+            "Check list response returns a valid list"
+        )
         self.assertNotEqual(
-                            len(lb_instance_rules),
-                            0,
-                            "Check Load Balancer instances Rule in its List"
-                        )
+            len(lb_instance_rules),
+            0,
+            "Check Load Balancer instances Rule in its List"
+        )
 
         self.assertIn(
-                lb_instance_rules[0].id,
-                [self.vm_1.id, self.vm_2.id],
-                "Check List Load Balancer instances Rules returns valid VM ID"
-                            )
+            lb_instance_rules[0].id,
+            [self.vm_1.id, self.vm_2.id],
+            "Check List Load Balancer instances Rules returns valid VM ID"
+        )
 
         self.assertIn(
-                lb_instance_rules[1].id,
-                [self.vm_1.id, self.vm_2.id],
-                "Check List Load Balancer instances Rules returns valid VM ID"
-                )
+            lb_instance_rules[1].id,
+            [self.vm_1.id, self.vm_2.id],
+            "Check List Load Balancer instances Rules returns valid VM ID"
+        )
         try:
             self.debug("SSHing into IP address: %s after adding VMs (ID: %s , %s)" %
-                                            (
-                                             self.non_src_nat_ip.ipaddress.ipaddress,
-                                             self.vm_1.id,
-                                             self.vm_2.id
-                                             ))
+                       (
+                           self.non_src_nat_ip.ipaddress.ipaddress,
+                           self.vm_1.id,
+                           self.vm_2.id
+                           ))
             ssh_1 = remoteSSHClient(
-                                    self.non_src_nat_ip.ipaddress.ipaddress,
-                                    self.services['lbrule']["publicport"],
-                                    self.vm_1.username,
-                                    self.vm_1.password
-                                    )
+                self.non_src_nat_ip.ipaddress.ipaddress,
+                self.services['lbrule']["publicport"],
+                self.vm_1.username,
+                self.vm_1.password
+            )
 
             # If Round Robin Algorithm is chosen,
             # each ssh command should alternate between VMs
@@ -989,71 +987,71 @@ class TestLoadBalancingRule(cloudstackTestCase):
             time.sleep(self.services["lb_switch_wait"])
 
             self.debug("SSHing again into IP address: %s with VMs (ID: %s , %s) added to LB rule" %
-                                            (
-                                             self.non_src_nat_ip.ipaddress.ipaddress,
-                                             self.vm_1.id,
-                                             self.vm_2.id
-                                             ))
+                       (
+                           self.non_src_nat_ip.ipaddress.ipaddress,
+                           self.vm_1.id,
+                           self.vm_2.id
+                           ))
             ssh_2 = remoteSSHClient(
-                                    self.non_src_nat_ip.ipaddress.ipaddress,
-                                    self.services['lbrule']["publicport"],
-                                    self.vm_1.username,
-                                    self.vm_1.password
-                                    )
+                self.non_src_nat_ip.ipaddress.ipaddress,
+                self.services['lbrule']["publicport"],
+                self.vm_1.username,
+                self.vm_1.password
+            )
 
             hostnames.append(ssh_2.execute("hostname")[0])
             self.debug("Hostnames after adding 2 VMs to LB rule: %s" % str(hostnames))
             self.assertIn(
-                      self.vm_1.name,
-                      hostnames,
-                      "Check if ssh succeeded for server1"
-                      )
+                self.vm_1.name,
+                hostnames,
+                "Check if ssh succeeded for server1"
+            )
             self.assertIn(
-                      self.vm_2.name,
-                      hostnames,
-                      "Check if ssh succeeded for server2"
-                      )
+                self.vm_2.name,
+                hostnames,
+                "Check if ssh succeeded for server2"
+            )
 
             #SSH should pass till there is a last VM associated with LB rule
             lb_rule.remove(self.apiclient, [self.vm_2])
 
             self.debug("SSHing into IP address: %s after removing VM (ID: %s) from LB rule" %
-                                            (
-                                             self.non_src_nat_ip.ipaddress.ipaddress,
-                                             self.vm_2.id
-                                             ))
+                       (
+                           self.non_src_nat_ip.ipaddress.ipaddress,
+                           self.vm_2.id
+                           ))
             ssh_1 = remoteSSHClient(
-                                        self.non_src_nat_ip.ipaddress.ipaddress,
-                                        self.services['lbrule']["publicport"],
-                                        self.vm_1.username,
-                                        self.vm_1.password
-                                        )
+                self.non_src_nat_ip.ipaddress.ipaddress,
+                self.services['lbrule']["publicport"],
+                self.vm_1.username,
+                self.vm_1.password
+            )
 
             hostnames.append(ssh_1.execute("hostname")[0])
             self.debug("Hostnames after removing VM2: %s" % str(hostnames))
         except Exception as e:
             self.fail("%s: SSH failed for VM with IP Address: %s" %
-                                        (e, self.non_src_nat_ip.ipaddress.ipaddress))
+                      (e, self.non_src_nat_ip.ipaddress.ipaddress))
 
         self.assertIn(
-                      self.vm_1.name,
-                      hostnames,
-                      "Check if ssh succeeded for server1"
-                      )
+            self.vm_1.name,
+            hostnames,
+            "Check if ssh succeeded for server1"
+        )
 
         lb_rule.remove(self.apiclient, [self.vm_1])
         with self.assertRaises(Exception):
-            self.fail("SSHing into IP address: %s after removing VM (ID: %s) from LB rule" %
-                                            (
-                                             self.non_src_nat_ip.ipaddress.ipaddress,
-                                             self.vm_1.id
-                                             ))
+            self.debug("SSHing into IP address: %s after removing VM (ID: %s) from LB rule" %
+                       (
+                           self.non_src_nat_ip.ipaddress.ipaddress,
+                           self.vm_1.id
+                           ))
             ssh_1 = remoteSSHClient(
-                                        self.non_src_nat_ip.ipaddress.ipaddress,
-                                        self.services['lbrule']["publicport"],
-                                        self.vm_1.username,
-                                        self.vm_1.password
-                                        )
+                self.non_src_nat_ip.ipaddress.ipaddress,
+                self.services['lbrule']["publicport"],
+                self.vm_1.username,
+                self.vm_1.password
+            )
             ssh_1.execute("hostname")[0]
         return
 
@@ -1556,7 +1554,7 @@ class TestReleaseIP(cloudstackTestCase):
 
     @attr(tags = ["advanced", "advancedns", "smoke"])
     def test_releaseIP(self):
-        """Test for Associate/Disassociate public IP address"""
+        """Test for release public IP address"""
 
         self.debug("Deleting Public IP : %s" % self.ip_addr.id)
 


[3/3] git commit: updated refs/heads/master to 09c6030

Posted by ts...@apache.org.
Fixing incorrect ipaddress references

test_network: references to ipaddress are ipaddress.ipaddress
Added more logging to volume tests

Signed-off-by: Prasanna Santhanam <ts...@apache.org>


Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/b2be0dbf
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/b2be0dbf
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/b2be0dbf

Branch: refs/heads/master
Commit: b2be0dbf6b48aa1d7a7e9cc7b5ab92dac84516b0
Parents: 3b48299
Author: Prasanna Santhanam <ts...@apache.org>
Authored: Fri May 24 11:12:39 2013 +0530
Committer: Prasanna Santhanam <ts...@apache.org>
Committed: Fri May 24 14:24:06 2013 +0530

----------------------------------------------------------------------
 test/integration/smoke/test_network.py |   34 ++++++++++++---------------
 test/integration/smoke/test_volumes.py |    2 +-
 2 files changed, 16 insertions(+), 20 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/b2be0dbf/test/integration/smoke/test_network.py
----------------------------------------------------------------------
diff --git a/test/integration/smoke/test_network.py b/test/integration/smoke/test_network.py
index 61ddf46..9dfdc6e 100644
--- a/test/integration/smoke/test_network.py
+++ b/test/integration/smoke/test_network.py
@@ -971,12 +971,12 @@ class TestLoadBalancingRule(cloudstackTestCase):
         try:
             self.debug("SSHing into IP address: %s after adding VMs (ID: %s , %s)" %
                                             (
-                                             self.non_src_nat_ip.ipaddress,
+                                             self.non_src_nat_ip.ipaddress.ipaddress,
                                              self.vm_1.id,
                                              self.vm_2.id
                                              ))
             ssh_1 = remoteSSHClient(
-                                    self.non_src_nat_ip.ipaddress,
+                                    self.non_src_nat_ip.ipaddress.ipaddress,
                                     self.services['lbrule']["publicport"],
                                     self.vm_1.username,
                                     self.vm_1.password
@@ -990,12 +990,12 @@ class TestLoadBalancingRule(cloudstackTestCase):
 
             self.debug("SSHing again into IP address: %s with VMs (ID: %s , %s) added to LB rule" %
                                             (
-                                             self.non_src_nat_ip.ipaddress,
+                                             self.non_src_nat_ip.ipaddress.ipaddress,
                                              self.vm_1.id,
                                              self.vm_2.id
                                              ))
             ssh_2 = remoteSSHClient(
-                                    self.non_src_nat_ip.ipaddress,
+                                    self.non_src_nat_ip.ipaddress.ipaddress,
                                     self.services['lbrule']["publicport"],
                                     self.vm_1.username,
                                     self.vm_1.password
@@ -1019,11 +1019,11 @@ class TestLoadBalancingRule(cloudstackTestCase):
 
             self.debug("SSHing into IP address: %s after removing VM (ID: %s) from LB rule" %
                                             (
-                                             self.non_src_nat_ip.ipaddress,
+                                             self.non_src_nat_ip.ipaddress.ipaddress,
                                              self.vm_2.id
                                              ))
             ssh_1 = remoteSSHClient(
-                                        self.non_src_nat_ip.ipaddress,
+                                        self.non_src_nat_ip.ipaddress.ipaddress,
                                         self.services['lbrule']["publicport"],
                                         self.vm_1.username,
                                         self.vm_1.password
@@ -1033,7 +1033,7 @@ class TestLoadBalancingRule(cloudstackTestCase):
             self.debug("Hostnames after removing VM2: %s" % str(hostnames))
         except Exception as e:
             self.fail("%s: SSH failed for VM with IP Address: %s" %
-                                        (e, self.non_src_nat_ip.ipaddress))
+                                        (e, self.non_src_nat_ip.ipaddress.ipaddress))
 
         self.assertIn(
                       self.vm_1.name,
@@ -1045,11 +1045,11 @@ class TestLoadBalancingRule(cloudstackTestCase):
         with self.assertRaises(Exception):
             self.fail("SSHing into IP address: %s after removing VM (ID: %s) from LB rule" %
                                             (
-                                             self.non_src_nat_ip.ipaddress,
+                                             self.non_src_nat_ip.ipaddress.ipaddress,
                                              self.vm_1.id
                                              ))
             ssh_1 = remoteSSHClient(
-                                        self.non_src_nat_ip.ipaddress,
+                                        self.non_src_nat_ip.ipaddress.ipaddress,
                                         self.services['lbrule']["publicport"],
                                         self.vm_1.username,
                                         self.vm_1.password
@@ -1203,7 +1203,7 @@ class TestRebootRouter(cloudstackTestCase):
             self.debug("SSH into VM (ID : %s ) after reboot" % self.vm_1.id)
 
             remoteSSHClient(
-                                    self.nat_rule.ipaddress,
+                                    self.nat_rule.ipaddress.ipaddress,
                                     self.services["natrule"]["publicport"],
                                     self.vm_1.username,
                                     self.vm_1.password
@@ -1211,8 +1211,7 @@ class TestRebootRouter(cloudstackTestCase):
         except Exception as e:
             self.fail(
                       "SSH Access failed for %s: %s" % \
-                      (self.vm_1.ipaddress, e)
-                      )
+                      (self.vm_1.ipaddress, e))
         return
 
     def tearDown(self):
@@ -1579,7 +1578,6 @@ class TestReleaseIP(cloudstackTestCase):
                     "Check if disassociated IP Address is no longer available"
                    )
 
-        self.debug("List NAT Rule response" + str(list_nat_rule))
         # ListPortForwardingRules should not list
         # associated rules with Public IP address
         try:
@@ -1587,18 +1585,18 @@ class TestReleaseIP(cloudstackTestCase):
                                         self.apiclient,
                                         id=self.nat_rule.id
                                         )
+            self.debug("List NAT Rule response" + str(list_nat_rule))
         except cloudstackAPIException:
             self.debug("Port Forwarding Rule is deleted")
 
         # listLoadBalancerRules should not list
         # associated rules with Public IP address
-        self.debug("List LB Rule response" + str(list_lb_rule))
         try:
             list_lb_rule = list_lb_rules(
                                      self.apiclient,
                                      id=self.lb_rule.id
                                      )
-
+            self.debug("List LB Rule response" + str(list_lb_rule))
         except cloudstackAPIException:
             self.debug("Port Forwarding Rule is deleted")
 
@@ -1658,7 +1656,6 @@ class TestDeleteAccount(cloudstackTestCase):
 
         try:
             src_nat_ip_addr = src_nat_ip_addrs[0]
-
         except Exception as e:
             self.fail("SSH failed for VM with IP: %s" %
                                     src_nat_ip_addr.ipaddress)
@@ -1740,10 +1737,9 @@ class TestDeleteAccount(cloudstackTestCase):
                              "Check routers are properly deleted."
                    )
         except Exception as e:
-
             raise Exception(
-                "Exception raised while fetching routers for account: %s" %
-                                                    self.account.name)
+                "Encountered %s raised while fetching routers for account: %s" % (e,
+                                                    self.account.name))
         return
 
     def tearDown(self):

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/b2be0dbf/test/integration/smoke/test_volumes.py
----------------------------------------------------------------------
diff --git a/test/integration/smoke/test_volumes.py b/test/integration/smoke/test_volumes.py
index 89b013a..7987136 100644
--- a/test/integration/smoke/test_volumes.py
+++ b/test/integration/smoke/test_volumes.py
@@ -209,8 +209,8 @@ class TestCreateVolume(cloudstackTestCase):
                                                )
             try:
                 ssh = self.virtual_machine.get_ssh_client()
+                self.debug("Rebooting VM %s" % self.virtual_machine.id)
                 ssh.execute("reboot")
-
             except Exception as e:
                 self.fail("SSH access failed for VM %s - %s" %
                                 (self.virtual_machine.ipaddress, e))