Python/Fabric2
< Python
Fabric 2
https://www.fabfile.org/
>>> from fabric import Connection >>> result = Connection('web1.example.com').run('uname -s', hide=True) >>> msg = "Ran {0.command!r} on {0.connection.host}, got stdout:\n{0.stdout}" >>> print(msg.format(result)) Ran 'uname -s' on web1.example.com, got stdout: Linux
Installation
Basic install:
pip install fabric
To not conflict with v1 (have both installed):
pip3 install fabric2
Basic Connection
import fabric2 cn = fabric2.Connection('user@somesystem') cn.config.run.warn=True # don't abort on failure cn.run('hostname') # remote execution cn.local('hostname') # local execution
Specify Password and Port
conn = Connection( "{username}@{ip}:{port}".format( username=username, ip=ip, port=port, ), connect_kwargs={"password": password}, )
ref: [1]
Don't throw exception of failure
# Fabric runner connection to Crashbox self.crashbox = fabric2.Connection(f"{self.crashboxuser}@{self.crashboxip}:{self.sshport}", connect_kwargs={"password": self.crashboxpass}) self.crashbox.config.run.warn = True self.crashbox.config.run.echo = True
run
f = fabric2.Connection('localhost') f.run('ls')
# handle a non 0 return code, if run.warn if f.run(cmd).failed: print("failure")
# timeout f.run(cmd, timeout=seconds) # throws invoke.exceptions.CommandTimedOut
Interesting Parameters:
echo=False # print command to local stdout? timeout=seconds # timeout command - default no timeout shell='/bin/bash' warn=False # warn and continue or raise UnexpectedExit on non zero return code
CD
con = fabric2.Connection('localhost') with con.cd('/etc'): con.run('pwd') # should display /etc
ref: [4]
Sudo
con = fabric2.Connection('localhost') con.sudo('mkdir /test')
Interesting parameters:
Should be the same as sudo.run?
Put
con = fabric2.Connection('localhost') con.put('test.txt', "/tmp/test.txt")
keywords
Python Fabric Fabric2 Paramiko