Web-Interface to run Ansible Playbook
Ansijet
All credits for Ansijet goes to Ramesh Nair who created Ansijet and Ankit Kulkarni for helping me to modify it.
Ansijet is a node.js server which exposes a simple web API which triggers playbook runs when a request is received. This is especially useful if you are unable to run Ansible playbooks directly from within your continuous integration environment or if you simply wish to trigger playbook runs based on other events within your system (may be on a click of a button).
Ansijet is a node.js server which exposes a simple web API which triggers playbook runs when a request is received. This is especially useful if you are unable to run Ansible playbooks directly from within your continuous integration environment or if you simply wish to trigger playbook runs based on other events within your system (may be on a click of a button).
Features:
- Trigger playbook runs from different sources, including from CI systems such as Drone.
- Run multiple playbooks in parallel, all in separate processes
- Fast, friendly web interface with accompanying REST API
- Highly asynchronous, scalable back-end
- Full console log capture and storage
- Sends notifications of job status through HipChat
Pre-requisites:
- Ansible 1.5+ - Follow the step here to install Ansible.
- Node.js 0.11.2+ - Installation instructions: http://nodejs.org/.
- MongoDB - Follow the step here to install MongoDB.
Setup Ansible Directory:
Ansijet stores its data in MongoDB. The default configuration expects to be able to connect to a MongoDB server running on 127.0.0.1 (i.e. localhost).
Setup your Ansible playbooks
Place your Ansible playbooks somewhere, e.g. /playbooks.
Ansijet expects your playbooks folder to have a certain structure:
Ensure that any roles needed by your playbooks can be found by the ansible-playbook binary. An easy way to ensure this is to store your roles within the same folder, i.e. at <playbooks folder>/roles/. Same for group_vars and host_vars folders.
Now create ansijet/src/config/production.js:
If you look inside ansijet/src/config/base.js you will see other configuration settings MongoDB, logging, etc. You may override these too within the config/production.js you created.
OR if it doesn't work on ubuntu try the following command
If you visit http://localhost:3000 you should see the dashboard showing the Active Jobs (there should be none currently).
Click on any playbook for which you want to create a trigger. You will see the playbook and the a button to add a trigger.
After clicking on Add trigger button, you will see options to create a trigger. Give the trigger a Name, select the type (i.e. trigger to setup with Dron or Simple trigger to work on a click of a button). I have select "Simple" one.
Click on Next Step and than press Submit button. Now click on Deploy from Nav-bar and you will see a button for the trigger you have just created.
If you click on these button, say test-trigger-1, the corresponding playbook will get triggered and the logs will get stored in MongoDB. The logs can be seen from the Logs section in the nav-bar.
This is how you can use Ansijet to make it easy to run ansible-playbooks.
Place your Ansible playbooks somewhere, e.g. /playbooks.
Ansijet expects your playbooks folder to have a certain structure:
<playbooks folder>/*.yml <- your playbooks
<playbooks folder>/hosts <- Ansible hosts file
Ensure that any roles needed by your playbooks can be found by the ansible-playbook binary. An easy way to ensure this is to store your roles within the same folder, i.e. at <playbooks folder>/roles/. Same for group_vars and host_vars folders.
Setup Ansijet
The feature to create a trigger and make the playbook run on a click of
button is available in feature/deployment branch, so don't forget to check the branch. Although I have set the default branch to feature/deployment so you don't need to worry.
$ git clone https://github.com/AjeetK/ansijet.git
$ cd ansijet
$ npm install -g gulp bower
$ npm install
$ bower install
$ npm run build
Now create ansijet/src/config/production.js:
"use strict";
module.exports = function(config) {
/** Path to folder containg Ansible playbooks */
config.playbooks = '/path/to/playbooks'
/** Max no. of jobs to execute in parallel. Should match no. of CPU cores. */
config.jobsInParallel = 1;
};
If you look inside ansijet/src/config/base.js you will see other configuration settings MongoDB, logging, etc. You may override these too within the config/production.js you created.
Run Ansijet
$ cd ansijet
$ NODE_ENV=production ./start-app.js
OR if it doesn't work on ubuntu try the following command
$ cd ansijet
$ NODE_ENV=production /usr/bin/nodejs --harmony ./start-app.js
If you visit http://localhost:3000 you should see the dashboard showing the Active Jobs (there should be none currently).
Creating a Trigger
When you visit the URL http://localhost:3000 you will see the the home-page with all the playbook listed.Click on any playbook for which you want to create a trigger. You will see the playbook and the a button to add a trigger.
After clicking on Add trigger button, you will see options to create a trigger. Give the trigger a Name, select the type (i.e. trigger to setup with Dron or Simple trigger to work on a click of a button). I have select "Simple" one.
Click on Next Step and than press Submit button. Now click on Deploy from Nav-bar and you will see a button for the trigger you have just created.
If you click on these button, say test-trigger-1, the corresponding playbook will get triggered and the logs will get stored in MongoDB. The logs can be seen from the Logs section in the nav-bar.
This is how you can use Ansijet to make it easy to run ansible-playbooks.
bower minified#~2014.0.0-beta5.0SELF_SIGNED_CERT_IN_CHAIN Request to https://registry.bower.io/packages/minified failed: self signed certificate in certificate chain
ReplyDeleteIam having this error :bower install --allow-root
You can set - Setting NODE_TLS_REJECT_UNAUTHORIZED=0
DeleteAlthough not a good practice but you can try and get the things up and running
Thanks for the update. i am sure not clear with your answer: where do i need to change?
Deleteand one more error i can not find the file path: NODE_ENV=production /usr/bin/nodejs --harmony ./start-app.js.
The path:usr/bin/nodejs not available
Ignore above setting. Create .bowerrc in your project directory with the following content to turn off SSL:
Delete{ "strict-ssl": false, "https-proxy": "" }
For path issue, find where nodejs is installed. Try running whereis nodejs or which nodejs.
It might be installed in /usr/local/bin/ or some other dir.
Error: connect ECONNREFUSED 127.0.0.1:27017
Deleteat Object.exports._errnoException (util.js:1020:11)
at exports._exceptionWithHostPort (util.js:1043:20)
at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1090:14)
This means your mongo process is not running. Mongo runs on port 27017 by default. So start your mongo process by sudo service mongod start or which ever upstart job you use. Or may be using the binary file
Deletethrow err;
ReplyDelete^
Error: Cannot find module '/home/ansijet/node_modules/mongoose/node_modules/mongodb/node_modules/bson/ext/start-app.js'
at Function.Module._resolveFilename (module.js:469:15)
at Function.Module._load (module.js:417:25)
at Module.runMain (module.js:604:10)
at run (bootstrap_node.js:383:7)
at startup (bootstrap_node.js:149:9)
at bootstrap_node.js:496:3
This comment has been removed by the author.
DeleteTry running following command:
Deletenpm cache clean
rm -rf node_modules
npm install
please look at https://github.com/cloudfirst/PromAnsible.
ReplyDeleteit is based on prometheus and ansible playbook to automate IT operations with Web UI
Hi, I have been trying this tutorial. But I have not found path directory for command NODE_ENV=production /use/bin/nodejs --harmony./start-app.js, instead I was running that on the nodejs installation file directory. I don't know what the problem is
ReplyDelete