SlideShare a Scribd company logo
Adrian
Nye, Dimensio
nal Fund
Advisors
A PUPPET/FABRIC
BUILD/DEPLOY SYSTEM
• Python Software engineer, not a dev-ops guy
• Long-time Fabric user, just learned puppet
• Developed this system with Gary Wilson, another python dev
who also just learned puppet
WHO BUILT THIS?
 Start from bare RHEL 6 VMs, with only basic services pre-
installed (puppet, ntp, networking/firewall rules)
 Provide tools to build, configure, and deploy:
 15 existing websites in various technologies:
python, perl, php, ruby, & combinations
 Mysql & Mongo databases
 Memcache servers
 Proxy servers
 Search servers
 Dev/Stage/Prod copies of all this
 Automate everything
 Never touch any server by hand
THE TASK
 RHEL 6 is stable but very old versions of most software. For
example puppet hiera just became available as RPM.
 Stage & Prod servers won’t have internet access
 Deployment to Stage/Prod will be done by operations
people, not apps people.
 Need rollback
 Must have GUI or be simple
SOME CHALLENGES
 RPM or Source Installs?
 Git or Tar-based Deployment?
 Chef/Puppet/Ansible/SaltStack?
 Puppet preferred by our infrastructure group
 We’re python devs, so Fabric seemed obvious, it’s not going
away
SOME CHOICES
 Executes commands either local or remote (via ssh)
 Has functions for many common tasks
 Easy to script
 Anything you can do manually by ssh to a server, you can
script fabric to do.
 Goal is a repeatable, idempotent sequence of steps.
SO WHAT IS FABRIC?
 Useful stuff it can do:
 Confirm before doing things if you want
 Run stuff in parallel on multiple machines, or serially
 run stuff as if run from a directory
 Get & put files, append to files, comment or uncomment lines
 Upload templates and fill in variables
 Run sudo commands
 Connect to one host then to another within same function
BRIEF INTRO TO FABRIC
 Many ways to specify
 Most common is to use the Env variable, and set env.hosts
 Can specify on command line
 Can hardcode it (build tasks always happen on build server)
 Can make lists of hosts
 Functions on fab command line are executed in order, so first
function can set host, and subsequence functions can use
setting
FABRIC HOSTS
def tail_log(logname):
"""tail a log file.
fab hostname tail_log:access
logname is filename of log (without .log)
"""
log = env.logdir + „/‟ + logname + „.log‟
if file_exists(log):
run(„tail –f %s‟ % log, pty=True)
else:
print “Logfile not found in %s” % env.log_dir
EXAMPLE FABRIC TASK
def dev(service_name=None):
"""Sets server as appropriate for service_name for the dev
environment.
Also sets environ, server, and service_name in env so it is inherited
by later fab commands. Some fab commands need an environment but
are not
specific to a service (such as mysql commands), so service_name is
optional.
"""
_set_host_for_environment(service_name, Environment.DEV)
The above function is just a clever way of setting env.host to a hostname, so that later
commands in the same fab command line know what system to work on.
SETTING HOST CLEVERLY
 We wrote classes using fabric to do all the tasks needed in
the build and deployment process for our sites (and invoke
puppet, which does the rest).
 All of it is data-driven. There is a file that defines the needs
of each of our services and one that defines all of our servers.
HOW WE USED FABRIC
 Your responsibility to make things idempotent.
 For example, running “mkdir dirname” is not idempotent, because it
will fail the second time. In this case use a routine that tests
whether the dir exists, and if not then create it.
 Output control
 Normal output is everything (very verbose). Good for
debugging, although it can hide problems in sheer volume of
information.
 You can turn down the verbosity.
 Really want two levels simultaneously: less verbose output displayed
to the terminal, and fully verbose output logged to a file. But fabric
doesn’t support that yet.
CHALLENGES WITH FABRIC
 Puppet and Fabric capabilities overlap
 both can do most tasks
 Puppet is naturally idempotent
 Fabric is naturally step by step
 Puppet: use to enforce STATE
 RPM installation
 Creation of upstart scripts from templates
 User accounts
 Files, Directories, and Permissions
 Fabric: use to enforce WORKFLOW
 Build software environment (python virtualenv/perl modules etc)
 Protect from simultaneous deploys
 Testing of support services
 Sync of software environment from build server to deploy server
 Checkout of git repos, switching branches
 Media syncing
 Run puppet
 Graceful server restart
 Smoke testing (is site actually working after deployment)
