Использование Python Fabric без инструмента командной строки (fab)
Документация Altough Fabric относится к способу использования библиотеки для доступа к SSH, не требуя инструмента командной строки и/или задач командной строки, я, похоже, не могу решить, как это сделать.
Я хочу запустить этот файл (example.py), выполнив только "python example.py":
env.hosts = [ "example.com" ]
def ps():
run("ps")
ps()
Спасибо.
Ответы
Ответ 1
Я закончил это:
from fabric.api import env
from fabric.api import run
class FabricSupport:
def __init__ (self):
pass
def run(self, host, port, command):
env.host_string = "%s:%s" % (host, port)
run(command)
myfab = FabricSupport()
myfab.run('example.com', 22, 'uname')
Что производит:
[example.com:22] run: uname
[example.com:22] out: Linux
Ответ 2
#!/usr/bin/env python
from fabric.api import hosts, run, task
from fabric.tasks import execute
@task
@hosts(['[email protected]:port'])
def test():
run('hostname -f')
if __name__ == '__main__':
execute(test)
Дополнительная информация: http://docs.fabfile.org/en/latest/usage/library.html
Ответ 3
Ниже приведены три разных подхода, использующих метод execute
from fabric.api import env,run,execute,hosts
# 1 - Set the (global) host_string
env.host_string = "[email protected]"
def foo():
run("ps")
execute(foo)
# 2 - Set host string using execute host param
execute(foo, hosts=['[email protected]'])
# 3 - Annotate the function and call it using execute
@hosts('[email protected]')
def bar():
run("ps -ef")
execute(bar)
Для использования файлов ключей вам необходимо установить либо env.key
, либо env.key_filename
, как показано ниже:
env.key_filename = 'path/to/my/id_rsa'
# Now calls with execute will use this keyfile
execute(foo, hosts=['[email protected]'])
Вы также можете предоставить несколько ключевых файлов, и в зависимости от того, какой из них будет использоваться в этом хосте, будет использоваться
Ответ 4
Нашел мое исправление. Мне нужно было предоставить свой собственный * env.host_string *, потому что изменение env.user/env.keyfile/etc не обновляет автоматически это поле.
Ответ 5
Это то, что нужно сделать:
в example.py
from fabric.api import settings, run
def ps():
with settings(host_string='example.com'):
run("ps")
ps()
см. документы для использования в качестве библиотеки:
http://docs.fabfile.org/en/1.8/usage/env.html#host-string