Я работаю над скриптом Python (2.7), который выполняет ряд проверок на узле Jenkins, чтобы убедиться, что он соответствует всем остальным узлам.Если обнаружено несоответствие, я бы хотел отключить этот конкретный узел.Если возможно, я бы хотел сделать это с помощью пакета urllib2, потому что этот скрипт выполняется на всех разных узлах Jenkins, и я не хочу устанавливать пакет Python Jenkins на каждом из них.Вот некоторые из вещей, которые я пробовал:
Попытка 1:
def take_node_offline(self, node):
print "Taking node %s offline" % node
content = urllib2.urlopen("http://jenkins.com/computer/%s/doDisconnect?offlineMessage=Automated_Disconnect.".format(node))
print content.read()
Не повезло в этом.
Попытка № 2: Я пошел за токеном аутентификации, потому что подумал, что мне может потребоваться пароль для переключения сетевого статуса узлов:
def take_node_offline(node):
print "Taking node {} offline".format(node)
jenkins_base_url = "http://jenkins.com"
username = "admin"
password = "password"
token = TestSuite.authenticate_user(jenkins_base_url, username, password)
url = jenkins_base_url + "/computer/{}/doDisconnect?offlineMessage=Automated_Disconnect.".format(node)
resp = requests.post(url, auth=(username, password))
if resp.ok:
print "OK"
else:
print "Not OK"
Это также не сработало для меня, поскольку пакет запросов былне доступно на каждом узле.Кажется, я на правильном пути, но я не хочу добавлять зависимость от пакета запросов, если это возможно.
Попытка # 3
def take_node_offline(node):
print "Taking node {} offline".format(node)
jenkins_base_url = "http://jenkins.com"
url = jenkins_base_url + "/computer/{}/doDisconnect?offlineMessage=Automated_Disconnect".format(node)
req = urllib2.Request(url)
username = "admin"
password = "password"
auth = 'Basic ' + base64.encodestring('%s:%s' % (username, password))[:-1]
req.add_header('Authorization', auth)
resp = urllib2.urlopen(req)
Это было ближе, но оно давало мне: urllib2.HTTPError: Ошибка HTTP 405: метод не разрешен
Мне кажется, я правильно форматирую запрос, так было в разных местах в Интернете., но, похоже, никто не опубликовал такую проблему, поэтому трудно сказать.
Любые советы или простые решения приветствуются.Я в порядке, если нужно, использую другой подход или пакет, я бы предпочел использовать что-то встроенное в Python, чтобы мне не приходилось устанавливать зависимость везде.Я думаю, что мне нужно решить следующие задачи:
- Аутентификация с помощью Jenkins
- Отправить запрос doDisconnect
- Печать ответа