Fabric 学习笔记

发布于 2020-12-01 10:19:51 字数 2686 浏览 1500 评论 0

fabric 是什么

Fabric 是一个 Python (2.5-2.7) 的库和命令行工具,用来提高基于 SSH 的应用部署和系统管理效率。

fabric 安装

pip install fabric

fabric 使用

运行文件

fab 默认执行当前目录的 fabfile.py 文件,fabfile.py 由自己编写生成。

fabfile.py

def hello(): print("Hello world!")
fab hello

指定其他文件名

fab -f othername.py hello

常用命令

from fabric.api import *

带参数执行

fab hello:value=11,name=22
def hello(name, value): print name, value

任务执行过程

定义 fabfile 任务,并用 fab 执行;
用 local 调用本地 shell 命令;
通过 settings 修改 env 变量;
处理失败命令、提示用户、手动取消任务;
以及定义主机列表、使用 run 来执行远程命令

用 local 调用本地 shell 命令

lcd("dir")
local("shell command")
是在dir下执行shell command
!=
local("cd dir")
local("shell command")
是在当前目录执行shell command

通过 settings 修改 env 变量

env.hosts=['user@ip:port', 'user2@ip2:port2'] #ssh要用到的参数
env.password = 'pwd'

处理失败命令、提示用户、手动取消任务

from fabric.contrib.console import confirm
def test(name, value): with settings(warn_only=True): 
result=local("abcd") if result.failed and not confirm("Tests failed. Continue anyway?"): 
abort("Aborting at user request.")

以及定义主机列表、使用 run 来执行远程命令

with cd("dir"):  # remote: cd dir  
   run("remote shell command")
进入dir并且执行remote shell command
  
cd("dir")
run("remote shell command")
最终是在remote: ~目录下执行remote shell command
<==>
run("cd dir")
run("remote shell command")

多服务器混搭

-#操作一致的服务器可以放在一组,同一组的执行同一套操作
env.roledefs = {
            'testserver': ['user1@host1:port1',],
            'realserver': ['user2@host2:port2', ]
            }

-#env.password = '这里不要用这种配置了,不可能要求密码都一致的,明文编写也不合适。打通所有ssh就行了'

@roles('testserver')
def task1():
    run('ls -l | wc -l')

@roles('realserver')
def task2():
    run('ls ~/temp/ | wc -l')

def dotask():
    execute(task1)
    execute(task2)

在程序执行的时候,提示输入密码

扩展

颜色

from fabric.colors import *
from fabric.api import *

def show():
    print green("hello")

批量密码管理

env.hosts = [
        'host1',
        'host2'
]
-# 注意: 要使env.passwords生效, host格式必须是  user@ip:port 端口号一定要显式写出来,即使是使用的默认22端口
env.passwords = {
    'host1': "pwdofhost1",
    'host2': "pwdofhost2",
}

或者
env.roledefs = {
'testserver': ['host1:22', 'host2:22'],
'realserver': ['host3:22', ]
}
-# 注意: 要使env.passwords生效, host格式必须是  user@ip:port 端口号一定要显式写出来,即使是使用的默认22端口
env.passwords = {
    'host1:22': "pwdofhost1",
    'host2:22': "pwdofhost2",
    'host3:22': "pwdofhost3",
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

JSmiles

生命进入颠沛而奔忙的本质状态,并将以不断告别和相遇的陈旧方式继续下去。

0 文章
0 评论
84960 人气
更多

推荐作者

遂心如意

文章 0 评论 0

5513090242

文章 0 评论 0

巷雨优美回忆

文章 0 评论 0

junpengz2000

文章 0 评论 0

13郎

文章 0 评论 0

qq_xU4RDg

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文