<?xml version="1.0" encoding="UTF-8"?>
<!--

    Licensed to the Apache Software Foundation (ASF) under one or more
    contributor license agreements.  See the NOTICE file distributed with
    this work for additional information regarding copyright ownership.
    The ASF licenses this file to You under the Apache License, Version 2.0
    (the "License"); you may not use this file except in compliance with
    the License.  You may obtain a copy of the License at

        http://www.apache.org/licenses/LICENSE-2.0

    Unless required by applicable law or agreed to in writing, software
    distributed under the License is distributed on an "AS IS" BASIS,
    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    See the License for the specific language governing permissions and
    limitations under the License.

-->
<project xmlns:artifact="urn:maven-artifact-ant" name="cargooverssh" default="cargooverssh" basedir=".">
  <property file="build.properties" />
  <property name="privatekeyfile" value="${user.home}/.ssh/id_rsa" />
  <property name="publickeyfile" value="${user.home}/.ssh/id_rsa.pub" />
  <property name="listenport" value="8080" />
  <property name="container.zip" value="http://apache.imghat.com//tomcat/tomcat-6/v6.0.32/bin/apache-tomcat-6.0.32.tar.gz" />
  <property name="warfile" value="build/sample.war" />

  <!-- maven must be available before we use it -->
  <delete dir="build/cargo"/>
  <mkdir dir="build/cargo"/>

  <get src="http://opensource.become.com/apache//maven/binaries/maven-ant-tasks-2.1.3.jar" dest="build/maven-ant-tasks"/>
  <get src="http://tomcat.apache.org/tomcat-6.0-doc/appdev/sample/sample.war" dest="${warfile}"/>

  <input
    message="Which provider would you like to use (aws-ec2, bluelock-vcdirector, cloudservers-uk, cloudservers-us, cloudsigma-zrh, eucalyptus-partnercloud-ec2, elastichosts-lon-b, elastichosts-lon-p, elastichosts-sat-p, gogrid, openhosting-east1, serverlove-z1-man, skalicloud-sdg-my, slicehost, trmk-ecloud, trmk-vcloudexpress, greenhousedata-element-vcloud)?"
    validargs="aws-ec2,bluelock-vcdirector,cloudservers-uk,cloudservers-us,cloudsigma-zrh,eucalyptus-partnercloud-ec2,elastichosts-lon-b,elastichosts-lon-p,elastichosts-sat-p,gogrid,openhosting-east1,serverlove-z1-man,skalicloud-sdg-my,slicehost,trmk-ecloud,trmk-vcloudexpress"
    addproperty="provider"
  />

  <!-- initialize maven tasks -->
  <path id="maven-ant-tasks.classpath" path="build/maven-ant-tasks"/>
  <typedef resource="org/apache/maven/artifact/ant/antlib.xml" uri="urn:maven-artifact-ant" classpathref="maven-ant-tasks.classpath"/>

  <!-- Setup maven so that we can get latest version of jclouds, jclouds, and jruby -->
  <artifact:dependencies pathId="jclouds.classpath">
    <dependency groupid="com.jcraft" artifactId="jsch" version="0.1.44-1"/>
    <dependency groupid="org.codehaus.cargo" artifactId="cargo-ant" version="1.0.6"/>
    <dependency groupid="org.codehaus.cargo" artifactId="cargo-core-container-tomcat" version="1.0.6"/>
    <dependency groupId="org.jclouds.provider" artifactId="${provider}" version="1.1.0" />
    <dependency groupId="org.jclouds" artifactId="jclouds-antcontrib" version="1.1.0" />
  </artifact:dependencies>

  <typedef name="compute" classname="org.jclouds.tools.ant.taskdefs.compute.ComputeTask" classpathref="jclouds.classpath" />
  <taskdef name="sshexec" classname="org.apache.tools.ant.taskdefs.optional.ssh.SSHExec" classpathref="jclouds.classpath" />
  <taskdef resource="cargo.tasks" classpathref="jclouds.classpath"/>

  <input message="What is your identity on ${provider}?" addproperty="identity"/>
  <input message="What is the credential for ${identity}?" addproperty="credential"/>
  <input message="What is the group for the deployment?" addproperty="group" defaultvalue="cargo"/>
  <property name="url" value="compute://${identity}:${credential}@${provider}"/>

  <target name="destroy" description="destroy the nodes ${group}">
    <compute actions="destroy" provider="${url}">
       <nodes group="${group}" />
    </compute>
    <sleep seconds="5" />
  </target>

  <target name="create" description="create the nodes ${group}" >
     <compute actions="destroy,create" provider="${url}">
        <nodes group="${group}" os="UBUNTU" hardware="SMALLEST"
              runscript="runscript.sh" openports="22,${listenport}"
              privatekeyfile="${privatekeyfile}" publickeyfile="${publickeyfile}"
              hostproperty="host" usernameproperty="username" />
     </compute>
  </target>

  <target name="cargooverssh" depends="create" description="run cargo on remote nodes" >
    <echo message="deploying tomcat and sample app to to: http://${host}:${listenport}/sample/" />
    <echo message="note that eventhough cargo says ctrl-c stops the server, you really need to run ant destroy to kill it" />
    <cargo containerId="tomcat6x" output="build/output.log" log="build/cargo.log" action="start" timeout="600000">
      <zipurlinstaller installurl="${container.zip}" />
      <configuration home="build/cargo" type="standalone">
        <property name="cargo.java.home" value="/usr/lib/jvm/java-6-openjdk"/>
        <property name="cargo.hostname" value="${host}"/>
        <property name="cargo.servlet.port" value="${listenport}"/>
        <property name="cargo.ssh.host" value="${host}"/>
        <property name="cargo.ssh.username" value="${username}"/>
        <property name="cargo.ssh.password" value=""/>
        <property name="cargo.ssh.keyfile" value="${privatekeyfile}"/>
        <property name="cargo.ssh.remotebase" value="/tmp/cargo"/>
        <property name="cargo.logging" value="high"/>
        <deployable type="war" file="${warfile}"/>
      </configuration>
    </cargo>
  </target>

  <target name="justplaincargo" description="run cargo on local machine" >
    <echo message="deploying tomcat and sample app to: http://localhost:${listenport}/samples/" />
    <cargo containerId="tomcat6x" output="build/output.log" log="build/cargo.log" action="start" timeout="600000">
      <zipurlinstaller installurl="${container.zip}" />
      <configuration home="build/cargo" type="standalone">
        <property name="cargo.servlet.port" value="${listenport}"/>
        <property name="cargo.logging" value="high"/>
        <deployable type="war" file="${warfile}"/>
      </configuration>
    </cargo>
  </target>

</project>