DIVISION OF RESPONSIBILITIES
 All our custom puppet and fabric code is in a single git repo
called “sysconfig”
 Enables everything to be run from anywhere with network
access to build server.
PUPPET/FABRIC GIT REPO
 Graphic of our dev servers and networking
DEV ENVIRONMENT
Utility modules used by
multiple sites
Each site/service has
module
4 internal sites run on
intweb01. Mongo &
Mysql run on DB1Host
Intweb01(d,s,p) is internal
web server, db01 is db
server , etc
Nodes
IntWeb1Host
IntWebsite1
Nginx Proxy
IntWebsite2
Website
Layout
DB1Host
MySQL MongoDB
PUPPET MODULES
 Nodes manifest connects hostnames with the type of host it
will be, for all servers in all environments.
 Hosts manifest for each type of host (4 types of web
servers, db server, cache server, proxy server, etc). This
assigns sites to hosts.
 Site manifests for each type of service (each
website, proxy, database). Does rpm installation, site-specific
files & dirs, upstart scripts to start and stop service.
 Utility manifests for stuff needed by multiple sites, to
minimize duplication. For example nginx module supports 3
different uses of nginx: fake dev load balancer proxy, ssl
offloading proxy, local proxy.
PUPPET MODULES/MANIFESTS
 Use Virtual Packages to enable every manifest to install its
dependencies without regard to whether some other manifest
has already installed it on the same server.
 Should use Hiera to enable Puppet/Fabric to pull from the
same YAML database, but we haven’t done this yet since Hiera
just became available on RHEL 6.
PUPPET FEATURES
 1. Build step builds software environment for site on build
server
 2. Deploy step copies the software environment from build
server to the destination server, then deploys app code from
scratch.
 Two-step process does several things:
 Speeds up deployment, since build step is needed less often and
takes a long time.
 Speeds parallel deployment if you have redundant servers
 Keeps compiling tools off destination servers. The less you
install, the more secure they are.
FABRIC WORKFLOW
 Pip/Virtualenv used for Python packages, requirements file in
git repo
 Cpanm used for Perl modules
 Rbenv used for ruby modules
 All packages, modules, and rpms mirrored locally
 Improves reliability and speed
 Simplifies version control
 Everything (except rpms) installed in
/opt/comms/servicename, not system-wide. This simplifies
copying the environment to the deployed server, and
simplifies recreating a clean build.
FABRIC BUILD WORKFLOW
 Example service definition
 Name (for fab commands)
 Server type it should be installed on (not hostname)
 Domain (without dev/stg/com)
 Ssl or not
 How to smoke test it
 Init scripts it needs
 Git repos to check out, including branch, and any media
 Log dirs
 Languages needed
 Prerequisite services to check (memcache, db)
 Related services to reload (nginx, memcache)
 dirs containing built software environment (virtualenv, cpanm etc)
FABRIC BUILD SERVICE DEFINITION
 1. Mark deployment as in progress (using lock file)
 2. Check support services
 If db needed, is it running?
 If memcache needed, is it running?
 If critical support service not running, ask whether to continue.
FABRIC DEPLOYMENT WORKFLOW
 3. clone/pull the git repo(s) needed for the site. Checkout the
specified branch.
FABRIC DEPLOYMENT WORKFLOW
 4. Move previous software environment for fast rollback
 5. Rsync software environment for site
 6. Rsync media for site
FABRIC DEPLOYMENT WORKFLOW
 7. Run puppet. For convenience we support two modes:
 Use puppet master
 Copy developer’s sysconfig repo and run puppet using those modules.
This makes development a lot faster.
FABRIC DEPLOYMENT WORKFLOW
 8. Zero Downtime Restart
 9. Smoke Test
 For web servers, check that site is up, login works, and run selenium
tests.
 For memcache etc, use nc to test basic operation.
 Note that if deployment fails, there would be some downtime until
previous version reinstated.
FABRIC DEPLOYMENT WORKFLOW
 Setting up SSH keys on all servers
 Log viewers
 Database backups
 Database copy from one environment to another (i.e. copy
production db back to dev)
 Determine hostname from service name and environment
 Status/Start/stop/reload any remote service/site
 Media syncing from environment to environment
 Proxy server config generation
 Running puppet, using puppet master and without
 Smoke testers for different types of sites & services
 Tools to make local mirrors of internet software
