Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Fabric for fun and profit
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Jair Trejo
September 14, 2013
Programming
1.1k
4
Share
Fabric for fun and profit
An introduction to Fabric presented at PyCon APAC 2013
Jair Trejo
September 14, 2013
More Decks by Jair Trejo
See All by Jair Trejo
Storybook & React Native
jairtrejo
0
700
Non Sequitur: An exploration of Python's random module
jairtrejo
0
810
Other Decks in Programming
See All in Programming
AI時代の仕事技芸論 — ソフトウェア開発で「遊ぶように働く」職人的熟達のすすめ
kuranuki
0
120
RailsTokyo 2026#4: AI様があれば、 Hotwireの弱点は消えるか?
naofumi
5
980
GitHub Copilot CLIのいいところ
htkym
2
1.1k
関係性から理解する"同一性"の型用語たち
pvcresin
2
560
色即是空、空即是色、データサイエンス
kamoneggi
1
200
These Five Tricks Can Make Your Apps Greener, Cheaper, & Nicer
hollycummins
0
210
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
340
今さら聞けないCancellationToken
htkym
0
200
Signal Forms: Beyond the Basics @ngBaguette 2026 in Paris
manfredsteyer
PRO
0
120
1人1案件のプロダクトエンジニア時代に、"プロセス監督"としてチャレンジしたこと
non0113
0
330
SPMマルチモジュールで テストカバレッジを取得する技法
yosshi4486
0
120
OCRを使ってゲームのアイテムをデータ化する
kishikawakatsumi
0
120
Featured
See All Featured
SEO in 2025: How to Prepare for the Future of Search
ipullrank
3
3.5k
We Are The Robots
honzajavorek
0
230
Everyday Curiosity
cassininazir
0
210
Into the Great Unknown - MozCon
thekraken
41
2.5k
Abbi's Birthday
coloredviolet
2
7.7k
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.5k
Are puppies a ranking factor?
jonoalderson
1
3.4k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
47
8.1k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
199
73k
Kristin Tynski - Automating Marketing Tasks With AI
techseoconnect
PRO
0
250
Reflections from 52 weeks, 52 projects
jeffersonlam
356
21k
Transcript
Fabric for fun and profit @ jairtrejo Pycon APAC 2013
@jairtrejo Operations Director at Vinco Orbis
We script everything
We ssh in and out servers all the time
Fabric is a Python tool for streamlining the use of
SSH for systems administration
@hosts(staging, production) @task def publish(): local('./build') project.rsync_project( remote_dir=DEST_PATH, local_dir=DEPLOY_PATH.rstrip('/') +
'/', delete=True ) run(‘./bin/restart-apache’)
Quick fabric introduction
$ pip install fabric
Tasks
# fabfile.py from fabric.api import task, local @task def hello():
local('echo "Hello, world"')
$ fab hello Hello, world
multi-host
# fabfile.py from fabric.api import run, task @task def host_type():
run('uname -s')
$ fab -H localhost,
[email protected]
host_type Darwin Linux
Environment dictionary
# fabfile.py from fabric.api import run, task, env @task def
development(): env.hosts = [ 'fake.jairtrejo.mx', 'demo.jairtrejo.mx'] @task def production(): env.hosts = ['jairtrejo.mx'] @task def host_type(): run('uname -s')
$ fab production host_type
Case study: Gift cards
Huge files
Download link
Random URLs
Environment configuration
@task def production(): """ Production server """ env.user = 'pdfs'
env.hosts = ['example.com'] # Pdf’s storage env.pdf_base_dir = \ '/var/www/vhosts/example.com/httpdocs/PDFS/'
It is just Python
@task def find_and_rename(listing, source, destination): pdfs = [] with open(listing,
'rb') as csvfile: reader = csv.DictReader(csvfile) for row in reader: name = ‘%s.pdf’ % row[“Client number”] if os.path.exists(os.path.join(source, name)): pdfs.append(name) else: logging.warning("Not found: %s" % name) import logging logging.basicConfig( filename='example.log', level=logging.DEBUG, format="%(asctime)s %(levelname)s: %(message)s", )
We can mix Python with system calls
rows = [] for original in pdfs: fname, ext =
os.path.splitext(original) hashed, salt = hash_name(fname) hashed += ext hfname = os.path.join(destination, hashed) local( 'cp "%s" "%s"' % (os.path.join(source, original), hfname) ) rows.append( {'original': original, 'salt': salt, 'archivo': hfname}) rows.sort(key=lambda row: row['original'])
Case study Vagrant development
SSH integration
@task def vagrant(): """ Local dev environment (local Vagrant machine)
""" env.user = "vagrant" env.hosts = ["127.0.0.1:2222"] # Vagrant machine's ssh key result = local( "vagrant ssh-config | grep IdentityFile", capture=True) env.key_filename = result.split()[1] # Project directory env.site_dir = "~/src" Via sysadminpy.com
@task def syncdb(): require("site_dir") with cd(env.site_dir): run("python manage.py syncdb --noinput")
run("python manage.py migrate myapp --noinput")
$ fab vagrant syncdb
$ fab vagrant -- sudo service couchdb restart
Task composition
@task def resetdb(): require("site_dir") run('mysql -u root -pf5dd8Xo -e "DROP
DATABASE mydb;" mydb') run('mysql -u root -pf5dd8Xo -e "CREATE DATABASE mydb;"') syncdb()
$ fab vagrant resetdb
Silly stuff
if result.failed: print red("Some tests failed", bold=True) bomb = r"""
,--.!, __/ -*- ,d08b. '|` 0088MM `9MMP' """ print red(bomb) else: print green("All tests passed", bold=True) owl = r""" ,___, [O.o] /)__) -"--"- """ print green(owl)
Fabric alternatives
Ansible Server configuration
Invoke Build tool
Image credits (1)http://www.flickr.com/photos/worldbank/5320646943/ (2)http://blog.trendmicro.com/trendlabs-security-intelligence/mehika-twitter-botnet- targets-twitter-users/ (3)http://junofitness.blogspot.jp/2012/11/jennifer-and-julie.html (4)http://favim.com/image/361336/ (5)http://projectwhy.blogspot.jp/2013/04/a-wonderful-gift-may-not-be-wrapped-as.html (6)http://www.marysrosaries.com/collaboration/index.php?title=File:Forklift_(PSF).png (7)http://commons.wikimedia.org/wiki/File:US_Navy_070207-
N-4973A-044_Sailors_aboard_guided_missile_destroyer_USS_O'Kane_(DDG_77)_unload_foo d_stores_and_refrigerated_items_during_a_connected_replenishment_with_Military_Sea lift_Command_(MSC)_combat_stores_ship_USNS_Conco.jpg (8)http://www.casinocenter.com/helping-luck-along/ (9)http://python.sg/ (10)http://bailtruth.com/2012/09/12/steampunk-gears-and-cogwheels-brooch-2/ (11)http://www.giglig.com/food/how-to-make-mojito (12)http://cnx.org/content/m42117/latest/?collection=col11325/latest (13)http://mother-care.net/leisure/hobby/fugu-fish-deadly-delight.html (14)http://www.tumblr.com/tagged/tinker-toys (15)http://www.deviantart.com/?view_mode=2&order=24&q=by%3Ajam-star (16)http://www.vivianpartnership.co.uk/choices-choices-choices/ (17)http://faculty.indwes.edu/bcupp/lookback/hist-08.htm (18)http://www.thebedroom.com.au/manchester/character-bedding/bob-the-builder.html
Thank you! http://vincoorbis.com http://jairtrejo.mx