[jbosstools-issues] [JBoss JIRA] (JBIDE-23039) Need an interactive terminal that fits specific requirements

Roland Grunberg (JIRA) issues at jboss.org
Tue Aug 30 13:02:00 EDT 2016


    [ https://issues.jboss.org/browse/JBIDE-23039?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13286071#comment-13286071 ] 

Roland Grunberg edited comment on JBIDE-23039 at 8/30/16 1:01 PM:
------------------------------------------------------------------

I haven't had time to test this out, but here are a few suggestions :

- Can you make sure that the command being launched (presumably 'vagrant up') does not get passed the '--machine-readable' flag. I think I saw it in your code, but it appears vagrant doesn't support both interaction through stdin and that flag.
- Can you try wrapping your Runtime.getRuntime().exec(..) call in 'bash', or  'bash -i' . So basically something like new String [] {"bash", "-i", "-c", "vagrant up"}

UPDATE : After some more tinkering, I set up an example of calling 'vagrant up fedora/23-cloud-base', which causes a prompt because mutliple providers exist for that image.

If one just calls that with Runtime.getRuntime().exec(..) that error message you describe above comes up. If we then wrap that script around 'script -qfc "vagrant up fedora/23-cloud-base" /dev/null', then vagrant responds with the expected output indicating one must select a provider, and even the terminal codes are intact within the message. Given that these will be taken care of by Terminal.TM I think this should solve your needs. Also don't forget that you probably only need that for "Linux" because according to vagrant sources, stdin.tty is never checked unless not on Windows.


was (Author: rgrunber):
I haven't had time to test this out, but here are a few suggestions :

- Can you make sure that the command being launched (presumably 'vagrant up') does not get passed the '--machine-readable' flag. I think I saw it in your code, but it appears vagrant doesn't support both interaction through stdin and that flag.
- Can you try wrapping your Runtime.getRuntime().exec(..) call in 'bash', or  'bash -i' . So basically something like new String [] {"bash", "-i", "-c", "vagrant up"}

UPDATE : After some more tinkering, I set up an example of calling 'vagrant up fedora/23-cloud-base', which causes a prompt because mutliple providers exist for that image.

If one just calls that with Runtime.getRuntime().exec(..) that error message you describe above comes up. If we then wrap that script around 'script -qfc "vagrant up fedora/23-cloud-base" /dev/null', then vagrant responds with the expected output indicating one must select a provider, and even the terminal codes are intact within the message. Given that these will be taken care of by Terminal.TM I think this should solve your needs.

> Need an interactive terminal that fits specific requirements
> ------------------------------------------------------------
>
>                 Key: JBIDE-23039
>                 URL: https://issues.jboss.org/browse/JBIDE-23039
>             Project: Tools (JBoss Tools)
>          Issue Type: Feature Request
>          Components: server
>    Affects Versions: 4.4.1.AM2
>            Reporter: Rob Stryker
>            Assignee: Rob Stryker
>         Attachments: vagranttty.png
>
>
> CDK Tools requires a terminal that allows interactivity of i/o. The full set of requirements is a bit difficult to find a solution for. 
> 1) I must be able to get a Process or IProcess object when a command is run
> 2) I must be able to get an event or know when the process terminates
> 3) The terminal or console must be interactive and allow user input when prompted. 
> 4) It must behave as in 3) for 'vagrant' commands and any and all associated plugins. 
> These three requirements thus far seem impossible to solve. Solutions that have been attempted are:
> 1) Creating a java Process by myself via Runtime.exec.  The interactive prompts never arrive and there is no API for Process to know when it is waiting for input. 
> 2) Using the external-tools launch configuration. When running a command like mvn, the console that pops up seems to allow input from the user, and functions as expected. However, when running a command such as vagrant, such prompts are not provided. In our usecase, the following behavior is observed:
>    a) During vagrant-registration prompts, the console indicates it is not a TTY terminal and cannot allow input
>    b) During a landrush prompt for superuser status, no prompt is made, no TTY message is listed, and the process appears to have frozen
> 3) Launching / Opening a tm.terminal view.  This solution fails requirements 1 and 2.  We are not able to get a Process or an IProcess when a command is launched in a proper interactive terminal. This means we can have no way to know when the process has completed. 
> Other options have been explored but ended up at dead ends and not worth mentioning. The real question is why interactive behavior is visible when using external-tools launch config for maven, but is not visible when running vagrant. 
> Is this a function of the way the vagrant commands display or prompt for input? Why does vagrant-registration require a TTY terminal, but maven does not? Is this something that can be fixed upstream? 
> No other obvious solutions have presented themselves in the past year. 



--
This message was sent by Atlassian JIRA
(v6.4.11#64026)


More information about the jbosstools-issues mailing list