• Cannot see the server-state • Is this cron running on server X? • How is this application started? • How are the passwords managed? • Figure out on which of the 1000 servers something failed, and why 6
Lightweight abstraction over ssh • Good for automating lightweight tasks • Does not work for defining state • +Concurrent, +Fast, +Testable • -Error handling, -Idempotence 8
• Like Chef, but in Python • Functions • Automates common tasks • Brings servers into the specified state • Execute commands remotely on hosts • Uses YAML for specifying configuration • Declarative logic • Keeps data separate from state • Secure by default 10
: − user : tornado − group : tornado − dir_mode : 755 − recurse : − user − mode https :// github . com/tornadoweb/tornado : g i t . l a t e s t : − target : /home/tornado/app − rev : master − user : tornado − force_checkout : True 20
: p i l l a r . tornado_db . user − password : p i l l a r . tornado_db . password − require : − service : postgresql tornado_db_database : postgres_database . present : − name : p i l l a r . tornado_db . database − owner : p i l l a r . tornado_db . user − encoding : UTF8 − lc_ctype : en_US . UTF8 − l c _ c o l l a t e : en_US . UTF8 23
l e . managed : − source : s a l t :// tornado/ f i l e s / settings . py − user : tornado − group : tornado /path/to/settings.py DATABASE = { ’ database ’ : { { p i l l a r . tornado_db . database } } , ’ user ’ : { { p i l l a r . tornado_db . user } } , ’ password ’ : { { p i l l a r . tornado_db . password } } , } 24
standard distribution • fileservers • logging • mysql/postgresql • ... • Modules written in Python • Easy to add new ones • Also available for configuring hadoop master/slaves 25