FABRIC UTILITIES WE WROTE
 Support for replicated (redundant) servers.
 GUI for common tasks, using Rundeck or Jenkins or TeamCity
 Network logging (Splunk)
FUTURE WORK

More Related Content

PPTX
Automated Deployment with Fabric
ODP
Fabric: A Capistrano Alternative
PDF
Fabric-让部署变得简单
KEY
Capistrano, Puppet, and Chef
PDF
Building and Testing from Scratch a Puppet Environment with Docker - PuppetCo...
PPTX
Deploying Symfony2 app with Ansible
PDF
Docker puppetcamp london 2013
PDF
Pythonic Deployment with Fabric 0.9
Automated Deployment with Fabric
Fabric: A Capistrano Alternative
Fabric-让部署变得简单
Capistrano, Puppet, and Chef
Building and Testing from Scratch a Puppet Environment with Docker - PuppetCo...
Deploying Symfony2 app with Ansible
Docker puppetcamp london 2013
Pythonic Deployment with Fabric 0.9

What's hot (20)

PDF
Docker perl build
PDF
Fun with containers: Use Ansible to build Docker images
ODP
Fabric Fast & Furious edition
PPT
Learn basic ansible using docker
PDF
CoreOS : 설치부터 컨테이너 배포까지
PDF
Getting instantly up and running with Docker and Symfony
PPTX
Controlling multiple VMs with the power of Python
PDF
이미지 기반의 배포 패러다임 Immutable infrastructure
PDF
IT Automation with Ansible
PDF
Using Capifony for Symfony apps deployment (updated)
PDF
aptly: Debian repository management tool
PPTX
Ansible presentation
PDF
A quick intro to Ansible
PDF
Ansible, best practices
PPTX
CoreOS in a Nutshell
PDF
JavaCro'15 - Conquer the Internet of Things with Java and Docker - Johan Jans...
PDF
Deploying with Super Cow Powers (Hosting your own APT repository with reprepro)
PDF
Continuous Infrastructure: Modern Puppet for the Jenkins Project - PuppetConf...
PDF
Making environment for_infrastructure_as_code
KEY
Deploying and maintaining your software with RPM/APT
Docker perl build
Fun with containers: Use Ansible to build Docker images
Fabric Fast & Furious edition
Learn basic ansible using docker
CoreOS : 설치부터 컨테이너 배포까지
Getting instantly up and running with Docker and Symfony
Controlling multiple VMs with the power of Python
이미지 기반의 배포 패러다임 Immutable infrastructure
IT Automation with Ansible
Using Capifony for Symfony apps deployment (updated)
aptly: Debian repository management tool
Ansible presentation
A quick intro to Ansible
Ansible, best practices
CoreOS in a Nutshell
JavaCro'15 - Conquer the Internet of Things with Java and Docker - Johan Jans...
Deploying with Super Cow Powers (Hosting your own APT repository with reprepro)
Continuous Infrastructure: Modern Puppet for the Jenkins Project - PuppetConf...
Making environment for_infrastructure_as_code
Deploying and maintaining your software with RPM/APT
Ad

Viewers also liked (9)

PDF
Vorlesung - Cloud Infrastrukturen - Clusterbau | anynines
PPTX
Lessons learned running large real-world Docker environments
PPTX
Blue Whale in an Enterprise Pond
PDF
Using Docker in the Real World
PDF
Solving Real World Production Problems with Docker
PPTX
Real World Experience of Running Docker in Development and Production
PDF
Real-World Docker: 10 Things We've Learned
PPTX
Programming the world with Docker
PPTX
Jenkins and Chef: Infrastructure CI and Automated Deployment
Vorlesung - Cloud Infrastrukturen - Clusterbau | anynines
Lessons learned running large real-world Docker environments
Blue Whale in an Enterprise Pond
Using Docker in the Real World
Solving Real World Production Problems with Docker
Real World Experience of Running Docker in Development and Production
Real-World Docker: 10 Things We've Learned
Programming the world with Docker
Jenkins and Chef: Infrastructure CI and Automated Deployment
Ad

Similar to A Fabric/Puppet Build/Deploy System (20)

