why not? what's wrong with prompting the user for input?
I'll even supply the task................ (see attachment)
Filip Cruz wrote:
> Thanks, Paul
> I'll give it a try.
>
> At 11:36 AM 7/26/2001 -0400, you wrote:
>
>> I'm doing SSH deployment using SecureCRT.
>> SecureCRT has VCP command line utility to transfer files over SSH.
>> One problem - you can't input password during deployment so I'm
>> providing it
>> in a password file.
>>
>> Here is an example of target:
>>
>> <target name="doSSH" description="Copies file to remote server over
>> SSH.">
>> <!-- Secure CRT location -->
>> <property name="vcp.dir" value="C:\Progra~1\Secure~1.0"/>
>> <property name="pwd.file" value="pwd"/>
>> <property name="pwd" value="xxxxx"/>
>>
>> <echo message="Copying ${source.file} to ${dest.dir} at
>> XXXX..."/>
>> <!-- Create password file -->
>> <echo message="${pwd}" file="${source.dir}/${pwd.file}"/>
>> <exec dir="${source.dir}" executable="cmd">
>> <arg line="/S /C ${vcp.dir}\vcp.exe ${source.file}
>> [EMAIL PROTECTED]:${dest.dir} < ${pwd.file}"/>
>> </exec>
>> <!-- delete password file when we've done -->
>> <delete file="${source.dir}/${pwd.file}"/>
>> </target>
>>
>> Good luck,
>>
>> Paul Perevalov,
>> Bridium,Inc.
>>
>> -----Original Message-----
>> From: Filip Cruz [mailto:[EMAIL PROTECTED]]
>> Sent: Thursday, July 26, 2001 11:18 AM
>> To: [EMAIL PROTECTED]
>> Subject: Re: Using Ant with SSH
>>
>>
>> Sorry,
>> I am trying to use Ant to deploy to our production servers through
>> SSH. In
>> brief I want to be able to deploy the files over SSH to the server
>> from a
>> task in the Ant build.xml file. I am using a Win2K client and I have SSH
>> Secure Shell client and SecureCRT.
>>
>> Is there a way to deploy over SSH from Ant?? If so, how is it done?
>
>
>
>
/*
******************************************************************************
* $RCSfile: Prompt.java,v $ $Revision: 1.3 $ $Date: 2001/06/15 20:30:57 $
******************************************************************************
*/
import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.Project;
import org.apache.tools.ant.Task;
import java.io.LineNumberReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
/***
* Task definition for the ANT task to prompt the user for information
* Usage:
*
* Task declaration in the project:
* <taskdef name="prompt" classname="Prompt" />
*
* Task calling syntax:
* <prompt message="message" propertyname="propname"
* [defaultvalue="value" | allowempty="true|false"]
* >
* [ <allow value="value" ]*
* </prompt>
*
* Attributes:
* message -> The message to display to the user
* propertyname -> The name of the property to set with the received input
* defaultValue -> The default value if the user just hits enter
* allowempty -> Whether or not an empty value is allowed
*
* Subitems:
* <allow value="value" /> --> allow this value to be input. By supplying
* one or more of this subitem, you limit the
* input to a range of specific allowable
* values. Any value input that is not explicitly
* allowed is rejected. (good for y/n questions)
*
* Notes:
* 1. The defaultvalue and allowempty attributes are mutually exclusive,
* and if both are specified, the defaultvalue attribute takes precedence.
*/
public class Prompt extends Task
{
private String message;
private String defaultValue;
private String propertyName;
private boolean allowEmpty;
private List allows;
/***
* Default Constructor
*/
public Prompt()
{
allows = new ArrayList();
allowEmpty = true;
}
public void execute()
throws BuildException
{
if (message == null)
throw new BuildException("Message is missing");
if (propertyName == null)
throw new BuildException("PropertyName is missing");
if (defaultValue != null && allows.size() > 0)
{
if (! allows.contains(new Allow(defaultValue)))
throw new BuildException("Default Value is not in the set of allowed
values.");
}
StringBuffer sb = new StringBuffer();
sb.append(message);
sb.append(" ");
int asize = allows.size();
if (asize > 0)
{
sb.append(" (");
for (int i=0;i<asize;i++)
{
if (i != 0) sb.append(',');
sb.append(allows.get(i));
}
sb.append(") ");
}
if (defaultValue != null)
{
sb.append('[');
sb.append(defaultValue);
sb.append(']');
sb.append(" : ");
}
boolean done = false;
LineNumberReader lnr = new LineNumberReader(new InputStreamReader(System.in));
String inputValue = "";
while (! done)
{
System.out.print(sb.toString());
try
{
inputValue = lnr.readLine();
if ((defaultValue != null) && (inputValue.trim().length() == 0))
{
inputValue = defaultValue;
done = true;
}
else if (allows.size() > 0)
{
if (allows.contains(new Allow(inputValue)) ||
(defaultValue != null &&
inputValue.trim().equals(defaultValue)))
{
done = true;
}
}
else
{
done = true;
}
}
catch (IOException e)
{
throw new BuildException(e);
}
if (defaultValue != null && inputValue.trim().length() == 0)
{
inputValue = defaultValue;
}
if (! allowEmpty && inputValue.trim().length() == 0)
done = false;
if (! done)
System.out.println(" Invalid value: '" + inputValue + "'");
}
Project p = getProject();
p.setUserProperty(propertyName, inputValue);
}
/***
* Sets the prompt message
*/
public void setMessage(String message)
{
this.message = message;
}
/***
* Sets the defaultValue that is used if the user just hits return
*/
public void setDefaultValue(String defaultValue)
{
this.defaultValue = defaultValue;
}
public void setAllowEmpty(String allowEmpty)
{
try
{
this.allowEmpty = Boolean.valueOf(allowEmpty).booleanValue();
}
catch (Exception e)
{
this.allowEmpty = true;
}
}
/***
* Inner class which defines the "<allow>" tag as a child
* of a "<prompt>" tag
*/
public static final class Allow extends Object
{
private String value;
public Allow()
{
super();
}
public Allow(String value)
{
super();
setValue(value);
}
public void setValue(String value)
{
this.value = value;
}
public boolean equals(Object o)
{
Allow a = (Allow)o;
return value.equals(a.value);
}
public String toString()
{
return value;
}
}
/***
* Creates the <allow> tag
*/
public Prompt.Allow createAllow()
{
Prompt.Allow res = new Prompt.Allow();
allows.add(res);
return res;
}
/***
* Sets the name of the property which will contain
* the input value after the prompt is finished.
*/
public void setPropertyName(String propertyName)
{
this.propertyName = propertyName;
}
}