Passer la navigation

Hello everybody,

Please consider this post as a BETA post (lot of things are missing here) !

 

I’m currently developing some plugins in symfony to help manage infrastructures, platforms and softwares deployments.

It’s about these so-called « IaaS », « PaaS » and « SaaS » 🙂 I’m sure you know those.

The goal of these plugins are to help developers create infrastructures (virtual machines), platforms (applications installed on infrastructure computers, according to their roles) easily, then deploy softwares on these platforms.

When using symfony, usually you start by creating the root project folder, its vhost for web-server, the fake dns in /etc/hosts, then generating project, and coding.

What these plugins are offering is a way to isolate project developments within infrastructures and virtual machines.

So you can have one project developed using a LAMP stack with php 5.2 while another project is developed with a LAMP stack but with php 5.3.

You’ll be able to « type » these differences and start new projects from them easily, by declaring what you want within yaml files.

Plugins will offer symfony tasks for the dutty at hand, and will come a Diem interface too (packaged as a web-app).

Here i’ll explain how I plan to offer IaaS, PaaS and, later, SaaS declarations, using my plugins.

Let first focus on Iaas part.

First, let’s talk about the IaaS thing, by introducing to you its actual meta-model (within my implementation, so to speak) :

So let say I want to create a « typical » infrastructure, I’ll start creating an infrastructure type.

I’ll use YAML to let users declare their infrastructures and infrastructure types :

(as WordPress is silly enough to not let us integrate plugins, here you’ll have a .. text which means [space][space] -_- )

Declaring Infrastructure Types :

—————————— infrastructure_types.yml start

project_php_dev:

..appsrv[0,*]:

….system:

……iso: /var/isos/ubuntu-server-x64-10.10.iso

….apache:

……install: sudo apt-get install apache2-mpm-prefork

……pre-install: /var/scripts/apache2/pre-install-dev.sh

……post-install: /var/scripts/apache2/post-install-dev.sh

….php:

……install: sudo apt-get install php5 php5-cli php5-dev php-pear

……pre-install: /var/scripts/php5/pre-install-dev.sh

……post-install: /var/scripts/php5/post-install-dev.sh

….mysql:

……install: sudo apt-get install mysql-server-5.1

……pre-install: /var/scripts/mysql5-1/pre-install-dev.sh

……post-install: /var/scripts/mysql5-1/post-install-dev.sh

—————————— infrastructure_types.yml end

Here I have declared an infrastructure type named « project_php_dev ».

This infrastructure type needs at least one computer of type « appsrv », and can have as many as needed.

These computers typed as « appsrv » will have three applications, typed as « apache », « php » and « mysql ». Those are application types, not application instances, as we are declaring a type.

We simply say that « this type of computer will have those types of applications ».

There is also a system entry in this computer type, so we can configure the used iso. I’ll add more options so we can « clone » things, and run scripts on post-clone (to change hostname, and such).

Also I’ll add a nesting of infrastructures, so I’ll be able to declare a « php_project » infra which will have [0, *] infras, like « dev », « prod », « test », and so on.

So let see now an infrastructure.yml file :

—————————— myInfrastructure.yml start

myInfra[project_php_dev]:

..computer00[appsrv]:

..computer01[appsrv]:

….apache:

……post-install: /var/infras/%%INFRA%%/%%COMPUTER%%/%%APP%%/post-install.sh

—————————— myInfrastructure.yml end

#Here I have overloaded the post-install script for the myInfra/computer01/apache application.

I hope you’ve got the spirit of the plugins I want to develop. When finished, I’ll give applications to generate yml files, using EMF things (from Eclipse, Acceleo, Epsilon).

I have written this to gather your thoughts on this. What are yours in seeing this ? Please give us some comments ! 🙂

To be clear, I need to develop these plugins to ease my project-launching, and to offer it to web-agencies for example, or within mid-sized enterprises (open-sourced).

Do you have any input to give ? Com’on !
Thank you for reading anyway !

Stéphane

Laisser un commentaire