PPTX
Automation in Cloud
PPTX
One click deployment
PPTX
Continuous Integration with Fabric
PPT
Python Deployment with Fabric
PDF
Adopt DevOps philosophy on your Symfony projects (Symfony Live 2011)
PDF
Automation - fabric, django and more
PPTX
Deployment with Fabric
PDF
Bangpypers april-meetup-2012
PDF
Puppet camp london nov 2014 slides (1)
PPT
Fabric
KEY
20100425 Configuration Management With Puppet Lfnw
PPT
Django Deployment
PDF
Symfony Live NYC 2014 - Rock Solid Deployment of Symfony Apps
PDF
Cobbler, Func and Puppet: Tools for Large Scale Environments
PDF
Cobbler, Func and Puppet: Tools for Large Scale Environments
PDF
Towards Continuous Deployment with Django
PPT
Fabric
PDF
Creating a mature puppet system
PDF
Creating a Mature Puppet System
PDF
Fabric presentation
Automation in Cloud
One click deployment
Continuous Integration with Fabric
Python Deployment with Fabric
Adopt DevOps philosophy on your Symfony projects (Symfony Live 2011)
Automation - fabric, django and more
Deployment with Fabric
Bangpypers april-meetup-2012
Puppet camp london nov 2014 slides (1)
Fabric
20100425 Configuration Management With Puppet Lfnw
Django Deployment
Symfony Live NYC 2014 - Rock Solid Deployment of Symfony Apps
Cobbler, Func and Puppet: Tools for Large Scale Environments
Cobbler, Func and Puppet: Tools for Large Scale Environments
Towards Continuous Deployment with Django
Fabric
Creating a mature puppet system
Creating a Mature Puppet System
Fabric presentation

Recently uploaded (20)

PPTX
OMC Textile Division Presentation 2021.pptx
PPTX
Digital-Transformation-Roadmap-for-Companies.pptx
PDF
Building Integrated photovoltaic BIPV_UPV.pdf
PPTX
A Presentation on Artificial Intelligence
PDF
Mushroom cultivation and it's methods.pdf
PPTX
1. Introduction to Computer Programming.pptx
PPTX
TechTalks-8-2019-Service-Management-ITIL-Refresh-ITIL-4-Framework-Supports-Ou...
PDF
Advanced methodologies resolving dimensionality complications for autism neur...
PDF
Mobile App Security Testing_ A Comprehensive Guide.pdf
PDF
Agricultural_Statistics_at_a_Glance_2022_0.pdf
PDF
NewMind AI Weekly Chronicles - August'25-Week II
PDF
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
PDF
August Patch Tuesday
PPTX
SOPHOS-XG Firewall Administrator PPT.pptx
PDF
MIND Revenue Release Quarter 2 2025 Press Release
PDF
Heart disease approach using modified random forest and particle swarm optimi...
PDF
Accuracy of neural networks in brain wave diagnosis of schizophrenia
PDF
A comparative study of natural language inference in Swahili using monolingua...
PDF
Video forgery: An extensive analysis of inter-and intra-frame manipulation al...
PDF
Profit Center Accounting in SAP S/4HANA, S4F28 Col11
OMC Textile Division Presentation 2021.pptx
Digital-Transformation-Roadmap-for-Companies.pptx
Building Integrated photovoltaic BIPV_UPV.pdf
A Presentation on Artificial Intelligence
Mushroom cultivation and it's methods.pdf
1. Introduction to Computer Programming.pptx
TechTalks-8-2019-Service-Management-ITIL-Refresh-ITIL-4-Framework-Supports-Ou...
Advanced methodologies resolving dimensionality complications for autism neur...
Mobile App Security Testing_ A Comprehensive Guide.pdf
Agricultural_Statistics_at_a_Glance_2022_0.pdf
NewMind AI Weekly Chronicles - August'25-Week II
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
August Patch Tuesday
SOPHOS-XG Firewall Administrator PPT.pptx
MIND Revenue Release Quarter 2 2025 Press Release
Heart disease approach using modified random forest and particle swarm optimi...
Accuracy of neural networks in brain wave diagnosis of schizophrenia
A comparative study of natural language inference in Swahili using monolingua...
Video forgery: An extensive analysis of inter-and intra-frame manipulation al...
Profit Center Accounting in SAP S/4HANA, S4F28 Col11

