mirror of
				https://github.com/mmumshad/ansible-playable.git
				synced 2025-03-09 23:38:54 +00:00 
			
		
		
		
	Initial Commit
This commit is contained in:
		
						commit
						c92f737237
					
				
					 273 changed files with 16964 additions and 0 deletions
				
			
		
							
								
								
									
										229
									
								
								client/app/designer/tasks/tasks.directive.js
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										229
									
								
								client/app/designer/tasks/tasks.directive.js
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,229 @@
 | 
			
		|||
'use strict';
 | 
			
		||||
const angular = require('angular');
 | 
			
		||||
 | 
			
		||||
export default angular.module('webAppApp.tasks', [])
 | 
			
		||||
  .directive('tasks', function(ansible, $uibModal) {
 | 
			
		||||
    return {
 | 
			
		||||
      templateUrl: 'app/designer/tasks/tasks.html',
 | 
			
		||||
      restrict: 'EA',
 | 
			
		||||
      scope: {
 | 
			
		||||
        tasksList: '=',
 | 
			
		||||
        selectedPlay: '=',
 | 
			
		||||
        savePlaybook: '&',
 | 
			
		||||
        selectedRole: '=',
 | 
			
		||||
        updatePlaybookFileContent: '&',
 | 
			
		||||
        executeAnsiblePlayBook: '&',
 | 
			
		||||
        files: '=' //List of files for include purpose
 | 
			
		||||
      },
 | 
			
		||||
      link: function (scope, element, attrs) {
 | 
			
		||||
        scope.getModuleFromTask = ansible.getModuleFromTask;
 | 
			
		||||
 | 
			
		||||
        scope.buttonStates = {loading:false,save:false,err_msg:false};
 | 
			
		||||
 | 
			
		||||
        scope.tasksMetaData = [];
 | 
			
		||||
 | 
			
		||||
        scope.$watch('tasksList',function(){
 | 
			
		||||
          console.log('tasks list changed');
 | 
			
		||||
          scope.tasksMetaData = [];
 | 
			
		||||
 | 
			
		||||
          angular.forEach(scope.tasksList,function(task){
 | 
			
		||||
            var taskModule = ansible.getModuleFromTask(task);
 | 
			
		||||
            var taskName = task.name;
 | 
			
		||||
 | 
			
		||||
            if(taskModule === 'include'){
 | 
			
		||||
              taskName = task[taskModule].replace(/(.*yml) .*/,"$1")
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            scope.tasksMetaData.push({taskModule:taskModule,taskName:taskName,selected:false})
 | 
			
		||||
          })
 | 
			
		||||
 | 
			
		||||
        },true);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        /**
 | 
			
		||||
         * Detect when the user selects tasks.
 | 
			
		||||
         * Enable play button if tasks are selected and has tags assigned
 | 
			
		||||
         * Enable delete button if tasks are selected
 | 
			
		||||
         */
 | 
			
		||||
        scope.$watch('tasksMetaData',function(newValue,oldValue){
 | 
			
		||||
          scope.selectedTasksPlayButton = false;
 | 
			
		||||
          scope.selectedTasksDeleteButton = false
 | 
			
		||||
 | 
			
		||||
          if(!(scope.tasksMetaData))return;
 | 
			
		||||
 | 
			
		||||
          var selectedTasks = scope.tasksMetaData.filter(item => item.selected);
 | 
			
		||||
          var includeTasks = scope.tasksMetaData.filter(item => item.taskModule === 'include');
 | 
			
		||||
          var selectedTasksWithoutTags = [];
 | 
			
		||||
 | 
			
		||||
          /**
 | 
			
		||||
           * Find selected tasks without any tags.
 | 
			
		||||
           * If there are any play button will not be enabled
 | 
			
		||||
           */
 | 
			
		||||
          angular.forEach(scope.tasksMetaData,function(item,index){
 | 
			
		||||
            scope.tasksListItem = scope.tasksList[index];
 | 
			
		||||
            if(!scope.tasksListItem.tags && item.selected){
 | 
			
		||||
              selectedTasksWithoutTags.push(scope.tasksListItem)
 | 
			
		||||
            }
 | 
			
		||||
          });
 | 
			
		||||
 | 
			
		||||
          console.log("selectedTasksWithoutTags=")
 | 
			
		||||
          console.log(selectedTasksWithoutTags)
 | 
			
		||||
 | 
			
		||||
          if(selectedTasks.length){
 | 
			
		||||
            //if(!includeTasks.length && !selectedTasksWithoutTags.length){
 | 
			
		||||
            if(!selectedTasksWithoutTags.length){
 | 
			
		||||
              scope.selectedTasksPlayButton = true
 | 
			
		||||
            }
 | 
			
		||||
            scope.selectedTasksDeleteButton = true
 | 
			
		||||
 | 
			
		||||
          }else{
 | 
			
		||||
            scope.selectedTasksPlayButton = false;
 | 
			
		||||
            scope.selectedTasksDeleteButton = false
 | 
			
		||||
          }
 | 
			
		||||
 | 
			
		||||
        },true);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        //scope.moveUp = scope.moveUp();
 | 
			
		||||
        //scope.moveDown = scope.moveDown();
 | 
			
		||||
        scope.savePlaybook = scope.savePlaybook();
 | 
			
		||||
        scope.updatePlaybookFileContent = scope.updatePlaybookFileContent();
 | 
			
		||||
        scope.executeAnsiblePlayBook = scope.executeAnsiblePlayBook();
 | 
			
		||||
 | 
			
		||||
        scope.showTaskModal = function(selectedTaskIndex, copyTask){
 | 
			
		||||
          var modalInstance = $uibModal.open({
 | 
			
		||||
            animation: true,
 | 
			
		||||
            /*templateUrl: 'createTaskContent.html',*/
 | 
			
		||||
            templateUrl: 'app/designer/tasks/new_task/new_task.html',
 | 
			
		||||
            controller: 'NewTaskController',
 | 
			
		||||
            size: 'lg',
 | 
			
		||||
            backdrop  : 'static',
 | 
			
		||||
            keyboard  : false,
 | 
			
		||||
            closeByEscape : false,
 | 
			
		||||
            closeByDocument : false,
 | 
			
		||||
            resolve: {
 | 
			
		||||
              selectedProject: function () {
 | 
			
		||||
                return scope.$parent.selectedProject;
 | 
			
		||||
              },
 | 
			
		||||
              selectedPlay: function(){
 | 
			
		||||
                return scope.selectedPlay
 | 
			
		||||
              },
 | 
			
		||||
              selectedRole: function(){
 | 
			
		||||
                return scope.selectedRole
 | 
			
		||||
              },
 | 
			
		||||
              tasksList: function () {
 | 
			
		||||
                return scope.tasksList;
 | 
			
		||||
              },
 | 
			
		||||
              selectedTaskIndex: function(){
 | 
			
		||||
                return selectedTaskIndex
 | 
			
		||||
              },
 | 
			
		||||
              copyTask : function(){
 | 
			
		||||
                return copyTask
 | 
			
		||||
              },
 | 
			
		||||
              //List of files for include purpose
 | 
			
		||||
              files: function(){
 | 
			
		||||
                return scope.files
 | 
			
		||||
              }
 | 
			
		||||
            }
 | 
			
		||||
          });
 | 
			
		||||
 | 
			
		||||
          modalInstance.result.then(
 | 
			
		||||
            function (newTask) {
 | 
			
		||||
              // if(!selectedTaskIndex)
 | 
			
		||||
              //   scope.tasksList.push(newTask);
 | 
			
		||||
              scope.updatePlaybookFileContent(true);
 | 
			
		||||
              //$scope.selectedPlay = {play: ""};
 | 
			
		||||
            }, function () {
 | 
			
		||||
 | 
			
		||||
            });
 | 
			
		||||
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        scope.deleteTask = function(index){
 | 
			
		||||
          scope.tasksList.splice(index,1);
 | 
			
		||||
          scope.updatePlaybookFileContent(true);
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
        scope.deleteTasks = function(){
 | 
			
		||||
 | 
			
		||||
          scope.tasksMetaData.filter(function(item, index){
 | 
			
		||||
            if(item.selected){
 | 
			
		||||
              scope.tasksList.splice(index,1);
 | 
			
		||||
            }
 | 
			
		||||
          });
 | 
			
		||||
          scope.updatePlaybookFileContent(true);
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        scope.moveUp = function(list,index,buttonVariable){
 | 
			
		||||
          if(!scope.preChangeData) scope.preChangeData = angular.copy(list);
 | 
			
		||||
          var temp = angular.copy(list[index]);
 | 
			
		||||
          list[index] = list[index-1];
 | 
			
		||||
          list[index-1] = temp;
 | 
			
		||||
 | 
			
		||||
          scope.updatePlaybookFileContent(false);
 | 
			
		||||
 | 
			
		||||
          scope.buttonStates.save = true
 | 
			
		||||
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
        scope.cancelChange = function(buttonVariable){
 | 
			
		||||
          if(scope.preChangeData){
 | 
			
		||||
            //scope.tasksList = angular.copy(scope.preChangeData);
 | 
			
		||||
            scope.selectedPlay.play.tasks = angular.copy(scope.preChangeData);
 | 
			
		||||
            scope.preChangeData = null
 | 
			
		||||
 | 
			
		||||
          }
 | 
			
		||||
          scope.updatePlaybookFileContent(false,null,scope.tasksList);
 | 
			
		||||
 | 
			
		||||
          scope.buttonStates.save = false;
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
        scope.moveDown = function(list,index,buttonVariable){
 | 
			
		||||
          if(!scope.preChangeData) scope.preChangeData = angular.copy(list);
 | 
			
		||||
          var temp = angular.copy(list[index]);
 | 
			
		||||
          list[index] = list[index+1];
 | 
			
		||||
          list[index+1] = temp;
 | 
			
		||||
 | 
			
		||||
          scope.updatePlaybookFileContent(false);
 | 
			
		||||
          scope.buttonStates.save = true;
 | 
			
		||||
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        scope.executeSelectedTasks = function(){
 | 
			
		||||
 | 
			
		||||
          /*var selectedTasks = scope.tasksMetaData.map(function(item){return item.selected});*/
 | 
			
		||||
          var selectedTags = [];
 | 
			
		||||
          var selectedTaskNames = [];
 | 
			
		||||
          /*if(selectedTasks.length){
 | 
			
		||||
           selectedTags = selectedTasks.map(function(item){return item.tags});
 | 
			
		||||
           selectedTaskNames = selectedTasks.map(function(item){return item.name})
 | 
			
		||||
           }*/
 | 
			
		||||
 | 
			
		||||
          angular.forEach(scope.tasksMetaData, function(item,index){
 | 
			
		||||
            if(item.selected){
 | 
			
		||||
              if(scope.tasksList[index].tags){
 | 
			
		||||
                // As tags is an array and each task can have multiple tags
 | 
			
		||||
                var task_tags = scope.tasksList[index].tags
 | 
			
		||||
                if(typeof task_tags == 'object')
 | 
			
		||||
                  task_tags = task_tags[0]  //task_tags.join(',')
 | 
			
		||||
                selectedTags.push(task_tags);
 | 
			
		||||
                selectedTaskNames.push(scope.tasksList[index].name)
 | 
			
		||||
              }
 | 
			
		||||
            }
 | 
			
		||||
          });
 | 
			
		||||
 | 
			
		||||
          if(selectedTags.length){
 | 
			
		||||
            var play = scope.selectedPlay && scope.selectedPlay.play;
 | 
			
		||||
            scope.executeAnsiblePlayBook(selectedTags,'Tasks',selectedTaskNames.join(","),play)
 | 
			
		||||
          }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
      }
 | 
			
		||||
    };
 | 
			
		||||
  })
 | 
			
		||||
  .name;
 | 
			
		||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue