python自动化运维七:fabric
p { margin-bottom: 0.25cm; line-height: 120% }
a:link { }
p { margin-bottom: 0.25cm; line-height: 120% }
a:link { }
Fabric是基于Python实现的SSH命令行工具。可以采用命令行的方式来执行SSH。可以认为是在paramiko的基础上做了更高一层的封装。来看下如何使用。
我们直接使用fab -H 192.168.0.9的时候提示错误,找不到任何的fabfiles
root@zhf-linux:/home/zhf/zhf/python_prj/auto_manintance# fab -H 192.168.0.9
Fatal
error: Couldn't find any fabfiles!
Remember
that -f can be used to specify fabfile path, and use -h for help.
Aborting
我们现在就来编写fabfiles.
from
fabric.api import run
def
host_type():
run('ls
-al')
然后再按照如下方式的使用。可以看到远程连接成功。
root@zhf-linux:/home/zhf/zhf/python_prj/auto_manintance#
fab -H 192.168.0.9 -f chapter7.py host_type
[192.168.0.9]
Executing task 'host_type'
[192.168.0.9]
run: ls -al
[192.168.0.9]
out: total 68
[192.168.0.9]
out: drwx------ 11 root root 4096 Oct 31 22:07 .
[192.168.0.9]
out: drwxr-xr-x 22 root root 4096 Jul 9 16:59 ..
[192.168.0.9]
out: -rw------- 1 root root 5403 Oct 31 22:36 .bash_history
[192.168.0.9]
out: -rw-r--r-- 1 root root 3106 Feb 20 2014 .bashrc
[192.168.0.9]
out: drwx------ 5 root root 4096 Aug 31 21:47 .cache
[192.168.0.9]
out: drwx------ 4 root root 4096 Jul 26 10:47 .config
[192.168.0.9]
out: drwx------ 3 root root 4096 Jul 9 15:59 .dbus
[192.168.0.9]
out: drwx------ 2 root root 4096 Jul 9 16:23 .gvfs
[192.168.0.9]
out: drwxr-xr-x 3 root root 4096 Jul 26 11:23 .local
[192.168.0.9]
out: drwxr-xr-x 2 root root 4096 Jul 26 11:33 .pip
[192.168.0.9]
out: -rw-r--r-- 1 root root 140 Feb 20 2014 .profile
[192.168.0.9]
out: drwxr-xr-x 3 root root 4096 Jul 26 11:41 .python-eggs
[192.168.0.9]
out: drwxr-xr-x 2 root root 4096 Oct 30 21:18 .rpmdb
[192.168.0.9]
out: drwx------ 2 root root 4096 Oct 27 23:11 .ssh
[192.168.0.9]
out: -rw-r--r-- 1 root root 0 Oct 29 10:02 test.txt
[192.168.0.9]
out: -rw------- 1 root root 5439 Oct 31 22:07 .viminfo
[192.168.0.9]
out:
Done.
Disconnecting from 192.168.0.9
-f:指定fab入口文件,默认入口文件位fabfile.py
-g:指定网关设备
-H:指定目标主机
-P:以异步方式运行多主机任务
-R:指定角色区分不同业务组设备
-t:设置设备连接超时时间
-T:设置远程主机命令执行超时时间
-w: 当命令执行失败,发出告警,而非默认终止任务
我们也可以直接采用命令行的方式来执行。注意--前后都有空格
root@zhf-linux:/home/zhf/zhf/python_prj/auto_manintance#
fab -H 192.168.0.9 -- 'ls -al'
fabric提供了一组功能强大的fabric.api命令集。主要有以下的方法:
local:执行本地命令
lcd:切换本地目录
cd:切换远程目录
run:执行远程命令
sudo:sudo方式执行远程命令
put:上传文件到远程主机
get:从远程主机下载文件到本地
prompt:获得用户输入信息
confirm:获得提示信息确认
reboot:重启远程主机
@task:函数修饰符,标识的函数位为fab可调用的。非标记对fab不可见
@runs_once:函数修饰符,标识的函数只会执行一次,不受多台主机影响。
下面来看下fabfile的编写:
首先是全局属性设定:evn
evn对象的作用是定义fabrile的全局设定。支持多个属性,包括目标主机,用户,密码,角色等。来看下面的例子。首先通过env设置用户以及远程主机IP
from
fabric.api import *
env.user='root'
env.hosts=['192.168.0.9']
def
remote_task():
with
cd("/home/zhf"): #with的作用是让后面的表达式的语句集成当前状态实现cd
/home/zhf && ls -al的效果
run("ls
-al")
执行结果:
root@zhf-linux:/home/zhf/zhf/python_prj/auto_manintance#
fab -f chapter7.py remote_task
[192.168.0.9]
Executing task 'remote_task'
[192.168.0.9]
run: ls -al
[192.168.0.9]
out: total 59372
[192.168.0.9]
out: drwxr-xr-x 21 zhf zhf 4096 Nov 1 21:04 .
[192.168.0.9]
out: drwxr-xr-x 4 root root 4096 Oct 29 10:07 ..
[192.168.0.9]
out: -rw------- 1 zhf zhf 847 Oct 29 10:14 .bash_history
[192.168.0.9]
out: -rw-r--r-- 1 zhf zhf 220 Jul 2 16:44 .bash_logout
[192.168.0.9]
out: -rw-r--r-- 1 zhf zhf 3760 Jul 2 16:44 .bashrc
[192.168.0.9]
out: drwx------ 17 zhf zhf 4096 Jul 26 11:03 .cache
[192.168.0.9]
out: drwx------ 17 zhf zhf 4096 Jul 26 10:49 .config
[192.168.0.9]
out: drwx------ 3 zhf zhf 4096 Jul 9 09:19 .dbus
[192.168.0.9]
out: drwxr-xr-x 2 zhf zhf 4096 Jul 26 09:29 Desktop
[192.168.0.9]
out: -rw-r--r-- 1 zhf zhf 25 Jul 2 16:54 .dmrc
[192.168.0.9]
out: drwxr-xr-x 2 zhf zhf 4096 Jul 9 14:35 Documents
[192.168.0.9]
out: drwxr-xr-x 2 zhf zhf 4096 Jul 26 11:03 Downloads
[192.168.0.9]
out: -rw-r--r-- 1 zhf zhf 8980 Jul 2 16:44 examples.desktop
[192.168.0.9]
out: drwx------ 3 zhf zhf 4096 Nov 1 21:04 .gconf
[192.168.0.9]
out: -rw------- 1 zhf zhf 5920 Nov 1 21:04 .ICEauthority
[192.168.0.9]
out: drwx------ 3 zhf zhf 4096 Jul 2 16:55 .local
[192.168.0.9]
out: drwx------ 4 zhf zhf 4096 Jul 26 10:46 .mozilla
[192.168.0.9]
out: drwxr-xr-x 2 zhf zhf 4096 Jul 9 14:35 Music
[192.168.0.9]
out: drwxr-xr-x 2 zhf zhf 4096 Jul 9 14:35 Pictures
[192.168.0.9]
out: -rw-r--r-- 1 zhf zhf 675 Jul 2 16:44 .profile
[192.168.0.9]
out: drwxr-xr-x 2 zhf zhf 4096 Jul 9 14:35 Public
[192.168.0.9]
out: drwx------ 2 zhf zhf 4096 Oct 27 23:05 .ssh
[192.168.0.9]
out: -rw-r--r-- 1 root root 12376 Oct 29 21:21 syslogin.log
[192.168.0.9]
out: drwxr-xr-x 2 zhf zhf 4096 Jul 9 14:35 Templates
[192.168.0.9]
out: drwxr-xr-x 2 zhf zhf 4096 Jul 9 14:35 Videos
[192.168.0.9]
out: -rw-rw-r-- 1 zhf zhf 60638465 Oct 18 2013
VMwareTools-9.6.1-1378637.tar.gz
[192.168.0.9]
out: drwxr-xr-x 7 zhf zhf 4096 Oct 18 2013
vmware-tools-distrib
[192.168.0.9]
out: drwxr-xr-x 2 zhf zhf 4096 Jul 25 12:04 .wireshark
[192.168.0.9]
out: -rw------- 1 zhf zhf 64 Nov 1 21:04 .Xauthority
[192.168.0.9]
out: -rw------- 1 zhf zhf 354 Nov 1 21:04 .xsession-errors
[192.168.0.9]
out: -rw------- 1 zhf zhf 1576 Oct 31 22:36
.xsession-errors.old
[192.168.0.9]
out: drwxr-xr-x 4 root root 4096 Jul 26 11:34 zhf
[192.168.0.9]
out: drwxr-xr-x 2 zhf zhf 4096 Jul 2 17:51 下载
[192.168.0.9]
out:
Done.
Disconnecting
from 192.168.0.9... done.
我们再来看一个例子,前面的例子通过with
cd("/home/zhf")设定死了远程切换的路径。下面的例子实现动态获取远程目录列表
from fabric.api import *
env.user='root'
env.hosts=['192.168.0.9']
@runs_once
def input_raw():
return prompt("please input directory name:",default="/home")
def worktask(dirname):
run("ls -al "+dirname)
def reomte_task():
with cd('/home/zhf'):
run('ls -al')
@task
def go():
getdirname=input_raw()
worktask(getdirname)
执行效果如下
root@zhf-linux:/home/zhf/zhf/python_prj/auto_manintance#
fab -f chapter7.py go
[192.168.0.9]
Executing task 'go'
please
input directory name: [/home] /home
[192.168.0.9]
run: ls -al /home
[192.168.0.9]
out: total 2664
[192.168.0.9]
out: drwxr-xr-x 4 root root 4096 Oct 29 10:07 .
[192.168.0.9]
out: drwxr-xr-x 22 root root 4096 Jul 9 16:59 ..
[192.168.0.9]
out: drwx------ 2 root root 16384 Jul 2 16:27 lost+found
[192.168.0.9]
out: -rwxr--r-- 1 root root 2696108 Oct 29 10:07 root
[192.168.0.9]
out: drwxr-xr-x 21 zhf zhf 4096 Nov 1 21:04 zhf
[192.168.0.9]
out:
Done.
Disconnecting
from 192.168.0.9... done.
那么这个@task修饰符究竟起什么作用呢,我们前面写过remote_task函数,这个是没有被task修饰的,函数中只有go是被task修饰的。我们来执行下remote_task看下结果。提示找不到remote_task,只有go是可用的命令。这正好说明了@task是表示函数仅对fab有效的作用。
root@zhf-linux:/home/zhf/zhf/python_prj/auto_manintance#
fab -f chapter7.py remote_task
Warning:
Command(s) not found:
remote_task
Available
commands:
go
... done.
Fab的参数如下:
-l:显示定义好的任务函数名
-f:指定fab入口文件,默认入口文件位fabfile.py
-g:指定网关设备
-H:指定目标主机
-P:以异步方式运行多主机任务
-R:指定角色区分不同业务组设备
-t:设置设备连接超时时间
-T:设置远程主机命令执行超时时间
-w:
当命令执行失败,发出告警,而非默认终止任务
我们也可以直接采用命令行的方
-f:指定fab入口文件,默认入口文件位fabfile.py
-g:指定网关设备
-H:指定目标主机
-P:以异步方式运行多主机任务
-R:指定角色区分不同业务组设备
-t:设置设备连接超时时间
-T:设置远程主机命令执行超时时间
-w:
当命令执行失败,发出告警,而非默认终止任务
我们也可以直接采用命令行的方式来执行。注意--前后都有空格
root@zhf-linux:/home/zhf/zhf/python_prj/auto_manintance#
fab -H 192.168.0.9 -- 'ls -al'
fabric提供了一组功能强大的fabric.api命令集。主要有以下的方法:
local:执行本地命令
lcd:切换本地目录
cd:切换远程目录
run:执行远程命令
sudo:sudo方式执行远程命令
put:上传文件到远程主机
get:从远程主机下载文件到本地
prompt:获得用户输入信息
confirm:获得提示信息确认
reboot:重启远程主机
@task:函数修饰符,标识的函数位为fab可调用的。非标记对fab不可见
@runs_once:函数修饰符,标识的函数只会执行一次,不受多台主机影响。
下面来看下fabfile的编写:
首先是全局属性设定:evn
evn对象的作用是定义fabrile的全局设定。支持多个属性,包括目标主机,用户,密码,角色等。来看下面的例子。首先通过env设置用户以及远程主机IP
from
fabric.api import *
env.user='root'
env.hosts=['192.168.0.9']
def
remote_task():
with
cd("/home/zhf"): #with的作用是让后面的表达式的语句集成当前状态实现cd
/home/zhf && ls -al的效果
run("ls
-al")
执行结果:
root@zhf-linux:/home/zhf/zhf/python_prj/auto_manintance#
fab -f chapter7.py remote_task
[192.168.0.9]
Executing task 'remote_task'
[192.168.0.9]
run: ls -al
[192.168.0.9]
out: total 59372
[192.168.0.9]
out: drwxr-xr-x 21 zhf zhf 4096 Nov 1 21:04 .
[192.168.0.9]
out: drwxr-xr-x 4 root root 4096 Oct 29 10:07 ..
[192.168.0.9]
out: -rw------- 1 zhf zhf 847 Oct 29 10:14 .bash_history
[192.168.0.9]
out: -rw-r--r-- 1 zhf zhf 220 Jul 2 16:44 .bash_logout
[192.168.0.9]
out: -rw-r--r-- 1 zhf zhf 3760 Jul 2 16:44 .bashrc
[192.168.0.9]
out: drwx------ 17 zhf zhf 4096 Jul 26 11:03 .cache
[192.168.0.9]
out: drwx------ 17 zhf zhf 4096 Jul 26 10:49 .config
[192.168.0.9]
out: drwx------ 3 zhf zhf 4096 Jul 9 09:19 .dbus
[192.168.0.9]
out: drwxr-xr-x 2 zhf zhf 4096 Jul 26 09:29 Desktop
[192.168.0.9]
out: -rw-r--r-- 1 zhf zhf 25 Jul 2 16:54 .dmrc
[192.168.0.9]
out: drwxr-xr-x 2 zhf zhf 4096 Jul 9 14:35 Documents
[192.168.0.9]
out: drwxr-xr-x 2 zhf zhf 4096 Jul 26 11:03 Downloads
[192.168.0.9]
out: -rw-r--r-- 1 zhf zhf 8980 Jul 2 16:44 examples.desktop
[192.168.0.9]
out: drwx------ 3 zhf zhf 4096 Nov 1 21:04 .gconf
[192.168.0.9]
out: -rw------- 1 zhf zhf 5920 Nov 1 21:04 .ICEauthority
[192.168.0.9]
out: drwx------ 3 zhf zhf 4096 Jul 2 16:55 .local
[192.168.0.9]
out: drwx------ 4 zhf zhf 4096 Jul 26 10:46 .mozilla
[192.168.0.9]
out: drwxr-xr-x 2 zhf zhf 4096 Jul 9 14:35 Music
[192.168.0.9]
out: drwxr-xr-x 2 zhf zhf 4096 Jul 9 14:35 Pictures
[192.168.0.9]
out: -rw-r--r-- 1 zhf zhf 675 Jul 2 16:44 .profile
[192.168.0.9]
out: drwxr-xr-x 2 zhf zhf 4096 Jul 9 14:35 Public
[192.168.0.9]
out: drwx------ 2 zhf zhf 4096 Oct 27 23:05 .ssh
[192.168.0.9]
out: -rw-r--r-- 1 root root 12376 Oct 29 21:21 syslogin.log
[192.168.0.9]
out: drwxr-xr-x 2 zhf zhf 4096 Jul 9 14:35 Templates
[192.168.0.9]
out: drwxr-xr-x 2 zhf zhf 4096 Jul 9 14:35 Videos
[192.168.0.9]
out: -rw-rw-r-- 1 zhf zhf 60638465 Oct 18 2013
VMwareTools-9.6.1-1378637.tar.gz
[192.168.0.9]
out: drwxr-xr-x 7 zhf zhf 4096 Oct 18 2013
vmware-tools-distrib
[192.168.0.9]
out: drwxr-xr-x 2 zhf zhf 4096 Jul 25 12:04 .wireshark
[192.168.0.9]
out: -rw------- 1 zhf zhf 64 Nov 1 21:04 .Xauthority
[192.168.0.9]
out: -rw------- 1 zhf zhf 354 Nov 1 21:04 .xsession-errors
[192.168.0.9]
out: -rw------- 1 zhf zhf 1576 Oct 31 22:36
.xsession-errors.old
[192.168.0.9]
out: drwxr-xr-x 4 root root 4096 Jul 26 11:34 zhf
[192.168.0.9]
out: drwxr-xr-x 2 zhf zhf 4096 Jul 2 17:51 下载
[192.168.0.9]
out:
Done.
Disconnecting
from 192.168.0.9... done.
我们再来看一个例子,前面的例子通过with
cd("/home/zhf")设定死了远程切换的路径。下面的例子实现动态获取远程目录列表
from fabric.api import *
env.user='root'
env.hosts=['192.168.0.9']
@runs_once
def input_raw():
return prompt("please input directory name:",default="/home")
def worktask(dirname):
run("ls -al "+dirname)
def reomte_task():
with cd('/home/zhf'):
run('ls -al')
@task
def go():
getdirname=input_raw()
worktask(getdirname)
执行效果如下
root@zhf-linux:/home/zhf/zhf/python_prj/auto_manintance#
fab -f chapter7.py go
[192.168.0.9]
Executing task 'go'
please
input directory name: [/home] /home
[192.168.0.9]
run: ls -al /home
[192.168.0.9]
out: total 2664
[192.168.0.9]
out: drwxr-xr-x 4 root root 4096 Oct 29 10:07 .
[192.168.0.9]
out: drwxr-xr-x 22 root root 4096 Jul 9 16:59 ..
[192.168.0.9]
out: drwx------ 2 root root 16384 Jul 2 16:27 lost+found
[192.168.0.9]
out: -rwxr--r-- 1 root root 2696108 Oct 29 10:07 root
[192.168.0.9]
out: drwxr-xr-x 21 zhf zhf 4096 Nov 1 21:04 zhf
[192.168.0.9]
out:
Done.
Disconnecting
from 192.168.0.9... done.
那么这个@task修饰符究竟起什么作用呢,我们前面写过remote_task函数,这个是没有被task修饰的,函数中只有go是被task修饰的。我们来执行下remote_task看下结果。提示找不到remote_task,只有go是可用的命令。这正好说明了@task是表示函数仅对fab有效的作用。
root@zhf-linux:/home/zhf/zhf/python_prj/auto_manintance#
fab -f chapter7.py remote_task
Warning:
Command(s) not found:
remote_task
Available
commands:
go
式来执行。注意--前后都有空格
root@zhf-linux:/home/zhf/zhf/python_prj/auto_manintance#
fab -H 192.168.0.9 -- 'ls -al'
fabric提供了一组功能强大的fabric.api命令集。主要有以下的方法:
local:执行本地命令
lcd:切换本地目录
cd:切换远程目录
run:执行远程命令
sudo:sudo方式执行远程命令
put:上传文件到远程主机
get:从远程主机下载文件到本地
prompt:获得用户输入信息
confirm:获得提示信息确认
reboot:重启远程主机
@task:函数修饰符,标识的函数位为fab可调用的。非标记对fab不可见
@runs_once:函数修饰符,标识的函数只会执行一次,不受多台主机影响。
下面来看下fabfile的编写:
首先是全局属性设定:evn
evn对象的作用是定义fabrile的全局设定。支持多个属性,包括目标主机,用户,密码,角色等。来看下面的例子。首先通过env设置用户以及远程主机IP
from
fabric.api import *
env.user='root'
env.hosts=['192.168.0.9']
def
remote_task():
with
cd("/home/zhf"): #with的作用是让后面的表达式的语句集成当前状态实现cd
/home/zhf && ls -al的效果
run("ls
-al")
执行结果:
root@zhf-linux:/home/zhf/zhf/python_prj/auto_manintance#
fab -f chapter7.py remote_task
[192.168.0.9]
Executing task 'remote_task'
[192.168.0.9]
run: ls -al
[192.168.0.9]
out: total 59372
[192.168.0.9]
out: drwxr-xr-x 21 zhf zhf 4096 Nov 1 21:04 .
[192.168.0.9]
out: drwxr-xr-x 4 root root 4096 Oct 29 10:07 ..
[192.168.0.9]
out: -rw------- 1 zhf zhf 847 Oct 29 10:14 .bash_history
[192.168.0.9]
out: -rw-r--r-- 1 zhf zhf 220 Jul 2 16:44 .bash_logout
[192.168.0.9]
out: -rw-r--r-- 1 zhf zhf 3760 Jul 2 16:44 .bashrc
[192.168.0.9]
out: drwx------ 17 zhf zhf 4096 Jul 26 11:03 .cache
[192.168.0.9]
out: drwx------ 17 zhf zhf 4096 Jul 26 10:49 .config
[192.168.0.9]
out: drwx------ 3 zhf zhf 4096 Jul 9 09:19 .dbus
[192.168.0.9]
out: drwxr-xr-x 2 zhf zhf 4096 Jul 26 09:29 Desktop
[192.168.0.9]
out: -rw-r--r-- 1 zhf zhf 25 Jul 2 16:54 .dmrc
[192.168.0.9]
out: drwxr-xr-x 2 zhf zhf 4096 Jul 9 14:35 Documents
[192.168.0.9]
out: drwxr-xr-x 2 zhf zhf 4096 Jul 26 11:03 Downloads
[192.168.0.9]
out: -rw-r--r-- 1 zhf zhf 8980 Jul 2 16:44 examples.desktop
[192.168.0.9]
out: drwx------ 3 zhf zhf 4096 Nov 1 21:04 .gconf
[192.168.0.9]
out: -rw------- 1 zhf zhf 5920 Nov 1 21:04 .ICEauthority
[192.168.0.9]
out: drwx------ 3 zhf zhf 4096 Jul 2 16:55 .local
[192.168.0.9]
out: drwx------ 4 zhf zhf 4096 Jul 26 10:46 .mozilla
[192.168.0.9]
out: drwxr-xr-x 2 zhf zhf 4096 Jul 9 14:35 Music
[192.168.0.9]
out: drwxr-xr-x 2 zhf zhf 4096 Jul 9 14:35 Pictures
[192.168.0.9]
out: -rw-r--r-- 1 zhf zhf 675 Jul 2 16:44 .profile
[192.168.0.9]
out: drwxr-xr-x 2 zhf zhf 4096 Jul 9 14:35 Public
[192.168.0.9]
out: drwx------ 2 zhf zhf 4096 Oct 27 23:05 .ssh
[192.168.0.9]
out: -rw-r--r-- 1 root root 12376 Oct 29 21:21 syslogin.log
[192.168.0.9]
out: drwxr-xr-x 2 zhf zhf 4096 Jul 9 14:35 Templates
[192.168.0.9]
out: drwxr-xr-x 2 zhf zhf 4096 Jul 9 14:35 Videos
[192.168.0.9]
out: -rw-rw-r-- 1 zhf zhf 60638465 Oct 18 2013
VMwareTools-9.6.1-1378637.tar.gz
[192.168.0.9]
out: drwxr-xr-x 7 zhf zhf 4096 Oct 18 2013
vmware-tools-distrib
[192.168.0.9]
out: drwxr-xr-x 2 zhf zhf 4096 Jul 25 12:04 .wireshark
[192.168.0.9]
out: -rw------- 1 zhf zhf 64 Nov 1 21:04 .Xauthority
[192.168.0.9]
out: -rw------- 1 zhf zhf 354 Nov 1 21:04 .xsession-errors
[192.168.0.9]
out: -rw------- 1 zhf zhf 1576 Oct 31 22:36
.xsession-errors.old
[192.168.0.9]
out: drwxr-xr-x 4 root root 4096 Jul 26 11:34 zhf
[192.168.0.9]
out: drwxr-xr-x 2 zhf zhf 4096 Jul 2 17:51 下载
[192.168.0.9]
out:
Done.
Disconnecting
from 192.168.0.9... done.
我们再来看一个例子,前面的例子通过with
cd("/home/zhf")设定死了远程切换的路径。下面的例子实现动态获取远程目录列表
from
fabric.api import *
env.user='root'
env.hosts=['192.168.0.9']
@runs_once
def
input_raw():
return
prompt("please input directory name:",default="/home")
def
worktask(dirname):
run("ls
-al "+dirname)
@task
#设置task使得仅有go对fab可见
def
go():
getdirname=input_raw()
#通过inpu_raw获得手动输入路径
worktask(getdirname)
#执行命令
执行效果如下
root@zhf-linux:/home/zhf/zhf/python_prj/auto_manintance#
fab -f chapter7.py go
[192.168.0.9]
Executing task 'go'
please
input directory name: [/home] /home
[192.168.0.9]
run: ls -al /home
[192.168.0.9]
out: total 2664
[192.168.0.9]
out: drwxr-xr-x 4 root root 4096 Oct 29 10:07 .
[192.168.0.9]
out: drwxr-xr-x 22 root root 4096 Jul 9 16:59 ..
[192.168.0.9]
out: drwx------ 2 root root 16384 Jul 2 16:27 lost+found
[192.168.0.9]
out: -rwxr--r-- 1 root root 2696108 Oct 29 10:07 root
[192.168.0.9]
out: drwxr-xr-x 21 zhf zhf 4096 Nov 1 21:04 zhf
[192.168.0.9]
out:
Done.
Disconnecting
from 192.168.0.9... done.
那么这个@task修饰符究竟起什么作用呢,我们前面写过remote_task函数,这个是没有被task修饰的,函数中只有go是被task修饰的。我们来执行下remote_task看下结果。提示找不到remote_task,只有go是可用的命令。这正好说明了@task是表示函数仅对fab有效的作用。
root@zhf-linux:/home/zhf/zhf/python_prj/auto_manintance#
fab -f chapter7.py remote_task
Warning:
Command(s) not found:
remote_task
Available
commands:
go
python自动化运维七:fabric的更多相关文章
- Python自动化运维工具-Fabric部署及使用总结
使用shell命令进行复杂的运维时,代码往往变得复杂难懂,而使用python脚本语言来编写运维程序,就相当于开发普通的应用一样,所以维护和扩展都比较简单,更重要的是python运维工具fabric能自 ...
- Python自动化运维工具fabric的安装
使用shell命令进行复杂的运维时,代码往往变得复杂难懂,而使用python脚本语言来编写运维程序,就相当于开发普通的应用一样,所以维护和扩展都比较简单,更重要的是python运维工具fabric能自 ...
- 轻量级自动化运维工具Fabric的安装与实践
一.背景环境 在运维工作中,经常会遇到重复性的劳动,这个时候为了效率就必须要使用自动化运维工具. 这里我给大家介绍轻量级自动化运维工具Fabric,Fabric是基于Python语言开发的,是开发同事 ...
- Python自动化运维的职业发展道路(暂定)
Python职业发展之路 Python自动化运维工程 Python基础 Linux Shell Fabric Ansible Playbook Zabbix Saltstack Puppet Dock ...
- Python自动化运维:技术与最佳实践 PDF高清完整版|网盘下载内附地址提取码|
内容简介: <Python自动化运维:技术与最佳实践>一书在中国运维领域将有“划时代”的重要意义:一方面,这是国内第一本从纵.深和实践角度探讨Python在运维领域应用的著作:一方面本书的 ...
- Python自动化运维 技术与最佳实践PDF高清完整版免费下载|百度云盘|Python基础教程免费电子书
点击获取提取码:7bl4 一.内容简介 <python自动化运维:技术与最佳实践>一书在中国运维领域将有"划时代"的重要意义:一方面,这是国内第一本从纵.深和实践角度探 ...
- python自动化运维之CMDB篇-大米哥
python自动化运维之CMDB篇 视频地址:复制这段内容后打开百度网盘手机App,操作更方便哦 链接:https://pan.baidu.com/s/1Oj_sglTi2P1CMjfMkYKwCQ ...
- Day1 老男孩python自动化运维课程学习笔记
2017年1月7日老男孩python自动化运维课程正式开课 第一天学习内容: 上午 1.python语言的基本介绍 python语言是一门解释型的语言,与1989年的圣诞节期间,吉多·范罗苏姆为了在阿 ...
- python自动化运维学习第一天--day1
学习python自动化运维第一天自己总结的作业 所使用到知识:json模块,用于数据转化sys.exit 用于中断循环退出程序字符串格式化.format字典.文件打开读写with open(file, ...
随机推荐
- 如何使用fiddler抓取https请求(PC和移动端)
最近做一个抓取移动端app接口,并执行评论,收藏的接口功能测试.怎么搞/(ㄒoㄒ)/~~ 按照老思路试一试,第一步还是要用fiddler来帮忙获取接口信息! 一.基本的抓取http请求设置: 1.cm ...
- JVM菜鸟进阶高手之路五
转载请注明原创出处,谢谢! 参考gc,发现大概一小时运行一次FGC,特别奇怪,笨神一看这样的问题就知道是system gc导致的,rmi默认一小时主动触发一次,由于没有gc日志,通过jstat命令观察 ...
- Unity GameObject Class
GameObject Note : gameObject 指的是当前挂着的对象. class in UnityEngine / Inherits from:Object Descriptio ...
- java基础解析系列(六)---深入注解原理及使用
java基础解析系列(六)---注解原理及使用 java基础解析系列(一)---String.StringBuffer.StringBuilder java基础解析系列(二)---Integer ja ...
- 分享一个图片上传插件(TP5.0)
效果预览图: 该插件主要功能是:可预览裁剪图片和保存原图片,执行裁剪图片后会删除 裁剪的原图片目录,以便减少空间.一.下载附件 地址:https://pan.baidu.com/s/1bpxZhM3 ...
- Oracle DBA 常用查询
1. 查询系统所有对象 select owner, object_name, object_type, created, last_ddl_time, timestamp, statusfrom db ...
- oracle 权限
一.介绍这一部分我们主要看看oracle中如何管理权限和角色,权限和角色的区别在哪里.当刚刚建立用户时,用户没有任何权限,也不能执行任何操作.如果要执行某种特定的数据库操作,则必须为其授予系统的权限: ...
- yum软件管理器,及yum源配置
说到yum源就必须说到linux系统中特有的依赖关系问题,yum就是为了解决依赖关系而存在的.yum源就相当是一个目录项,当我们使用yum机制安装软件时,若需要安装依赖软件,则yum机制就会根据在yu ...
- 混合高斯模型(Mixtures of Gaussians)和EM算法
这篇讨论使用期望最大化算法(Expectation-Maximization)来进行密度估计(density estimation). 与k-means一样,给定的训练样本是,我们将隐含类别标签用表示 ...
- PHP常用字符串处理函数
(1)strlen(string) 返回字符串长度 (2)strpos(string,find,begin) 返回find字符串第一次出现的位置(从0开始) string:处理的字符串 find:想找 ...