zoukankan      html  css  js  c++  java
  • Fabric quickly

    环境很重要、环境很重要、环境很重要

    # CentOS 7
    $ setenforce 0  # 可以设置配置文件永久关闭
    $ systemctl stop iptables.service
    $ systemctl stop firewalld.service
    
    

    一. 准备 Python3 和 Python 虚拟环境

    1.1 安装依赖包

    $ yum -y install wget sqlite-devel xz gcc automake zlib-devel openssl-devel epel-release git
    

    1.2 编译安装

    $ wget https://www.python.org/ftp/python/3.6.1/Python-3.6.1.tar.xz
    $ tar xvf Python-3.6.1.tar.xz  && cd Python-3.6.1
    $ ./configure && make && make install
    

    1.3 建立 Python 虚拟环境

    因为 CentOS 6/7 自带的是 Python2,而 Yum 等工具依赖原来的 Python,为了不扰乱原来的环境我们来使用 Python 虚拟环境

    $ cd /opt
    $ python3 -m venv py3
    $ source /opt/py3/bin/activate
    
    # 看到下面的提示符代表成功,以后运行 Jumpserver 都要先运行以上 source 命令,以下所有命令均在该虚拟环境中运行
    (py3) [root@localhost py3]

    二、Fabric 安装和使用

      fabric版本:(十分重要)
      pip install fabric3 or pip3 install fabric3

      常用命令:

      fab -u root -p '123456.' -H ‘10.0.0.1’ -- 'free -m'

      fab -u root -p 123456 -H "192.168.1.108" -- 'uname -a'

      fab -u root -p '123456' -H '10.0.0.1' -- 'hostname anthony-aliyun'

      fab -u root -p '123456' -H '192.168.1.108' -- 'hostname anthony-local'

      常用脚本格式:

      

     1 #conding:utf-8
     2 from fabric.api import *
     3 
     4 env.user = "root"
     5 env.hosts = ["192.168.1.104","192.168.1.108"]
     6 env.passwords = {
     7         "root@192.168.1.104:22":'123456789',
     8         "root@192.168.1.108:22":'123456'
     9 }
    10 
    11 env.roledefs = {
    12         "webserver":["192.168.1.104"],
    13         "dbserver":["192.168.1.108"]
    14 }
    15 
    16 @task
    17 def show():
    18         run("free -m")
    19 
    20 @task
    21 @roles("webserver")
    22 def install_httpd():
    23         print("install webserver")
    24 
    25 @task
    26 @roles("dbserver")
    27 def install_mysql():
    28         print("install mysql")
    View Code
     1 #!/usr/bin/python env
     2 # -*- coding: utf-8 -*-
     3 from fabric.api import *
     4 
     5 env.hosts = ["192.168.1.108"]
     6 env.user = "root"
     7 env.password = "123456"
     8 env.port = 22
     9 
    10 @task
    11 def show():
    12         run("df -lh")
    13         run("free -m")
    14         run("hostname")
    View Code

       常用参数:

     1 Usage: fab [options] <command>[:arg1,arg2=val2,host=foo,hosts='h1;h2',...] ....
     2 -l,显示定义好的任务函数名;
     3 -f,指定fab入口文件,默认入口文件名为fabfile.py
     4 -g,指定网关(中转)设备,比如堡垒机环境,填写堡垒机ip即可
     5 -H,指定目标主机,多台主机用“,”号分隔;
     6 -P,以异步并行方式运行多主机任务,默认为串行运行;
     7 -R,指定role,以角色名区分不同业务组设备;
     8 -t,设置设备连接超时时间(秒);
     9 -T,设置远程主机命令执行超时时间(秒);
    10 -w,当命令执行失败,发出告警,而非默认终止任务。
    View Code

      常用环境变量:

     1 abort_on_prompts 设置是否运行在交互模式下,例如会提示输入密码之类,默认是false
     2 connection_attempts fabric尝试连接到新服务器的次数,默认1次
     3 cwd 目前的工作目录,一般用来确定cd命令的上下文环境
     4 disable_known_hosts 默认是false,如果是true,则会跳过用户知道的hosts文件
     5 exclude_hosts 指定一个主机列表,在fab执行时,忽略列表中的机器
     6 fabfile 默认值是fabfile.py在fab命令执行时,会自动搜索这个文件执行。
     7 host_string 当fabric连接远程机器执行run、put时,设置的user/host/port等
     8 hosts 一个全局的host列表
     9 keepalive 默认0 设置ssh的keepalive
    10 loacl_user 一个只读的变量,包含了本地的系统用户,同user变量一样,但是user可以修改
    11 parallel 默认false,如果是true则会并行的执行所有的task
    12 pool_size 默认0 在使用parallel执行任务时设置的进程数
    13 password ssh远程连接时使用的密码,也可以是在使用sudo时使用的密码
    14 passwords 一个字典,可以为每一台机器设置一个密码,key是ip,value是密码
    15 path 在使用run/sudo/local执行命令时设置的$PATH环境变量
    16 port 设置主机的端口
    17 roledefs 一个字典,设置主机名到规则组的映射
    18 roles 一个全局的role列表
    19 shell 默认是/bin/bash -1 -c 在执行run命令时,默认的shell环境
    20 skip_bad_hosts 默认false,为ture时,会导致fab跳过无法连接的主机
    21 sudo_prefix 默认值"sudo -S -p '%(sudo_prompt)s' " % env 执行sudo命令时调用的sudo环境
    22 sudo_prompt 默认值"sudo password:"
    23 timeout 默认10 网络连接的超时时间
    24 user ssh使用哪个用户登录远程主机
    25 local 执行本地命令,如: local('uname -s')
    26 lcd 切换本地目录,如: lcd('/home')
    27 cd 切换远程目录,如: cd('/data/logs')
    28 run 执行远程命令 如: run('free -m')
    29 sudo sudo方式执行命令,如sudo('/etc/init.d/httpd start')
    30 put 上传本地文件到远程主机,如put('/home/user.info',/data/user.info'')
    31 get 从远程主机下载文件到本地,如get('/home/user.info',/data/user.info'')
    32 prompt 获得用户输入信息,如: prompt('please input user:')
    33 confirm 获得提示信息确认, 如: confirm('Tests failed. Continue[Y/N]?')
    34 reboot 重启远程主机,如: reboot();
    35 @task 函数修饰符,标识的函数为fab可调用的,非标记对fab不可见,纯业务逻辑。
    36 @runs_once, 函数修饰符,标识的函数只会执行一次,不会受多台主机的影响
    View Code
  • 相关阅读:
    python接口自动化5-Json数据处理
    python接口自动化4-绕过验证码登录(cookie)
    python接口自动化2-发送post请求
    python接口自动化1-发送get请求
    python+selenium个人学习笔记11-登录封装与调用
    [jzoj]5257.小X的佛光
    [jzoj]1417.数学题
    2017.08.15【NOIP提高组】模拟赛B组
    [jzoj]1383.奇怪的问题
    [jzoj]1229.Hanoi
  • 原文地址:https://www.cnblogs.com/ipyanthony/p/9276014.html
Copyright © 2011-2022 走看看