Se ha denunciado esta presentación.
Utilizamos tu perfil de LinkedIn y tus datos de actividad para personalizar los anuncios y mostrarte publicidad más relevante. Puedes cambiar tus preferencias de publicidad en cualquier momento.

Pythonic Deployment with Fabric 0.9

7.612 visualizaciones

Publicado el

The slides from my July Django-District presentation. It shows some of the basics of using the new fabric. I have uploaded the example fabfile.py to slideshare as well.

  • Sé el primero en comentar

Pythonic Deployment with Fabric 0.9

  1. 1. Pythonic Deployment with Fabric 0.9 Corey Oordt The Washington Times @coordt coordt@washingtontimes.com http://opensource.washingtontimes.com/
  2. 2. Easy Deployment for Different Environments Testing Staging Production
  3. 3. Easy Deployment to Multiple Computers Production 1 Production 2 Production 3
  4. 4. Installation of Fabric $ easy_install paramiko $ easy_install pycrypto $ easy_install http://git.fabfile.org/cgit.cgi/fabric/ snapshot/fabric-0.9b1.tar.gz
  5. 5. Fabric is just a command and a python script fab fabfile.py
  6. 6. The fabfile.py from fabric.api import * env.roledefs = { 'web': ['172.16.12.1', '172.16.12.2',], 'media': ['172.16.12.4',], 'staging': ['172.16.12.5',], 'testing': ['172.16.12.6',], 'database': ['172.16.12.7', '172.16.12.8',], } env.root_path = '/var/websites'
  7. 7. Define Tasks to Setup Environments def testing(): env.hosts = env.roledefs['testing'] env.user = 'testuser' def staging(): env.hosts = env.roledefs['staging'] env.user = 'staginguser' def production(): env.hosts = env.roledefs['web'] env.user = 'produser'
  8. 8. Task Example def clean(site=None): """Remove .pyc files from a site.""" from os import path if not site: site = prompt('Please specify which site(s) to clean (a comma delimited list is accepted): ', validate=r'^[w-.,]+$') site_list = site.split(',') for item in site_list: path = path.join(env.root_path, item) sudo("find %s -name '*.pyc' -depth -exec rm {} ;" % path)
  9. 9. Fabric Commands • require: Make sure that certain environment variables are available. • prompt: Display a prompt to the user and store the input in the given variable. Validation is optional. • put: Upload files to the remote host(s). • get: Download a file from a remote host. • run: Run a shell command on the remote host(s). • sudo: Run a root privileged shell command command on the remote host(s). • local: Run a command locally.
  10. 10. Fabric Contrib Commands • rsync_project: Synchronize a remote directory with the current project directory via rsync. • upload_project: Upload the current project to a remote system, tar-gzipping during the move. • exists: Return True if given path exists. • first: Given one or more file paths, returns first one found, or None. • upload_template: Render and upload a template text file to a remote host. • sed: Run a search-and-replace on filename with given regex patterns. • comment/uncomment: Attempt to (un)comment out all lines in filename matching regex. • contains: Return True if filename contains text. • append: Append string (or list of strings) text to filename. • confirm: Ask user a yes/no question and return their response as True /False.
  11. 11. Fabric Decorators • hosts: Defines on which host or hosts to execute the wrapped function. • roles: Defines a list of role names, used to look up host lists. • runs_once: Prevents wrapped function from running more than once. @hosts('user1@host1', 'host2', 'user2@host3') @runs_once def my_func(): pass @roles('web') def my_other_func(): pass
  12. 12. Usage Example $ fab testing clean:site=basenews [172.16.12.6] sudo: find /var/websites/basenews -name '*.pyc' -depth -exec rm {} ; Password for testuser@192.168.56.3: Done. Disconnecting from 172.16.12.6... done. $
  13. 13. Example Uses • Reload web server settings • Clean .pyc files • Check out new revision from a SCM repository • Install packages on servers • Apply patches • Restart caching server • Dump database and restore it locally
  14. 14. Let’s look at an example fabfile.py…
  15. 15. Thank You Corey Oordt The Washington Times @coordt coordt@washingtontimes.com http://opensource.washingtontimes.com/

×