У меня есть скрипт Python, который использует Fabric для запуска тестов на удаленных хостах, получения файла otuput тестов и выполнения некоторого разбора. Сценарий Python не является файловым.Как выдавать команды на удаленных хостах параллельно с использованием Fabric без использования fabfile?
Я хотел бы запустить и запустить тесты параллельно. Я читал об использовании декоратора «@parallel», но все примеры, которые я прочитал, имеют сценарий как fabfile.
Мой код-то вроде этого:
from fabric.api import *
# Copy the testfile on each of the hosts. This is sequential, it could be
# done in parallel but doing it in parallel is not that important
def copy_test(host_list, testfile_name):
for x in host_list:
env['host_string'] = x
target_testfile_name = "/tmp/" + testfile_name
put(testfile_name, target_testfile_name)
@parallel # Would this decorator work?
def run_test(host_list, testfile_name):
target_testfile_name = "/tmp/" + testfile_name
for x in host_list:
env['host_string'] = x
run(target_testfile_name)
if __name__ == '__main__':
HOSTS = ['10.10.10.10', '10.10.10.11', '10.10.10.12', '10.10.10.13']
testfile_name = "foo.py"
copy_test(HOSTS, testfile_name)
# I would like to launch run_test() in parallel
run_test(HOSTS, testfile_name)
Это упрощенная версия кода. Я не включил все, но я огибаю информацию о конфигурации из узлов, так что ограничивает меня, используя этот скрипт как fabfile где я выдаю что-то вроде:
«потрясающего -НА '10 .10.10.10' copy_test»
"ФАБ -H '10 .10.10.10' run_test" -P
Я мог бы выполнить run_test() с использованием библиотеки threading.Threads, но я предпочел бы сделать это как последнее средство.
Как вы можете видеть, я не запускаю это как файл.
Есть ли способ, которым я мог бы выполнить run_test(), используя модель параллельного выполнения Fabric, не выполняя мой скрипт как «fabfile»?
Что-то еще, вы знаете о переменной среды ткани? Поскольку вы можете сохранить свой список хостов в 'env.hosts', а затем вам не придется передавать их в качестве аргументов – pwnsauce
pwnsauce, спасибо за предложение. Я попробую его и посмотрю, разрешит ли он мою проблему. – SQA777