mirror of
https://github.com/ansible/awx.git
synced 2026-02-19 12:10:06 -03:30
Configure Tower
adding changes to app and index for configure tower files. also included are updates to the scheduler widget for system jobs
This commit is contained in:
@@ -119,7 +119,9 @@ angular.module('Tower', [
|
|||||||
'SocketHelper',
|
'SocketHelper',
|
||||||
'AboutAnsibleHelpModal',
|
'AboutAnsibleHelpModal',
|
||||||
'SurveyQuestionFormDefinition',
|
'SurveyQuestionFormDefinition',
|
||||||
'PortalJobsListDefinition'
|
'PortalJobsListDefinition',
|
||||||
|
'ConfigureTowerHelper',
|
||||||
|
'ConfigureTowerJobsListDefinition'
|
||||||
])
|
])
|
||||||
|
|
||||||
.constant('AngularScheduler.partials', urlPrefix + 'lib/angular-scheduler/lib/')
|
.constant('AngularScheduler.partials', urlPrefix + 'lib/angular-scheduler/lib/')
|
||||||
@@ -432,9 +434,9 @@ angular.module('Tower', [
|
|||||||
}])
|
}])
|
||||||
|
|
||||||
.run(['$compile', '$cookieStore', '$rootScope', '$log', 'CheckLicense', '$location', 'Authorization', 'LoadBasePaths', 'Timer', 'ClearScope', 'HideStream', 'Socket',
|
.run(['$compile', '$cookieStore', '$rootScope', '$log', 'CheckLicense', '$location', 'Authorization', 'LoadBasePaths', 'Timer', 'ClearScope', 'HideStream', 'Socket',
|
||||||
'LoadConfig', 'Store', 'ShowSocketHelp', 'LicenseViewer', 'AboutAnsibleHelp',
|
'LoadConfig', 'Store', 'ShowSocketHelp', 'LicenseViewer', 'AboutAnsibleHelp', 'ConfigureTower',
|
||||||
function ($compile, $cookieStore, $rootScope, $log, CheckLicense, $location, Authorization, LoadBasePaths, Timer, ClearScope, HideStream, Socket,
|
function ($compile, $cookieStore, $rootScope, $log, CheckLicense, $location, Authorization, LoadBasePaths, Timer, ClearScope, HideStream, Socket,
|
||||||
LoadConfig, Store, ShowSocketHelp, LicenseViewer, AboutAnsibleHelp) {
|
LoadConfig, Store, ShowSocketHelp, LicenseViewer, AboutAnsibleHelp, ConfigureTower) {
|
||||||
|
|
||||||
|
|
||||||
var e, html, sock, checkCount = 0;
|
var e, html, sock, checkCount = 0;
|
||||||
@@ -586,6 +588,12 @@ angular.module('Tower', [
|
|||||||
$location.path('/home/');
|
$location.path('/home/');
|
||||||
};
|
};
|
||||||
|
|
||||||
|
$rootScope.configureTower = function(){
|
||||||
|
ConfigureTower({
|
||||||
|
scope: $rootScope
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
html = "<a href=\"\" ng-click=\"socketHelp()\" aw-pop-over=\"{{ socketTip }}\" aw-pop-over-watch=\"socketTip\" data-placement=\"bottom\" data-trigger=\"hover\" " +
|
html = "<a href=\"\" ng-click=\"socketHelp()\" aw-pop-over=\"{{ socketTip }}\" aw-pop-over-watch=\"socketTip\" data-placement=\"bottom\" data-trigger=\"hover\" " +
|
||||||
"data-popover-title=\"Live Events\" data-container=\"body\" style=\"font-size: 10px;\"><i class=\"fa icon-socket-{{ socketStatus }}\"></i></a>";
|
"data-popover-title=\"Live Events\" data-container=\"body\" style=\"font-size: 10px;\"><i class=\"fa icon-socket-{{ socketStatus }}\"></i></a>";
|
||||||
e = angular.element(document.getElementById('socket-beacon-div'));
|
e = angular.element(document.getElementById('socket-beacon-div'));
|
||||||
|
|||||||
@@ -671,6 +671,7 @@ function($location, Wait, GetBasePath, LookUpInit, JobTemplateForm, CredentialLi
|
|||||||
return function (params) {
|
return function (params) {
|
||||||
var scope = params.scope,
|
var scope = params.scope,
|
||||||
id = params.id,
|
id = params.id,
|
||||||
|
system_job = params.system_job || false,
|
||||||
base = $location.path().replace(/^\//, '').split('/')[0],
|
base = $location.path().replace(/^\//, '').split('/')[0],
|
||||||
url,
|
url,
|
||||||
job_template,
|
job_template,
|
||||||
|
|||||||
@@ -186,6 +186,126 @@ a:focus {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#configure-schedules-tab {
|
||||||
|
position: relative;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#configure-schedules-overlay {
|
||||||
|
display: none;
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
z-index: 100;
|
||||||
|
background-color: @black;
|
||||||
|
opacity: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#configure-schedules-buttons{
|
||||||
|
height: 46px;
|
||||||
|
padding-top: 10px;
|
||||||
|
text-align: right;
|
||||||
|
border-top: 1px solid #A6C9E2;
|
||||||
|
margin-top: 5px;
|
||||||
|
a {
|
||||||
|
margin-right: 8px;
|
||||||
|
font-size: 12px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#configure-schedules-form-container {
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
display: none;
|
||||||
|
border: 1px solid #e5e5e5;
|
||||||
|
border-radius: 4px;
|
||||||
|
box-shadow: 3px 3px 6px 0 #666;
|
||||||
|
padding: 0 10px 15px 8px;
|
||||||
|
background-color: @white;
|
||||||
|
z-index: 200;
|
||||||
|
}
|
||||||
|
|
||||||
|
#configure-schedules-title {
|
||||||
|
border-bottom: 1px solid #e5e5e5;
|
||||||
|
padding-bottom: 8px;
|
||||||
|
margin-bottom: 10px;
|
||||||
|
margin-top: 0;
|
||||||
|
h4 {
|
||||||
|
display: inline-block;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
button {
|
||||||
|
display: inline-block;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#configure-schedules-list {
|
||||||
|
overflow-x: hidden;
|
||||||
|
overflow-y: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
#configure-schedules-overlay {
|
||||||
|
display: none;
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
z-index: 100;
|
||||||
|
background-color: @black;
|
||||||
|
opacity: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#configure-tower-dialog, #configure-schedules-form-container {
|
||||||
|
display: none;
|
||||||
|
overflow-x: hidden;
|
||||||
|
overflow-y: auto;
|
||||||
|
padding-top: 25px;
|
||||||
|
|
||||||
|
form {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.sublabel {
|
||||||
|
font-weight: normal;
|
||||||
|
}
|
||||||
|
|
||||||
|
#occurrence-label {
|
||||||
|
display: inline-block;
|
||||||
|
}
|
||||||
|
|
||||||
|
.occurrence-list {
|
||||||
|
border: 1px solid @well-border;
|
||||||
|
padding: 8px 10px;
|
||||||
|
border-radius: 4px;
|
||||||
|
background-color: @well;
|
||||||
|
list-style: none;
|
||||||
|
margin-bottom: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#date-choice {
|
||||||
|
display: inline-block;
|
||||||
|
margin-left: 15px;
|
||||||
|
font-size: 12px;
|
||||||
|
|
||||||
|
.label-inline {
|
||||||
|
display: inline-block;
|
||||||
|
vertical-align: middle;
|
||||||
|
}
|
||||||
|
input {
|
||||||
|
margin-bottom: 2px;
|
||||||
|
height: 11px;
|
||||||
|
width: 10px;
|
||||||
|
}
|
||||||
|
.label-inline:first-child {
|
||||||
|
padding-bottom: 2px;
|
||||||
|
margin-right: 10px;
|
||||||
|
}
|
||||||
|
.label-inline:nth-child(3) {
|
||||||
|
margin-right: 10px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
#home_groups_table .actions .cancel { padding-right: 3px; }
|
#home_groups_table .actions .cancel { padding-right: 3px; }
|
||||||
|
|
||||||
.success-badge {
|
.success-badge {
|
||||||
|
|||||||
@@ -22,6 +22,13 @@
|
|||||||
<div class="error" ng-show="scheduler_form.schedulerName.$dirty && scheduler_form.schedulerName.$error.required">Schedule name is required</div>
|
<div class="error" ng-show="scheduler_form.schedulerName.$dirty && scheduler_form.schedulerName.$error.required">Schedule name is required</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<div class="form-group" ng-show="cleanupJob">
|
||||||
|
<label><span class="red-text">*</span>Days of data to keep</label>
|
||||||
|
<input type="number" class="form-control input-sm" name="schedulerPurgeDays" id="schedulerPurgeDays" min="1" ng-model="schedulerPurgeDays" required placeholder="Days of data to keep">
|
||||||
|
<div class="error" ng-show="scheduler_form.schedulerPurgeDays.$dirty && scheduler_form.schedulerPurgeDays.$error.required">A value is required</div>
|
||||||
|
<div class="error" ng-show="scheduler_form.schedulerPurgeDays.$error.number">This is not valid number</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-md-5">
|
<div class="col-md-5">
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
|
|||||||
@@ -341,6 +341,11 @@ angular.module('AngularScheduler', ['underscore'])
|
|||||||
$('#schedulerName').addClass('ng-dirty');
|
$('#schedulerName').addClass('ng-dirty');
|
||||||
validity = false;
|
validity = false;
|
||||||
}
|
}
|
||||||
|
if(this.scope.cleanupJob===true && !this.scope.scheduler_form.schedulerPurgeDays.$valid){
|
||||||
|
this.scope.scheduler_form.schedulerPurgeDays.$dirty = true;
|
||||||
|
$('#schedulerPurgeDays').addClass('ng-dirty');
|
||||||
|
validity = false;
|
||||||
|
}
|
||||||
if (this.scope.schedulerEnd.value === 'on') {
|
if (this.scope.schedulerEnd.value === 'on') {
|
||||||
if (!/^\d{2}\/\d{2}\/\d{4}$/.test(this.scope.schedulerEndDt)) {
|
if (!/^\d{2}\/\d{2}\/\d{4}$/.test(this.scope.schedulerEndDt)) {
|
||||||
this.scope.scheduler_form.schedulerEndDt.$pristine = false;
|
this.scope.scheduler_form.schedulerEndDt.$pristine = false;
|
||||||
@@ -879,6 +884,7 @@ angular.module('AngularScheduler', ['underscore'])
|
|||||||
defaultDay = $filter('schZeroPad')(defaultDate.getDate(), 2),
|
defaultDay = $filter('schZeroPad')(defaultDate.getDate(), 2),
|
||||||
defaultDateStr = defaultMonth + '/' + defaultDay + '/' + defaultDate.getFullYear();
|
defaultDateStr = defaultMonth + '/' + defaultDay + '/' + defaultDate.getFullYear();
|
||||||
scope.schedulerName = '';
|
scope.schedulerName = '';
|
||||||
|
scope.schedulerPurgeDays = 30;
|
||||||
scope.weekDays = [];
|
scope.weekDays = [];
|
||||||
scope.schedulerStartHour = '00';
|
scope.schedulerStartHour = '00';
|
||||||
scope.schedulerStartMinute = '00';
|
scope.schedulerStartMinute = '00';
|
||||||
|
|||||||
@@ -106,6 +106,7 @@
|
|||||||
<script src="{{ STATIC_URL }}js/forms/LogViewerStatus.js"></script>
|
<script src="{{ STATIC_URL }}js/forms/LogViewerStatus.js"></script>
|
||||||
<script src="{{ STATIC_URL }}js/forms/LogViewerOptions.js"></script>
|
<script src="{{ STATIC_URL }}js/forms/LogViewerOptions.js"></script>
|
||||||
<script src="{{ STATIC_URL }}js/lists/Users.js"></script>
|
<script src="{{ STATIC_URL }}js/lists/Users.js"></script>
|
||||||
|
<script src="{{ STATIC_URL }}js/lists/ConfigureTowerJobs.js"></script>
|
||||||
<script src="{{ STATIC_URL }}js/lists/Organizations.js"></script>
|
<script src="{{ STATIC_URL }}js/lists/Organizations.js"></script>
|
||||||
<script src="{{ STATIC_URL }}js/lists/Admins.js"></script>
|
<script src="{{ STATIC_URL }}js/lists/Admins.js"></script>
|
||||||
<script src="{{ STATIC_URL }}js/lists/Inventories.js"></script>
|
<script src="{{ STATIC_URL }}js/lists/Inventories.js"></script>
|
||||||
@@ -131,6 +132,7 @@
|
|||||||
<script src="{{ STATIC_URL }}js/lists/ScheduledJobs.js"></script>
|
<script src="{{ STATIC_URL }}js/lists/ScheduledJobs.js"></script>
|
||||||
<script src="{{ STATIC_URL }}js/helpers/SocketHelper.js"></script>
|
<script src="{{ STATIC_URL }}js/helpers/SocketHelper.js"></script>
|
||||||
<script src="{{ STATIC_URL }}js/helpers/LoadConfig.js"></script>
|
<script src="{{ STATIC_URL }}js/helpers/LoadConfig.js"></script>
|
||||||
|
<script src="{{ STATIC_URL }}js/helpers/ConfigureTower.js"></script>
|
||||||
<script src="{{ STATIC_URL }}js/helpers/refresh-related.js"></script>
|
<script src="{{ STATIC_URL }}js/helpers/refresh-related.js"></script>
|
||||||
<script src="{{ STATIC_URL }}js/helpers/related-search.js"></script>
|
<script src="{{ STATIC_URL }}js/helpers/related-search.js"></script>
|
||||||
<script src="{{ STATIC_URL }}js/helpers/refresh.js"></script>
|
<script src="{{ STATIC_URL }}js/helpers/refresh.js"></script>
|
||||||
@@ -194,6 +196,7 @@
|
|||||||
|
|
||||||
<a href="" id="mobile_about" ng-click ="viewAboutTower()" ng-hide="portalMode===true">About Tower</a> </li>
|
<a href="" id="mobile_about" ng-click ="viewAboutTower()" ng-hide="portalMode===true">About Tower</a> </li>
|
||||||
<a href="" id="mobile_view_user" ng-click="viewCurrentUser()" ng-hide="portalMode===true">Account Settings</a></li>
|
<a href="" id="mobile_view_user" ng-click="viewCurrentUser()" ng-hide="portalMode===true">Account Settings</a></li>
|
||||||
|
<a id="main_configure_tower" ng-click="configureTower()" ng-show="user_is_superuser" href="" ng-hide="portalMode===true">Configure Tower</a></li>
|
||||||
<a href="https://ansibleworks.zendesk.com/anonymous_requests/new" id="mobile_contact_support" target="_blank" ng-hide="portalMode===true">Contact Support</a></li>
|
<a href="https://ansibleworks.zendesk.com/anonymous_requests/new" id="mobile_contact_support" target="_blank" ng-hide="portalMode===true">Contact Support</a></li>
|
||||||
<a id="mobile_munin" target="_blank" ng-show="user_is_superuser" href="/munin" ng-hide="portalMode===true">Monitor Tower</a></li>
|
<a id="mobile_munin" target="_blank" ng-show="user_is_superuser" href="/munin" ng-hide="portalMode===true">Monitor Tower</a></li>
|
||||||
<a href="#portal" id="mobile_portal_link" ng-hide="portalMode===true">Portal Mode</a></li>
|
<a href="#portal" id="mobile_portal_link" ng-hide="portalMode===true">Portal Mode</a></li>
|
||||||
@@ -234,8 +237,9 @@
|
|||||||
<ul class="nav navbar-nav" id="account-submenu">
|
<ul class="nav navbar-nav" id="account-submenu">
|
||||||
<li><a href="" id="main_about" ng-click ="viewAboutTower()" ng-hide="portalMode===true">About Tower</a> </li>
|
<li><a href="" id="main_about" ng-click ="viewAboutTower()" ng-hide="portalMode===true">About Tower</a> </li>
|
||||||
<li><a id="main_view_user" href="" ng-click="viewCurrentUser()" ng-hide="portalMode===true">Account Settings</a></li>
|
<li><a id="main_view_user" href="" ng-click="viewCurrentUser()" ng-hide="portalMode===true">Account Settings</a></li>
|
||||||
|
<li><a id="main_configure_tower" ng-click="configureTower()" ng-show="user_is_superuser" href="" ng-hide="portalMode===true">Configure Tower</a></li>
|
||||||
<li><a id="main_contact_support" target="_blank" href="https://ansibleworks.zendesk.com/anonymous_requests/new" ng-hide="portalMode===true">Contact Support</a></li>
|
<li><a id="main_contact_support" target="_blank" href="https://ansibleworks.zendesk.com/anonymous_requests/new" ng-hide="portalMode===true">Contact Support</a></li>
|
||||||
<li><a id="main_munin" target="_blank" ng-show="user_is_superuser" href="/munin" ng-hide="portalMode===true">Monitor Tower</a></li>
|
<li><a id="main_munin" target="_blank" ng-show="user_is_superuser" href="/munin" ng-hide="portalMode===true">Monitor Tower</a></li>
|
||||||
<li><a href="#portal" id="main_view_portal_link" >Portal Mode</a></li>
|
<li><a href="#portal" id="main_view_portal_link" >Portal Mode</a></li>
|
||||||
<li><a id="main_view_license" href="" ng-click="viewLicense()" ng-hide="portalMode===true">View License</a></li>
|
<li><a id="main_view_license" href="" ng-click="viewLicense()" ng-hide="portalMode===true">View License</a></li>
|
||||||
<li><a id="main_view_leave_portal" href="" ng-click="leavePortal()" ng-show="portalMode===true">Exit Portal</a></li>
|
<li><a id="main_view_leave_portal" href="" ng-click="leavePortal()" ng-show="portalMode===true">Exit Portal</a></li>
|
||||||
@@ -252,6 +256,7 @@
|
|||||||
<ul class="dropdown-menu" id="account-submenu">
|
<ul class="dropdown-menu" id="account-submenu">
|
||||||
<li><a href="" id="main_about" ng-click ="viewAboutTower()" ng-hide="portalMode===true">About Tower</a> </li>
|
<li><a href="" id="main_about" ng-click ="viewAboutTower()" ng-hide="portalMode===true">About Tower</a> </li>
|
||||||
<li><a id="main_view_user" href="" ng-click="viewCurrentUser()" ng-hide="portalMode===true">Account Settings</a></li>
|
<li><a id="main_view_user" href="" ng-click="viewCurrentUser()" ng-hide="portalMode===true">Account Settings</a></li>
|
||||||
|
<li><a id="configure_tower" ng-click="configureTower()" ng-show="user_is_superuser" href="" ng-hide="portalMode===true">Configure Tower</a></li>
|
||||||
<li><a id="main_contact_support" target="_blank" href="https://ansibleworks.zendesk.com/anonymous_requests/new" ng-hide="portalMode===true">Contact Support</a></li>
|
<li><a id="main_contact_support" target="_blank" href="https://ansibleworks.zendesk.com/anonymous_requests/new" ng-hide="portalMode===true">Contact Support</a></li>
|
||||||
<li><a id="main_munin" target="_blank" ng-show="user_is_superuser" href="/munin" ng-hide="portalMode===true">Monitor Tower</a></li>
|
<li><a id="main_munin" target="_blank" ng-show="user_is_superuser" href="/munin" ng-hide="portalMode===true">Monitor Tower</a></li>
|
||||||
<li><a href="#portal" id="main_view_portal_link" ng-hide="portalMode===true">Portal Mode</a></li>
|
<li><a href="#portal" id="main_view_portal_link" ng-hide="portalMode===true">Portal Mode</a></li>
|
||||||
@@ -386,6 +391,36 @@
|
|||||||
<div id="help-modal-dialog" style="display: none;"></div>
|
<div id="help-modal-dialog" style="display: none;"></div>
|
||||||
<div id="license-modal-dialog" style="display: none;"></div>
|
<div id="license-modal-dialog" style="display: none;"></div>
|
||||||
<div id="about-modal-dialog" style="display: none;" ng-include="'static/partials/cowsay-about.html '"></div>
|
<div id="about-modal-dialog" style="display: none;" ng-include="'static/partials/cowsay-about.html '"></div>
|
||||||
|
<div id='configure-tower-dialog' style="display:none">
|
||||||
|
<div id="configure-jobs" > </div>
|
||||||
|
<div class="tab-pane" id="configure-schedules-tab">
|
||||||
|
<div id="configure-schedules-overlay"></div>
|
||||||
|
<div id="configure-schedules-list"></div>
|
||||||
|
<div id="configure-schedules-form-container">
|
||||||
|
<div id="configure-schedules-title">
|
||||||
|
<h4 ng-bind="schedulesTitle"></h4>
|
||||||
|
<button type="button" class="close pull-right" ng-click="cancelScheduleForm()">x</button>
|
||||||
|
</div>
|
||||||
|
<div id="configure-schedules-form-container-body">
|
||||||
|
<div id="configure-schedules-form"></div>
|
||||||
|
<div id="configure-schedules-detail"></div>
|
||||||
|
</div>
|
||||||
|
<div id="configure-schedules-buttons" >
|
||||||
|
<a id="configure-schedules-flip-link" ng-show="formShowing" ng-click="showScheduleDetail()" href=""><i class="fa fa-search-plus"></i> View Details</a>
|
||||||
|
<a id="configure-schedules-flip-link" ng-show="!formShowing" ng-click="showScheduleDetail()" href=""><i class="fa fa-arrow-circle-left"></i> Back to options</a>
|
||||||
|
<button type="button" class="btn btn-default btn-sm" id="configure-reset-button" ng-click="cancelScheduleForm()"><i class="fa fa-times"></i> Cancel</button>
|
||||||
|
<button type="button" class="btn btn-primary btn-sm" id="configure-save-button" ng-click="saveScheduleForm()"><i class="fa fa-check"></i> Save</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div id="prompt-for-days" style="display:none">
|
||||||
|
<form name="prompt_for_days_form" id="prompt_for_days_form">
|
||||||
|
How many days of data would you like to <b>keep</b>? <br>
|
||||||
|
<input type="number" min="1" id="days_to_keep" name="days_to_keep" value="30" ng-required="true" class="form-control ng-pristine ng-invalid-required ng-invalid" style="margin-top:10px;">
|
||||||
|
<div class="error" ng-show="prompt_for_days_form.days_to_keep.$dirty && copy_form.new_copy_name.$error.required">A value is required!</div></input>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
</div><!-- container -->
|
</div><!-- container -->
|
||||||
|
|||||||
Reference in New Issue
Block a user