It's a job that is not in the queue
"""
pass
+
+
+class PostRequired(JenkinsAPIException):
+ """
+ Method requires POST and not GET
+ """
+ pass
from jenkinsapi.fingerprint import Fingerprint
from jenkinsapi.jenkinsbase import JenkinsBase
from jenkinsapi.utils.requester import Requester
-from jenkinsapi.custom_exceptions import UnknownJob
+from jenkinsapi.custom_exceptions import UnknownJob, PostRequired
log = logging.getLogger(__name__)
assert self.has_node(nodename), "This node: %s is not registered as a slave" % nodename
assert nodename != "master", "you cannot delete the master node"
url = "%s/doDelete" % self.get_node_url(nodename)
- self.requester.get_and_confirm_status(url)
+ try:
+ self.requester.get_and_confirm_status(url)
+ except PostRequired:
+ # Latest Jenkins requires POST here. GET kept for compatibility
+ self.requester.post_and_confirm_status(url, data={})
def create_node(self, name, num_executors=2, node_description=None,
remote_fs='/var/lib/jenkins', labels=None, exclusive=False):
"""
from jenkinsapi.jenkinsbase import JenkinsBase
+from jenkinsapi.custom_exceptions import PostRequired
import logging
try:
"""
initial_state = self.is_temporarily_offline()
url = self.baseurl + "/toggleOffline?offlineMessage=" + urlquote(message)
- html_result = self.jenkins.requester.get_and_confirm_status(url)
+ try:
+ html_result = self.jenkins.requester.get_and_confirm_status(url)
+ except PostRequired:
+ html_result = self.jenkins.requester.post_and_confirm_status(url, data={})
+
self.poll()
log.debug(html_result)
state = self.is_temporarily_offline()
# Python3
import urllib.parse as urlparse
-from jenkinsapi.custom_exceptions import JenkinsAPIException
+from jenkinsapi.custom_exceptions import JenkinsAPIException, PostRequired
# import logging
# # these two lines enable debugging at httplib level (requests->urllib3->httplib)
valid = valid or self.VALID_STATUS_CODES
response = self.get_url(url, params, headers)
if not response.status_code in valid:
- raise JenkinsAPIException('Operation failed. url={0}, headers={1}, status={2}, text={3}'.format(
- response.url, headers, response.status_code, response.text.encode('UTF-8')))
+ if response.status_code == 405: # POST required
+ raise PostRequired('POST required for url {0}'.format(url))
+ else:
+ raise JenkinsAPIException('Operation failed. url={0}, headers={1}, status={2}, text={3}'.format(
+ response.url, headers, response.status_code, response.text.encode('UTF-8')))
return response