自动化运维之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 条评论
登录 后参与评论

相关文章

来自专栏Theo Tsao

Vim的基本使用(二)

本文包含Vim的基本使用有: 可视模式、指定计数、重复命令、外部命令、命令行编辑、文件编辑、分割窗口、GUI命令、配置。 另附一张Vim Cheat Sheet...

692
来自专栏技术之路

[个人翻译]Redis 集群教程(上)

   官方原文地址:https://redis.io/topics/cluster-tutorial    水平有限,如果您在阅读过程中发现有翻译的不合理的地...

1989
来自专栏用户2442861的专栏

./configure,make,make install的作用

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/haluoluo211/article/details...

623
来自专栏進无尽的文章

代码管理| 创建自己的私有Cocopods库

iOS组件化的实现基本基于cocoapods,如何使用cocoapods创建自己的组件库,是实现组件化的第一要素,下面就创建自己的私有Cocopods库展开实战...

1064
来自专栏bboysoul

删除连root都删除不了的文件(chattr)

没错,删除不了这个文件,而且我告诉你我是root用户,不是大家都说如果我是root用户就可以在linux下为所欲为吗,但是为什么删除不了呢,其实是这个文件被ch...

721
来自专栏王磊的博客

windows自定义快速启动(运行)命令

自定义运行(windows键+R)里面命令,启动设置的程序,如图: ? 它的设置方法有两种: 第一种设置方法: 第1步:在任意地方创建一个文件夹(建议在D盘根目...

32811
来自专栏Java技术分享

Mac OS X上IntelliJ IDEA 13与Tomcat 8的Java Web开发环境搭建

IntelliJ IDEA,发音大致如此:[in 'te li dʒei ai di: i: ei],我还是简称之为IntelliJ吧,“Intel”有“智能”...

45210
来自专栏Linux驱动

内核打补丁编译、创建内核工程(1)

1     内核打补丁 1.1  通过FTP将linux-2.6.22.6_jz2440.patch文件拷贝在system下 1.2  进入linux-2.6....

1849
来自专栏技术支持log

freebsd 磁盘挂载错误 Filesystem is not clean - run fsck.: Operation not permitted

freebsd 中挂载磁盘时遇到 Filesystem is not clean – run fsck.: Operation not permitted 这样...

630
来自专栏木子昭的博客

靠谱的 关闭Windows10自动更新第一步:获取本地网络属性修改权限第二步:将本地网络设置为按流量计费

自从Windows10发布后, 如何关闭Windows10的自动更新, 就是一个长盛不衰的话题, 后来微软看可爱的用户们讨论的这么开心, 就直接把关闭自动更新...

3679

扫码关注云+社区