set node online/offline
authorRuslan Lutsenko <ruslan.lutcenko@gmail.com>
Fri, 18 Jan 2013 02:25:38 +0000 (03:25 +0100)
committerRuslan Lutsenko <ruslan.lutcenko@gmail.com>
Fri, 18 Jan 2013 02:25:38 +0000 (03:25 +0100)
jenkinsapi/node.py

index 8a2c1bb..c942de1 100644 (file)
@@ -1,5 +1,6 @@
 from jenkinsapi.jenkinsbase import JenkinsBase
 import logging
+import urllib
 
 log = logging.getLogger(__name__)
 
@@ -33,11 +34,49 @@ class Node(JenkinsBase):
         return self._data
 
     def is_online(self):
+        self.poll()
         return not self._data['offline']
 
+    def is_temporarily_offline(self):
+        self.poll()
+        return self._data['temporarilyOffline']
+
     def is_jnlpagent(self):
         return self._data['jnlpAgent']
 
     def is_idle(self):
         return self._data['idle']
 
+
+    def set_online(self):
+        self.poll()
+        if self._data['offline'] and not self._data['temporarilyOffline']:
+            raise AssertionError("Node is offline and not marked as temporarilyOffline" + 
+                                 ", check client connection: " + 
+                                 "offline = %s , temporarilyOffline = %s" % 
+                                (self._data['offline'], self._data['temporarilyOffline']))
+        elif self._data['offline'] and self._data['temporarilyOffline']:
+            self.toggle_temporarily_offline()
+            self.poll()
+            if self._data['offline']:
+                raise AssertionError("The node state is still offline, check client connection:" + 
+                                     " offline = %s , temporarilyOffline = %s" % 
+                                     (self._data['offline'], self._data['temporarilyOffline']))
+
+    def set_offline(self, message="requested from jenkinsapi"):
+        self.poll()
+        if not self._data['offline']:
+            self.toggle_temporarily_offline(message)
+            self.poll()
+            if not self._data['offline']:
+                raise AssertionError("The node state is still online:" + 
+                                     "offline = %s , temporarilyOffline = %s" % 
+                                     (self._data['offline'], self._data['temporarilyOffline']))
+
+    def toggle_temporarily_offline(self, message="requested from jenkinsapi"):
+        initial_state = self.is_temporarily_offline()
+        url = self.baseurl + "/toggleOffline?offlineMessage=" + urllib.quote(message)
+        html_result = self.hit_url(url)
+        log.debug(html_result)
+        if initial_state == self.is_temporarily_offline():
+            raise AssertionError("The node state has not changed: temporarilyOffline = %s" % state)