define xen_guest($memory="512", $size="2Gb", $swap="2Gb", $gateway="10.10.2.2", 
$ip, $auto=false, $ensure="present") {
  case $name { '': { fail ( "Cannot create xen guest with empty name" ) } }

  case $ensure {
    present: {
      exec { "/usr/bin/xen-create-image --hostname=$name --memory=$memory --size
=$size --swap=$swap --gateway=$gateway --ip=$ip --tar /root/puppet.client.tar --
ide":
        creates => "/etc/xen/$name.cfg",
        alias => "xen_create_$name"
      }
    }
    running: {
      exec { "/usr/bin/xen-create-image --hostname=$name --memory=$memory --size
=$size --swap=$swap --gateway=$gateway --ip=$ip --tar /root/puppet.client.tar --
ide --boot":
        creates => "/etc/xen/$name.cfg",
        alias => "xen_create_$name"
      }
      exec { "/usr/sbin/xm create /etc/xen/$name.cfg":
        returns => 1,
        unless => "/usr/sbin/xm list | /bin/grep $name",
        require => Exec["xen_create_$name"]
      }
    }
    stopped: {
      exec { "/usr/bin/xen-create-image --hostname=$name --memory=$memory --size
=$size --swap=$swap --gateway=$gateway --ip=$ip --tar /root/puppet.client.tar --
ide":
        creates => "/etc/xen/$name.cfg",
        alias => "xen_create_$name"
      }
      exec { "/usr/sbin/xm shutdown -w $name":
        onlyif => "/usr/sbin/xm list | /bin/grep $name",
        require => Exec["xen_create_$name"]
      }
    }
    absent: {
      exec { "/usr/sbin/xm shutdown -w $name":
        onlyif => "/usr/sbin/xm list | /bin/grep $name",
        alias => "xen_shutdown_$name"
      }
      exec { "/usr/bin/xen-delete-image $name":
        unless => "/usr/sbin/xm list | /bin/grep $name",
        require => Exec["xen_shutdown_$name"]
        onlyif => "/usr/sbin/xm list | /bin/grep $name",
        require => Exec["xen_create_$name"]
      }
    }
    absent: {
      exec { "/usr/sbin/xm shutdown -w $name":
        onlyif => "/usr/sbin/xm list | /bin/grep $name",
        alias => "xen_shutdown_$name"
      }
      exec { "/usr/bin/xen-delete-image $name":
        unless => "/usr/sbin/xm list | /bin/grep $name",
        require => Exec["xen_shutdown_$name"]
      }
    }
  }

  if $auto {
    exec { "/bin/ln -s /etc/xen/$name.cfg /etc/xen/auto/":
      creates => "/etc/xen/auto/$name.cfg",
      onlyif => "test -f /etc/xen/$name.cfg";
    }
  }
}

# Use like this:
#  xen_guest { "puppet-test.example.com":
#    ip => "10.10.67.26",
#    ensure => "absent"
#  }