Я написал небольшой код для управления несколькими вычислительными движками на облачной платформе Google.Весь файл находится здесь в github .
Причиной проблемы является gcloud compute ssh
в следующем
def upload_file(self, projectname):
var = raw_input("Upload file with name: " + projectname + " will remove all file and directory with same name in the instance. Are you sure? (y/n)")
if var.lower().strip() != "y":
print "Abort uploading."
return
is_zip = False
if projectname.split('.')[1] == "zip":
is_zip = True
fullpath_projectname = __location__ + "/" + projectname
if os.path.isfile(fullpath_projectname):
all_instances = self.search_any('instances', filter="labels.type=" + self.working_group_label)
all_instances_name = [x['name'] for x in all_instances]
i = 0
for instance in all_instances_name:
temp_command = 'gcloud_command_' + str(i)
i += 1
temp_instance = user_name + "@" + instance
temp_file_path = '/home/' + user_name + '/'
command_arr = []
command_arr.append('call gcloud compute ssh ' + temp_instance + ' --zone ' + zone + ' --command "cd ' + temp_file_path + '; sudo rm -rf ' + temp_file_path + projectname.split('.')[0] + '; sudo rm -f ' + temp_file_path + projectname.split('.')[0] + '*"\n')
command_arr.append('call gcloud compute scp "' + fullpath_projectname + '" ' + temp_instance + ':' + temp_file_path + '\n')
if is_zip:
command_arr.append('call gcloud compute ssh ' + temp_instance + ' --zone ' + zone + ' ' + ' --command "cd ' + temp_file_path + '; sudo unzip ' + temp_file_path + projectname + '"' + '\n')
with open(os.path.join(__location__, 'bat/' + temp_command + '.bat'), 'w') as bat:
bat.writelines(command_arr)
subprocess.Popen(os.path.join(__location__, 'bat/' + temp_command + '.bat'), shell=True)
Эта часть предназначена для загрузки того же файла (обычно.zip) для всех экземпляров с одинаковым тегом.Однако выполнение этого на моем локальном компьютере вызовет много предупреждений, требующих сохранения отпечатка ssh.
Как это,
Первоначально для моего удобства это был небольшой инструмент, позволяющий запускать несколько вычислительных движков для запроса сетевых данных (я хочу иметь несколько IP-адресов, чтобы не классифицировать их как DDoS).Но теперь мне нужно поделиться этим с другими командами, чтобы связка предупреждений вызывала замешательство у других.
Я могу кэшировать их по одному вручную, но для других это не удобно.
Я пытался ответить на кеширование, изменив последнюю строку
proc = subprocess.Popen(os.path.join(__location__, 'bat/' + temp_command + '.bat'), shell=True)
proc.communicate(input='y')
Но это вынуждает каждую загрузку просто выполнять одну за другой , и это очень медленно для многих случаев.