mirror of
https://github.com/mmumshad/ansible-playable.git
synced 2025-03-09 23:38:54 +00:00
Integrate Q module
This commit is contained in:
parent
965b907d07
commit
ab295a073a
2 changed files with 222 additions and 109 deletions
|
@ -3,6 +3,7 @@
|
|||
"version": "0.0.0",
|
||||
"main": "server/index.js",
|
||||
"dependencies": {
|
||||
"Q": "0.0.1",
|
||||
"ace-builds": "^1.2.6",
|
||||
"angular": "~1.6.0",
|
||||
"angular-animate": "~1.6.0",
|
||||
|
@ -51,6 +52,7 @@
|
|||
"passport-facebook": "^2.0.0",
|
||||
"passport-google-oauth20": "^1.0.0",
|
||||
"passport-local": "^1.0.0",
|
||||
"q": "^1.5.0",
|
||||
"scp2": "^0.5.0",
|
||||
"serve-favicon": "^2.3.0",
|
||||
"showdown": "^0.3.1",
|
||||
|
|
|
@ -1,9 +1,19 @@
|
|||
var ssh2_exec = require('../ssh/ssh2_exec');
|
||||
var scp2_exec = require('../scp/scp_exec');
|
||||
var config = require('../../config/environment');
|
||||
const util = require('util');
|
||||
const Q = require("q");
|
||||
|
||||
var local_logPath = 'logs/ansible/execute/'
|
||||
const all_commands = require('../../config/commands');
|
||||
|
||||
var local_logPath = 'logs/ansible/execute/';
|
||||
|
||||
/**
|
||||
* Get Logs
|
||||
* @param logfilename
|
||||
* @param successCallback
|
||||
* @param errorCallback
|
||||
*/
|
||||
exports.getLogs = function(logfilename,successCallback,errorCallback){
|
||||
var logFile = local_logPath + logfilename;
|
||||
var fs = require('fs');
|
||||
|
@ -17,13 +27,21 @@ exports.getLogs = function(logfilename,successCallback,errorCallback){
|
|||
});
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* Get Modules including any custom modules for this project.
|
||||
* Set ANSIBLE_LIBRARY path to custom modules path for this purpose
|
||||
* @param dataCallback
|
||||
* @param successCallback
|
||||
* @param errorCallback
|
||||
* @param ansibleEngine
|
||||
*/
|
||||
exports.getModules = function(dataCallback, successCallback,errorCallback, ansibleEngine){
|
||||
|
||||
var command = 'ansible-doc -l';
|
||||
var command = all_commands.ansible.doc;
|
||||
|
||||
if(ansibleEngine.customModules){
|
||||
command = 'export ANSIBLE_LIBRARY="' + ansibleEngine.customModules + '"; ' + command;
|
||||
//command = 'export ANSIBLE_LIBRARY="' + ansibleEngine.customModules + '"; ' + command;
|
||||
command = util.format(all_commands.ansible.export_ansible_library, ansibleEngine.customModules) + command;
|
||||
}
|
||||
|
||||
ssh2_exec.executeCommand(command,
|
||||
|
@ -38,8 +56,14 @@ exports.getModules = function(dataCallback, successCallback,errorCallback, ansib
|
|||
)
|
||||
};
|
||||
|
||||
/**
|
||||
* Get Ansible Version from Ansible Engine
|
||||
* @param successCallback
|
||||
* @param errorCallback
|
||||
* @param ansibleEngine
|
||||
*/
|
||||
exports.getAnsibleVersion = function(successCallback,errorCallback, ansibleEngine){
|
||||
var command = 'ansible --version';
|
||||
var command = all_commands.ansible.version;
|
||||
var ansibleVersionResult = "";
|
||||
|
||||
ssh2_exec.executeCommand(command,
|
||||
|
@ -59,18 +83,23 @@ exports.getAnsibleVersion = function(successCallback,errorCallback, ansibleEngin
|
|||
)
|
||||
};
|
||||
|
||||
|
||||
exports.executeAnsible = function(logfilename,project_folder, playbook_name, inventory_file_name, tags_joined, limit_to_hosts_joined, verbose,check_mode,dataCallback, successCallback,errorCallback,ansibleEngine){
|
||||
|
||||
var fs = require('filendir');
|
||||
var time = new Date().getTime();
|
||||
var logFile = local_logPath + logfilename;
|
||||
|
||||
fs.writeFileSync(logFile,"Executing Ansible Playbook \n\n",{'flag':'a'});
|
||||
fs.writeFileSync(logFile," Completed \n",{'flag':'a'});
|
||||
|
||||
// export ANSIBLE_GATHERING=FALSE;
|
||||
var command= 'export ANSIBLE_FORCE_COLOR=true; export ANSIBLE_HOST_KEY_CHECKING=False; cd "' + project_folder + '"; ansible-playbook "' + playbook_name + '" -i "' + inventory_file_name + '"';
|
||||
/**
|
||||
* Get/generate Ansible Command
|
||||
* @param project_folder
|
||||
* @param playbook_name
|
||||
* @param inventory_file_name
|
||||
* @param tags_joined
|
||||
* @param limit_to_hosts_joined
|
||||
* @param verbose
|
||||
* @param check_mode
|
||||
* @param dataCallback
|
||||
* @param successCallback
|
||||
* @param errorCallback
|
||||
* @param ansibleEngine
|
||||
* @returns {string}
|
||||
*/
|
||||
exports.getAnsibleCommand = function(project_folder, playbook_name, inventory_file_name, tags_joined, limit_to_hosts_joined, verbose,check_mode,dataCallback, successCallback,errorCallback,ansibleEngine){
|
||||
var command = util.format(all_commands.ansible.export_force_color + all_commands.ansible.export_host_key_check + 'cd %s; ' + all_commands.ansible.playbook , 'true', 'False', project_folder, playbook_name, inventory_file_name)
|
||||
|
||||
if(ansibleEngine.customModules){
|
||||
command = 'export ANSIBLE_LIBRARY="' + ansibleEngine.customModules + '"; ' + command;
|
||||
|
@ -78,7 +107,6 @@ exports.executeAnsible = function(logfilename,project_folder, playbook_name, inv
|
|||
|
||||
if(tags_joined)
|
||||
command += ' --tags "' + tags_joined + '"';
|
||||
//command += ' --tags "' + tags.join(",") + '"';
|
||||
|
||||
if(limit_to_hosts_joined)
|
||||
command += ' --limit "' + limit_to_hosts_joined + '"';
|
||||
|
@ -96,7 +124,35 @@ exports.executeAnsible = function(logfilename,project_folder, playbook_name, inv
|
|||
|
||||
console.log("Command= " + command);
|
||||
|
||||
//fs.writeFileSync(logFile,"\n Executing Command =" + command + "\n",{'flag':'a'});
|
||||
return command;
|
||||
};
|
||||
|
||||
/**
|
||||
* Execute Ansible Playbook
|
||||
* @param logfilename
|
||||
* @param project_folder
|
||||
* @param playbook_name
|
||||
* @param inventory_file_name
|
||||
* @param tags_joined
|
||||
* @param limit_to_hosts_joined
|
||||
* @param verbose
|
||||
* @param check_mode
|
||||
* @param dataCallback
|
||||
* @param successCallback
|
||||
* @param errorCallback
|
||||
* @param ansibleEngine
|
||||
*/
|
||||
exports.executeAnsible = function(logfilename, project_folder, playbook_name, inventory_file_name, tags_joined, limit_to_hosts_joined, verbose,check_mode,dataCallback, successCallback,errorCallback,ansibleEngine){
|
||||
|
||||
var fs = require('filendir');
|
||||
var time = new Date().getTime();
|
||||
var logFile = local_logPath + logfilename;
|
||||
|
||||
fs.writeFileSync(logFile,"Executing Ansible Playbook \n\n",{'flag':'a'});
|
||||
fs.writeFileSync(logFile," Completed \n",{'flag':'a'});
|
||||
|
||||
var command = exports.getAnsibleCommand(project_folder, playbook_name, inventory_file_name, tags_joined, limit_to_hosts_joined, verbose,check_mode,dataCallback, successCallback,errorCallback,ansibleEngine);
|
||||
|
||||
fs.writeFile(logFile,"\n Executing Command =" + command + "\n");
|
||||
|
||||
ssh2_exec.executeCommand(command,function(response){
|
||||
|
@ -120,7 +176,16 @@ exports.executeAnsible = function(logfilename,project_folder, playbook_name, inv
|
|||
};
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Get Vars
|
||||
* @param project_folder
|
||||
* @param inventory_file_name
|
||||
* @param host_name
|
||||
* @param dataCallback
|
||||
* @param successCallback
|
||||
* @param errorCallback
|
||||
* @param ansibleEngine
|
||||
*/
|
||||
exports.getVars = function(project_folder, inventory_file_name, host_name, dataCallback, successCallback,errorCallback,ansibleEngine){
|
||||
|
||||
var fs = require('filendir');
|
||||
|
@ -145,7 +210,15 @@ exports.getVars = function(project_folder, inventory_file_name, host_name, dataC
|
|||
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* Get Role Vars
|
||||
* @param project_folder
|
||||
* @param role_name
|
||||
* @param dataCallback
|
||||
* @param successCallback
|
||||
* @param errorCallback
|
||||
* @param ansibleEngine
|
||||
*/
|
||||
exports.getRolesVars = function(project_folder, role_name, dataCallback, successCallback,errorCallback,ansibleEngine){
|
||||
|
||||
var AnsibleAPILocation = '/tmp/AnsibleAPI.py';
|
||||
|
@ -167,91 +240,15 @@ exports.getRolesVars = function(project_folder, role_name, dataCallback, success
|
|||
|
||||
};
|
||||
|
||||
/*
|
||||
exports.executeAnsible = function(logfilename,inventory_file_contents,playbook_file_contents,tags,verbose,check_mode,dataCallback, successCallback,errorCallback,ansibleEngine){
|
||||
|
||||
var fs = require('filendir');
|
||||
var time = new Date().getTime();
|
||||
var logFile = local_logPath + logfilename;
|
||||
|
||||
fs.writeFileSync(logFile,"Executing Ansible Playbook \n\n",{'flag':'a'});
|
||||
|
||||
var inventory_file_name = 'inventory_file_' + time + '.ini';
|
||||
var playbook_file_name = 'playbook_file_' + time + '.yml';
|
||||
|
||||
fs.writeFileSync(logFile,"inventory_file_location - " + inventory_file_name +" \n",{'flag':'a'});
|
||||
fs.writeFileSync(logFile,"playbook_file_location - " + playbook_file_name +" \n\n",{'flag':'a'});
|
||||
|
||||
console.log('inventory_file_name=' + inventory_file_name);
|
||||
|
||||
var inputFilePathOnScriptEngine = config.scriptEngine.inputDirectory + '/inventory/' + inventory_file_name;
|
||||
var playbookFilePathOnScriptEngine = config.scriptEngine.inputDirectory + '/playbooks/' + playbook_file_name;
|
||||
|
||||
fs.writeFileSync(logFile,"Writing inventory file to Script Engine - " + inputFilePathOnScriptEngine +" - ",{'flag':'a'});
|
||||
|
||||
scp2_exec.createFileOnScriptEngine(inventory_file_contents,inputFilePathOnScriptEngine,
|
||||
function(){
|
||||
console.log("Inventory file written");
|
||||
fs.writeFileSync(logFile," Completed \n",{'flag':'a'});
|
||||
fs.writeFileSync(logFile,"Writing playbook file to Script Engine - " + playbookFilePathOnScriptEngine +" - ",{'flag':'a'});
|
||||
scp2_exec.createFileOnScriptEngine(playbook_file_contents,playbookFilePathOnScriptEngine,
|
||||
function(){
|
||||
console.log("Playbook file written");
|
||||
fs.writeFileSync(logFile," Completed \n",{'flag':'a'});
|
||||
|
||||
var command= "export ANSIBLE_HOST_KEY_CHECKING=False; ansible-playbook --vault-password-file ~/.vault_pass.txt " + playbookFilePathOnScriptEngine + " -i " + inputFilePathOnScriptEngine;
|
||||
|
||||
if(ansibleEngine.customModules){
|
||||
command = 'export ANSIBLE_LIBRARY=' + ansibleEngine.customModules + '; ' + command;
|
||||
}
|
||||
|
||||
if(tags)
|
||||
command += ' --tags "' + tags.join(",") + '"';
|
||||
|
||||
if(verbose === 'verbose_detail'){
|
||||
command += ' -vvv ';
|
||||
}
|
||||
else if(verbose === 'verbose'){
|
||||
command += ' -v ';
|
||||
}
|
||||
|
||||
if(check_mode !== 'No_Check'){
|
||||
command += ' --check ';
|
||||
}
|
||||
|
||||
console.log("Command= " + command);
|
||||
|
||||
fs.writeFileSync(logFile,"\n Executing Command =" + command + "\n",{'flag':'a'});
|
||||
|
||||
ssh2_exec.executeCommand(command,function(response){
|
||||
dataCallback(response);
|
||||
console.log(response);
|
||||
fs.writeFile(logFile,response,{'flag':'a'});
|
||||
},function(response){
|
||||
successCallback(response);
|
||||
console.log(response);
|
||||
fs.writeFile(logFile,response,{'flag':'a'});
|
||||
},function(response){
|
||||
errorCallback(response);
|
||||
console.log(response);
|
||||
fs.writeFile(logFile,response,{'flag':'a'});
|
||||
},ansibleEngine)
|
||||
|
||||
},function(err){
|
||||
errorCallback(err);
|
||||
fs.writeFile(logFile," Failed \n",{'flag':'a'});
|
||||
},ansibleEngine);
|
||||
|
||||
},function(err){
|
||||
errorCallback(err);
|
||||
fs.writeFile(logFile," Failed \n",{'flag':'a'});
|
||||
},ansibleEngine);
|
||||
|
||||
};
|
||||
*/
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Write File
|
||||
* @param file_path
|
||||
* @param file_contents
|
||||
* @param successCallback
|
||||
* @param errorCallback
|
||||
* @param ansibleEngine
|
||||
*/
|
||||
exports.writeFile = function(file_path,file_contents, successCallback,errorCallback,ansibleEngine){
|
||||
|
||||
scp2_exec.createFileOnScriptEngine(file_contents, file_path,
|
||||
|
@ -263,6 +260,13 @@ exports.writeFile = function(file_path,file_contents, successCallback,errorCallb
|
|||
|
||||
};
|
||||
|
||||
/**
|
||||
* Delete File
|
||||
* @param file_path
|
||||
* @param successCallback
|
||||
* @param errorCallback
|
||||
* @param ansibleEngine
|
||||
*/
|
||||
exports.deleteFile = function(file_path,successCallback,errorCallback,ansibleEngine){
|
||||
|
||||
var command = 'rm -rf "' + file_path + '"';
|
||||
|
@ -271,6 +275,14 @@ exports.deleteFile = function(file_path,successCallback,errorCallback,ansibleEng
|
|||
|
||||
};
|
||||
|
||||
/**
|
||||
* Read Contents of a file
|
||||
* @param file_path
|
||||
* @param dataCallback
|
||||
* @param successCallback
|
||||
* @param errorCallback
|
||||
* @param ansibleEngine
|
||||
*/
|
||||
exports.readFile = function(file_path, dataCallback, successCallback,errorCallback,ansibleEngine){
|
||||
|
||||
var command = 'cat "' + file_path + '"';
|
||||
|
@ -279,6 +291,15 @@ exports.readFile = function(file_path, dataCallback, successCallback,errorCallba
|
|||
|
||||
};
|
||||
|
||||
/**
|
||||
* Write to a Playbook file
|
||||
* @param project_folder
|
||||
* @param playbook_file_name
|
||||
* @param playbook_file_contents
|
||||
* @param successCallback
|
||||
* @param errorCallback
|
||||
* @param ansibleEngine
|
||||
*/
|
||||
exports.writePlaybook = function(project_folder,playbook_file_name,playbook_file_contents, successCallback,errorCallback,ansibleEngine){
|
||||
|
||||
var playbook_file_path = '' + project_folder + '/' + playbook_file_name + '';
|
||||
|
@ -295,7 +316,15 @@ exports.writePlaybook = function(project_folder,playbook_file_name,playbook_file
|
|||
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* Read Playbook file contents
|
||||
* @param project_folder
|
||||
* @param playbook_file_name
|
||||
* @param dataCallback
|
||||
* @param successCallback
|
||||
* @param errorCallback
|
||||
* @param ansibleEngine
|
||||
*/
|
||||
exports.readPlaybook = function(project_folder,playbook_file_name, dataCallback, successCallback,errorCallback,ansibleEngine){
|
||||
|
||||
var playbook_file_path = project_folder + '/' + playbook_file_name;
|
||||
|
@ -305,7 +334,15 @@ exports.readPlaybook = function(project_folder,playbook_file_name, dataCallback,
|
|||
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* Delete Playbook
|
||||
* @param project_folder
|
||||
* @param playbook_file_name
|
||||
* @param dataCallback
|
||||
* @param successCallback
|
||||
* @param errorCallback
|
||||
* @param ansibleEngine
|
||||
*/
|
||||
exports.deletePlaybook = function(project_folder,playbook_file_name, dataCallback, successCallback,errorCallback,ansibleEngine){
|
||||
|
||||
var playbook_file_path = project_folder + '/' + playbook_file_name;
|
||||
|
@ -315,6 +352,13 @@ exports.deletePlaybook = function(project_folder,playbook_file_name, dataCallbac
|
|||
|
||||
};
|
||||
|
||||
/**
|
||||
* Get Playbook List
|
||||
* @param project_folder
|
||||
* @param successCallback
|
||||
* @param errorCallback
|
||||
* @param ansibleEngine
|
||||
*/
|
||||
exports.getPlaybookList = function(project_folder, successCallback, errorCallback, ansibleEngine){
|
||||
|
||||
var playbook_file_path = project_folder + '/';
|
||||
|
@ -392,6 +436,42 @@ exports.createProjectFolder = function(project_folder, successCallback, errorCal
|
|||
|
||||
};
|
||||
|
||||
/**
|
||||
* Delete Project Folder
|
||||
* @param project
|
||||
*/
|
||||
exports.deleteProjectFolder = function(project){
|
||||
|
||||
var deferred = Q.defer();
|
||||
|
||||
if(!project){
|
||||
deferred.reject(new Error("Project not found "));
|
||||
return deferred.promise;
|
||||
}
|
||||
|
||||
var ansibleEngine = project.ansibleEngine;
|
||||
var project_folder = ansibleEngine.projectFolder;
|
||||
var archive_folder = '/opt/ansible-projects/archive';
|
||||
|
||||
var command = util.format('mkdir -p %s && tar -cvf %s/%s.tar %s && rm -rf %s', archive_folder, archive_folder, ansibleEngine.projectFolderName, project_folder, project_folder);
|
||||
|
||||
var check_dir_command = '[ -d ' + project_folder + ' ]';
|
||||
|
||||
ssh2_exec.executeCommand(check_dir_command,null,(data) => {
|
||||
ssh2_exec.executeCommand(command,null,
|
||||
(success_response) => {
|
||||
deferred.resolve(project);
|
||||
},(error_response) => {
|
||||
deferred.reject(new Error(error_response));
|
||||
},ansibleEngine);
|
||||
},() => {
|
||||
deferred.reject(new Error("Directory - " + project_folder +" does not exist."));
|
||||
},ansibleEngine);
|
||||
|
||||
return deferred.promise;
|
||||
|
||||
};
|
||||
|
||||
/**
|
||||
* Search roles in ansible-galaxy
|
||||
* Use ansible-galaxy search command
|
||||
|
@ -543,6 +623,16 @@ exports.deleteRole = function(roleName, successCallback, errorCallback, ansibleE
|
|||
|
||||
};
|
||||
|
||||
/**
|
||||
* Import Role to project
|
||||
* - Handle both import from GIT and import from Galaxy
|
||||
* @param roleType
|
||||
* @param roleNameUri
|
||||
* @param successCallback
|
||||
* @param errorCallback
|
||||
* @param ansibleEngine
|
||||
* @returns {*}
|
||||
*/
|
||||
exports.importRole = function(roleType, roleNameUri, successCallback, errorCallback, ansibleEngine){
|
||||
|
||||
var projectFolder = ansibleEngine.projectFolder;
|
||||
|
@ -623,7 +713,13 @@ exports.getTagList = function(project_folder, playbook_name, inventory_file_name
|
|||
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* Create a file using touch
|
||||
* @param fileAbsolutePath
|
||||
* @param successCallback
|
||||
* @param errorCallback
|
||||
* @param ansibleEngine
|
||||
*/
|
||||
exports.createFile = function(fileAbsolutePath, successCallback, errorCallback, ansibleEngine){
|
||||
|
||||
var projectFolder = ansibleEngine.projectFolder;
|
||||
|
@ -633,6 +729,13 @@ exports.createFile = function(fileAbsolutePath, successCallback, errorCallback,
|
|||
|
||||
};
|
||||
|
||||
/**
|
||||
* Get Inventory List
|
||||
* @param project_folder
|
||||
* @param successCallback
|
||||
* @param errorCallback
|
||||
* @param ansibleEngine
|
||||
*/
|
||||
exports.getInventoryList = function(project_folder, successCallback, errorCallback, ansibleEngine){
|
||||
|
||||
var playbook_file_path = project_folder + '/';
|
||||
|
@ -656,6 +759,14 @@ exports.getInventoryList = function(project_folder, successCallback, errorCallba
|
|||
|
||||
};
|
||||
|
||||
/**
|
||||
* Read Inventory File
|
||||
* @param project_folder
|
||||
* @param inventoryName
|
||||
* @param successCallback
|
||||
* @param errorCallback
|
||||
* @param ansibleEngine
|
||||
*/
|
||||
exports.readInventoryFile = function(project_folder, inventoryName, successCallback, errorCallback, ansibleEngine){
|
||||
|
||||
var playbook_file_path = project_folder + '/';
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue