自动化运维之Fabric

心情不太好,搞搞代码,提高心境! --程序猿


****fabric简介**** 一句话:fabric是python语言实现的一个利用ssh高效部署和管理系统的工具。


****fabric安装****

  • pip
sudo pip install fabric
  • apt-get
sudo apt-get install fabric
  • 源码安装
git clone https://github.com/fabric/fabric.git
sudo python setup.py install

****简单使用**** 模拟服务器的信息 host-1【运维机器】:172.17.42.1 host-2【服务器1】:172.17.0.1 host-3【服务器2】:172.17.0.2 测试的python脚本

from fabric.api import *
#主机信息 
host1="root@172.17.0.1:22"
host2="root@172.17.0.2:22"
#定义主机列表
env.hosts=[host1,host2]
env.password="fenglican"
#部署任务
def demo():
    run("uname -a")

查看任务的方法 fabric默认的文件名是fabfile.py,倘若不使用改名字,查看任务需要加入参数-f

fab -l

执行部署任务

fab demo

****fabric常用命令****

fab -l #显示可执行任务
fab -H #指定host,多host以逗号隔开
fab -P #并发数,默认串行
fab -R #指定角色
fab -w #warn_only 遇到异常直接退出
fab -f #指定入口文件 

****fabric常用函数****

#切换本地目录
lcd()

#切换远程目录
cd()

#执行本地命令
local()

#执行远程命令
run()

#执行远程sudo
sudo()

****基础编辑任务****

#coding:utf-8
#python方式引用包
from fabric.api import *
import web
import db

#控制服务器的主机信息 ssh语法
host1="root@172.17.0.1:22"
host2="root@172.17.0.2:22"

#env主机列表
env.hosts=[host1,host2]
env.password="fenglican"
#假如密码不一样的话可以使用字典
#env.passwords = {
#   host1 : "fengalic"
#   host2 : "alic"
#}

#@task
def demo00():
    cd("/fengalic/") #切换不存在的目录 默认会导致整个进程终止
    run("ls -a")

#多命令 中间某个命令异常发生后进程直接退出,从而不进行下面的命令
def demo01():
    with cd("/fengalic"):
        run("ls -a")

#多命令 中间某个命令异常发生后继续进行,并不提示错误信息
def demo02():
    with settings(warn_only=True):
        cd("/fengalic/")
    run("ls -a")

#装饰器 @hosts指定host @parallel并行 @task新型任务
@hosts(host1)
def demo03():
    run("uname -a")

@parallel
def demo04():
    run("uname -a")

#角色定义
env.roledefs = {
    "web" : [host1], #多个一逗号隔开
    "db" : [host2]
}
#指定角色的任务
#@roles("web")
def demo05():
    run("uname -a")

#新型任务 类似命名空间 推荐使用 
#@task
def demo05():
    run("uname -a")

****LAMP环境搭建实战**** 环境:ubuntu-32bit

from fabric.api import *

host1 = "alic@172.17.0.1:22"
env.hosts = [host1]
env.passwords = {
    host1 : "fenglican"
}

def install_mysql():
    sudo("apt-get install mysql-server mysql-client -y")

def install_php5():
    sudo("apt-get install php5 -y")
    sudo("apt-get install php5-mysql -y")
    sudo("apt-get install php5-gd php5-cgi -y")

def install_apache2():
    sudo("apt-get install apache2 -y")
    sudo("apt-get install libapache2-mod-auth-mysql -y")
    sudo("service apache2 restart")

@task
def install_lamp():
    install_apache2()
    install_php5()
    install_mysql()

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏决胜机器学习

优化页面访问速度(四) ——前端优化

前端的优化,主要可以通过减少HTTP请求、非实时请求改异步、缓存、文件压缩、CDN加速、独立图片服务器等。

1542
来自专栏HTML5学堂

如何创建Git本地仓库与服务器端仓库的关系

HTML5学堂-利利:关于Git的知识,我们共分成了四个大步骤进行讲解,之前我们提到了Git的安装与配置、Git在本地的使用方法,今天我们要讲解的就是如何创建G...

43811
来自专栏决胜机器学习

RabbitMQ(二) ——工作队列

RabbitMQ(二)——工作队列 (原创内容,转载请注明来源,谢谢) 一、概述 工作队列模式(work queue),是有多个消费者的情况下,可以共同消费队...

3124
来自专栏北京马哥教育

在 Linux 中永久并安全删除文件和目录的方法

引言 在大多数情况下,我们习惯于使用 Delete 键、垃圾箱或 rm 命令从我们的计算机中删除文件,但这不是永久安全地从硬盘中(或任何存储介质)删除文件的...

4225
来自专栏云计算教程系列

如何在Ubuntu 16.04上使用Concourse CI设置持续集成管道

Concourse CI是一个现代的,可扩展的集成系统,旨在通过可组合的声明性语法自动测试管道。

1792
来自专栏Jay的后台开发笔记

简单的linux系统配置故障定位与排除

本文旨在通过一些常用命令的用法示例,让有一定linux基础的开发同学能对系统进行简单配置,也能够上服务器定位或者解决一些简单基础性的问题,做出初步故障排除,或者...

2966
来自专栏小狼的世界

Linux下创建可执行bin安装文件

1、简化操作。一般的软件安装过程,如果想要精简步骤,我们一般会将需要在命令行中输入的命令写成一个脚本,同时将安装介质准备好。我们将脚本和安装介质上传到生产环境,...

1742
来自专栏mathor

键盘快速启动工具——Launchy

1954
来自专栏林欣哲

图解Git合并--Merge和Rebase

项目初始情况 ? Merge fast-forward ? 快速合并,直接把指针指向前去,无冲突要解决。 非 fast-forward ? 保留历史记录,解决冲...

3297
来自专栏信安之路

与http头安全相关的安全选项

由于HTTP是一个可扩展的协议,各浏览器厂商都率先推出了有效的头部,来阻止漏洞利用或提高利用漏洞的难度。了解它们是什么,掌握如何应用,可以提高系统的安全性。 下...

1050

扫码关注云+社区

领取腾讯云代金券