[Hawkular-dev] integrating ansible and hawkular to start remote wildfly servers

John Mazzitelli mazz at redhat.com
Thu Jul 14 17:25:03 EDT 2016


I have a very simple PoC working that shows Ansible integrated with Hawkular such that it can start a WildFly server remotely.

I'll begin with a brief summary.

SUMMARY

A client connects to the Hawkular Server via its websocket and passes in a JSON request (like it does the other kinds of requests). The JSON request looks something like:

  AnsibleRequest={"playbook":"start-wildfly.yml", "extraVars": { "wildfly_home_dir":"/opt/wildfly10" } }

The command-gateway server takes the request, runs the Ansible playbook, and returns the response back over the websocket to the client with an AnsibleResponse (which includes the Ansible output to show what it did).

DETAILS

The code is in two branches in my repos. See [1] and [2]. You need both for this to work.

Hawkular-Services packages up Ansible playbooks and its associated files in standalone/configuration/ansible. See [3].

Hawkular-Commons adds to command gateway a new JSON request/response for Ansible requests. See [4] and [5].

The Ansible command is invoked in the server when the AnsibleRequest JSON is received over the websocket. This command implementation runs the Ansible playbook and returns the results back in a AnsibleResponse. See [6].

If you build commons and then services to pull the new commons in, you can run a test to see it work. I use the test command CLI utility in the agent to do this [7]. First, build the new dist and run it so you have a Hawkular Service running (for example, "mvn clean install -Pdev,embeddedc"). Next, create a test JSON request file (say, "/tmp/hawkular.json") with this content:

{ "playbook":"start-wildfly.yml",
  "extraVars": {
     "wildfly_home_dir":"/directory/where/you/installed/wildfly"
  }
} 

Now build the hawkular-agent from source (just so you get the test command CLI utility) and run the test command CLI, telling it to use the JSON in your file and send it to your Hawkular Service server:

$ cd <hawkular-agent-source-dir>/hawkular-wildfly-agent-itest-parent/hawkular-wildfly-agent-command-cli/target

$ java -jar hawkular-wildfly-agent-command-cli-*.jar --username jdoe --password password \
       --command AnsibleRequest --request-file=/tmp/hawkular.json

This sends the request to your local Hawkular Service server over the websocket, the Ansible playbook "start-wildfly.yml" is run, which starts the WildFly in that home dir you specified in your JSON request, and the response is sent back. The Command CLI tool will write the responses it receives to disk - look at the cli output for the names of the files it writes - you can look in there to see what the Ansible command response was (its just the full Ansible output).

There is still LOTS to do here (for one, you'll notice it assumes your wildfly install is on "localhost" :)). This is merely a PoC that we can use as a starting point - it shows that this can be done and how we can do it.

-- John Mazz

[1] https://github.com/jmazzitelli/hawkular-commons/tree/HAWKULAR-1096-ansible-commands
[2] https://github.com/jmazzitelli/hawkular-services/tree/HAWKULAR-1096-ansible-commands
[3] https://github.com/jmazzitelli/hawkular-services/tree/HAWKULAR-1096-ansible-commands/dist/src/main/resources/standalone/configuration/ansible
[4] https://github.com/jmazzitelli/hawkular-commons/blob/HAWKULAR-1096-ansible-commands/hawkular-command-gateway/hawkular-command-gateway-api/src/main/resources/schema/AnsibleRequest.schema.json
[5] https://github.com/jmazzitelli/hawkular-commons/blob/HAWKULAR-1096-ansible-commands/hawkular-command-gateway/hawkular-command-gateway-api/src/main/resources/schema/AnsibleResponse.schema.json
[6] https://github.com/jmazzitelli/hawkular-commons/blob/HAWKULAR-1096-ansible-commands/hawkular-command-gateway/hawkular-command-gateway-war/src/main/java/org/hawkular/cmdgw/command/ws/AnsibleCommand.java
[7] https://github.com/hawkular/hawkular-agent/tree/master/hawkular-wildfly-agent-itest-parent/hawkular-wildfly-agent-command-cli


More information about the hawkular-dev mailing list