Предположение, что я не могу выполнить что-то вроде этого с Матрицей:
run("svn update --password 'password' .")
как надлежащий путь состоит в том, чтобы передать Матрице пароль для удаленной интерактивной командной строки?
Проблема состоит в том, что repo проверяется как svn+ssh, и у меня нет http/https/svn опции
Попробуйте SSHkey. Это позволяет вам подключаться к серверу без пароля. В этом случае вам нужно будет установить sshkey между вашим удаленным сервером и репо.
На удаленном сервере: сгенерировать пару ключей
$ ssh-keygen -t dsa
Оставьте пароль пустым! Это создаст 2 файла
Затем добавьте содержимое в id_dsa.pub в ~ / .ssh / authorized_keys на сервере репо.
Ваш удаленный сервер сможет обновлять исходное дерево без необходимости ввода пароля.
Вам следует взглянуть на документацию по env Fabric . Там говорится, что вы должны сделать что-то вроде этого:
from fabric.api import env
env.user = 'your_user'
env.password = 'your_password'
Надеюсь, это поможет!
Некоторое время назад у нас была проблема, похожая на эту, и мы фактически предложили новую функцию для Fabric, но разработчик, с которым мы говорили, предложил это вместо этого.
import getpass
password = getpass.getpass('Enter SVN Password: ')
run("svn update --password '%s'" % password)
Вам будет предложено ввести пароль, когда придет время для запуска этой команды фабрикой.
Я полагаю, что это отобразит ваш пароль в журнале структуры, поэтому лучшим вариантом было бы заставить SVN запрашивать пароль и выводить его в него.
run('echo %s | svn update --password' % password)
Я не использую SVN, поэтому боюсь, что не уверен, возможно ли это. Я надеюсь, что кто-то еще может помочь в этом!
Возможно, вам также понадобится указать пользователя? Если нет, возможно, вам больше повезет с экспортом вашего репо и созданием из него tar (локально) для загрузки и развертывания на сервере. Если вы запустите команды svn локально, вы сможете получить запрос на ввод имени пользователя и / или пароля.
Мой стандартный ответ для автоматизации интерактивных командных строк - "используйте Expect", но вы используете Python, поэтому я немного уточню его до "используйте Pexpect".
Возможно, потребуется немного подумать, чтобы интегрировать Pexpect в Fabric, или, возможно, вы просто вернетесь к использованию только Pexpect для этого конкретного случая. Но я бы определенно выбрал этот путь.