Juju support for application server technologies (Django, JEE, RoR, etc)

Registered by Bruno Girin

Rationale:
Application server technologies such as Django, JavaEE or Ruby on Rails work in a similar way: an application server provides a runtime and services to a number of applications it hosts, such as access to data sources, configuration options, etc in a way that shields the applications from the underlying topology.

Goal:
This blueprint aims to extend the Juju subordinate service concept, provide support for a number of application server technologies in two ways: charms for some of the most common application servers and tools to enable users to create charms for their own application to be deployed on top of any compatible application server.

Blueprint information

Status:
Started
Approver:
Antonio Rosales
Priority:
High
Drafter:
Ubuntu Server
Direction:
Approved
Assignee:
Bruno Girin
Definition:
Discussion
Series goal:
Accepted for raring
Implementation:
Started
Milestone target:
milestone icon ubuntu-13.04
Started by
Antonio Rosales

Related branches

Sprints

Whiteboard

User Stories:
As a sysop, I want to deploy a web application container on a cloud node.

As a developer, I want to create a Juju charm to deploy my web application on any compatible container. Example of compatible container: Django app => Django container; JEE .war => servlet container (e.g. Apache Tomcat) or JEE app server (e.g. JBoss); JEE .ear or .jar => JEE app server (e.g. JBoss)

As a sysop, I want to deploy a web application onto a compatible container node.

As a sysop, I want to define a named data source in a web app node and add a relationship to a database node for that data source.

Risks:
Properly gathering best practices from developer communities, and integrating that knowledge into the framework charm itself.

Test Plans:
CharmTesting should be leveraged here to exercise a framework charm with traditional workloads, and to specifically repeatedly exercise the individual functions of the framework charm.

Framework charm development will need a base set of application charms to test the functionality of the framework itself. There could also be an “exerciser” framework charm that specifically and exhaustively tests each function of the framework (where a ‘normal’ application charm may not exercise all the functions or do it repeatedly).

Release Note:
Release not may not be applicable here, but we should blog about framework charms so folks now they are available to use.

--- Discussion at UDS ---

Why is this important
- Application servers come before Apps
- Private/Enterprise apps are more numerous than public apps
- Deployment needs to be easier/simpler because testing suffers when deployment is difficult
--- jitsu import/export for above ?
- Connect named resources to app without app specifically knowing about it
- Scalability as needed

PaaSish Ubuntu Juju mailing list:
  -https://lists.ubuntu.com/archives/juju/2012-October/001910.html

Improving framework/infrastructure service charms on Juju mailing list:
  -https://lists.ubuntu.com/archives/juju/2012-September/001884.html

Possible implementation options (may not be mutually exclusive):
# App-by-Subordinate
juju deploy django
juju deploy myapp # <---- subordinate
juju add-relation django myapp
juju deploy mysql app-db-1
juju add-relation app-db-1 django # <---- relation handled by django via ORM layer
juju deploy mongodb
juju add-relation myapp mongodb # <---- relation handled by the app itself
--
# App-by-Config
juju deploy django --set app-src=git://....
--
# App-by-Fork
bzr branch lp:charms/django myapp

[2013-04-21: arosales: current work being tracked in https://blueprints.launchpad.net/ubuntu/+spec/servercloud-1305-juju-framework-charms Thus, postponing all non-done work items.]

(?)

Work Items

Work items:
[jorge] Add App-By-Config and App-By-Subordinate to charm quality: POSTPONED
[clint-fewbar] Highlight examples of both approaches: POSTPONED
[brunogirin] evaluate/improve django (working with existing maintainer): POSTPONED
[brunogirin] Document deploying django tutorial with juju: POSTPONED
[jorge] sync up with dev to evaluate/improve node.js (working with existing maintainer): POSTPONED
[jorge] evaluate/improve rails (working with existing maintainer): DONE
[brunogirin] Develop principles for normalizing interfaces in like services: POSTPONED
[marcoceppi] Contact and work with PHP app devs (Zend and Symfony): POSTPONED
[brunogirin] JBOSS charm: POSTPONED
[marcoceppi] Mediawiki: POSTPONED
[brunogirin] Django: POSTPONED
[arosales] MongoDB challenge: DONE
[negronjl] MongoDB: DONE
[jorge] Postgresql: POSTPONED
[robert-ayres] MySQL: POSTPONED
[jorge] Node.js: POSTPONED
[arosales] Node.js: POSTPONED
[mark-mims] Rails: POSTPONED
[jorge] Memcached: POSTPONED
[negronjl] Redis: POSTPONED
[jorge] Varnish: POSTPONED
[jorge] Cassandra (Talk to evan): DONE
[mark-mims] Rabbit and Sensu: POSTPONED
[jorge] Logstash: DONE
[jorge] University charming: POSTPONED

Dependency tree

* Blueprints in grey have been implemented.