1、windows拷贝文件到linux部署脚本(python)
# encoding='utf-8'
from fabric import Connection
import sys
from fabric import Connection
import sys
packageName = sys.argv[1].replace('(','').replace(')','')
sourceDir = "C:\\tmp\\"
destDir = "/usr/local/src/"
with Connection(host="122.226.107.154", port=2024, user="root", connect_kwargs={"password":"xxxx"}) as c:
c.put(sourceDir + sys.argv[1], destDir + packageName)
c.run('rm -rf /usr/local/src/dist')
c.run('rm -rf /usr/local/app/szzj-portal-pc/*')
c.run('unzip -o /usr/local/src/%s -d /usr/local/src/' %(packageName))
c.run('/usr/bin/mv -f /usr/local/src/dist/* /usr/local/app/szzj-portal-pc/')
fabric 官网已经更新到2.6版,阿里镜像下载也已经是2.5的版本,但是网络上搜索到的案例大部分是按照1.X版本编写的。今天查看了下官网的文档,一些用法记录下。
2、基本上只要使用Connection这个api :
fabric.connection.Connection
这个类是从 Invoke 的Context 继承过来的,另外它还封装了Paramiko SSHClient
。可用参数如下:Connection(host, user=None, port=None, config=None, gateway=None, forward_agent=None, connect_timeout=None, connect_kwargs=None, inline_ssh_env=None)
这里主要说明下connect_kwargs这个参数,它的值是字典(dict),比如密码,密钥key只能设置在这里。这个字典会直接传递给paramiko.client.SSHClient.connect
解析,完整的可用字段如下:connect(hostname, port=22, username=None, password=None, pkey=None, key_filename=None, timeout=None, allow_agent=True, look_for_keys=True, compress=False, sock=None, gss_auth=False, gss_kex=False, gss_deleg_creds=True, gss_host=None, banner_timeout=None, auth_timeout=None, gss_trust_dns=True, passphrase=None, disabled_algorithms=None)
3、另外是多主机的操作api
/**抽象类,无法直接使用,只能选用下面两个fabric.group.Group
(*hosts, **kwargs)fabric.group.SerialGroup
(*hosts, **kwargs)fabric.group.ThreadingGroup
(*hosts, **kwargs)
因为本机测试不支持put (2.5版本)。group.py也看了,确实没有put ,不好用。
还是选择了for 循环IP列表调用Connection 来实现多主机操作。
其它
1、参数传递 :
python 的参数传递到 shell 脚本 c.run('/root/test.sh %s' %(sys.argv[1]))
实现上类是print函数传参。