[wildfly-dev] HTTP API support for plain JBoss-CLI commands

Alexey Loubyansky alexey.loubyansky at redhat.com
Fri May 29 10:34:47 EDT 2015


On 05/29/2015 02:51 PM, Darran Lofthouse wrote:
> What we really have internally is a HTTP management interface and we
> used to expose a native (JBoss Remoting) management interface that the
> CLI would connect to - subsequently the CLI does connect to the HTTP
> management interface but it performs a HTTP upgrade to now talk Remoting
> over HTTP using DMR formatted messages.
>
> For the HTTP management interface json was selected as the payload type
> so that clients could be written in many languages that have libraries
> to talk HTTP and handle json.
>
> The CLI was then subsequently developed but with an emphasis on
> assisting administrators constructing a request so things like tab
> completion and automatic conversion.
>
> A couple of things this thread throws up that I think could be useful: -
>    - The ability to enter raw json requests into the CLI.

There is a Jira issue open for this 
https://issues.jboss.org/browse/WFCORE-418

>    - The ability to output the json representation of a command
> constructed by the CLI.

This is an easy one. There is echo-dmr command already. It could accept 
--json argument to further transform the result to JSON.


Alexey
>
> Regards,
> Darran Lofthouse.
>
>
> On 29/05/15 13:38, Jairo Junior wrote:
>> Darran,
>>
>> Thank you, wish I had found your blog post before. Fortunately, I was
>> able to build almost the same thing with a lot of effort:
>> https://github.com/biemond/biemond-wildfly/blob/master/lib/puppet_x/util/wildfly_cli.rb
>>
>> My point is: Sysadmins often build CLI scripts to automate tasks and I
>> want to "reuse" this knowledge in HTTP API. Sysadmins don't talk JSON,
>> they talk CLI...
>>
>> I heard somewhere that jboss-cli.sh and Management Console are using the
>> same HTTP API in Wildfly, but I'm not sure how jboss-cli.sh use this
>> commands...
>>
>> In fact, I tried to use jboss-cli.sh but bash is incredible slow
>> compared to HTTP API:
>> https://github.com/cpitman/puppet-jboss_admin/issues/68
>>
>> On Fri, May 29, 2015 at 9:22 AM Darran Lofthouse
>> <darran.lofthouse at jboss.com <mailto:darran.lofthouse at jboss.com>> wrote:
>>
>>      It was written a couple of years back but this is a good blog post to
>>      look at for different clients sending in management requests: -
>>
>>      http://pilhuhn.blogspot.co.uk/2012/01/polyglot-management-of-secured-as7.html
>>
>>      You don't need to go as far as the Base64 encoding and decoding if you
>>      do not want to and just create the json formatted requests and parse the
>>      json responses.
>>
>>      Regards,
>>      Darran Lofthouse.
>>
>>      On 29/05/15 13:11, Jairo Junior wrote:
>>       > No, it's not. Only ruby. Although, I could use JRuby to import
>>      and use
>>       > Java classes, it would give me more trouble than solutions.
>>       >
>>       > What I want is: An interoperable way to talk with JBoss.
>>      application/dmr
>>       > is a binary/proprietary format.
>>       >
>>       > On Fri, May 29, 2015 at 8:17 AM Heiko Braun <hbraun at redhat.com
>>      <mailto:hbraun at redhat.com>
>>       > <mailto:hbraun at redhat.com <mailto:hbraun at redhat.com>>> wrote:
>>       >
>>       >     What the constraints when developing a puppet module? Is
>>      plain java
>>       >     supported?
>>       >
>>       >
>>       >
>>       >
>>       >     Am 29.05.2015 um 01:39 schrieb Jairo Junior
>>      <junior.jairo1 at gmail.com <mailto:junior.jairo1 at gmail.com>
>>       >     <mailto:junior.jairo1 at gmail.com
>>      <mailto:junior.jairo1 at gmail.com>>>:
>>       >
>>       >>     Heiko,
>>       >>
>>       >>     Thank you, but how do I build a ModelNode from a CLI command?
>>       >>
>>       >>     Before using JSON I was investigating how Administration Console
>>       >>     perform operations and I realized (using firebug) that it uses
>>       >>     application/dmr, but I presumed it uses ModelNode to build
>>       >>     commands, not plain CLI syntax.
>>       >>
>>       >>     On Thu, May 28, 2015 at 5:58 AM Heiko Braun
>>      <hbraun at redhat.com <mailto:hbraun at redhat.com>
>>       >>     <mailto:hbraun at redhat.com <mailto:hbraun at redhat.com>>> wrote:
>>       >>
>>       >>         The DMR library can be found here:
>>       >>
>>       >> https://github.com/jbossas/jboss-dmr
>>       >>
>>       >>
>>       >>>         On 28 May 2015, at 10:56, Heiko Braun
>>      <hbraun at redhat.com <mailto:hbraun at redhat.com>
>>       >>>         <mailto:hbraun at redhat.com <mailto:hbraun at redhat.com>>>
>>      wrote:
>>       >>>
>>       >>>
>>       >>>         You can already use DMR over HTTP. It requires a different
>>       >>>         content-type ('application/dmr-encoded') and uses a base64
>>       >>>         encoded representation of the payload
>>       >>>         ('ModelNode.toBase64String()').
>>       >>>
>>       >>>         You can describe an operation through the DMR API and then
>>       >>>         simply do HTTP POST to ‘/management’ endpoint. make sure to
>>       >>>         use 'application/dmr-encoded’ for both 'Content-Type' and
>>       >>>         ‘Accept’ headers.
>>       >>>
>>       >>>         The response can be parse using 'ModelNode.fromBase64()'.
>>       >>>
>>       >>>         Hope this helps,
>>       >>>         Heiko
>>       >>>
>>       >>>
>>       >>>
>>       >>>>         On 27 May 2015, at 19:54, Jairo Junior
>>       >>>>         <junior.jairo1 at gmail.com
>>      <mailto:junior.jairo1 at gmail.com> <mailto:junior.jairo1 at gmail.com
>>      <mailto:junior.jairo1 at gmail.com>>>
>>       >>>>         wrote:
>>       >>>>
>>       >>>>         I've been working on a Puppet Module for Wildfly [1] that
>>       >>>>         uses his HTTP Management API to perform operations (manage
>>       >>>>         resources/deploys and execute commands), but my command
>>       >>>>         execution code is a little bit limited cause I have to
>>       >>>>         transform from CLI syntax to JSON. e.g.:
>>       >>>>
>>       >>>>         :shutdown(restart=true)
>>       >>>>
>>       >>>>         becomes
>>       >>>>
>>       >>>>         {"operation" : "shutdown", "restart" : "true" }
>>       >>>>
>>       >>>>         Is there any specific reason to not support plain CLI
>>       >>>>         commands through HTTP API? I looked at the code and it
>>       >>>>         didn't see hard to implement this...
>>       >>>>
>>       >>>>         [1] https://github.com/biemond/biemond-wildfly
>>       >>>>
>>       >>>>         _______________________________________________
>>       >>>>         wildfly-dev mailing list
>>       >>>> wildfly-dev at lists.jboss.org
>>      <mailto:wildfly-dev at lists.jboss.org>
>>      <mailto:wildfly-dev at lists.jboss.org
>>      <mailto:wildfly-dev at lists.jboss.org>>
>>       >>>> https://lists.jboss.org/mailman/listinfo/wildfly-dev
>>       >>>
>>       >>
>>       >
>>       >
>>       > _______________________________________________
>>       > wildfly-dev mailing list
>>       > wildfly-dev at lists.jboss.org <mailto:wildfly-dev at lists.jboss.org>
>>       > https://lists.jboss.org/mailman/listinfo/wildfly-dev
>>       >
>>
> _______________________________________________
> wildfly-dev mailing list
> wildfly-dev at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/wildfly-dev
>


More information about the wildfly-dev mailing list