I would like to propose that we adopt a simplified YAML manifest approach to defining an application's requirements, configuration, and other dependencies. A .yml file should be added to the root of the application to hold various installation details for the application. This removes the need to enter the details each time the app is pushed, and makes sure the values are the same each time.
YAML is a human-friendly, cross language, Unicode based data serialization language designed around the common native data types of agile programming languages. YAML was specifically created to work well for common use cases such as: configuration files, log files, interprocess messaging, cross-language data sharing, object persistence, and debugging of complex data structures.
Use Case: Deploying Bugzilla to the Cloud
Scenario: Company XYZ wishes to deploy Bugzilla onto the cloud so that it can scale as their development team grows and be accessed securely via the INTERNET. Diane the DevOp has been tasked with installing it on Cloud Hosting Provider ABC running on CloudStack and does so. Two months later, Management decides that Cloud Hosting Provider ABC SLA agreements are not sufficient and asks Diane to switch to Cloud Hosting Provider 123 running OpenStack. Diane should be able push the same application configuration to the new provider with minimal or no changes.
Background: Bugzilla is one of the most popular Open Source web application and is written in perl. Bugzilla is a "Defect Tracking System" or "Bug-Tracking System". Defect Tracking Systems allow individual or groups of developers to keep track of outstanding bugs in their product effectively. A large number of companies, organizations, and projects use Bugzilla ranging from NASA to The New York Times, Yahoo! and many more.
Bugzilla-4.0.2 includes additional patches as well as experimental changes to make it PSGI compatible. Bugzilla uses PSGI and Plack, an interface between Perl web applications and web servers and a Perl module and toolkit that contains PSGI middleware, helpers and adapters to web servers. It also requires instantiating a MySQL database.
While many Linux distributions include Bugzilla and its dependencies in their native package management systems, installing Bugzilla to the cloud with root access on any Linux-based cloud infrastructure system should be as simple as finding the Bugzilla package in the package management application and installing it using the normal command syntax. As Bugzilla also is able to run on Windows Operating Systems, theoretically a manifest should be able to also support deploying to Windows Azure cloud as well.
Any manifest should also include information to enable the cloud's tooling to perform the proper web server configuration automatically on installation.
Installing Bugzilla
Bugzilla is configured by updating the myconfig.pl file before pushing the application to a server.
The typical manual installation proceeds as follows:
Install Perl (5.8.1 or above)
Install a Database Engine
Install a Webserver
Install Bugzilla
Install Perl modules
Install a Mail Transfer Agent (Sendmail 8.7 or above, or an MTA that is Sendmail-compatible with at least this version)
Configure all of the above. (see http://www.bugzilla.org/docs/4.0/en/html/installation.html for details)
Allocate Cloud Resources: Memory, Instances, Services
Example of Manifest approach with .yml for Deploying Bugzilla to the Cloud - as done with ActiveState's Stackato - a CloudFoundry based Platform as a Service that runs on EC2, OpenStack, vSphere, CloudStack, Xen & KVM
Bugzilla sample:
https://github.com/ActiveState/stackato-samples/blob/master/perl/bugzilla/stackato.yml
Docs:
http://docs.stackato.com/deploy.html#stackato-yml-options
Kind Regards,
Diane Mueller
ActiveState
dianem@activestate.com