A Fabric/Puppet Build/Deploy System

  • 1. Adrian Nye, Dimensio nal Fund Advisors A PUPPET/FABRIC BUILD/DEPLOY SYSTEM
  • 2. • Python Software engineer, not a dev-ops guy • Long-time Fabric user, just learned puppet • Developed this system with Gary Wilson, another python dev who also just learned puppet WHO BUILT THIS?
  • 3.  Start from bare RHEL 6 VMs, with only basic services pre- installed (puppet, ntp, networking/firewall rules)  Provide tools to build, configure, and deploy:  15 existing websites in various technologies: python, perl, php, ruby, & combinations  Mysql & Mongo databases  Memcache servers  Proxy servers  Search servers  Dev/Stage/Prod copies of all this  Automate everything  Never touch any server by hand THE TASK
  • 4.  RHEL 6 is stable but very old versions of most software. For example puppet hiera just became available as RPM.  Stage & Prod servers won’t have internet access  Deployment to Stage/Prod will be done by operations people, not apps people.  Need rollback  Must have GUI or be simple SOME CHALLENGES
  • 5.  RPM or Source Installs?  Git or Tar-based Deployment?  Chef/Puppet/Ansible/SaltStack?  Puppet preferred by our infrastructure group  We’re python devs, so Fabric seemed obvious, it’s not going away SOME CHOICES
  • 6.  Executes commands either local or remote (via ssh)  Has functions for many common tasks  Easy to script  Anything you can do manually by ssh to a server, you can script fabric to do.  Goal is a repeatable, idempotent sequence of steps. SO WHAT IS FABRIC?
  • 7.  Useful stuff it can do:  Confirm before doing things if you want  Run stuff in parallel on multiple machines, or serially  run stuff as if run from a directory  Get & put files, append to files, comment or uncomment lines  Upload templates and fill in variables  Run sudo commands  Connect to one host then to another within same function BRIEF INTRO TO FABRIC
  • 8.  Many ways to specify  Most common is to use the Env variable, and set env.hosts  Can specify on command line  Can hardcode it (build tasks always happen on build server)  Can make lists of hosts  Functions on fab command line are executed in order, so first function can set host, and subsequence functions can use setting FABRIC HOSTS
  • 9. def tail_log(logname): """tail a log file. fab hostname tail_log:access logname is filename of log (without .log) """ log = env.logdir + „/‟ + logname + „.log‟ if file_exists(log): run(„tail –f %s‟ % log, pty=True) else: print “Logfile not found in %s” % env.log_dir EXAMPLE FABRIC TASK
  • 10. def dev(service_name=None): """Sets server as appropriate for service_name for the dev environment. Also sets environ, server, and service_name in env so it is inherited by later fab commands. Some fab commands need an environment but are not specific to a service (such as mysql commands), so service_name is optional. """ _set_host_for_environment(service_name, Environment.DEV) The above function is just a clever way of setting env.host to a hostname, so that later commands in the same fab command line know what system to work on. SETTING HOST CLEVERLY
  • 11.  We wrote classes using fabric to do all the tasks needed in the build and deployment process for our sites (and invoke puppet, which does the rest).  All of it is data-driven. There is a file that defines the needs of each of our services and one that defines all of our servers. HOW WE USED FABRIC
  • 12.  Your responsibility to make things idempotent.  For example, running “mkdir dirname” is not idempotent, because it will fail the second time. In this case use a routine that tests whether the dir exists, and if not then create it.  Output control  Normal output is everything (very verbose). Good for debugging, although it can hide problems in sheer volume of information.  You can turn down the verbosity.  Really want two levels simultaneously: less verbose output displayed to the terminal, and fully verbose output logged to a file. But fabric doesn’t support that yet. CHALLENGES WITH FABRIC
  • 13.  Puppet and Fabric capabilities overlap  both can do most tasks  Puppet is naturally idempotent  Fabric is naturally step by step  Puppet: use to enforce STATE  RPM installation  Creation of upstart scripts from templates  User accounts  Files, Directories, and Permissions  Fabric: use to enforce WORKFLOW  Build software environment (python virtualenv/perl modules etc)  Protect from simultaneous deploys  Testing of support services  Sync of software environment from build server to deploy server  Checkout of git repos, switching branches  Media syncing  Run puppet  Graceful server restart  Smoke testing (is site actually working after deployment) DIVISION OF RESPONSIBILITIES
  • 14.  All our custom puppet and fabric code is in a single git repo called “sysconfig”  Enables everything to be run from anywhere with network access to build server. PUPPET/FABRIC GIT REPO
  • 15.  Graphic of our dev servers and networking DEV ENVIRONMENT
  • 16. Utility modules used by multiple sites Each site/service has module 4 internal sites run on intweb01. Mongo & Mysql run on DB1Host Intweb01(d,s,p) is internal web server, db01 is db server , etc Nodes IntWeb1Host IntWebsite1 Nginx Proxy IntWebsite2 Website Layout DB1Host MySQL MongoDB PUPPET MODULES
  • 17.  Nodes manifest connects hostnames with the type of host it will be, for all servers in all environments.  Hosts manifest for each type of host (4 types of web servers, db server, cache server, proxy server, etc). This assigns sites to hosts.  Site manifests for each type of service (each website, proxy, database). Does rpm installation, site-specific files & dirs, upstart scripts to start and stop service.  Utility manifests for stuff needed by multiple sites, to minimize duplication. For example nginx module supports 3 different uses of nginx: fake dev load balancer proxy, ssl offloading proxy, local proxy. PUPPET MODULES/MANIFESTS
  • 18.  Use Virtual Packages to enable every manifest to install its dependencies without regard to whether some other manifest has already installed it on the same server.  Should use Hiera to enable Puppet/Fabric to pull from the same YAML database, but we haven’t done this yet since Hiera just became available on RHEL 6. PUPPET FEATURES
  • 19.  1. Build step builds software environment for site on build server  2. Deploy step copies the software environment from build server to the destination server, then deploys app code from scratch.  Two-step process does several things:  Speeds up deployment, since build step is needed less often and takes a long time.  Speeds parallel deployment if you have redundant servers  Keeps compiling tools off destination servers. The less you install, the more secure they are. FABRIC WORKFLOW
  • 20.  Pip/Virtualenv used for Python packages, requirements file in git repo  Cpanm used for Perl modules  Rbenv used for ruby modules  All packages, modules, and rpms mirrored locally  Improves reliability and speed  Simplifies version control  Everything (except rpms) installed in /opt/comms/servicename, not system-wide. This simplifies copying the environment to the deployed server, and simplifies recreating a clean build. FABRIC BUILD WORKFLOW
  • 21.  Example service definition  Name (for fab commands)  Server type it should be installed on (not hostname)  Domain (without dev/stg/com)  Ssl or not  How to smoke test it  Init scripts it needs  Git repos to check out, including branch, and any media  Log dirs  Languages needed  Prerequisite services to check (memcache, db)  Related services to reload (nginx, memcache)  dirs containing built software environment (virtualenv, cpanm etc) FABRIC BUILD SERVICE DEFINITION
  • 22.  1. Mark deployment as in progress (using lock file)  2. Check support services  If db needed, is it running?  If memcache needed, is it running?  If critical support service not running, ask whether to continue. FABRIC DEPLOYMENT WORKFLOW
  • 23.  3. clone/pull the git repo(s) needed for the site. Checkout the specified branch. FABRIC DEPLOYMENT WORKFLOW
  • 24.  4. Move previous software environment for fast rollback  5. Rsync software environment for site  6. Rsync media for site FABRIC DEPLOYMENT WORKFLOW
  • 25.  7. Run puppet. For convenience we support two modes:  Use puppet master  Copy developer’s sysconfig repo and run puppet using those modules. This makes development a lot faster. FABRIC DEPLOYMENT WORKFLOW
  • 26.  8. Zero Downtime Restart  9. Smoke Test  For web servers, check that site is up, login works, and run selenium tests.  For memcache etc, use nc to test basic operation.  Note that if deployment fails, there would be some downtime until previous version reinstated. FABRIC DEPLOYMENT WORKFLOW
  • 27.  Setting up SSH keys on all servers  Log viewers  Database backups  Database copy from one environment to another (i.e. copy production db back to dev)  Determine hostname from service name and environment  Status/Start/stop/reload any remote service/site  Media syncing from environment to environment  Proxy server config generation  Running puppet, using puppet master and without  Smoke testers for different types of sites & services  Tools to make local mirrors of internet software FABRIC UTILITIES WE WROTE
  • 28.  Support for replicated (redundant) servers.  GUI for common tasks, using Rundeck or Jenkins or TeamCity  Network logging (Splunk) FUTURE WORK