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

Я хочу, чтобы вы представили, что приходите в понедельник утром, делаете глоток кофе, чтобы стряхнуть туман в выходные, и видите, что у вас есть билет для проверки перезапуска службы для микрослужбы, работающей в кластере. По-видимому, на выходных возникла проблема, и им нужно обновить приложение для некоторых изменений, которые они сделали (например, выключение и включение).

Я уверен, что все будет хорошо. Я уверен, что они тестировали в постановке, и ничего не горит. Но я не собираюсь 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()

Это некрасиво, но это не то, к чему мы здесь стремимся.