mirror of
https://github.com/ansible/awx.git
synced 2026-01-24 16:01:20 -03:30
Implemented host facts related tab
This commit is contained in:
parent
0de2f7deb4
commit
e435b6505a
@ -0,0 +1,27 @@
|
||||
/*************************************************
|
||||
* Copyright (c) 2017 Ansible, Inc.
|
||||
*
|
||||
* All Rights Reserved
|
||||
*************************************************/
|
||||
|
||||
function AnsibleFacts($scope, Facts, ParseTypeChange, ParseVariableString) {
|
||||
|
||||
function init() {
|
||||
$scope.facts = ParseVariableString(Facts.data);
|
||||
|
||||
$scope.parseType = 'yaml';
|
||||
ParseTypeChange({
|
||||
scope: $scope,
|
||||
variable: 'facts',
|
||||
parse_variable: 'parseType',
|
||||
field_id: 'host_facts',
|
||||
readOnly: true
|
||||
});
|
||||
}
|
||||
|
||||
init();
|
||||
|
||||
}
|
||||
|
||||
export default ['$scope', 'Facts', 'ParseTypeChange', 'ParseVariableString', AnsibleFacts
|
||||
];
|
||||
@ -0,0 +1,10 @@
|
||||
<form class="Form ng-pristine ng-valid ng-valid-required" name="host_form" id="host_form" autocomplete="off" novalidate="">
|
||||
<div class="form-group Form-formGroup Form-formGroup--fullWidth">
|
||||
<label class="Form-inputLabelContainer " for="facts">
|
||||
<span class="Form-inputLabel">FACTS</span>
|
||||
</label>
|
||||
<div>
|
||||
<textarea rows="6" ng-model="facts" name="facts" class="form-control Form-textArea Form-formGroup--fullWidth" id="host_facts"></textarea>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
11
awx/ui/client/src/inventories/ansible_facts/main.js
Normal file
11
awx/ui/client/src/inventories/ansible_facts/main.js
Normal file
@ -0,0 +1,11 @@
|
||||
/*************************************************
|
||||
* Copyright (c) 2017 Ansible, Inc.
|
||||
*
|
||||
* All Rights Reserved
|
||||
*************************************************/
|
||||
|
||||
import controller from './ansible_facts.controller';
|
||||
|
||||
export default
|
||||
angular.module('AnsibleFacts', [])
|
||||
.controller('AnsibleFactsController', controller);
|
||||
@ -21,6 +21,8 @@ export default ['i18n', function(i18n) {
|
||||
formLabelSize: 'col-lg-3',
|
||||
formFieldSize: 'col-lg-9',
|
||||
iterator: 'host',
|
||||
activeEditState: 'hosts.edit',
|
||||
stateTree: 'hosts',
|
||||
headerFields:{
|
||||
enabled: {
|
||||
class: 'Form-header-field',
|
||||
@ -99,5 +101,13 @@ export default ['i18n', function(i18n) {
|
||||
ngShow: '(host.summary_fields.user_capabilities.edit || canAdd)'
|
||||
}
|
||||
},
|
||||
|
||||
related: {
|
||||
ansible_facts: {
|
||||
name: 'ansible_facts',
|
||||
title: i18n._('Facts'),
|
||||
skipGenerator: true
|
||||
}
|
||||
}
|
||||
};
|
||||
}];
|
||||
|
||||
@ -19,6 +19,7 @@ import InventoryList from './inventory.list';
|
||||
import InventoryForm from './inventory.form';
|
||||
import InventoryManageService from './inventory-manage.service';
|
||||
import adHocRoute from './adhoc/adhoc.route';
|
||||
import ansibleFacts from './ansible_facts/main';
|
||||
export default
|
||||
angular.module('inventory', [
|
||||
adhoc.name,
|
||||
@ -29,7 +30,8 @@ angular.module('inventory', [
|
||||
inventoryCompletedJobs.name,
|
||||
inventoryAdd.name,
|
||||
inventoryEdit.name,
|
||||
inventoryList.name
|
||||
inventoryList.name,
|
||||
ansibleFacts.name
|
||||
])
|
||||
.factory('InventoryForm', InventoryForm)
|
||||
.factory('InventoryList', InventoryList)
|
||||
@ -222,6 +224,32 @@ angular.module('inventory', [
|
||||
}
|
||||
};
|
||||
|
||||
let relatedHostsAnsibleFacts = {
|
||||
name: 'inventories.edit.hosts.edit.ansible_facts',
|
||||
url: '/ansible_facts',
|
||||
ncyBreadcrumb: {
|
||||
label: N_("FACTS")
|
||||
},
|
||||
views: {
|
||||
'related': {
|
||||
controller: 'AnsibleFactsController',
|
||||
templateUrl: templateUrl('inventories/ansible_facts/ansible_facts')
|
||||
}
|
||||
},
|
||||
resolve: {
|
||||
Facts: ['$stateParams', 'GetBasePath', 'Rest',
|
||||
function($stateParams, GetBasePath, Rest) {
|
||||
let ansibleFactsUrl = GetBasePath('hosts') + $stateParams.host_id + '/ansible_facts';
|
||||
Rest.setUrl(ansibleFactsUrl);
|
||||
return Rest.get()
|
||||
.success(function(data) {
|
||||
return data;
|
||||
});
|
||||
}
|
||||
]
|
||||
}
|
||||
};
|
||||
|
||||
return Promise.all([
|
||||
basicInventoryAdd,
|
||||
basicInventoryEdit,
|
||||
@ -267,64 +295,107 @@ angular.module('inventory', [
|
||||
stateExtender.buildDefinition(adhocCredentialLookup),
|
||||
stateExtender.buildDefinition(listSchedules),
|
||||
stateExtender.buildDefinition(addSchedule),
|
||||
stateExtender.buildDefinition(editSchedule)
|
||||
stateExtender.buildDefinition(editSchedule),
|
||||
stateExtender.buildDefinition(relatedHostsAnsibleFacts)
|
||||
])
|
||||
};
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
$stateProvider.state({
|
||||
name: 'hosts',
|
||||
url: '/hosts',
|
||||
lazyLoad: () => stateDefinitions.generateTree({
|
||||
parent: 'hosts', // top-most node in the generated tree (will replace this state definition)
|
||||
modes: ['edit'],
|
||||
list: 'HostsList',
|
||||
form: 'HostsForm',
|
||||
controllers: {
|
||||
list: 'HostListController',
|
||||
edit: 'HostEditController'
|
||||
},
|
||||
urls: {
|
||||
list: '/hosts'
|
||||
},
|
||||
resolve: {
|
||||
edit: {
|
||||
host: ['Rest', '$stateParams', 'GetBasePath',
|
||||
function(Rest, $stateParams, GetBasePath) {
|
||||
let path = GetBasePath('hosts') + $stateParams.host_id;
|
||||
Rest.setUrl(path);
|
||||
return Rest.get();
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
ncyBreadcrumb: {
|
||||
label: N_('HOSTS')
|
||||
},
|
||||
views: {
|
||||
'@': {
|
||||
templateUrl: templateUrl('inventories/inventories')
|
||||
},
|
||||
'list@hosts': {
|
||||
templateProvider: function(HostsList, generateList) {
|
||||
let html = generateList.build({
|
||||
list: HostsList,
|
||||
mode: 'edit'
|
||||
});
|
||||
return html;
|
||||
},
|
||||
controller: 'HostListController'
|
||||
}
|
||||
let generateHostStates = function(){
|
||||
let hostTree = stateDefinitions.generateTree({
|
||||
parent: 'hosts', // top-most node in the generated tree (will replace this state definition)
|
||||
modes: ['edit'],
|
||||
list: 'HostsList',
|
||||
form: 'HostsForm',
|
||||
controllers: {
|
||||
list: 'HostListController',
|
||||
edit: 'HostEditController'
|
||||
},
|
||||
urls: {
|
||||
list: '/hosts'
|
||||
},
|
||||
resolve: {
|
||||
edit: {
|
||||
host: ['Rest', '$stateParams', 'GetBasePath',
|
||||
function(Rest, $stateParams, GetBasePath) {
|
||||
let path = GetBasePath('hosts') + $stateParams.host_id;
|
||||
Rest.setUrl(path);
|
||||
return Rest.get();
|
||||
}
|
||||
]
|
||||
}
|
||||
})
|
||||
},
|
||||
ncyBreadcrumb: {
|
||||
label: N_('HOSTS')
|
||||
},
|
||||
views: {
|
||||
'@': {
|
||||
templateUrl: templateUrl('inventories/inventories')
|
||||
},
|
||||
'list@hosts': {
|
||||
templateProvider: function(HostsList, generateList) {
|
||||
let html = generateList.build({
|
||||
list: HostsList,
|
||||
mode: 'edit'
|
||||
});
|
||||
return html;
|
||||
},
|
||||
controller: 'HostListController'
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
$stateProvider.state({
|
||||
name: 'inventories',
|
||||
url: '/inventories',
|
||||
lazyLoad: () => generateInventoryStates()
|
||||
let hostAnsibleFacts = {
|
||||
name: 'hosts.edit.ansible_facts',
|
||||
url: '/ansible_facts',
|
||||
ncyBreadcrumb: {
|
||||
label: N_("FACTS")
|
||||
},
|
||||
views: {
|
||||
'related': {
|
||||
controller: 'AnsibleFactsController',
|
||||
templateUrl: templateUrl('inventories/ansible_facts/ansible_facts')
|
||||
}
|
||||
},
|
||||
resolve: {
|
||||
Facts: ['$stateParams', 'GetBasePath', 'Rest',
|
||||
function($stateParams, GetBasePath, Rest) {
|
||||
let ansibleFactsUrl = GetBasePath('hosts') + $stateParams.host_id + '/ansible_facts';
|
||||
Rest.setUrl(ansibleFactsUrl);
|
||||
return Rest.get()
|
||||
.success(function(data) {
|
||||
return data;
|
||||
});
|
||||
}
|
||||
]
|
||||
}
|
||||
};
|
||||
|
||||
return Promise.all([
|
||||
hostTree
|
||||
]).then((generated) => {
|
||||
return {
|
||||
states: _.reduce(generated, (result, definition) => {
|
||||
return result.concat(definition.states);
|
||||
}, [
|
||||
stateExtender.buildDefinition(hostAnsibleFacts)
|
||||
])
|
||||
};
|
||||
});
|
||||
};
|
||||
|
||||
$stateProvider.state({
|
||||
name: 'hosts',
|
||||
url: '/hosts',
|
||||
lazyLoad: () => generateHostStates()
|
||||
});
|
||||
|
||||
$stateProvider.state({
|
||||
name: 'inventories',
|
||||
url: '/inventories',
|
||||
lazyLoad: () => generateInventoryStates()
|
||||
});
|
||||
}
|
||||
]);
|
||||
|
||||
@ -21,6 +21,8 @@ export default ['i18n', function(i18n) {
|
||||
formLabelSize: 'col-lg-3',
|
||||
formFieldSize: 'col-lg-9',
|
||||
iterator: 'host',
|
||||
activeEditState: 'inventories.edit.hosts.edit',
|
||||
stateTree: 'inventories.edit.hosts',
|
||||
headerFields:{
|
||||
enabled: {
|
||||
class: 'Form-header-field',
|
||||
@ -99,5 +101,13 @@ export default ['i18n', function(i18n) {
|
||||
ngShow: '(host.summary_fields.user_capabilities.edit || canAdd)'
|
||||
}
|
||||
},
|
||||
|
||||
related: {
|
||||
ansible_facts: {
|
||||
name: 'ansible_facts',
|
||||
title: i18n._('Facts'),
|
||||
skipGenerator: true
|
||||
}
|
||||
}
|
||||
};
|
||||
}];
|
||||
|
||||
@ -554,53 +554,56 @@ function($injector, $stateExtender, $log, i18n) {
|
||||
|
||||
function buildListNodes(field) {
|
||||
let states = [];
|
||||
if(field && (field.listState || field.addState || field.editState)){
|
||||
if(field && field.listState){
|
||||
states.push(field.listState(field, formStateDefinition));
|
||||
if(!field.skipGenerator) {
|
||||
if(field && (field.listState || field.addState || field.editState)){
|
||||
if(field && field.listState){
|
||||
states.push(field.listState(field, formStateDefinition));
|
||||
states = _.flatten(states);
|
||||
}
|
||||
if(field && field.addState){
|
||||
let formState = field.addState(field, formStateDefinition, params);
|
||||
states.push(formState);
|
||||
// intent here is to add lookup states for any add-forms
|
||||
if(field.includeForm){
|
||||
let form = field.includeForm ? $injector.get(field.includeForm) : field;
|
||||
states.push(that.generateLookupNodes(form, formState));
|
||||
}
|
||||
states = _.flatten(states);
|
||||
}
|
||||
if(field && field.editState){
|
||||
let formState = field.editState(field, formStateDefinition, params);
|
||||
states.push(formState);
|
||||
// intent here is to add lookup states for any edit-forms
|
||||
if(field.includeForm){
|
||||
let form = field.includeForm ? $injector.get(field.includeForm) : field;
|
||||
states.push(that.generateLookupNodes(form, formState));
|
||||
states.push(that.generateFormListDefinitions(form, formState, params));
|
||||
}
|
||||
states = _.flatten(states);
|
||||
}
|
||||
}
|
||||
else if(field.iterator === 'notification'){
|
||||
states.push(buildNotificationState(field));
|
||||
states = _.flatten(states);
|
||||
}
|
||||
if(field && field.addState){
|
||||
let formState = field.addState(field, formStateDefinition, params);
|
||||
states.push(formState);
|
||||
// intent here is to add lookup states for any add-forms
|
||||
if(field.includeForm){
|
||||
let form = field.includeForm ? $injector.get(field.includeForm) : field;
|
||||
states.push(that.generateLookupNodes(form, formState));
|
||||
else{
|
||||
states.push(buildListDefinition(field));
|
||||
if (field.iterator === 'permission' && field.actions && field.actions.add) {
|
||||
if (form.name === 'user' || form.name === 'team'){
|
||||
states.push(buildRbacUserTeamDirective());
|
||||
}
|
||||
else {
|
||||
states.push(buildRbacResourceDirective());
|
||||
}
|
||||
}
|
||||
states = _.flatten(states);
|
||||
}
|
||||
if(field && field.editState){
|
||||
let formState = field.editState(field, formStateDefinition, params);
|
||||
states.push(formState);
|
||||
// intent here is to add lookup states for any edit-forms
|
||||
if(field.includeForm){
|
||||
let form = field.includeForm ? $injector.get(field.includeForm) : field;
|
||||
states.push(that.generateLookupNodes(form, formState));
|
||||
states.push(that.generateFormListDefinitions(form, formState, params));
|
||||
}
|
||||
states = _.flatten(states);
|
||||
}
|
||||
}
|
||||
else if(field.iterator === 'notification'){
|
||||
states.push(buildNotificationState(field));
|
||||
states = _.flatten(states);
|
||||
}
|
||||
else{
|
||||
states.push(buildListDefinition(field));
|
||||
if (field.iterator === 'permission' && field.actions && field.actions.add) {
|
||||
if (form.name === 'user' || form.name === 'team'){
|
||||
states.push(buildRbacUserTeamDirective());
|
||||
}
|
||||
else {
|
||||
states.push(buildRbacResourceDirective());
|
||||
}
|
||||
}
|
||||
else if (field.iterator === 'user' && field.actions && field.actions.add) {
|
||||
if(form.name === 'team' || form.name === 'organization') {
|
||||
states.push(buildRbacUserDirective());
|
||||
else if (field.iterator === 'user' && field.actions && field.actions.add) {
|
||||
if(form.name === 'team' || form.name === 'organization') {
|
||||
states.push(buildRbacUserDirective());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
states = _.flatten(states);
|
||||
return states;
|
||||
}
|
||||
@ -679,7 +682,7 @@ function($injector, $stateExtender, $log, i18n) {
|
||||
if (field.search) {
|
||||
state.params[`${field.iterator}_search`].value = _.merge(state.params[`${field.iterator}_search`].value, field.search);
|
||||
}
|
||||
|
||||
|
||||
return state;
|
||||
}
|
||||
return _(form.related).map(buildListNodes).flatten().value();
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user