Я должен войти в сколько ящиков?!

Я хочу, чтобы вы представили, что приходите в понедельник утром, делаете глоток кофе, чтобы стряхнуть туман в выходные, и видите, что у вас есть билет для проверки перезапуска службы для микрослужбы, работающей в кластере. По-видимому, на выходных возникла проблема, и им нужно обновить приложение для некоторых изменений, которые они сделали (например, выключение и включение).
Я уверен, что все будет хорошо. Я уверен, что они тестировали в постановке, и ничего не горит. Но я не собираюсь SSH в 35 виртуальных машин, чтобы перезапустить один сервис. У меня нет на это времени. Неа. Итак, ниже я написал небольшой скрипт на Python для обработки входа в любое количество виртуальных машин, в которые вам нужно войти, чтобы выполнить любую задачу, которую вам нужно выполнить.
А если серьезно, то такое происходит постоянно, и я старался написать этот скрипт как можно более подключаемым для повторного использования. Я также использую это довольно часто и держу его в заднем кармане для ситуаций, упомянутых выше, или для других команд bash, которые мне нужно запустить. Все, что выглядит ‹подобно этому›, означает, что вы должны заменить его собственной информацией. Также имейте в виду, что местоположение вашего CSV-файла должно быть в том же каталоге, что и сценарий, если только вы не указали путь явно.
## Mike Dreyfus
## Purpose of script: Uses a python wrapper to log into vms listed in a CSV and do whatever you want.
import csv
import mmap
import re
from pexpect import pxssh
##create a list for systems that failed.
fail_list = []
##Read from CSV file. Replace
try:
with open('<yourcsv.csv>', 'rb') as f:
temp_server_list = []
temp_server_list = [str(row) for row in
csv.reader(f.read().splitlines())]
server_list = []
for stuff in temp_server_list:
new = stuff[2:-2]
server_list.append([new])
except ValueError:
print "Error: Could not open CSV."
##Tries to log into the server and executes bash script
for i in server_list:
HOST = ' '.join(i).rstrip()
print "Trying: " + HOST s = pxssh.pxssh()
try:
username = "<username>"
password = "<password>"
s.timeout = 5
s.login(HOST, username, password)
print "Login successful!"
#
s.sendline('sudo su')
s.prompt
print s.before
s.sendline('Insert your bash command here.')
s.prompt()
owner = s.before
print owner
except (AttributeError, TypeError, pxssh.ExceptionPxssh) as e: #Keep track of hosts the script failed on
print "Failed on " + HOST + "... Probably because SSH failed."
print e
fail_list.append(HOST)
print ""
print "Completed."
print ""
print "I could not connect to the following hosts: "
##Print hosts that it failed to connect to.
for i in fail_list:
print ''.join(i).rstrip()
Это некрасиво, но это не то, к чему мы здесь стремимся.