我正在努力在我的Python脚本中启动我的fabfile。我已经在Stack Overflow上看了类似的帖子,但这些帖子并没有解决我的问题......或许他们这样做但我不理解他们......不确定。
我的脚本根据用户想要在远程主机上运行的内容写入fab文件。这是fabfile的一个例子:
[root@ip-50-50-50-50 bakery]# cat fabfile.py
from fabric.api import run
def deploy():
run('wget -P /tmp https://s3.amazonaws.com/MyBucket/httpd-2.2.26-1.1.amzn1.x86_64.rpm')
run('sudo yum localinstall /tmp/httpd-2.2.26-1.1.amzn1.x86_64.rpm')
然后我需要从我的脚本运行fabfile。如果我从命令行手动运行以下命令,那么它可以正常工作:
fab -f fabfile.py -u ec2-user -i id_rsa -H 10.10.15.150 deploy
1)如何使用所有选项从我的脚本中运行它? 2)IP地址是一个名为“bakery_internalip”的变量。如何将该变量称为fab线的一部分?
答案 0 :(得分:0)
尝试使用子流程:
import subprocess
subprocess.call(['fab', '-f', 'fabfile.py', '-u ec2-user', '-i', 'id_rsa', '-H', bakery_internalip, 'deploy'])
应该做的伎俩
答案 1 :(得分:0)
您可以直接从代码中调用支持结构的命令。通常,您必须首先设置env字典以指定键和主机,但是非常简单:
# the settings for the env dict
from fabric.api import env, execute
env.hosts = ["10.10.15.150", ]
env.user = "ec2-user"
env.key = "id_rsa"
# and call the function itself
from fabfile import deplot
execute(deploy, hosts=env.hosts)
您可以在结构文档中找到更多灵感: http://docs.fabfile.org/en/1.11/usage/execution.html#using-execute-with-dynamically-set-host-lists