Skip to content

Instantly share code, notes, and snippets.

@masahitojp
Last active May 11, 2018 15:13
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save masahitojp/f6b8dd8bc5612a7b3465ba6f8315f84a to your computer and use it in GitHub Desktop.
Save masahitojp/f6b8dd8bc5612a7b3465ba6f8315f84a to your computer and use it in GitHub Desktop.

Fabric2系のメモ

object detail
chage date 2018/5/12
version fabic 2.0.0
os ubuntu 18.04
python 3.6.5

順次まとめてく

fabric2はPython2.7/Python3.4+でうごく

pypi

https://pypi.org/project/fabric2/

document

http://www.fabfile.org/

install

$ pip install fabric2 # fabric2を指定する
$ pip freeze
asn1crypto==0.24.0
bcrypt==3.1.4
cffi==1.11.5
cryptography==2.2.2
fabric2==2.0.0
idna==2.6
invoke==1.0.0
paramiko==2.4.1
pyasn1==0.4.2
pycparser==2.18
PyNaCl==1.2.1
six==1.11.0

Python3でインストールするとエラーがでる

fabric/fabric#1740 どうやらwheelの作り方のもんだいっぽい

upgrade 1.x to 2.x

http://docs.fabfile.org/en/latest/upgrading.html

実行コマンド変更

fab2になったっぽい

Fabric1のスクリプトそのままではうごかない

from fabric.api import local

def hello():
    local("uname -s")
$ fab2 hello
fab2 hello
Traceback (most recent call last):
  File "/home/masahito/python-env/fabric2/bin/fab2", line 11, in <module>
    load_entry_point('fabric2==2.0.0', 'console_scripts', 'fab2')()
  File "/home/masahito/python-env/fabric2/lib/python3.6/site-packages/invoke/program.py", line 321, in run
    self.parse_collection()
  File "/home/masahito/python-env/fabric2/lib/python3.6/site-packages/invoke/program.py", line 399, in parse_collection
    self.load_collection()
  File "/home/masahito/python-env/fabric2/lib/python3.6/site-packages/fabric2/main.py", line 74, in load_collection
    super(Fab, self).load_collection()
  File "/home/masahito/python-env/fabric2/lib/python3.6/site-packages/invoke/program.py", line 588, in load_collection
    module, parent = loader.load(coll_name)
  File "/home/masahito/python-env/fabric2/lib/python3.6/site-packages/invoke/loader.py", line 75, in load
    module = imp.load_module(name, fd, path, desc)
  File "/home/masahito/python-env/fabric2/lib/python3.6/imp.py", line 235, in load_module
    return load_source(name, filename, file)
  File "/home/masahito/python-env/fabric2/lib/python3.6/imp.py", line 172, in load_source
    module = _load(spec)
  File "<frozen importlib._bootstrap>", line 684, in _load
  File "<frozen importlib._bootstrap>", line 665, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 678, in exec_module
  File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
  File "/home/masahito/src/python/try-fabric2/fabfile.py", line 1, in <module>
    from fabric.api import local, run, put
ModuleNotFoundError: No module named 'fabric'

こんな感じでかくと fab2でうごく

$ cat fabfile.py 
from invoke import task

@task
def hello(c):
    c.run("uname -s")
$ fab2 hello
Linux

invokeだと tasks.pyに書くのだけど、これを fabfile.pyに名前をかえて fab2から呼ぶことで ssh経由で呼べるようになる

fab2 -H 192.168.0.1 hello ってやると ssh経由で helloを実行することが可能

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment