Vagrant Support

Brings in the basic config for Vagrant, missing elasticsearch but its enough to bring up a Vagrant instance of the main web app.
This commit is contained in:
2013-03-31 23:53:55 +01:00
parent c19f2f5562
commit 572216d10b
21 changed files with 620 additions and 2 deletions

View File

@@ -0,0 +1,34 @@
stage {'repo': before => Stage['pre']}
class apt {
exec {'apt-get-update':
path => '/usr/local/bin:/usr/bin:/bin',
command => 'apt-get update',
}
}
class {'apt': stage => 'repo' }
define apt::repo ($source, $key) {
file {"/etc/apt/sources.list.d/${name}.list":
source => "${source}",
owner => root,
group => root,
mode => 0644,
notify => Exec['apt-get-update'],
}
apt::key{"${name}-key":
key => "${key}",
}
}
define apt::key($key) {
exec {"${name}-exec":
command => "/usr/bin/env bash -c 'apt-key adv --recv-key --keyserver keyserver.ubuntu.com ${key}'",
}
}
Apt::Repo <| |> -> Exec['apt-get-update']
Apt::Key <| |> -> Exec['apt-get-update']

View File

@@ -0,0 +1,6 @@
class django::uwsgi {
include nginx
include uwsgi
}

View File

View File

@@ -0,0 +1,34 @@
# Get mysql up and running
class mysql {
package { "mysql-server":
ensure => installed,
}
case $operatingsystem {
ubuntu: {
package { "libmysqld-dev":
ensure => installed,
}
}
}
service { "mysql":
ensure => running,
enable => true,
require => Package['mysql-server'],
}
}
define mysql::database($user, $password) {
exec { "create-${name}-db":
unless => "/usr/bin/mysql -uroot ${name}",
command => "/usr/bin/mysql -uroot -e \"create database ${name};\"",
require => Service["mysql"],
}
exec { "grant-${name}-db":
unless => "/usr/bin/mysql -u${user} -p${password} ${name}",
command => "/usr/bin/mysql -uroot -e \"grant all on ${name}.* to ${user}@localhost identified by '$password';\"",
require => [Service["mysql"], Exec["create-${name}-db"]]
}
}

View File

@@ -0,0 +1,75 @@
class nginx {
include nginx::apt
package {'nginx':
ensure => latest,
require => Apt::Repo['nginx'],
}
service {'nginx':
ensure => running,
enable => true,
require => Package['nginx'],
}
file{['/etc/nginx/sites-available', '/etc/nginx/sites-enabled']:
ensure => directory,
}
# Remove the default config
file {['/etc/nginx/sites-enabled/default', '/etc/nginx/conf.d/default.conf']:
ensure => absent,
require => Package['nginx'],
notify => Service['nginx'],
}
file {'/etc/nginx/nginx.conf':
owner => root,
group => root,
mode => 0644,
ensure => present,
source => '/vagrant/puppet/files/nginx/nginx.conf',
require => Package['nginx'],
notify => Service['nginx'],
}
}
class nginx::apt {
apt::repo {'nginx':
source => '/vagrant/puppet/files/nginx/nginx.list',
key => 'ABF5BD827BD9BF62',
}
}
class {'nginx::apt': stage => 'repo' }
# Setup a gunicorn instance in nginx
define nginx::gunicorn($ensure, $host, $port, $root, $static='') {
case $ensure {
enabled: {
file{"/etc/nginx/sites-available/${name}.conf":
content => template('nginx/gunicorn.erb'),
ensure => present,
notify => Service['nginx'],
require => [Package['nginx'], File['/etc/nginx/sites-available']],
}
file{"/etc/nginx/sites-enabled/${name}.conf":
ensure => link,
target => "/etc/nginx/sites-available/${name}.conf",
notify => Service['nginx'],
require => [File["/etc/nginx/sites-available/${name}.conf"], File['/etc/nginx/sites-enabled']],
}
}
absent: {
file{"/etc/nginx/sites-available/${name}.conf":
ensure => absent,
notify => Service['nginx'],
}
file{"/etc/nginx/sites-enabled/${name}.conf":
ensure => absent,
notify => Service['nginx'],
}
}
}
}

View File

@@ -0,0 +1,47 @@
stage { 'pre': before => Stage['main'] }
class python {
package {
"build-essential": ensure => latest;
"python": ensure => latest;
"python-dev": ensure => latest;
"python-setuptools": ensure => installed;
"git-core": ensure => installed;
"mercurial": ensure => installed;
"libevent-dev": ensure => installed;
"libgeos-dev": ensure => installed;
}
exec {'pip-package':
command => 'easy_install pip',
path => '/usr/local/bin:/usr/bin:/bin',
require => Package['python-setuptools'],
subscribe => Package['python-setuptools'],
}
package {['virtualenv', 'virtualenvwrapper', 'gunicorn', 'gevent']:
ensure => latest,
provider => pip,
require => Exec['pip-package'],
}
}
class { 'python': stage => 'pre' }
define python::venv($path, $requirements) {
file {"$requirements":
ensure => present,
}
exec{"${name}-venv":
path => '/usr/local/bin:/usr/bin:/bin',
command => "virtualenv --system-site-packages ${path}",
creates => "${path}",
require => Package['virtualenv'],
}
exec {"${name}-requirements":
command => "/usr/bin/env bash -c 'source ${path}/bin/activate; pip install -i http://f.pypi.python.org/simple -r ${requirements}'",
require => Exec["${name}-venv"],
subscribe => File["$requirements"],
}
}

View File

@@ -0,0 +1,25 @@
class redis {
include redis::apt
package {'redis-server':
ensure => latest,
require => Apt::Repo['redis'],
}
service { 'redis-server':
ensure => running,
enable => true,
hasrestart => true,
require => Package['redis-server'],
}
}
class redis::apt {
apt::repo {'redis':
source => '/vagrant/puppet/files/redis/redis.list',
key => '5862E31D',
}
}
class {'redis::apt': stage => 'repo' }

View File

@@ -0,0 +1,30 @@
class supervisor {
package{'supervisor':
ensure => latest,
}
service{'supervisor':
ensure => running,
hasrestart => false,
require => Package['supervisor'],
}
}
define supervisor::program(
$command = $title,
$directory = "/tmp/",
$user = "nobody",
$autostart = true,
$autorestart = true,
$redirect_stderr = true)
{
file {"/etc/supervisor/conf.d/$title.conf":
ensure => present,
owner => "root",
group => "root",
content => template('supervisor/program.erb'),
notify => Service['supervisor'],
require => Package['supervisor'],
}
}