# == Define: site
#

define lodgeit::site(
  $port,
  $vhost_name="paste.${name}.org",
  $image='') {

  include apache

  apache::vhost::proxy { $vhost_name:
    port    => 80,
    dest    => "http://localhost:${port}",
    require => File["/srv/lodgeit/${name}"],
  }

  file { "/etc/init/${name}-paste.conf":
    ensure  => present,
    content => template('lodgeit/upstart.erb'),
    replace => true,
    require => Package['apache2'],
    notify  => Service["${name}-paste"],
  }

  file { "/srv/lodgeit/${name}":
    ensure  => directory,
    recurse => true,
    source  => '/tmp/lodgeit-main',
  }

  if $image != '' {
    file { "/srv/lodgeit/${name}/lodgeit/static/${image}":
      ensure => present,
      source => "puppet:///lodgeit/${image}",
    }
  }

  file { "/srv/lodgeit/${name}/manage.py":
    ensure  => present,
    mode    => '0755',
    replace => true,
    content => template('lodgeit/manage.py.erb'),
    notify  => Service["${name}-paste"],
  }

  file { "/srv/lodgeit/${name}/lodgeit/views/layout.html":
    ensure  => present,
    replace => true,
    content => template('lodgeit/layout.html.erb'),
  }

  exec { "create_database_${name}":
    command => "drizzle --user=root -e \"create database if not exists ${name};\"",
    path    => '/bin:/usr/bin',
    unless  => 'drizzle --disable-column-names -r --batch -e "show databases like \'openstack\'" | grep -q openstack',
    require => Service['drizzle'],
  }

# create a backup .sql file in git

  exec { "create_db_backup_${name}":
    command => "touch ${name}.sql && git add ${name}.sql && git commit -am \"Initial commit for ${name}\"",
    cwd     => '/var/backups/lodgeit_db/',
    path    => '/bin:/usr/bin',
    onlyif  => "test ! -f /var/backups/lodgeit_db/${name}.sql",
  }

# cron to take a backup and commit it in git

  cron { "update_backup_${name}":
    user    => root,
    hour    => 6,
    minute  => 23,
    command => "sleep $((RANDOM\\%60+60)) && cd /var/backups/lodgeit_db && drizzledump -uroot ${name} > ${name}.sql && git commit -qam \"Updating DB backup for ${name}\""
  }

  service { "${name}-paste":
    ensure    => running,
    provider  => upstart,
    require   => [Service['drizzle', 'apache2'], Exec["create_database_${name}"]],
    subscribe => Service['drizzle'],
  }
}